this["dash_themes"] =
/******/ (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
	});
	exports.Graph = exports.ApplyTheme = undefined;

	var _ApplyTheme = __webpack_require__(1);

	var _ApplyTheme2 = _interopRequireDefault(_ApplyTheme);

	var _Graph = __webpack_require__(588);

	var _Graph2 = _interopRequireDefault(_Graph);

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

	/* eslint-disable import/prefer-default-export */
	exports.ApplyTheme = _ApplyTheme2.default;
	exports.Graph = _Graph2.default;

/***/ }),
/* 1 */
/***/ (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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _ramda = __webpack_require__(3);

	var R = _interopRequireWildcard(_ramda);

	var _reactCustomProperties = __webpack_require__(322);

	var _reactCustomProperties2 = _interopRequireDefault(_reactCustomProperties);

	var _chromaJs = __webpack_require__(335);

	var _chromaJs2 = _interopRequireDefault(_chromaJs);

	var _reactDraggable = __webpack_require__(337);

	var _reactDraggable2 = _interopRequireDefault(_reactDraggable);

	var _transformTheme = __webpack_require__(339);

	var _transformTheme2 = _interopRequireDefault(_transformTheme);

	var _ColorTheme = __webpack_require__(340);

	var _ColorTheme2 = _interopRequireDefault(_ColorTheme);

	var _RadioItems = __webpack_require__(564);

	var _RadioItems2 = _interopRequireDefault(_RadioItems);

	var _ThemeEditor = __webpack_require__(565);

	var _ThemeEditor2 = _interopRequireDefault(_ThemeEditor);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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; } /* global Plotly:true */


	/*
	 * event polyfill for IE
	 * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent
	 */
	function CustomEvent(event, params) {
	    params = params || {
	        bubbles: false,
	        cancelable: false,
	        detail: undefined
	    };
	    var evt = document.createEvent('CustomEvent');
	    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
	    return evt;
	}
	CustomEvent.prototype = window.Event.prototype;

	var ApplyTheme = function (_Component) {
	    _inherits(ApplyTheme, _Component);

	    function ApplyTheme(props) {
	        _classCallCheck(this, ApplyTheme);

	        var _this = _possibleConstructorReturn(this, (ApplyTheme.__proto__ || Object.getPrototypeOf(ApplyTheme)).call(this));

	        _this.state = {
	            display_editor: false,
	            theme: props.theme
	        };
	        return _this;
	    }

	    _createClass(ApplyTheme, [{
	        key: 'render',
	        value: function render() {
	            var _this2 = this;

	            var _props = this.props,
	                children = _props.children,
	                show_editor = _props.show_editor;
	            var _state = this.state,
	                theme = _state.theme,
	                display_editor = _state.display_editor;

	            var transformedTheme = (0, _transformTheme2.default)(theme);
	            window.dashTheme = transformedTheme;
	            return _react2.default.createElement(
	                'div',
	                null,
	                show_editor ? _react2.default.createElement(
	                    'button',
	                    { onClick: function onClick() {
	                            return _this2.setState({
	                                display_editor: !display_editor
	                            });
	                        } },
	                    'Edit Theme'
	                ) : null,
	                _react2.default.createElement(
	                    _reactCustomProperties2.default,
	                    { properties: transformedTheme, global: true },
	                    children
	                ),
	                display_editor ? _react2.default.createElement(_ThemeEditor.EditorWithPopout, {
	                    traces: theme.traces,
	                    background: theme.background,
	                    border: theme.border,
	                    text: theme.text,
	                    accent: theme.accent,
	                    backgroundSecondary: theme.backgroundSecondary,
	                    disabledText: theme.disabledText,
	                    disabledBackground: theme.disabledBackground,
	                    buttonShadow: theme.buttonShadow,
	                    disabled: theme.disabled,
	                    textSecondary: theme.textSecondary,
	                    tight: theme.tight,
	                    borderRadiusPrimary: theme.borderRadiusPrimary,

	                    updateProps: function updateProps(themeUpdate) {
	                        console.warn(themeUpdate);
	                        var newTheme = R.merge(_this2.state.theme, themeUpdate);
	                        _this2.setState({ theme: newTheme });
	                        window.dashTheme = (0, _transformTheme2.default)(newTheme);
	                        window.dispatchEvent(new CustomEvent('dash-theme-update'));
	                    }
	                }) : null
	            );
	        }
	    }]);

	    return ApplyTheme;
	}(_react.Component);

	var THEMES = {
	    light: {
	        accent: '#1f78b4',
	        traces: ['#1f78b4', '#a6cee3'],
	        text: 'rgb(30, 30, 30)',

	        background: 'rgb(254, 254, 254)',
	        backgroundSecondary: '#e9e9e9',

	        disabled: 'lightgrey',
	        disabledText: 'rgb(200, 200, 200)',
	        disabledBackground: 'rgb(245, 245, 245)',
	        buttonShadow: 'rgba(50,50,93,.11)',

	        border: 'rgb(220, 220, 220)',

	        textSecondary: 'rgb(200, 200, 200)',

	        transparent: 'transparent',

	        'tight': true,

	        borderRadiusPrimary: 0
	    },

	    dark: {
	        accent: 'rgb(255, 213, 0)', //'#2ECC40',
	        'trace-2': '#3D9970',
	        text: 'white', // 'rgb(30, 30, 30)',
	        background: 'rgb(40, 44, 52)',
	        backgroundSecondary: '#e9e9e9',

	        disabled: 'lightgrey',
	        disabledText: 'lightgrey',
	        disabledBackground: 'rgb(45, 49, 57)',
	        buttonShadow: 'rgb(10, 14, 12)',

	        border: 'lightgrey',

	        textSecondary: 'rgb(200, 200, 200)',

	        transparent: 'transparent',

	        'tight': true,

	        borderRadiusPrimary: 0
	    }

	};

	ApplyTheme.defaultProps = {
	    theme: THEMES.light
	};

	ApplyTheme.propTypes = {
	    theme: _react.PropTypes.object,
	    children: _react.PropTypes.object,
	    show_editor: _react.PropTypes.bool
	};

	exports.default = ApplyTheme;

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

	(function() { module.exports = this["React"]; }());

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

	module.exports = {};
	module.exports.F = /*#__PURE__*/__webpack_require__(4);
	module.exports.T = /*#__PURE__*/__webpack_require__(8);
	module.exports.__ = /*#__PURE__*/__webpack_require__(9);
	module.exports.add = /*#__PURE__*/__webpack_require__(10);
	module.exports.addIndex = /*#__PURE__*/__webpack_require__(12);
	module.exports.adjust = /*#__PURE__*/__webpack_require__(17);
	module.exports.all = /*#__PURE__*/__webpack_require__(19);
	module.exports.allPass = /*#__PURE__*/__webpack_require__(26);
	module.exports.always = /*#__PURE__*/__webpack_require__(5);
	module.exports.and = /*#__PURE__*/__webpack_require__(43);
	module.exports.any = /*#__PURE__*/__webpack_require__(44);
	module.exports.anyPass = /*#__PURE__*/__webpack_require__(46);
	module.exports.ap = /*#__PURE__*/__webpack_require__(47);
	module.exports.aperture = /*#__PURE__*/__webpack_require__(48);
	module.exports.append = /*#__PURE__*/__webpack_require__(51);
	module.exports.apply = /*#__PURE__*/__webpack_require__(52);
	module.exports.applySpec = /*#__PURE__*/__webpack_require__(53);
	module.exports.applyTo = /*#__PURE__*/__webpack_require__(55);
	module.exports.ascend = /*#__PURE__*/__webpack_require__(56);
	module.exports.assoc = /*#__PURE__*/__webpack_require__(57);
	module.exports.assocPath = /*#__PURE__*/__webpack_require__(58);
	module.exports.binary = /*#__PURE__*/__webpack_require__(61);
	module.exports.bind = /*#__PURE__*/__webpack_require__(35);
	module.exports.both = /*#__PURE__*/__webpack_require__(63);
	module.exports.call = /*#__PURE__*/__webpack_require__(67);
	module.exports.chain = /*#__PURE__*/__webpack_require__(69);
	module.exports.clamp = /*#__PURE__*/__webpack_require__(74);
	module.exports.clone = /*#__PURE__*/__webpack_require__(75);
	module.exports.comparator = /*#__PURE__*/__webpack_require__(79);
	module.exports.complement = /*#__PURE__*/__webpack_require__(80);
	module.exports.compose = /*#__PURE__*/__webpack_require__(82);
	module.exports.composeK = /*#__PURE__*/__webpack_require__(89);
	module.exports.composeP = /*#__PURE__*/__webpack_require__(90);
	module.exports.concat = /*#__PURE__*/__webpack_require__(93);
	module.exports.cond = /*#__PURE__*/__webpack_require__(112);
	module.exports.construct = /*#__PURE__*/__webpack_require__(113);
	module.exports.constructN = /*#__PURE__*/__webpack_require__(114);
	module.exports.contains = /*#__PURE__*/__webpack_require__(115);
	module.exports.converge = /*#__PURE__*/__webpack_require__(116);
	module.exports.countBy = /*#__PURE__*/__webpack_require__(117);
	module.exports.curry = /*#__PURE__*/__webpack_require__(68);
	module.exports.curryN = /*#__PURE__*/__webpack_require__(14);
	module.exports.dec = /*#__PURE__*/__webpack_require__(120);
	module.exports.defaultTo = /*#__PURE__*/__webpack_require__(121);
	module.exports.descend = /*#__PURE__*/__webpack_require__(122);
	module.exports.difference = /*#__PURE__*/__webpack_require__(123);
	module.exports.differenceWith = /*#__PURE__*/__webpack_require__(124);
	module.exports.dissoc = /*#__PURE__*/__webpack_require__(125);
	module.exports.dissocPath = /*#__PURE__*/__webpack_require__(126);
	module.exports.divide = /*#__PURE__*/__webpack_require__(129);
	module.exports.drop = /*#__PURE__*/__webpack_require__(130);
	module.exports.dropLast = /*#__PURE__*/__webpack_require__(132);
	module.exports.dropLastWhile = /*#__PURE__*/__webpack_require__(137);
	module.exports.dropRepeats = /*#__PURE__*/__webpack_require__(140);
	module.exports.dropRepeatsWith = /*#__PURE__*/__webpack_require__(142);
	module.exports.dropWhile = /*#__PURE__*/__webpack_require__(145);
	module.exports.either = /*#__PURE__*/__webpack_require__(147);
	module.exports.empty = /*#__PURE__*/__webpack_require__(149);
	module.exports.endsWith = /*#__PURE__*/__webpack_require__(150);
	module.exports.eqBy = /*#__PURE__*/__webpack_require__(152);
	module.exports.eqProps = /*#__PURE__*/__webpack_require__(153);
	module.exports.equals = /*#__PURE__*/__webpack_require__(98);
	module.exports.evolve = /*#__PURE__*/__webpack_require__(154);
	module.exports.filter = /*#__PURE__*/__webpack_require__(108);
	module.exports.find = /*#__PURE__*/__webpack_require__(155);
	module.exports.findIndex = /*#__PURE__*/__webpack_require__(157);
	module.exports.findLast = /*#__PURE__*/__webpack_require__(159);
	module.exports.findLastIndex = /*#__PURE__*/__webpack_require__(161);
	module.exports.flatten = /*#__PURE__*/__webpack_require__(163);
	module.exports.flip = /*#__PURE__*/__webpack_require__(164);
	module.exports.forEach = /*#__PURE__*/__webpack_require__(165);
	module.exports.forEachObjIndexed = /*#__PURE__*/__webpack_require__(166);
	module.exports.fromPairs = /*#__PURE__*/__webpack_require__(167);
	module.exports.groupBy = /*#__PURE__*/__webpack_require__(168);
	module.exports.groupWith = /*#__PURE__*/__webpack_require__(169);
	module.exports.gt = /*#__PURE__*/__webpack_require__(170);
	module.exports.gte = /*#__PURE__*/__webpack_require__(171);
	module.exports.has = /*#__PURE__*/__webpack_require__(172);
	module.exports.hasIn = /*#__PURE__*/__webpack_require__(173);
	module.exports.head = /*#__PURE__*/__webpack_require__(174);
	module.exports.identical = /*#__PURE__*/__webpack_require__(103);
	module.exports.identity = /*#__PURE__*/__webpack_require__(175);
	module.exports.ifElse = /*#__PURE__*/__webpack_require__(177);
	module.exports.inc = /*#__PURE__*/__webpack_require__(178);
	module.exports.indexBy = /*#__PURE__*/__webpack_require__(179);
	module.exports.indexOf = /*#__PURE__*/__webpack_require__(180);
	module.exports.init = /*#__PURE__*/__webpack_require__(181);
	module.exports.innerJoin = /*#__PURE__*/__webpack_require__(182);
	module.exports.insert = /*#__PURE__*/__webpack_require__(183);
	module.exports.insertAll = /*#__PURE__*/__webpack_require__(184);
	module.exports.intersection = /*#__PURE__*/__webpack_require__(185);
	module.exports.intersperse = /*#__PURE__*/__webpack_require__(189);
	module.exports.into = /*#__PURE__*/__webpack_require__(190);
	module.exports.invert = /*#__PURE__*/__webpack_require__(195);
	module.exports.invertObj = /*#__PURE__*/__webpack_require__(196);
	module.exports.invoker = /*#__PURE__*/__webpack_require__(197);
	module.exports.is = /*#__PURE__*/__webpack_require__(198);
	module.exports.isEmpty = /*#__PURE__*/__webpack_require__(199);
	module.exports.isNil = /*#__PURE__*/__webpack_require__(60);
	module.exports.join = /*#__PURE__*/__webpack_require__(200);
	module.exports.juxt = /*#__PURE__*/__webpack_require__(201);
	module.exports.keys = /*#__PURE__*/__webpack_require__(37);
	module.exports.keysIn = /*#__PURE__*/__webpack_require__(202);
	module.exports.last = /*#__PURE__*/__webpack_require__(143);
	module.exports.lastIndexOf = /*#__PURE__*/__webpack_require__(203);
	module.exports.length = /*#__PURE__*/__webpack_require__(204);
	module.exports.lens = /*#__PURE__*/__webpack_require__(206);
	module.exports.lensIndex = /*#__PURE__*/__webpack_require__(207);
	module.exports.lensPath = /*#__PURE__*/__webpack_require__(208);
	module.exports.lensProp = /*#__PURE__*/__webpack_require__(209);
	module.exports.lift = /*#__PURE__*/__webpack_require__(65);
	module.exports.liftN = /*#__PURE__*/__webpack_require__(66);
	module.exports.lt = /*#__PURE__*/__webpack_require__(210);
	module.exports.lte = /*#__PURE__*/__webpack_require__(211);
	module.exports.map = /*#__PURE__*/__webpack_require__(29);
	module.exports.mapAccum = /*#__PURE__*/__webpack_require__(212);
	module.exports.mapAccumRight = /*#__PURE__*/__webpack_require__(213);
	module.exports.mapObjIndexed = /*#__PURE__*/__webpack_require__(214);
	module.exports.match = /*#__PURE__*/__webpack_require__(215);
	module.exports.mathMod = /*#__PURE__*/__webpack_require__(216);
	module.exports.max = /*#__PURE__*/__webpack_require__(27);
	module.exports.maxBy = /*#__PURE__*/__webpack_require__(217);
	module.exports.mean = /*#__PURE__*/__webpack_require__(218);
	module.exports.median = /*#__PURE__*/__webpack_require__(220);
	module.exports.memoize = /*#__PURE__*/__webpack_require__(221);
	module.exports.memoizeWith = /*#__PURE__*/__webpack_require__(222);
	module.exports.merge = /*#__PURE__*/__webpack_require__(223);
	module.exports.mergeAll = /*#__PURE__*/__webpack_require__(224);
	module.exports.mergeDeepLeft = /*#__PURE__*/__webpack_require__(225);
	module.exports.mergeDeepRight = /*#__PURE__*/__webpack_require__(228);
	module.exports.mergeDeepWith = /*#__PURE__*/__webpack_require__(229);
	module.exports.mergeDeepWithKey = /*#__PURE__*/__webpack_require__(226);
	module.exports.mergeWith = /*#__PURE__*/__webpack_require__(230);
	module.exports.mergeWithKey = /*#__PURE__*/__webpack_require__(227);
	module.exports.min = /*#__PURE__*/__webpack_require__(231);
	module.exports.minBy = /*#__PURE__*/__webpack_require__(232);
	module.exports.modulo = /*#__PURE__*/__webpack_require__(233);
	module.exports.multiply = /*#__PURE__*/__webpack_require__(234);
	module.exports.nAry = /*#__PURE__*/__webpack_require__(62);
	module.exports.negate = /*#__PURE__*/__webpack_require__(235);
	module.exports.none = /*#__PURE__*/__webpack_require__(236);
	module.exports.not = /*#__PURE__*/__webpack_require__(81);
	module.exports.nth = /*#__PURE__*/__webpack_require__(144);
	module.exports.nthArg = /*#__PURE__*/__webpack_require__(237);
	module.exports.o = /*#__PURE__*/__webpack_require__(238);
	module.exports.objOf = /*#__PURE__*/__webpack_require__(194);
	module.exports.of = /*#__PURE__*/__webpack_require__(239);
	module.exports.omit = /*#__PURE__*/__webpack_require__(241);
	module.exports.once = /*#__PURE__*/__webpack_require__(242);
	module.exports.or = /*#__PURE__*/__webpack_require__(148);
	module.exports.over = /*#__PURE__*/__webpack_require__(243);
	module.exports.pair = /*#__PURE__*/__webpack_require__(244);
	module.exports.partial = /*#__PURE__*/__webpack_require__(245);
	module.exports.partialRight = /*#__PURE__*/__webpack_require__(247);
	module.exports.partition = /*#__PURE__*/__webpack_require__(248);
	module.exports.path = /*#__PURE__*/__webpack_require__(41);
	module.exports.pathEq = /*#__PURE__*/__webpack_require__(249);
	module.exports.pathOr = /*#__PURE__*/__webpack_require__(250);
	module.exports.pathSatisfies = /*#__PURE__*/__webpack_require__(251);
	module.exports.pick = /*#__PURE__*/__webpack_require__(252);
	module.exports.pickAll = /*#__PURE__*/__webpack_require__(253);
	module.exports.pickBy = /*#__PURE__*/__webpack_require__(254);
	module.exports.pipe = /*#__PURE__*/__webpack_require__(83);
	module.exports.pipeK = /*#__PURE__*/__webpack_require__(255);
	module.exports.pipeP = /*#__PURE__*/__webpack_require__(91);
	module.exports.pluck = /*#__PURE__*/__webpack_require__(28);
	module.exports.prepend = /*#__PURE__*/__webpack_require__(256);
	module.exports.product = /*#__PURE__*/__webpack_require__(257);
	module.exports.project = /*#__PURE__*/__webpack_require__(258);
	module.exports.prop = /*#__PURE__*/__webpack_require__(40);
	module.exports.propEq = /*#__PURE__*/__webpack_require__(260);
	module.exports.propIs = /*#__PURE__*/__webpack_require__(261);
	module.exports.propOr = /*#__PURE__*/__webpack_require__(262);
	module.exports.propSatisfies = /*#__PURE__*/__webpack_require__(263);
	module.exports.props = /*#__PURE__*/__webpack_require__(264);
	module.exports.range = /*#__PURE__*/__webpack_require__(265);
	module.exports.reduce = /*#__PURE__*/__webpack_require__(42);
	module.exports.reduceBy = /*#__PURE__*/__webpack_require__(118);
	module.exports.reduceRight = /*#__PURE__*/__webpack_require__(266);
	module.exports.reduceWhile = /*#__PURE__*/__webpack_require__(267);
	module.exports.reduced = /*#__PURE__*/__webpack_require__(268);
	module.exports.reject = /*#__PURE__*/__webpack_require__(106);
	module.exports.remove = /*#__PURE__*/__webpack_require__(127);
	module.exports.repeat = /*#__PURE__*/__webpack_require__(269);
	module.exports.replace = /*#__PURE__*/__webpack_require__(271);
	module.exports.reverse = /*#__PURE__*/__webpack_require__(88);
	module.exports.scan = /*#__PURE__*/__webpack_require__(272);
	module.exports.sequence = /*#__PURE__*/__webpack_require__(273);
	module.exports.set = /*#__PURE__*/__webpack_require__(274);
	module.exports.slice = /*#__PURE__*/__webpack_require__(87);
	module.exports.sort = /*#__PURE__*/__webpack_require__(275);
	module.exports.sortBy = /*#__PURE__*/__webpack_require__(276);
	module.exports.sortWith = /*#__PURE__*/__webpack_require__(277);
	module.exports.split = /*#__PURE__*/__webpack_require__(278);
	module.exports.splitAt = /*#__PURE__*/__webpack_require__(279);
	module.exports.splitEvery = /*#__PURE__*/__webpack_require__(280);
	module.exports.splitWhen = /*#__PURE__*/__webpack_require__(281);
	module.exports.startsWith = /*#__PURE__*/__webpack_require__(282);
	module.exports.subtract = /*#__PURE__*/__webpack_require__(283);
	module.exports.sum = /*#__PURE__*/__webpack_require__(219);
	module.exports.symmetricDifference = /*#__PURE__*/__webpack_require__(284);
	module.exports.symmetricDifferenceWith = /*#__PURE__*/__webpack_require__(285);
	module.exports.tail = /*#__PURE__*/__webpack_require__(85);
	module.exports.take = /*#__PURE__*/__webpack_require__(134);
	module.exports.takeLast = /*#__PURE__*/__webpack_require__(151);
	module.exports.takeLastWhile = /*#__PURE__*/__webpack_require__(286);
	module.exports.takeWhile = /*#__PURE__*/__webpack_require__(287);
	module.exports.tap = /*#__PURE__*/__webpack_require__(289);
	module.exports.test = /*#__PURE__*/__webpack_require__(291);
	module.exports.times = /*#__PURE__*/__webpack_require__(270);
	module.exports.toLower = /*#__PURE__*/__webpack_require__(293);
	module.exports.toPairs = /*#__PURE__*/__webpack_require__(294);
	module.exports.toPairsIn = /*#__PURE__*/__webpack_require__(295);
	module.exports.toString = /*#__PURE__*/__webpack_require__(94);
	module.exports.toUpper = /*#__PURE__*/__webpack_require__(296);
	module.exports.transduce = /*#__PURE__*/__webpack_require__(297);
	module.exports.transpose = /*#__PURE__*/__webpack_require__(298);
	module.exports.traverse = /*#__PURE__*/__webpack_require__(299);
	module.exports.trim = /*#__PURE__*/__webpack_require__(300);
	module.exports.tryCatch = /*#__PURE__*/__webpack_require__(301);
	module.exports.type = /*#__PURE__*/__webpack_require__(78);
	module.exports.unapply = /*#__PURE__*/__webpack_require__(302);
	module.exports.unary = /*#__PURE__*/__webpack_require__(303);
	module.exports.uncurryN = /*#__PURE__*/__webpack_require__(304);
	module.exports.unfold = /*#__PURE__*/__webpack_require__(305);
	module.exports.union = /*#__PURE__*/__webpack_require__(306);
	module.exports.unionWith = /*#__PURE__*/__webpack_require__(307);
	module.exports.uniq = /*#__PURE__*/__webpack_require__(186);
	module.exports.uniqBy = /*#__PURE__*/__webpack_require__(187);
	module.exports.uniqWith = /*#__PURE__*/__webpack_require__(308);
	module.exports.unless = /*#__PURE__*/__webpack_require__(309);
	module.exports.unnest = /*#__PURE__*/__webpack_require__(310);
	module.exports.until = /*#__PURE__*/__webpack_require__(311);
	module.exports.update = /*#__PURE__*/__webpack_require__(128);
	module.exports.useWith = /*#__PURE__*/__webpack_require__(259);
	module.exports.values = /*#__PURE__*/__webpack_require__(54);
	module.exports.valuesIn = /*#__PURE__*/__webpack_require__(312);
	module.exports.view = /*#__PURE__*/__webpack_require__(313);
	module.exports.when = /*#__PURE__*/__webpack_require__(314);
	module.exports.where = /*#__PURE__*/__webpack_require__(315);
	module.exports.whereEq = /*#__PURE__*/__webpack_require__(316);
	module.exports.without = /*#__PURE__*/__webpack_require__(317);
	module.exports.xprod = /*#__PURE__*/__webpack_require__(318);
	module.exports.zip = /*#__PURE__*/__webpack_require__(319);
	module.exports.zipObj = /*#__PURE__*/__webpack_require__(320);
	module.exports.zipWith = /*#__PURE__*/__webpack_require__(321);

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

	var always = /*#__PURE__*/__webpack_require__(5);

	/**
	 * A function that always returns `false`. Any passed in parameters are ignored.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Function
	 * @sig * -> Boolean
	 * @param {*}
	 * @return {Boolean}
	 * @see R.always, R.T
	 * @example
	 *
	 *      R.F(); //=> false
	 */


	var F = /*#__PURE__*/always(false);
	module.exports = F;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Returns a function that always returns the given value. Note that for
	 * non-primitives the value returned is a reference to the original value.
	 *
	 * This function is known as `const`, `constant`, or `K` (for K combinator) in
	 * other languages and libraries.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig a -> (* -> a)
	 * @param {*} val The value to wrap in a function
	 * @return {Function} A Function :: * -> val.
	 * @example
	 *
	 *      var t = R.always('Tee');
	 *      t(); //=> 'Tee'
	 */


	var always = /*#__PURE__*/_curry1(function always(val) {
	  return function () {
	    return val;
	  };
	});
	module.exports = always;

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

	var _isPlaceholder = /*#__PURE__*/__webpack_require__(7);

	/**
	 * Optimized internal one-arity curry function.
	 *
	 * @private
	 * @category Function
	 * @param {Function} fn The function to curry.
	 * @return {Function} The curried function.
	 */


	function _curry1(fn) {
	  return function f1(a) {
	    if (arguments.length === 0 || _isPlaceholder(a)) {
	      return f1;
	    } else {
	      return fn.apply(this, arguments);
	    }
	  };
	}
	module.exports = _curry1;

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

	function _isPlaceholder(a) {
	       return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;
	}
	module.exports = _isPlaceholder;

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

	var always = /*#__PURE__*/__webpack_require__(5);

	/**
	 * A function that always returns `true`. Any passed in parameters are ignored.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Function
	 * @sig * -> Boolean
	 * @param {*}
	 * @return {Boolean}
	 * @see R.always, R.F
	 * @example
	 *
	 *      R.T(); //=> true
	 */


	var T = /*#__PURE__*/always(true);
	module.exports = T;

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

	/**
	 * A special placeholder value used to specify "gaps" within curried functions,
	 * allowing partial application of any combination of arguments, regardless of
	 * their positions.
	 *
	 * If `g` is a curried ternary function and `_` is `R.__`, the following are
	 * equivalent:
	 *
	 *   - `g(1, 2, 3)`
	 *   - `g(_, 2, 3)(1)`
	 *   - `g(_, _, 3)(1)(2)`
	 *   - `g(_, _, 3)(1, 2)`
	 *   - `g(_, 2, _)(1, 3)`
	 *   - `g(_, 2)(1)(3)`
	 *   - `g(_, 2)(1, 3)`
	 *   - `g(_, 2)(_, 3)(1)`
	 *
	 * @constant
	 * @memberOf R
	 * @since v0.6.0
	 * @category Function
	 * @example
	 *
	 *      var greet = R.replace('{name}', R.__, 'Hello, {name}!');
	 *      greet('Alice'); //=> 'Hello, Alice!'
	 */
	module.exports = { '@@functional/placeholder': true };

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Adds two values.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Math
	 * @sig Number -> Number -> Number
	 * @param {Number} a
	 * @param {Number} b
	 * @return {Number}
	 * @see R.subtract
	 * @example
	 *
	 *      R.add(2, 3);       //=>  5
	 *      R.add(7)(10);      //=> 17
	 */


	var add = /*#__PURE__*/_curry2(function add(a, b) {
	  return Number(a) + Number(b);
	});
	module.exports = add;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _isPlaceholder = /*#__PURE__*/__webpack_require__(7);

	/**
	 * Optimized internal two-arity curry function.
	 *
	 * @private
	 * @category Function
	 * @param {Function} fn The function to curry.
	 * @return {Function} The curried function.
	 */


	function _curry2(fn) {
	  return function f2(a, b) {
	    switch (arguments.length) {
	      case 0:
	        return f2;
	      case 1:
	        return _isPlaceholder(a) ? f2 : _curry1(function (_b) {
	          return fn(a, _b);
	        });
	      default:
	        return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {
	          return fn(_a, b);
	        }) : _isPlaceholder(b) ? _curry1(function (_b) {
	          return fn(a, _b);
	        }) : fn(a, b);
	    }
	  };
	}
	module.exports = _curry2;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	/**
	 * Creates a new list iteration function from an existing one by adding two new
	 * parameters to its callback function: the current index, and the entire list.
	 *
	 * This would turn, for instance, [`R.map`](#map) function into one that
	 * more closely resembles `Array.prototype.map`. Note that this will only work
	 * for functions in which the iteration callback function is the first
	 * parameter, and where the list is the last parameter. (This latter might be
	 * unimportant if the list parameter is not used.)
	 *
	 * @func
	 * @memberOf R
	 * @since v0.15.0
	 * @category Function
	 * @category List
	 * @sig ((a ... -> b) ... -> [a] -> *) -> (a ..., Int, [a] -> b) ... -> [a] -> *)
	 * @param {Function} fn A list iteration function that does not pass index or list to its callback
	 * @return {Function} An altered list iteration function that passes (item, index, list) to its callback
	 * @example
	 *
	 *      var mapIndexed = R.addIndex(R.map);
	 *      mapIndexed((val, idx) => idx + '-' + val, ['f', 'o', 'o', 'b', 'a', 'r']);
	 *      //=> ['0-f', '1-o', '2-o', '3-b', '4-a', '5-r']
	 */


	var addIndex = /*#__PURE__*/_curry1(function addIndex(fn) {
	  return curryN(fn.length, function () {
	    var idx = 0;
	    var origFn = arguments[0];
	    var list = arguments[arguments.length - 1];
	    var args = Array.prototype.slice.call(arguments, 0);
	    args[0] = function () {
	      var result = origFn.apply(this, _concat(arguments, [idx, list]));
	      idx += 1;
	      return result;
	    };
	    return fn.apply(this, args);
	  });
	});
	module.exports = addIndex;

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

	/**
	 * Private `concat` function to merge two array-like objects.
	 *
	 * @private
	 * @param {Array|Arguments} [set1=[]] An array-like object.
	 * @param {Array|Arguments} [set2=[]] An array-like object.
	 * @return {Array} A new, merged array.
	 * @example
	 *
	 *      _concat([4, 5, 6], [1, 2, 3]); //=> [4, 5, 6, 1, 2, 3]
	 */
	function _concat(set1, set2) {
	  set1 = set1 || [];
	  set2 = set2 || [];
	  var idx;
	  var len1 = set1.length;
	  var len2 = set2.length;
	  var result = [];

	  idx = 0;
	  while (idx < len1) {
	    result[result.length] = set1[idx];
	    idx += 1;
	  }
	  idx = 0;
	  while (idx < len2) {
	    result[result.length] = set2[idx];
	    idx += 1;
	  }
	  return result;
	}
	module.exports = _concat;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _curryN = /*#__PURE__*/__webpack_require__(16);

	/**
	 * Returns a curried equivalent of the provided function, with the specified
	 * arity. The curried function has two unusual capabilities. First, its
	 * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the
	 * following are equivalent:
	 *
	 *   - `g(1)(2)(3)`
	 *   - `g(1)(2, 3)`
	 *   - `g(1, 2)(3)`
	 *   - `g(1, 2, 3)`
	 *
	 * Secondly, the special placeholder value [`R.__`](#__) may be used to specify
	 * "gaps", allowing partial application of any combination of arguments,
	 * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),
	 * the following are equivalent:
	 *
	 *   - `g(1, 2, 3)`
	 *   - `g(_, 2, 3)(1)`
	 *   - `g(_, _, 3)(1)(2)`
	 *   - `g(_, _, 3)(1, 2)`
	 *   - `g(_, 2)(1)(3)`
	 *   - `g(_, 2)(1, 3)`
	 *   - `g(_, 2)(_, 3)(1)`
	 *
	 * @func
	 * @memberOf R
	 * @since v0.5.0
	 * @category Function
	 * @sig Number -> (* -> a) -> (* -> a)
	 * @param {Number} length The arity for the returned function.
	 * @param {Function} fn The function to curry.
	 * @return {Function} A new, curried function.
	 * @see R.curry
	 * @example
	 *
	 *      var sumArgs = (...args) => R.sum(args);
	 *
	 *      var curriedAddFourNumbers = R.curryN(4, sumArgs);
	 *      var f = curriedAddFourNumbers(1, 2);
	 *      var g = f(3);
	 *      g(4); //=> 10
	 */


	var curryN = /*#__PURE__*/_curry2(function curryN(length, fn) {
	  if (length === 1) {
	    return _curry1(fn);
	  }
	  return _arity(length, _curryN(length, [], fn));
	});
	module.exports = curryN;

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

	function _arity(n, fn) {
	  /* eslint-disable no-unused-vars */
	  switch (n) {
	    case 0:
	      return function () {
	        return fn.apply(this, arguments);
	      };
	    case 1:
	      return function (a0) {
	        return fn.apply(this, arguments);
	      };
	    case 2:
	      return function (a0, a1) {
	        return fn.apply(this, arguments);
	      };
	    case 3:
	      return function (a0, a1, a2) {
	        return fn.apply(this, arguments);
	      };
	    case 4:
	      return function (a0, a1, a2, a3) {
	        return fn.apply(this, arguments);
	      };
	    case 5:
	      return function (a0, a1, a2, a3, a4) {
	        return fn.apply(this, arguments);
	      };
	    case 6:
	      return function (a0, a1, a2, a3, a4, a5) {
	        return fn.apply(this, arguments);
	      };
	    case 7:
	      return function (a0, a1, a2, a3, a4, a5, a6) {
	        return fn.apply(this, arguments);
	      };
	    case 8:
	      return function (a0, a1, a2, a3, a4, a5, a6, a7) {
	        return fn.apply(this, arguments);
	      };
	    case 9:
	      return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {
	        return fn.apply(this, arguments);
	      };
	    case 10:
	      return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {
	        return fn.apply(this, arguments);
	      };
	    default:
	      throw new Error('First argument to _arity must be a non-negative integer no greater than ten');
	  }
	}
	module.exports = _arity;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _isPlaceholder = /*#__PURE__*/__webpack_require__(7);

	/**
	 * Internal curryN function.
	 *
	 * @private
	 * @category Function
	 * @param {Number} length The arity of the curried function.
	 * @param {Array} received An array of arguments received thus far.
	 * @param {Function} fn The function to curry.
	 * @return {Function} The curried function.
	 */


	function _curryN(length, received, fn) {
	  return function () {
	    var combined = [];
	    var argsIdx = 0;
	    var left = length;
	    var combinedIdx = 0;
	    while (combinedIdx < received.length || argsIdx < arguments.length) {
	      var result;
	      if (combinedIdx < received.length && (!_isPlaceholder(received[combinedIdx]) || argsIdx >= arguments.length)) {
	        result = received[combinedIdx];
	      } else {
	        result = arguments[argsIdx];
	        argsIdx += 1;
	      }
	      combined[combinedIdx] = result;
	      if (!_isPlaceholder(result)) {
	        left -= 1;
	      }
	      combinedIdx += 1;
	    }
	    return left <= 0 ? fn.apply(this, combined) : _arity(left, _curryN(length, combined, fn));
	  };
	}
	module.exports = _curryN;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Applies a function to the value at the given index of an array, returning a
	 * new copy of the array with the element at the given index replaced with the
	 * result of the function application.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category List
	 * @sig (a -> a) -> Number -> [a] -> [a]
	 * @param {Function} fn The function to apply.
	 * @param {Number} idx The index.
	 * @param {Array|Arguments} list An array-like object whose value
	 *        at the supplied index will be replaced.
	 * @return {Array} A copy of the supplied array-like object with
	 *         the element at index `idx` replaced with the value
	 *         returned by applying `fn` to the existing element.
	 * @see R.update
	 * @example
	 *
	 *      R.adjust(R.add(10), 1, [1, 2, 3]);     //=> [1, 12, 3]
	 *      R.adjust(R.add(10))(1)([1, 2, 3]);     //=> [1, 12, 3]
	 * @symb R.adjust(f, -1, [a, b]) = [a, f(b)]
	 * @symb R.adjust(f, 0, [a, b]) = [f(a), b]
	 */


	var adjust = /*#__PURE__*/_curry3(function adjust(fn, idx, list) {
	  if (idx >= list.length || idx < -list.length) {
	    return list;
	  }
	  var start = idx < 0 ? list.length : 0;
	  var _idx = start + idx;
	  var _list = _concat(list);
	  _list[_idx] = fn(list[_idx]);
	  return _list;
	});
	module.exports = adjust;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isPlaceholder = /*#__PURE__*/__webpack_require__(7);

	/**
	 * Optimized internal three-arity curry function.
	 *
	 * @private
	 * @category Function
	 * @param {Function} fn The function to curry.
	 * @return {Function} The curried function.
	 */


	function _curry3(fn) {
	  return function f3(a, b, c) {
	    switch (arguments.length) {
	      case 0:
	        return f3;
	      case 1:
	        return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {
	          return fn(a, _b, _c);
	        });
	      case 2:
	        return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {
	          return fn(_a, b, _c);
	        }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {
	          return fn(a, _b, _c);
	        }) : _curry1(function (_c) {
	          return fn(a, b, _c);
	        });
	      default:
	        return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {
	          return fn(_a, _b, c);
	        }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {
	          return fn(_a, b, _c);
	        }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {
	          return fn(a, _b, _c);
	        }) : _isPlaceholder(a) ? _curry1(function (_a) {
	          return fn(_a, b, c);
	        }) : _isPlaceholder(b) ? _curry1(function (_b) {
	          return fn(a, _b, c);
	        }) : _isPlaceholder(c) ? _curry1(function (_c) {
	          return fn(a, b, _c);
	        }) : fn(a, b, c);
	    }
	  };
	}
	module.exports = _curry3;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xall = /*#__PURE__*/__webpack_require__(23);

	/**
	 * Returns `true` if all elements of the list match the predicate, `false` if
	 * there are any that don't.
	 *
	 * Dispatches to the `all` method of the second argument, if present.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> Boolean
	 * @param {Function} fn The predicate function.
	 * @param {Array} list The array to consider.
	 * @return {Boolean} `true` if the predicate is satisfied by every element, `false`
	 *         otherwise.
	 * @see R.any, R.none, R.transduce
	 * @example
	 *
	 *      var equals3 = R.equals(3);
	 *      R.all(equals3)([3, 3, 3, 3]); //=> true
	 *      R.all(equals3)([3, 3, 1, 3]); //=> false
	 */


	var all = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['all'], _xall, function all(fn, list) {
	  var idx = 0;
	  while (idx < list.length) {
	    if (!fn(list[idx])) {
	      return false;
	    }
	    idx += 1;
	  }
	  return true;
	}));
	module.exports = all;

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

	var _isArray = /*#__PURE__*/__webpack_require__(21);

	var _isTransformer = /*#__PURE__*/__webpack_require__(22);

	/**
	 * Returns a function that dispatches with different strategies based on the
	 * object in list position (last argument). If it is an array, executes [fn].
	 * Otherwise, if it has a function with one of the given method names, it will
	 * execute that function (functor case). Otherwise, if it is a transformer,
	 * uses transducer [xf] to return a new transformer (transducer case).
	 * Otherwise, it will default to executing [fn].
	 *
	 * @private
	 * @param {Array} methodNames properties to check for a custom implementation
	 * @param {Function} xf transducer to initialize if object is transformer
	 * @param {Function} fn default ramda implementation
	 * @return {Function} A function that dispatches on object in list position
	 */


	function _dispatchable(methodNames, xf, fn) {
	  return function () {
	    if (arguments.length === 0) {
	      return fn();
	    }
	    var args = Array.prototype.slice.call(arguments, 0);
	    var obj = args.pop();
	    if (!_isArray(obj)) {
	      var idx = 0;
	      while (idx < methodNames.length) {
	        if (typeof obj[methodNames[idx]] === 'function') {
	          return obj[methodNames[idx]].apply(obj, args);
	        }
	        idx += 1;
	      }
	      if (_isTransformer(obj)) {
	        var transducer = xf.apply(null, args);
	        return transducer(obj);
	      }
	    }
	    return fn.apply(this, arguments);
	  };
	}
	module.exports = _dispatchable;

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

	/**
	 * Tests whether or not an object is an array.
	 *
	 * @private
	 * @param {*} val The object to test.
	 * @return {Boolean} `true` if `val` is an array, `false` otherwise.
	 * @example
	 *
	 *      _isArray([]); //=> true
	 *      _isArray(null); //=> false
	 *      _isArray({}); //=> false
	 */
	module.exports = Array.isArray || function _isArray(val) {
	  return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';
	};

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

	function _isTransformer(obj) {
	  return typeof obj['@@transducer/step'] === 'function';
	}
	module.exports = _isTransformer;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduced = /*#__PURE__*/__webpack_require__(24);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XAll = /*#__PURE__*/function () {

	  function XAll(f, xf) {
	    this.xf = xf;
	    this.f = f;
	    this.all = true;
	  }
	  XAll.prototype['@@transducer/init'] = _xfBase.init;
	  XAll.prototype['@@transducer/result'] = function (result) {
	    if (this.all) {
	      result = this.xf['@@transducer/step'](result, true);
	    }
	    return this.xf['@@transducer/result'](result);
	  };
	  XAll.prototype['@@transducer/step'] = function (result, input) {
	    if (!this.f(input)) {
	      this.all = false;
	      result = _reduced(this.xf['@@transducer/step'](result, false));
	    }
	    return result;
	  };

	  return XAll;
	}();

	var _xall = /*#__PURE__*/_curry2(function _xall(f, xf) {
	  return new XAll(f, xf);
	});
	module.exports = _xall;

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

	function _reduced(x) {
	  return x && x['@@transducer/reduced'] ? x : {
	    '@@transducer/value': x,
	    '@@transducer/reduced': true
	  };
	}
	module.exports = _reduced;

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

	module.exports = {
	  init: function () {
	    return this.xf['@@transducer/init']();
	  },
	  result: function (result) {
	    return this.xf['@@transducer/result'](result);
	  }
	};

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	var max = /*#__PURE__*/__webpack_require__(27);

	var pluck = /*#__PURE__*/__webpack_require__(28);

	var reduce = /*#__PURE__*/__webpack_require__(42);

	/**
	 * Takes a list of predicates and returns a predicate that returns true for a
	 * given list of arguments if every one of the provided predicates is satisfied
	 * by those arguments.
	 *
	 * The function returned is a curried function whose arity matches that of the
	 * highest-arity predicate.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Logic
	 * @sig [(*... -> Boolean)] -> (*... -> Boolean)
	 * @param {Array} predicates An array of predicates to check
	 * @return {Function} The combined predicate
	 * @see R.anyPass
	 * @example
	 *
	 *      var isQueen = R.propEq('rank', 'Q');
	 *      var isSpade = R.propEq('suit', '♠︎');
	 *      var isQueenOfSpades = R.allPass([isQueen, isSpade]);
	 *
	 *      isQueenOfSpades({rank: 'Q', suit: '♣︎'}); //=> false
	 *      isQueenOfSpades({rank: 'Q', suit: '♠︎'}); //=> true
	 */


	var allPass = /*#__PURE__*/_curry1(function allPass(preds) {
	  return curryN(reduce(max, 0, pluck('length', preds)), function () {
	    var idx = 0;
	    var len = preds.length;
	    while (idx < len) {
	      if (!preds[idx].apply(this, arguments)) {
	        return false;
	      }
	      idx += 1;
	    }
	    return true;
	  });
	});
	module.exports = allPass;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns the larger of its two arguments.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig Ord a => a -> a -> a
	 * @param {*} a
	 * @param {*} b
	 * @return {*}
	 * @see R.maxBy, R.min
	 * @example
	 *
	 *      R.max(789, 123); //=> 789
	 *      R.max('a', 'b'); //=> 'b'
	 */


	var max = /*#__PURE__*/_curry2(function max(a, b) {
	  return b > a ? b : a;
	});
	module.exports = max;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var map = /*#__PURE__*/__webpack_require__(29);

	var prop = /*#__PURE__*/__webpack_require__(40);

	/**
	 * Returns a new list by plucking the same named property off all objects in
	 * the list supplied.
	 *
	 * `pluck` will work on
	 * any [functor](https://github.com/fantasyland/fantasy-land#functor) in
	 * addition to arrays, as it is equivalent to `R.map(R.prop(k), f)`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig Functor f => k -> f {k: v} -> f v
	 * @param {Number|String} key The key name to pluck off of each object.
	 * @param {Array} f The array or functor to consider.
	 * @return {Array} The list of values for the given key.
	 * @see R.props
	 * @example
	 *
	 *      R.pluck('a')([{a: 1}, {a: 2}]); //=> [1, 2]
	 *      R.pluck(0)([[1, 2], [3, 4]]);   //=> [1, 3]
	 *      R.pluck('val', {a: {val: 3}, b: {val: 5}}); //=> {a: 3, b: 5}
	 * @symb R.pluck('x', [{x: 1, y: 2}, {x: 3, y: 4}, {x: 5, y: 6}]) = [1, 3, 5]
	 * @symb R.pluck(0, [[1, 2], [3, 4], [5, 6]]) = [1, 3, 5]
	 */


	var pluck = /*#__PURE__*/_curry2(function pluck(p, list) {
	  return map(prop(p), list);
	});
	module.exports = pluck;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _map = /*#__PURE__*/__webpack_require__(30);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var _xmap = /*#__PURE__*/__webpack_require__(36);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	var keys = /*#__PURE__*/__webpack_require__(37);

	/**
	 * Takes a function and
	 * a [functor](https://github.com/fantasyland/fantasy-land#functor),
	 * applies the function to each of the functor's values, and returns
	 * a functor of the same shape.
	 *
	 * Ramda provides suitable `map` implementations for `Array` and `Object`,
	 * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`.
	 *
	 * Dispatches to the `map` method of the second argument, if present.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * Also treats functions as functors and will compose them together.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig Functor f => (a -> b) -> f a -> f b
	 * @param {Function} fn The function to be called on every element of the input `list`.
	 * @param {Array} list The list to be iterated over.
	 * @return {Array} The new list.
	 * @see R.transduce, R.addIndex
	 * @example
	 *
	 *      var double = x => x * 2;
	 *
	 *      R.map(double, [1, 2, 3]); //=> [2, 4, 6]
	 *
	 *      R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}
	 * @symb R.map(f, [a, b]) = [f(a), f(b)]
	 * @symb R.map(f, { x: a, y: b }) = { x: f(a), y: f(b) }
	 * @symb R.map(f, functor_o) = functor_o.map(f)
	 */


	var map = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['fantasy-land/map', 'map'], _xmap, function map(fn, functor) {
	  switch (Object.prototype.toString.call(functor)) {
	    case '[object Function]':
	      return curryN(functor.length, function () {
	        return fn.call(this, functor.apply(this, arguments));
	      });
	    case '[object Object]':
	      return _reduce(function (acc, key) {
	        acc[key] = fn(functor[key]);
	        return acc;
	      }, {}, keys(functor));
	    default:
	      return _map(fn, functor);
	  }
	}));
	module.exports = map;

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

	function _map(fn, functor) {
	  var idx = 0;
	  var len = functor.length;
	  var result = Array(len);
	  while (idx < len) {
	    result[idx] = fn(functor[idx]);
	    idx += 1;
	  }
	  return result;
	}
	module.exports = _map;

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

	var _isArrayLike = /*#__PURE__*/__webpack_require__(32);

	var _xwrap = /*#__PURE__*/__webpack_require__(34);

	var bind = /*#__PURE__*/__webpack_require__(35);

	function _arrayReduce(xf, acc, list) {
	  var idx = 0;
	  var len = list.length;
	  while (idx < len) {
	    acc = xf['@@transducer/step'](acc, list[idx]);
	    if (acc && acc['@@transducer/reduced']) {
	      acc = acc['@@transducer/value'];
	      break;
	    }
	    idx += 1;
	  }
	  return xf['@@transducer/result'](acc);
	}

	function _iterableReduce(xf, acc, iter) {
	  var step = iter.next();
	  while (!step.done) {
	    acc = xf['@@transducer/step'](acc, step.value);
	    if (acc && acc['@@transducer/reduced']) {
	      acc = acc['@@transducer/value'];
	      break;
	    }
	    step = iter.next();
	  }
	  return xf['@@transducer/result'](acc);
	}

	function _methodReduce(xf, acc, obj, methodName) {
	  return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc));
	}

	var symIterator = typeof Symbol !== 'undefined' ? Symbol.iterator : '@@iterator';

	function _reduce(fn, acc, list) {
	  if (typeof fn === 'function') {
	    fn = _xwrap(fn);
	  }
	  if (_isArrayLike(list)) {
	    return _arrayReduce(fn, acc, list);
	  }
	  if (typeof list['fantasy-land/reduce'] === 'function') {
	    return _methodReduce(fn, acc, list, 'fantasy-land/reduce');
	  }
	  if (list[symIterator] != null) {
	    return _iterableReduce(fn, acc, list[symIterator]());
	  }
	  if (typeof list.next === 'function') {
	    return _iterableReduce(fn, acc, list);
	  }
	  if (typeof list.reduce === 'function') {
	    return _methodReduce(fn, acc, list, 'reduce');
	  }

	  throw new TypeError('reduce: list must be array or iterable');
	}
	module.exports = _reduce;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _isArray = /*#__PURE__*/__webpack_require__(21);

	var _isString = /*#__PURE__*/__webpack_require__(33);

	/**
	 * Tests whether or not an object is similar to an array.
	 *
	 * @private
	 * @category Type
	 * @category List
	 * @sig * -> Boolean
	 * @param {*} x The object to test.
	 * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise.
	 * @example
	 *
	 *      _isArrayLike([]); //=> true
	 *      _isArrayLike(true); //=> false
	 *      _isArrayLike({}); //=> false
	 *      _isArrayLike({length: 10}); //=> false
	 *      _isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true
	 */


	var _isArrayLike = /*#__PURE__*/_curry1(function isArrayLike(x) {
	  if (_isArray(x)) {
	    return true;
	  }
	  if (!x) {
	    return false;
	  }
	  if (typeof x !== 'object') {
	    return false;
	  }
	  if (_isString(x)) {
	    return false;
	  }
	  if (x.nodeType === 1) {
	    return !!x.length;
	  }
	  if (x.length === 0) {
	    return true;
	  }
	  if (x.length > 0) {
	    return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1);
	  }
	  return false;
	});
	module.exports = _isArrayLike;

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

	function _isString(x) {
	  return Object.prototype.toString.call(x) === '[object String]';
	}
	module.exports = _isString;

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

	var XWrap = /*#__PURE__*/function () {
	  function XWrap(fn) {
	    this.f = fn;
	  }
	  XWrap.prototype['@@transducer/init'] = function () {
	    throw new Error('init not implemented on XWrap');
	  };
	  XWrap.prototype['@@transducer/result'] = function (acc) {
	    return acc;
	  };
	  XWrap.prototype['@@transducer/step'] = function (acc, x) {
	    return this.f(acc, x);
	  };

	  return XWrap;
	}();

	function _xwrap(fn) {
	  return new XWrap(fn);
	}
	module.exports = _xwrap;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Creates a function that is bound to a context.
	 * Note: `R.bind` does not provide the additional argument-binding capabilities of
	 * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.6.0
	 * @category Function
	 * @category Object
	 * @sig (* -> *) -> {*} -> (* -> *)
	 * @param {Function} fn The function to bind to context
	 * @param {Object} thisObj The context to bind `fn` to
	 * @return {Function} A function that will execute in the context of `thisObj`.
	 * @see R.partial
	 * @example
	 *
	 *      var log = R.bind(console.log, console);
	 *      R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}
	 *      // logs {a: 2}
	 * @symb R.bind(f, o)(a, b) = f.call(o, a, b)
	 */


	var bind = /*#__PURE__*/_curry2(function bind(fn, thisObj) {
	  return _arity(fn.length, function () {
	    return fn.apply(thisObj, arguments);
	  });
	});
	module.exports = bind;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XMap = /*#__PURE__*/function () {

	  function XMap(f, xf) {
	    this.xf = xf;
	    this.f = f;
	  }
	  XMap.prototype['@@transducer/init'] = _xfBase.init;
	  XMap.prototype['@@transducer/result'] = _xfBase.result;
	  XMap.prototype['@@transducer/step'] = function (result, input) {
	    return this.xf['@@transducer/step'](result, this.f(input));
	  };

	  return XMap;
	}();

	var _xmap = /*#__PURE__*/_curry2(function _xmap(f, xf) {
	  return new XMap(f, xf);
	});
	module.exports = _xmap;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _has = /*#__PURE__*/__webpack_require__(38);

	var _isArguments = /*#__PURE__*/__webpack_require__(39);

	// cover IE < 9 keys issues


	var hasEnumBug = ! /*#__PURE__*/{ toString: null }.propertyIsEnumerable('toString');
	var nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
	// Safari bug
	var hasArgsEnumBug = /*#__PURE__*/function () {
	  'use strict';

	  return arguments.propertyIsEnumerable('length');
	}();

	var contains = function contains(list, item) {
	  var idx = 0;
	  while (idx < list.length) {
	    if (list[idx] === item) {
	      return true;
	    }
	    idx += 1;
	  }
	  return false;
	};

	/**
	 * Returns a list containing the names of all the enumerable own properties of
	 * the supplied object.
	 * Note that the order of the output array is not guaranteed to be consistent
	 * across different JS platforms.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig {k: v} -> [k]
	 * @param {Object} obj The object to extract properties from
	 * @return {Array} An array of the object's own properties.
	 * @see R.keysIn, R.values
	 * @example
	 *
	 *      R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']
	 */
	var _keys = typeof Object.keys === 'function' && !hasArgsEnumBug ? function keys(obj) {
	  return Object(obj) !== obj ? [] : Object.keys(obj);
	} : function keys(obj) {
	  if (Object(obj) !== obj) {
	    return [];
	  }
	  var prop, nIdx;
	  var ks = [];
	  var checkArgsLength = hasArgsEnumBug && _isArguments(obj);
	  for (prop in obj) {
	    if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {
	      ks[ks.length] = prop;
	    }
	  }
	  if (hasEnumBug) {
	    nIdx = nonEnumerableProps.length - 1;
	    while (nIdx >= 0) {
	      prop = nonEnumerableProps[nIdx];
	      if (_has(prop, obj) && !contains(ks, prop)) {
	        ks[ks.length] = prop;
	      }
	      nIdx -= 1;
	    }
	  }
	  return ks;
	};
	var keys = /*#__PURE__*/_curry1(_keys);
	module.exports = keys;

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

	function _has(prop, obj) {
	  return Object.prototype.hasOwnProperty.call(obj, prop);
	}
	module.exports = _has;

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

	var _has = /*#__PURE__*/__webpack_require__(38);

	var toString = Object.prototype.toString;
	var _isArguments = function () {
	  return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) {
	    return toString.call(x) === '[object Arguments]';
	  } : function _isArguments(x) {
	    return _has('callee', x);
	  };
	};

	module.exports = _isArguments;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var path = /*#__PURE__*/__webpack_require__(41);

	/**
	 * Returns a function that when supplied an object returns the indicated
	 * property of that object, if it exists.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig s -> {s: a} -> a | Undefined
	 * @param {String} p The property name
	 * @param {Object} obj The object to query
	 * @return {*} The value at `obj.p`.
	 * @see R.path
	 * @example
	 *
	 *      R.prop('x', {x: 100}); //=> 100
	 *      R.prop('x', {}); //=> undefined
	 */

	var prop = /*#__PURE__*/_curry2(function prop(p, obj) {
	  return path([p], obj);
	});
	module.exports = prop;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Retrieve the value at a given path.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.2.0
	 * @category Object
	 * @typedefn Idx = String | Int
	 * @sig [Idx] -> {a} -> a | Undefined
	 * @param {Array} path The path to use.
	 * @param {Object} obj The object to retrieve the nested property from.
	 * @return {*} The data at `path`.
	 * @see R.prop
	 * @example
	 *
	 *      R.path(['a', 'b'], {a: {b: 2}}); //=> 2
	 *      R.path(['a', 'b'], {c: {b: 2}}); //=> undefined
	 */


	var path = /*#__PURE__*/_curry2(function path(paths, obj) {
	  var val = obj;
	  var idx = 0;
	  while (idx < paths.length) {
	    if (val == null) {
	      return;
	    }
	    val = val[paths[idx]];
	    idx += 1;
	  }
	  return val;
	});
	module.exports = path;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	/**
	 * Returns a single item by iterating through the list, successively calling
	 * the iterator function and passing it an accumulator value and the current
	 * value from the array, and then passing the result to the next call.
	 *
	 * The iterator function receives two values: *(acc, value)*. It may use
	 * [`R.reduced`](#reduced) to shortcut the iteration.
	 *
	 * The arguments' order of [`reduceRight`](#reduceRight)'s iterator function
	 * is *(value, acc)*.
	 *
	 * Note: `R.reduce` does not skip deleted or unassigned indices (sparse
	 * arrays), unlike the native `Array.prototype.reduce` method. For more details
	 * on this behavior, see:
	 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Description
	 *
	 * Dispatches to the `reduce` method of the third argument, if present. When
	 * doing so, it is up to the user to handle the [`R.reduced`](#reduced)
	 * shortcuting, as this is not implemented by `reduce`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig ((a, b) -> a) -> a -> [b] -> a
	 * @param {Function} fn The iterator function. Receives two values, the accumulator and the
	 *        current element from the array.
	 * @param {*} acc The accumulator value.
	 * @param {Array} list The list to iterate over.
	 * @return {*} The final, accumulated value.
	 * @see R.reduced, R.addIndex, R.reduceRight
	 * @example
	 *
	 *      R.reduce(R.subtract, 0, [1, 2, 3, 4]) // => ((((0 - 1) - 2) - 3) - 4) = -10
	 *      //          -               -10
	 *      //         / \              / \
	 *      //        -   4           -6   4
	 *      //       / \              / \
	 *      //      -   3   ==>     -3   3
	 *      //     / \              / \
	 *      //    -   2           -1   2
	 *      //   / \              / \
	 *      //  0   1            0   1
	 *
	 * @symb R.reduce(f, a, [b, c, d]) = f(f(f(a, b), c), d)
	 */


	var reduce = /*#__PURE__*/_curry3(_reduce);
	module.exports = reduce;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns `true` if both arguments are `true`; `false` otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Logic
	 * @sig a -> b -> a | b
	 * @param {Any} a
	 * @param {Any} b
	 * @return {Any} the first argument if it is falsy, otherwise the second argument.
	 * @see R.both
	 * @example
	 *
	 *      R.and(true, true); //=> true
	 *      R.and(true, false); //=> false
	 *      R.and(false, true); //=> false
	 *      R.and(false, false); //=> false
	 */


	var and = /*#__PURE__*/_curry2(function and(a, b) {
	  return a && b;
	});
	module.exports = and;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xany = /*#__PURE__*/__webpack_require__(45);

	/**
	 * Returns `true` if at least one of elements of the list match the predicate,
	 * `false` otherwise.
	 *
	 * Dispatches to the `any` method of the second argument, if present.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> Boolean
	 * @param {Function} fn The predicate function.
	 * @param {Array} list The array to consider.
	 * @return {Boolean} `true` if the predicate is satisfied by at least one element, `false`
	 *         otherwise.
	 * @see R.all, R.none, R.transduce
	 * @example
	 *
	 *      var lessThan0 = R.flip(R.lt)(0);
	 *      var lessThan2 = R.flip(R.lt)(2);
	 *      R.any(lessThan0)([1, 2]); //=> false
	 *      R.any(lessThan2)([1, 2]); //=> true
	 */


	var any = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['any'], _xany, function any(fn, list) {
	  var idx = 0;
	  while (idx < list.length) {
	    if (fn(list[idx])) {
	      return true;
	    }
	    idx += 1;
	  }
	  return false;
	}));
	module.exports = any;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduced = /*#__PURE__*/__webpack_require__(24);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XAny = /*#__PURE__*/function () {

	  function XAny(f, xf) {
	    this.xf = xf;
	    this.f = f;
	    this.any = false;
	  }
	  XAny.prototype['@@transducer/init'] = _xfBase.init;
	  XAny.prototype['@@transducer/result'] = function (result) {
	    if (!this.any) {
	      result = this.xf['@@transducer/step'](result, false);
	    }
	    return this.xf['@@transducer/result'](result);
	  };
	  XAny.prototype['@@transducer/step'] = function (result, input) {
	    if (this.f(input)) {
	      this.any = true;
	      result = _reduced(this.xf['@@transducer/step'](result, true));
	    }
	    return result;
	  };

	  return XAny;
	}();

	var _xany = /*#__PURE__*/_curry2(function _xany(f, xf) {
	  return new XAny(f, xf);
	});
	module.exports = _xany;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	var max = /*#__PURE__*/__webpack_require__(27);

	var pluck = /*#__PURE__*/__webpack_require__(28);

	var reduce = /*#__PURE__*/__webpack_require__(42);

	/**
	 * Takes a list of predicates and returns a predicate that returns true for a
	 * given list of arguments if at least one of the provided predicates is
	 * satisfied by those arguments.
	 *
	 * The function returned is a curried function whose arity matches that of the
	 * highest-arity predicate.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Logic
	 * @sig [(*... -> Boolean)] -> (*... -> Boolean)
	 * @param {Array} predicates An array of predicates to check
	 * @return {Function} The combined predicate
	 * @see R.allPass
	 * @example
	 *
	 *      var isClub = R.propEq('suit', '♣');
	 *      var isSpade = R.propEq('suit', '♠');
	 *      var isBlackCard = R.anyPass([isClub, isSpade]);
	 *
	 *      isBlackCard({rank: '10', suit: '♣'}); //=> true
	 *      isBlackCard({rank: 'Q', suit: '♠'}); //=> true
	 *      isBlackCard({rank: 'Q', suit: '♦'}); //=> false
	 */


	var anyPass = /*#__PURE__*/_curry1(function anyPass(preds) {
	  return curryN(reduce(max, 0, pluck('length', preds)), function () {
	    var idx = 0;
	    var len = preds.length;
	    while (idx < len) {
	      if (preds[idx].apply(this, arguments)) {
	        return true;
	      }
	      idx += 1;
	    }
	    return false;
	  });
	});
	module.exports = anyPass;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var map = /*#__PURE__*/__webpack_require__(29);

	/**
	 * ap applies a list of functions to a list of values.
	 *
	 * Dispatches to the `ap` method of the second argument, if present. Also
	 * treats curried functions as applicatives.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category Function
	 * @sig [a -> b] -> [a] -> [b]
	 * @sig Apply f => f (a -> b) -> f a -> f b
	 * @sig (a -> b -> c) -> (a -> b) -> (a -> c)
	 * @param {*} applyF
	 * @param {*} applyX
	 * @return {*}
	 * @example
	 *
	 *      R.ap([R.multiply(2), R.add(3)], [1,2,3]); //=> [2, 4, 6, 4, 5, 6]
	 *      R.ap([R.concat('tasty '), R.toUpper], ['pizza', 'salad']); //=> ["tasty pizza", "tasty salad", "PIZZA", "SALAD"]
	 *
	 *      // R.ap can also be used as S combinator
	 *      // when only two functions are passed
	 *      R.ap(R.concat, R.toUpper)('Ramda') //=> 'RamdaRAMDA'
	 * @symb R.ap([f, g], [a, b]) = [f(a), f(b), g(a), g(b)]
	 */


	var ap = /*#__PURE__*/_curry2(function ap(applyF, applyX) {
	  return typeof applyX['fantasy-land/ap'] === 'function' ? applyX['fantasy-land/ap'](applyF) : typeof applyF.ap === 'function' ? applyF.ap(applyX) : typeof applyF === 'function' ? function (x) {
	    return applyF(x)(applyX(x));
	  } :
	  // else
	  _reduce(function (acc, f) {
	    return _concat(acc, map(f, applyX));
	  }, [], applyF);
	});
	module.exports = ap;

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

	var _aperture = /*#__PURE__*/__webpack_require__(49);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xaperture = /*#__PURE__*/__webpack_require__(50);

	/**
	 * Returns a new list, composed of n-tuples of consecutive elements. If `n` is
	 * greater than the length of the list, an empty list is returned.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.12.0
	 * @category List
	 * @sig Number -> [a] -> [[a]]
	 * @param {Number} n The size of the tuples to create
	 * @param {Array} list The list to split into `n`-length tuples
	 * @return {Array} The resulting list of `n`-length tuples
	 * @see R.transduce
	 * @example
	 *
	 *      R.aperture(2, [1, 2, 3, 4, 5]); //=> [[1, 2], [2, 3], [3, 4], [4, 5]]
	 *      R.aperture(3, [1, 2, 3, 4, 5]); //=> [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
	 *      R.aperture(7, [1, 2, 3, 4, 5]); //=> []
	 */


	var aperture = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xaperture, _aperture));
	module.exports = aperture;

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

	function _aperture(n, list) {
	  var idx = 0;
	  var limit = list.length - (n - 1);
	  var acc = new Array(limit >= 0 ? limit : 0);
	  while (idx < limit) {
	    acc[idx] = Array.prototype.slice.call(list, idx, idx + n);
	    idx += 1;
	  }
	  return acc;
	}
	module.exports = _aperture;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XAperture = /*#__PURE__*/function () {

	  function XAperture(n, xf) {
	    this.xf = xf;
	    this.pos = 0;
	    this.full = false;
	    this.acc = new Array(n);
	  }
	  XAperture.prototype['@@transducer/init'] = _xfBase.init;
	  XAperture.prototype['@@transducer/result'] = function (result) {
	    this.acc = null;
	    return this.xf['@@transducer/result'](result);
	  };
	  XAperture.prototype['@@transducer/step'] = function (result, input) {
	    this.store(input);
	    return this.full ? this.xf['@@transducer/step'](result, this.getCopy()) : result;
	  };
	  XAperture.prototype.store = function (input) {
	    this.acc[this.pos] = input;
	    this.pos += 1;
	    if (this.pos === this.acc.length) {
	      this.pos = 0;
	      this.full = true;
	    }
	  };
	  XAperture.prototype.getCopy = function () {
	    return _concat(Array.prototype.slice.call(this.acc, this.pos), Array.prototype.slice.call(this.acc, 0, this.pos));
	  };

	  return XAperture;
	}();

	var _xaperture = /*#__PURE__*/_curry2(function _xaperture(n, xf) {
	  return new XAperture(n, xf);
	});
	module.exports = _xaperture;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns a new list containing the contents of the given list, followed by
	 * the given element.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig a -> [a] -> [a]
	 * @param {*} el The element to add to the end of the new list.
	 * @param {Array} list The list of elements to add a new item to.
	 *        list.
	 * @return {Array} A new list containing the elements of the old list followed by `el`.
	 * @see R.prepend
	 * @example
	 *
	 *      R.append('tests', ['write', 'more']); //=> ['write', 'more', 'tests']
	 *      R.append('tests', []); //=> ['tests']
	 *      R.append(['tests'], ['write', 'more']); //=> ['write', 'more', ['tests']]
	 */


	var append = /*#__PURE__*/_curry2(function append(el, list) {
	  return _concat(list, [el]);
	});
	module.exports = append;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Applies function `fn` to the argument list `args`. This is useful for
	 * creating a fixed-arity function from a variadic function. `fn` should be a
	 * bound function if context is significant.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.7.0
	 * @category Function
	 * @sig (*... -> a) -> [*] -> a
	 * @param {Function} fn The function which will be called with `args`
	 * @param {Array} args The arguments to call `fn` with
	 * @return {*} result The result, equivalent to `fn(...args)`
	 * @see R.call, R.unapply
	 * @example
	 *
	 *      var nums = [1, 2, 3, -99, 42, 6, 7];
	 *      R.apply(Math.max, nums); //=> 42
	 * @symb R.apply(f, [a, b, c]) = f(a, b, c)
	 */


	var apply = /*#__PURE__*/_curry2(function apply(fn, args) {
	  return fn.apply(this, args);
	});
	module.exports = apply;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var apply = /*#__PURE__*/__webpack_require__(52);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	var map = /*#__PURE__*/__webpack_require__(29);

	var max = /*#__PURE__*/__webpack_require__(27);

	var pluck = /*#__PURE__*/__webpack_require__(28);

	var reduce = /*#__PURE__*/__webpack_require__(42);

	var values = /*#__PURE__*/__webpack_require__(54);

	/**
	 * Given a spec object recursively mapping properties to functions, creates a
	 * function producing an object of the same structure, by mapping each property
	 * to the result of calling its associated function with the supplied arguments.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.20.0
	 * @category Function
	 * @sig {k: ((a, b, ..., m) -> v)} -> ((a, b, ..., m) -> {k: v})
	 * @param {Object} spec an object recursively mapping properties to functions for
	 *        producing the values for these properties.
	 * @return {Function} A function that returns an object of the same structure
	 * as `spec', with each property set to the value returned by calling its
	 * associated function with the supplied arguments.
	 * @see R.converge, R.juxt
	 * @example
	 *
	 *      var getMetrics = R.applySpec({
	 *        sum: R.add,
	 *        nested: { mul: R.multiply }
	 *      });
	 *      getMetrics(2, 4); // => { sum: 6, nested: { mul: 8 } }
	 * @symb R.applySpec({ x: f, y: { z: g } })(a, b) = { x: f(a, b), y: { z: g(a, b) } }
	 */


	var applySpec = /*#__PURE__*/_curry1(function applySpec(spec) {
	  spec = map(function (v) {
	    return typeof v == 'function' ? v : applySpec(v);
	  }, spec);
	  return curryN(reduce(max, 0, pluck('length', values(spec))), function () {
	    var args = arguments;
	    return map(function (f) {
	      return apply(f, args);
	    }, spec);
	  });
	});
	module.exports = applySpec;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var keys = /*#__PURE__*/__webpack_require__(37);

	/**
	 * Returns a list of all the enumerable own properties of the supplied object.
	 * Note that the order of the output array is not guaranteed across different
	 * JS platforms.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig {k: v} -> [v]
	 * @param {Object} obj The object to extract values from
	 * @return {Array} An array of the values of the object's own properties.
	 * @see R.valuesIn, R.keys
	 * @example
	 *
	 *      R.values({a: 1, b: 2, c: 3}); //=> [1, 2, 3]
	 */


	var values = /*#__PURE__*/_curry1(function values(obj) {
	  var props = keys(obj);
	  var len = props.length;
	  var vals = [];
	  var idx = 0;
	  while (idx < len) {
	    vals[idx] = obj[props[idx]];
	    idx += 1;
	  }
	  return vals;
	});
	module.exports = values;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	* Takes a value and applies a function to it.
	*
	* This function is also known as the `thrush` combinator.
	*
	* @func
	* @memberOf R
	 * @since v0.25.0
	* @category Function
	* @sig a -> (a -> b) -> b
	* @param {*} x The value
	* @param {Function} f The function to apply
	* @return {*} The result of applying `f` to `x`
	* @example
	*
	*      var t42 = R.applyTo(42);
	*      t42(R.identity); //=> 42
	*      t42(R.add(1)); //=> 43
	*/


	var applyTo = /*#__PURE__*/_curry2(function applyTo(x, f) {
	  return f(x);
	});
	module.exports = applyTo;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Makes an ascending comparator function out of a function that returns a value
	 * that can be compared with `<` and `>`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.23.0
	 * @category Function
	 * @sig Ord b => (a -> b) -> a -> a -> Number
	 * @param {Function} fn A function of arity one that returns a value that can be compared
	 * @param {*} a The first item to be compared.
	 * @param {*} b The second item to be compared.
	 * @return {Number} `-1` if fn(a) < fn(b), `1` if fn(b) < fn(a), otherwise `0`
	 * @see R.descend
	 * @example
	 *
	 *      var byAge = R.ascend(R.prop('age'));
	 *      var people = [
	 *        // ...
	 *      ];
	 *      var peopleByYoungestFirst = R.sort(byAge, people);
	 */


	var ascend = /*#__PURE__*/_curry3(function ascend(fn, a, b) {
	  var aa = fn(a);
	  var bb = fn(b);
	  return aa < bb ? -1 : aa > bb ? 1 : 0;
	});
	module.exports = ascend;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Makes a shallow clone of an object, setting or overriding the specified
	 * property with the given value. Note that this copies and flattens prototype
	 * properties onto the new object as well. All non-primitive properties are
	 * copied by reference.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.8.0
	 * @category Object
	 * @sig String -> a -> {k: v} -> {k: v}
	 * @param {String} prop The property name to set
	 * @param {*} val The new value
	 * @param {Object} obj The object to clone
	 * @return {Object} A new object equivalent to the original except for the changed property.
	 * @see R.dissoc
	 * @example
	 *
	 *      R.assoc('c', 3, {a: 1, b: 2}); //=> {a: 1, b: 2, c: 3}
	 */


	var assoc = /*#__PURE__*/_curry3(function assoc(prop, val, obj) {
	  var result = {};
	  for (var p in obj) {
	    result[p] = obj[p];
	  }
	  result[prop] = val;
	  return result;
	});
	module.exports = assoc;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var _has = /*#__PURE__*/__webpack_require__(38);

	var _isArray = /*#__PURE__*/__webpack_require__(21);

	var _isInteger = /*#__PURE__*/__webpack_require__(59);

	var assoc = /*#__PURE__*/__webpack_require__(57);

	var isNil = /*#__PURE__*/__webpack_require__(60);

	/**
	 * Makes a shallow clone of an object, setting or overriding the nodes required
	 * to create the given path, and placing the specific value at the tail end of
	 * that path. Note that this copies and flattens prototype properties onto the
	 * new object as well. All non-primitive properties are copied by reference.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.8.0
	 * @category Object
	 * @typedefn Idx = String | Int
	 * @sig [Idx] -> a -> {a} -> {a}
	 * @param {Array} path the path to set
	 * @param {*} val The new value
	 * @param {Object} obj The object to clone
	 * @return {Object} A new object equivalent to the original except along the specified path.
	 * @see R.dissocPath
	 * @example
	 *
	 *      R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}}
	 *
	 *      // Any missing or non-object keys in path will be overridden
	 *      R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}}
	 */


	var assocPath = /*#__PURE__*/_curry3(function assocPath(path, val, obj) {
	  if (path.length === 0) {
	    return val;
	  }
	  var idx = path[0];
	  if (path.length > 1) {
	    var nextObj = !isNil(obj) && _has(idx, obj) ? obj[idx] : _isInteger(path[1]) ? [] : {};
	    val = assocPath(Array.prototype.slice.call(path, 1), val, nextObj);
	  }
	  if (_isInteger(idx) && _isArray(obj)) {
	    var arr = [].concat(obj);
	    arr[idx] = val;
	    return arr;
	  } else {
	    return assoc(idx, val, obj);
	  }
	});
	module.exports = assocPath;

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

	/**
	 * Determine if the passed argument is an integer.
	 *
	 * @private
	 * @param {*} n
	 * @category Type
	 * @return {Boolean}
	 */
	module.exports = Number.isInteger || function _isInteger(n) {
	  return n << 0 === n;
	};

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Checks if the input value is `null` or `undefined`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Type
	 * @sig * -> Boolean
	 * @param {*} x The value to test.
	 * @return {Boolean} `true` if `x` is `undefined` or `null`, otherwise `false`.
	 * @example
	 *
	 *      R.isNil(null); //=> true
	 *      R.isNil(undefined); //=> true
	 *      R.isNil(0); //=> false
	 *      R.isNil([]); //=> false
	 */


	var isNil = /*#__PURE__*/_curry1(function isNil(x) {
	  return x == null;
	});
	module.exports = isNil;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var nAry = /*#__PURE__*/__webpack_require__(62);

	/**
	 * Wraps a function of any arity (including nullary) in a function that accepts
	 * exactly 2 parameters. Any extraneous parameters will not be passed to the
	 * supplied function.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.2.0
	 * @category Function
	 * @sig (* -> c) -> (a, b -> c)
	 * @param {Function} fn The function to wrap.
	 * @return {Function} A new function wrapping `fn`. The new function is guaranteed to be of
	 *         arity 2.
	 * @see R.nAry, R.unary
	 * @example
	 *
	 *      var takesThreeArgs = function(a, b, c) {
	 *        return [a, b, c];
	 *      };
	 *      takesThreeArgs.length; //=> 3
	 *      takesThreeArgs(1, 2, 3); //=> [1, 2, 3]
	 *
	 *      var takesTwoArgs = R.binary(takesThreeArgs);
	 *      takesTwoArgs.length; //=> 2
	 *      // Only 2 arguments are passed to the wrapped function
	 *      takesTwoArgs(1, 2, 3); //=> [1, 2, undefined]
	 * @symb R.binary(f)(a, b, c) = f(a, b)
	 */


	var binary = /*#__PURE__*/_curry1(function binary(fn) {
	  return nAry(2, fn);
	});
	module.exports = binary;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Wraps a function of any arity (including nullary) in a function that accepts
	 * exactly `n` parameters. Any extraneous parameters will not be passed to the
	 * supplied function.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig Number -> (* -> a) -> (* -> a)
	 * @param {Number} n The desired arity of the new function.
	 * @param {Function} fn The function to wrap.
	 * @return {Function} A new function wrapping `fn`. The new function is guaranteed to be of
	 *         arity `n`.
	 * @see R.binary, R.unary
	 * @example
	 *
	 *      var takesTwoArgs = (a, b) => [a, b];
	 *
	 *      takesTwoArgs.length; //=> 2
	 *      takesTwoArgs(1, 2); //=> [1, 2]
	 *
	 *      var takesOneArg = R.nAry(1, takesTwoArgs);
	 *      takesOneArg.length; //=> 1
	 *      // Only `n` arguments are passed to the wrapped function
	 *      takesOneArg(1, 2); //=> [1, undefined]
	 * @symb R.nAry(0, f)(a, b) = f()
	 * @symb R.nAry(1, f)(a, b) = f(a)
	 * @symb R.nAry(2, f)(a, b) = f(a, b)
	 */


	var nAry = /*#__PURE__*/_curry2(function nAry(n, fn) {
	  switch (n) {
	    case 0:
	      return function () {
	        return fn.call(this);
	      };
	    case 1:
	      return function (a0) {
	        return fn.call(this, a0);
	      };
	    case 2:
	      return function (a0, a1) {
	        return fn.call(this, a0, a1);
	      };
	    case 3:
	      return function (a0, a1, a2) {
	        return fn.call(this, a0, a1, a2);
	      };
	    case 4:
	      return function (a0, a1, a2, a3) {
	        return fn.call(this, a0, a1, a2, a3);
	      };
	    case 5:
	      return function (a0, a1, a2, a3, a4) {
	        return fn.call(this, a0, a1, a2, a3, a4);
	      };
	    case 6:
	      return function (a0, a1, a2, a3, a4, a5) {
	        return fn.call(this, a0, a1, a2, a3, a4, a5);
	      };
	    case 7:
	      return function (a0, a1, a2, a3, a4, a5, a6) {
	        return fn.call(this, a0, a1, a2, a3, a4, a5, a6);
	      };
	    case 8:
	      return function (a0, a1, a2, a3, a4, a5, a6, a7) {
	        return fn.call(this, a0, a1, a2, a3, a4, a5, a6, a7);
	      };
	    case 9:
	      return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {
	        return fn.call(this, a0, a1, a2, a3, a4, a5, a6, a7, a8);
	      };
	    case 10:
	      return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {
	        return fn.call(this, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
	      };
	    default:
	      throw new Error('First argument to nAry must be a non-negative integer no greater than ten');
	  }
	});
	module.exports = nAry;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isFunction = /*#__PURE__*/__webpack_require__(64);

	var and = /*#__PURE__*/__webpack_require__(43);

	var lift = /*#__PURE__*/__webpack_require__(65);

	/**
	 * A function which calls the two provided functions and returns the `&&`
	 * of the results.
	 * It returns the result of the first function if it is false-y and the result
	 * of the second function otherwise. Note that this is short-circuited,
	 * meaning that the second function will not be invoked if the first returns a
	 * false-y value.
	 *
	 * In addition to functions, `R.both` also accepts any fantasy-land compatible
	 * applicative functor.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.12.0
	 * @category Logic
	 * @sig (*... -> Boolean) -> (*... -> Boolean) -> (*... -> Boolean)
	 * @param {Function} f A predicate
	 * @param {Function} g Another predicate
	 * @return {Function} a function that applies its arguments to `f` and `g` and `&&`s their outputs together.
	 * @see R.and
	 * @example
	 *
	 *      var gt10 = R.gt(R.__, 10)
	 *      var lt20 = R.lt(R.__, 20)
	 *      var f = R.both(gt10, lt20);
	 *      f(15); //=> true
	 *      f(30); //=> false
	 */


	var both = /*#__PURE__*/_curry2(function both(f, g) {
	  return _isFunction(f) ? function _both() {
	    return f.apply(this, arguments) && g.apply(this, arguments);
	  } : lift(and)(f, g);
	});
	module.exports = both;

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

	function _isFunction(x) {
	  return Object.prototype.toString.call(x) === '[object Function]';
	}
	module.exports = _isFunction;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var liftN = /*#__PURE__*/__webpack_require__(66);

	/**
	 * "lifts" a function of arity > 1 so that it may "map over" a list, Function or other
	 * object that satisfies the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.7.0
	 * @category Function
	 * @sig (*... -> *) -> ([*]... -> [*])
	 * @param {Function} fn The function to lift into higher context
	 * @return {Function} The lifted function.
	 * @see R.liftN
	 * @example
	 *
	 *      var madd3 = R.lift((a, b, c) => a + b + c);
	 *
	 *      madd3([1,2,3], [1,2,3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7]
	 *
	 *      var madd5 = R.lift((a, b, c, d, e) => a + b + c + d + e);
	 *
	 *      madd5([1,2], [3], [4, 5], [6], [7, 8]); //=> [21, 22, 22, 23, 22, 23, 23, 24]
	 */


	var lift = /*#__PURE__*/_curry1(function lift(fn) {
	  return liftN(fn.length, fn);
	});
	module.exports = lift;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var ap = /*#__PURE__*/__webpack_require__(47);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	var map = /*#__PURE__*/__webpack_require__(29);

	/**
	 * "lifts" a function to be the specified arity, so that it may "map over" that
	 * many lists, Functions or other objects that satisfy the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.7.0
	 * @category Function
	 * @sig Number -> (*... -> *) -> ([*]... -> [*])
	 * @param {Function} fn The function to lift into higher context
	 * @return {Function} The lifted function.
	 * @see R.lift, R.ap
	 * @example
	 *
	 *      var madd3 = R.liftN(3, (...args) => R.sum(args));
	 *      madd3([1,2,3], [1,2,3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7]
	 */


	var liftN = /*#__PURE__*/_curry2(function liftN(arity, fn) {
	  var lifted = curryN(arity, fn);
	  return curryN(arity, function () {
	    return _reduce(ap, map(lifted, arguments[0]), Array.prototype.slice.call(arguments, 1));
	  });
	});
	module.exports = liftN;

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

	var curry = /*#__PURE__*/__webpack_require__(68);

	/**
	 * Returns the result of calling its first argument with the remaining
	 * arguments. This is occasionally useful as a converging function for
	 * [`R.converge`](#converge): the first branch can produce a function while the
	 * remaining branches produce values to be passed to that function as its
	 * arguments.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Function
	 * @sig (*... -> a),*... -> a
	 * @param {Function} fn The function to apply to the remaining arguments.
	 * @param {...*} args Any number of positional arguments.
	 * @return {*}
	 * @see R.apply
	 * @example
	 *
	 *      R.call(R.add, 1, 2); //=> 3
	 *
	 *      var indentN = R.pipe(R.repeat(' '),
	 *                           R.join(''),
	 *                           R.replace(/^(?!$)/gm));
	 *
	 *      var format = R.converge(R.call, [
	 *                                  R.pipe(R.prop('indent'), indentN),
	 *                                  R.prop('value')
	 *                              ]);
	 *
	 *      format({indent: 2, value: 'foo\nbar\nbaz\n'}); //=> '  foo\n  bar\n  baz\n'
	 * @symb R.call(f, a, b) = f(a, b)
	 */


	var call = /*#__PURE__*/curry(function call(fn) {
	  return fn.apply(this, Array.prototype.slice.call(arguments, 1));
	});
	module.exports = call;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	/**
	 * Returns a curried equivalent of the provided function. The curried function
	 * has two unusual capabilities. First, its arguments needn't be provided one
	 * at a time. If `f` is a ternary function and `g` is `R.curry(f)`, the
	 * following are equivalent:
	 *
	 *   - `g(1)(2)(3)`
	 *   - `g(1)(2, 3)`
	 *   - `g(1, 2)(3)`
	 *   - `g(1, 2, 3)`
	 *
	 * Secondly, the special placeholder value [`R.__`](#__) may be used to specify
	 * "gaps", allowing partial application of any combination of arguments,
	 * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),
	 * the following are equivalent:
	 *
	 *   - `g(1, 2, 3)`
	 *   - `g(_, 2, 3)(1)`
	 *   - `g(_, _, 3)(1)(2)`
	 *   - `g(_, _, 3)(1, 2)`
	 *   - `g(_, 2)(1)(3)`
	 *   - `g(_, 2)(1, 3)`
	 *   - `g(_, 2)(_, 3)(1)`
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig (* -> a) -> (* -> a)
	 * @param {Function} fn The function to curry.
	 * @return {Function} A new, curried function.
	 * @see R.curryN
	 * @example
	 *
	 *      var addFourNumbers = (a, b, c, d) => a + b + c + d;
	 *
	 *      var curriedAddFourNumbers = R.curry(addFourNumbers);
	 *      var f = curriedAddFourNumbers(1, 2);
	 *      var g = f(3);
	 *      g(4); //=> 10
	 */


	var curry = /*#__PURE__*/_curry1(function curry(fn) {
	  return curryN(fn.length, fn);
	});
	module.exports = curry;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _makeFlat = /*#__PURE__*/__webpack_require__(70);

	var _xchain = /*#__PURE__*/__webpack_require__(71);

	var map = /*#__PURE__*/__webpack_require__(29);

	/**
	 * `chain` maps a function over a list and concatenates the results. `chain`
	 * is also known as `flatMap` in some libraries
	 *
	 * Dispatches to the `chain` method of the second argument, if present,
	 * according to the [FantasyLand Chain spec](https://github.com/fantasyland/fantasy-land#chain).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category List
	 * @sig Chain m => (a -> m b) -> m a -> m b
	 * @param {Function} fn The function to map with
	 * @param {Array} list The list to map over
	 * @return {Array} The result of flat-mapping `list` with `fn`
	 * @example
	 *
	 *      var duplicate = n => [n, n];
	 *      R.chain(duplicate, [1, 2, 3]); //=> [1, 1, 2, 2, 3, 3]
	 *
	 *      R.chain(R.append, R.head)([1, 2, 3]); //=> [1, 2, 3, 1]
	 */


	var chain = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['fantasy-land/chain', 'chain'], _xchain, function chain(fn, monad) {
	  if (typeof monad === 'function') {
	    return function (x) {
	      return fn(monad(x))(x);
	    };
	  }
	  return _makeFlat(false)(map(fn, monad));
	}));
	module.exports = chain;

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

	var _isArrayLike = /*#__PURE__*/__webpack_require__(32);

	/**
	 * `_makeFlat` is a helper function that returns a one-level or fully recursive
	 * function based on the flag passed in.
	 *
	 * @private
	 */


	function _makeFlat(recursive) {
	  return function flatt(list) {
	    var value, jlen, j;
	    var result = [];
	    var idx = 0;
	    var ilen = list.length;

	    while (idx < ilen) {
	      if (_isArrayLike(list[idx])) {
	        value = recursive ? flatt(list[idx]) : list[idx];
	        j = 0;
	        jlen = value.length;
	        while (j < jlen) {
	          result[result.length] = value[j];
	          j += 1;
	        }
	      } else {
	        result[result.length] = list[idx];
	      }
	      idx += 1;
	    }
	    return result;
	  };
	}
	module.exports = _makeFlat;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _flatCat = /*#__PURE__*/__webpack_require__(72);

	var map = /*#__PURE__*/__webpack_require__(29);

	var _xchain = /*#__PURE__*/_curry2(function _xchain(f, xf) {
	  return map(f, _flatCat(xf));
	});
	module.exports = _xchain;

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

	var _forceReduced = /*#__PURE__*/__webpack_require__(73);

	var _isArrayLike = /*#__PURE__*/__webpack_require__(32);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var preservingReduced = function (xf) {
	  return {
	    '@@transducer/init': _xfBase.init,
	    '@@transducer/result': function (result) {
	      return xf['@@transducer/result'](result);
	    },
	    '@@transducer/step': function (result, input) {
	      var ret = xf['@@transducer/step'](result, input);
	      return ret['@@transducer/reduced'] ? _forceReduced(ret) : ret;
	    }
	  };
	};

	var _flatCat = function _xcat(xf) {
	  var rxf = preservingReduced(xf);
	  return {
	    '@@transducer/init': _xfBase.init,
	    '@@transducer/result': function (result) {
	      return rxf['@@transducer/result'](result);
	    },
	    '@@transducer/step': function (result, input) {
	      return !_isArrayLike(input) ? _reduce(rxf, result, [input]) : _reduce(rxf, result, input);
	    }
	  };
	};

	module.exports = _flatCat;

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

	function _forceReduced(x) {
	  return {
	    '@@transducer/value': x,
	    '@@transducer/reduced': true
	  };
	}
	module.exports = _forceReduced;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Restricts a number to be within a range.
	 *
	 * Also works for other ordered types such as Strings and Dates.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.20.0
	 * @category Relation
	 * @sig Ord a => a -> a -> a -> a
	 * @param {Number} minimum The lower limit of the clamp (inclusive)
	 * @param {Number} maximum The upper limit of the clamp (inclusive)
	 * @param {Number} value Value to be clamped
	 * @return {Number} Returns `minimum` when `val < minimum`, `maximum` when `val > maximum`, returns `val` otherwise
	 * @example
	 *
	 *      R.clamp(1, 10, -5) // => 1
	 *      R.clamp(1, 10, 15) // => 10
	 *      R.clamp(1, 10, 4)  // => 4
	 */


	var clamp = /*#__PURE__*/_curry3(function clamp(min, max, value) {
	  if (min > max) {
	    throw new Error('min must not be greater than max in clamp(min, max, value)');
	  }
	  return value < min ? min : value > max ? max : value;
	});
	module.exports = clamp;

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

	var _clone = /*#__PURE__*/__webpack_require__(76);

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Creates a deep copy of the value which may contain (nested) `Array`s and
	 * `Object`s, `Number`s, `String`s, `Boolean`s and `Date`s. `Function`s are
	 * assigned by reference rather than copied
	 *
	 * Dispatches to a `clone` method if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig {*} -> {*}
	 * @param {*} value The object or array to clone
	 * @return {*} A deeply cloned copy of `val`
	 * @example
	 *
	 *      var objects = [{}, {}, {}];
	 *      var objectsClone = R.clone(objects);
	 *      objects === objectsClone; //=> false
	 *      objects[0] === objectsClone[0]; //=> false
	 */


	var clone = /*#__PURE__*/_curry1(function clone(value) {
	  return value != null && typeof value.clone === 'function' ? value.clone() : _clone(value, [], [], true);
	});
	module.exports = clone;

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

	var _cloneRegExp = /*#__PURE__*/__webpack_require__(77);

	var type = /*#__PURE__*/__webpack_require__(78);

	/**
	 * Copies an object.
	 *
	 * @private
	 * @param {*} value The value to be copied
	 * @param {Array} refFrom Array containing the source references
	 * @param {Array} refTo Array containing the copied source references
	 * @param {Boolean} deep Whether or not to perform deep cloning.
	 * @return {*} The copied value.
	 */


	function _clone(value, refFrom, refTo, deep) {
	  var copy = function copy(copiedValue) {
	    var len = refFrom.length;
	    var idx = 0;
	    while (idx < len) {
	      if (value === refFrom[idx]) {
	        return refTo[idx];
	      }
	      idx += 1;
	    }
	    refFrom[idx + 1] = value;
	    refTo[idx + 1] = copiedValue;
	    for (var key in value) {
	      copiedValue[key] = deep ? _clone(value[key], refFrom, refTo, true) : value[key];
	    }
	    return copiedValue;
	  };
	  switch (type(value)) {
	    case 'Object':
	      return copy({});
	    case 'Array':
	      return copy([]);
	    case 'Date':
	      return new Date(value.valueOf());
	    case 'RegExp':
	      return _cloneRegExp(value);
	    default:
	      return value;
	  }
	}
	module.exports = _clone;

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

	function _cloneRegExp(pattern) {
	                                  return new RegExp(pattern.source, (pattern.global ? 'g' : '') + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '') + (pattern.sticky ? 'y' : '') + (pattern.unicode ? 'u' : ''));
	}
	module.exports = _cloneRegExp;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Gives a single-word string description of the (native) type of a value,
	 * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not
	 * attempt to distinguish user Object types any further, reporting them all as
	 * 'Object'.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.8.0
	 * @category Type
	 * @sig (* -> {*}) -> String
	 * @param {*} val The value to test
	 * @return {String}
	 * @example
	 *
	 *      R.type({}); //=> "Object"
	 *      R.type(1); //=> "Number"
	 *      R.type(false); //=> "Boolean"
	 *      R.type('s'); //=> "String"
	 *      R.type(null); //=> "Null"
	 *      R.type([]); //=> "Array"
	 *      R.type(/[A-z]/); //=> "RegExp"
	 *      R.type(() => {}); //=> "Function"
	 *      R.type(undefined); //=> "Undefined"
	 */


	var type = /*#__PURE__*/_curry1(function type(val) {
	  return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1);
	});
	module.exports = type;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Makes a comparator function out of a function that reports whether the first
	 * element is less than the second.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig ((a, b) -> Boolean) -> ((a, b) -> Number)
	 * @param {Function} pred A predicate function of arity two which will return `true` if the first argument
	 * is less than the second, `false` otherwise
	 * @return {Function} A Function :: a -> b -> Int that returns `-1` if a < b, `1` if b < a, otherwise `0`
	 * @example
	 *
	 *      var byAge = R.comparator((a, b) => a.age < b.age);
	 *      var people = [
	 *        // ...
	 *      ];
	 *      var peopleByIncreasingAge = R.sort(byAge, people);
	 */


	var comparator = /*#__PURE__*/_curry1(function comparator(pred) {
	  return function (a, b) {
	    return pred(a, b) ? -1 : pred(b, a) ? 1 : 0;
	  };
	});
	module.exports = comparator;

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

	var lift = /*#__PURE__*/__webpack_require__(65);

	var not = /*#__PURE__*/__webpack_require__(81);

	/**
	 * Takes a function `f` and returns a function `g` such that if called with the same arguments
	 * when `f` returns a "truthy" value, `g` returns `false` and when `f` returns a "falsy" value `g` returns `true`.
	 *
	 * `R.complement` may be applied to any functor
	 *
	 * @func
	 * @memberOf R
	 * @since v0.12.0
	 * @category Logic
	 * @sig (*... -> *) -> (*... -> Boolean)
	 * @param {Function} f
	 * @return {Function}
	 * @see R.not
	 * @example
	 *
	 *      var isNotNil = R.complement(R.isNil);
	 *      isNil(null); //=> true
	 *      isNotNil(null); //=> false
	 *      isNil(7); //=> false
	 *      isNotNil(7); //=> true
	 */


	var complement = /*#__PURE__*/lift(not);
	module.exports = complement;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * A function that returns the `!` of its argument. It will return `true` when
	 * passed false-y value, and `false` when passed a truth-y one.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Logic
	 * @sig * -> Boolean
	 * @param {*} a any value
	 * @return {Boolean} the logical inverse of passed argument.
	 * @see R.complement
	 * @example
	 *
	 *      R.not(true); //=> false
	 *      R.not(false); //=> true
	 *      R.not(0); //=> true
	 *      R.not(1); //=> false
	 */


	var not = /*#__PURE__*/_curry1(function not(a) {
	  return !a;
	});
	module.exports = not;

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

	var pipe = /*#__PURE__*/__webpack_require__(83);

	var reverse = /*#__PURE__*/__webpack_require__(88);

	/**
	 * Performs right-to-left function composition. The rightmost function may have
	 * any arity; the remaining functions must be unary.
	 *
	 * **Note:** The result of compose is not automatically curried.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig ((y -> z), (x -> y), ..., (o -> p), ((a, b, ..., n) -> o)) -> ((a, b, ..., n) -> z)
	 * @param {...Function} ...functions The functions to compose
	 * @return {Function}
	 * @see R.pipe
	 * @example
	 *
	 *      var classyGreeting = (firstName, lastName) => "The name's " + lastName + ", " + firstName + " " + lastName
	 *      var yellGreeting = R.compose(R.toUpper, classyGreeting);
	 *      yellGreeting('James', 'Bond'); //=> "THE NAME'S BOND, JAMES BOND"
	 *
	 *      R.compose(Math.abs, R.add(1), R.multiply(2))(-4) //=> 7
	 *
	 * @symb R.compose(f, g, h)(a, b) = f(g(h(a, b)))
	 */


	function compose() {
	  if (arguments.length === 0) {
	    throw new Error('compose requires at least one argument');
	  }
	  return pipe.apply(this, reverse(arguments));
	}
	module.exports = compose;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _pipe = /*#__PURE__*/__webpack_require__(84);

	var reduce = /*#__PURE__*/__webpack_require__(42);

	var tail = /*#__PURE__*/__webpack_require__(85);

	/**
	 * Performs left-to-right function composition. The leftmost function may have
	 * any arity; the remaining functions must be unary.
	 *
	 * In some libraries this function is named `sequence`.
	 *
	 * **Note:** The result of pipe is not automatically curried.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig (((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)) -> ((a, b, ..., n) -> z)
	 * @param {...Function} functions
	 * @return {Function}
	 * @see R.compose
	 * @example
	 *
	 *      var f = R.pipe(Math.pow, R.negate, R.inc);
	 *
	 *      f(3, 4); // -(3^4) + 1
	 * @symb R.pipe(f, g, h)(a, b) = h(g(f(a, b)))
	 */


	function pipe() {
	  if (arguments.length === 0) {
	    throw new Error('pipe requires at least one argument');
	  }
	  return _arity(arguments[0].length, reduce(_pipe, arguments[0], tail(arguments)));
	}
	module.exports = pipe;

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

	function _pipe(f, g) {
	  return function () {
	    return g.call(this, f.apply(this, arguments));
	  };
	}
	module.exports = _pipe;

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

	var _checkForMethod = /*#__PURE__*/__webpack_require__(86);

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var slice = /*#__PURE__*/__webpack_require__(87);

	/**
	 * Returns all but the first element of the given list or string (or object
	 * with a `tail` method).
	 *
	 * Dispatches to the `slice` method of the first argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig [a] -> [a]
	 * @sig String -> String
	 * @param {*} list
	 * @return {*}
	 * @see R.head, R.init, R.last
	 * @example
	 *
	 *      R.tail([1, 2, 3]);  //=> [2, 3]
	 *      R.tail([1, 2]);     //=> [2]
	 *      R.tail([1]);        //=> []
	 *      R.tail([]);         //=> []
	 *
	 *      R.tail('abc');  //=> 'bc'
	 *      R.tail('ab');   //=> 'b'
	 *      R.tail('a');    //=> ''
	 *      R.tail('');     //=> ''
	 */


	var tail = /*#__PURE__*/_curry1( /*#__PURE__*/_checkForMethod('tail', /*#__PURE__*/slice(1, Infinity)));
	module.exports = tail;

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

	var _isArray = /*#__PURE__*/__webpack_require__(21);

	/**
	 * This checks whether a function has a [methodname] function. If it isn't an
	 * array it will execute that function otherwise it will default to the ramda
	 * implementation.
	 *
	 * @private
	 * @param {Function} fn ramda implemtation
	 * @param {String} methodname property to check for a custom implementation
	 * @return {Object} Whatever the return value of the method is.
	 */


	function _checkForMethod(methodname, fn) {
	  return function () {
	    var length = arguments.length;
	    if (length === 0) {
	      return fn();
	    }
	    var obj = arguments[length - 1];
	    return _isArray(obj) || typeof obj[methodname] !== 'function' ? fn.apply(this, arguments) : obj[methodname].apply(obj, Array.prototype.slice.call(arguments, 0, length - 1));
	  };
	}
	module.exports = _checkForMethod;

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

	var _checkForMethod = /*#__PURE__*/__webpack_require__(86);

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Returns the elements of the given list or string (or object with a `slice`
	 * method) from `fromIndex` (inclusive) to `toIndex` (exclusive).
	 *
	 * Dispatches to the `slice` method of the third argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.4
	 * @category List
	 * @sig Number -> Number -> [a] -> [a]
	 * @sig Number -> Number -> String -> String
	 * @param {Number} fromIndex The start index (inclusive).
	 * @param {Number} toIndex The end index (exclusive).
	 * @param {*} list
	 * @return {*}
	 * @example
	 *
	 *      R.slice(1, 3, ['a', 'b', 'c', 'd']);        //=> ['b', 'c']
	 *      R.slice(1, Infinity, ['a', 'b', 'c', 'd']); //=> ['b', 'c', 'd']
	 *      R.slice(0, -1, ['a', 'b', 'c', 'd']);       //=> ['a', 'b', 'c']
	 *      R.slice(-3, -1, ['a', 'b', 'c', 'd']);      //=> ['b', 'c']
	 *      R.slice(0, 3, 'ramda');                     //=> 'ram'
	 */


	var slice = /*#__PURE__*/_curry3( /*#__PURE__*/_checkForMethod('slice', function slice(fromIndex, toIndex, list) {
	  return Array.prototype.slice.call(list, fromIndex, toIndex);
	}));
	module.exports = slice;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _isString = /*#__PURE__*/__webpack_require__(33);

	/**
	 * Returns a new list or string with the elements or characters in reverse
	 * order.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig [a] -> [a]
	 * @sig String -> String
	 * @param {Array|String} list
	 * @return {Array|String}
	 * @example
	 *
	 *      R.reverse([1, 2, 3]);  //=> [3, 2, 1]
	 *      R.reverse([1, 2]);     //=> [2, 1]
	 *      R.reverse([1]);        //=> [1]
	 *      R.reverse([]);         //=> []
	 *
	 *      R.reverse('abc');      //=> 'cba'
	 *      R.reverse('ab');       //=> 'ba'
	 *      R.reverse('a');        //=> 'a'
	 *      R.reverse('');         //=> ''
	 */


	var reverse = /*#__PURE__*/_curry1(function reverse(list) {
	  return _isString(list) ? list.split('').reverse().join('') : Array.prototype.slice.call(list, 0).reverse();
	});
	module.exports = reverse;

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

	var chain = /*#__PURE__*/__webpack_require__(69);

	var compose = /*#__PURE__*/__webpack_require__(82);

	var map = /*#__PURE__*/__webpack_require__(29);

	/**
	 * Returns the right-to-left Kleisli composition of the provided functions,
	 * each of which must return a value of a type supported by [`chain`](#chain).
	 *
	 * `R.composeK(h, g, f)` is equivalent to `R.compose(R.chain(h), R.chain(g), f)`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category Function
	 * @sig Chain m => ((y -> m z), (x -> m y), ..., (a -> m b)) -> (a -> m z)
	 * @param {...Function} ...functions The functions to compose
	 * @return {Function}
	 * @see R.pipeK
	 * @example
	 *
	 *       //  get :: String -> Object -> Maybe *
	 *       var get = R.curry((propName, obj) => Maybe(obj[propName]))
	 *
	 *       //  getStateCode :: Maybe String -> Maybe String
	 *       var getStateCode = R.composeK(
	 *         R.compose(Maybe.of, R.toUpper),
	 *         get('state'),
	 *         get('address'),
	 *         get('user'),
	 *       );
	 *       getStateCode({"user":{"address":{"state":"ny"}}}); //=> Maybe.Just("NY")
	 *       getStateCode({}); //=> Maybe.Nothing()
	 * @symb R.composeK(f, g, h)(a) = R.chain(f, R.chain(g, h(a)))
	 */


	function composeK() {
	  if (arguments.length === 0) {
	    throw new Error('composeK requires at least one argument');
	  }
	  var init = Array.prototype.slice.call(arguments);
	  var last = init.pop();
	  return compose(compose.apply(this, map(chain, init)), last);
	}
	module.exports = composeK;

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

	var pipeP = /*#__PURE__*/__webpack_require__(91);

	var reverse = /*#__PURE__*/__webpack_require__(88);

	/**
	 * Performs right-to-left composition of one or more Promise-returning
	 * functions. The rightmost function may have any arity; the remaining
	 * functions must be unary.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category Function
	 * @sig ((y -> Promise z), (x -> Promise y), ..., (a -> Promise b)) -> (a -> Promise z)
	 * @param {...Function} functions The functions to compose
	 * @return {Function}
	 * @see R.pipeP
	 * @example
	 *
	 *      var db = {
	 *        users: {
	 *          JOE: {
	 *            name: 'Joe',
	 *            followers: ['STEVE', 'SUZY']
	 *          }
	 *        }
	 *      }
	 *
	 *      // We'll pretend to do a db lookup which returns a promise
	 *      var lookupUser = (userId) => Promise.resolve(db.users[userId])
	 *      var lookupFollowers = (user) => Promise.resolve(user.followers)
	 *      lookupUser('JOE').then(lookupFollowers)
	 *
	 *      //  followersForUser :: String -> Promise [UserId]
	 *      var followersForUser = R.composeP(lookupFollowers, lookupUser);
	 *      followersForUser('JOE').then(followers => console.log('Followers:', followers))
	 *      // Followers: ["STEVE","SUZY"]
	 */


	function composeP() {
	  if (arguments.length === 0) {
	    throw new Error('composeP requires at least one argument');
	  }
	  return pipeP.apply(this, reverse(arguments));
	}
	module.exports = composeP;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _pipeP = /*#__PURE__*/__webpack_require__(92);

	var reduce = /*#__PURE__*/__webpack_require__(42);

	var tail = /*#__PURE__*/__webpack_require__(85);

	/**
	 * Performs left-to-right composition of one or more Promise-returning
	 * functions. The leftmost function may have any arity; the remaining functions
	 * must be unary.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category Function
	 * @sig ((a -> Promise b), (b -> Promise c), ..., (y -> Promise z)) -> (a -> Promise z)
	 * @param {...Function} functions
	 * @return {Function}
	 * @see R.composeP
	 * @example
	 *
	 *      //  followersForUser :: String -> Promise [User]
	 *      var followersForUser = R.pipeP(db.getUserById, db.getFollowers);
	 */


	function pipeP() {
	  if (arguments.length === 0) {
	    throw new Error('pipeP requires at least one argument');
	  }
	  return _arity(arguments[0].length, reduce(_pipeP, arguments[0], tail(arguments)));
	}
	module.exports = pipeP;

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

	function _pipeP(f, g) {
	  return function () {
	    var ctx = this;
	    return f.apply(ctx, arguments).then(function (x) {
	      return g.call(ctx, x);
	    });
	  };
	}
	module.exports = _pipeP;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isArray = /*#__PURE__*/__webpack_require__(21);

	var _isFunction = /*#__PURE__*/__webpack_require__(64);

	var _isString = /*#__PURE__*/__webpack_require__(33);

	var toString = /*#__PURE__*/__webpack_require__(94);

	/**
	 * Returns the result of concatenating the given lists or strings.
	 *
	 * Note: `R.concat` expects both arguments to be of the same type,
	 * unlike the native `Array.prototype.concat` method. It will throw
	 * an error if you `concat` an Array with a non-Array value.
	 *
	 * Dispatches to the `concat` method of the first argument, if present.
	 * Can also concatenate two members of a [fantasy-land
	 * compatible semigroup](https://github.com/fantasyland/fantasy-land#semigroup).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig [a] -> [a] -> [a]
	 * @sig String -> String -> String
	 * @param {Array|String} firstList The first list
	 * @param {Array|String} secondList The second list
	 * @return {Array|String} A list consisting of the elements of `firstList` followed by the elements of
	 * `secondList`.
	 *
	 * @example
	 *
	 *      R.concat('ABC', 'DEF'); // 'ABCDEF'
	 *      R.concat([4, 5, 6], [1, 2, 3]); //=> [4, 5, 6, 1, 2, 3]
	 *      R.concat([], []); //=> []
	 */


	var concat = /*#__PURE__*/_curry2(function concat(a, b) {
	  if (_isArray(a)) {
	    if (_isArray(b)) {
	      return a.concat(b);
	    }
	    throw new TypeError(toString(b) + ' is not an array');
	  }
	  if (_isString(a)) {
	    if (_isString(b)) {
	      return a + b;
	    }
	    throw new TypeError(toString(b) + ' is not a string');
	  }
	  if (a != null && _isFunction(a['fantasy-land/concat'])) {
	    return a['fantasy-land/concat'](b);
	  }
	  if (a != null && _isFunction(a.concat)) {
	    return a.concat(b);
	  }
	  throw new TypeError(toString(a) + ' does not have a method named "concat" or "fantasy-land/concat"');
	});
	module.exports = concat;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _toString = /*#__PURE__*/__webpack_require__(95);

	/**
	 * Returns the string representation of the given value. `eval`'ing the output
	 * should result in a value equivalent to the input value. Many of the built-in
	 * `toString` methods do not satisfy this requirement.
	 *
	 * If the given value is an `[object Object]` with a `toString` method other
	 * than `Object.prototype.toString`, this method is invoked with no arguments
	 * to produce the return value. This means user-defined constructor functions
	 * can provide a suitable `toString` method. For example:
	 *
	 *     function Point(x, y) {
	 *       this.x = x;
	 *       this.y = y;
	 *     }
	 *
	 *     Point.prototype.toString = function() {
	 *       return 'new Point(' + this.x + ', ' + this.y + ')';
	 *     };
	 *
	 *     R.toString(new Point(1, 2)); //=> 'new Point(1, 2)'
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category String
	 * @sig * -> String
	 * @param {*} val
	 * @return {String}
	 * @example
	 *
	 *      R.toString(42); //=> '42'
	 *      R.toString('abc'); //=> '"abc"'
	 *      R.toString([1, 2, 3]); //=> '[1, 2, 3]'
	 *      R.toString({foo: 1, bar: 2, baz: 3}); //=> '{"bar": 2, "baz": 3, "foo": 1}'
	 *      R.toString(new Date('2001-02-03T04:05:06Z')); //=> 'new Date("2001-02-03T04:05:06.000Z")'
	 */


	var toString = /*#__PURE__*/_curry1(function toString(val) {
	  return _toString(val, []);
	});
	module.exports = toString;

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

	var _contains = /*#__PURE__*/__webpack_require__(96);

	var _map = /*#__PURE__*/__webpack_require__(30);

	var _quote = /*#__PURE__*/__webpack_require__(104);

	var _toISOString = /*#__PURE__*/__webpack_require__(105);

	var keys = /*#__PURE__*/__webpack_require__(37);

	var reject = /*#__PURE__*/__webpack_require__(106);

	function _toString(x, seen) {
	  var recur = function recur(y) {
	    var xs = seen.concat([x]);
	    return _contains(y, xs) ? '<Circular>' : _toString(y, xs);
	  };

	  //  mapPairs :: (Object, [String]) -> [String]
	  var mapPairs = function (obj, keys) {
	    return _map(function (k) {
	      return _quote(k) + ': ' + recur(obj[k]);
	    }, keys.slice().sort());
	  };

	  switch (Object.prototype.toString.call(x)) {
	    case '[object Arguments]':
	      return '(function() { return arguments; }(' + _map(recur, x).join(', ') + '))';
	    case '[object Array]':
	      return '[' + _map(recur, x).concat(mapPairs(x, reject(function (k) {
	        return (/^\d+$/.test(k)
	        );
	      }, keys(x)))).join(', ') + ']';
	    case '[object Boolean]':
	      return typeof x === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString();
	    case '[object Date]':
	      return 'new Date(' + (isNaN(x.valueOf()) ? recur(NaN) : _quote(_toISOString(x))) + ')';
	    case '[object Null]':
	      return 'null';
	    case '[object Number]':
	      return typeof x === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10);
	    case '[object String]':
	      return typeof x === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x);
	    case '[object Undefined]':
	      return 'undefined';
	    default:
	      if (typeof x.toString === 'function') {
	        var repr = x.toString();
	        if (repr !== '[object Object]') {
	          return repr;
	        }
	      }
	      return '{' + mapPairs(x, keys(x)).join(', ') + '}';
	  }
	}
	module.exports = _toString;

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

	var _indexOf = /*#__PURE__*/__webpack_require__(97);

	function _contains(a, list) {
	  return _indexOf(list, a, 0) >= 0;
	}
	module.exports = _contains;

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

	var equals = /*#__PURE__*/__webpack_require__(98);

	function _indexOf(list, a, idx) {
	  var inf, item;
	  // Array.prototype.indexOf doesn't exist below IE9
	  if (typeof list.indexOf === 'function') {
	    switch (typeof a) {
	      case 'number':
	        if (a === 0) {
	          // manually crawl the list to distinguish between +0 and -0
	          inf = 1 / a;
	          while (idx < list.length) {
	            item = list[idx];
	            if (item === 0 && 1 / item === inf) {
	              return idx;
	            }
	            idx += 1;
	          }
	          return -1;
	        } else if (a !== a) {
	          // NaN
	          while (idx < list.length) {
	            item = list[idx];
	            if (typeof item === 'number' && item !== item) {
	              return idx;
	            }
	            idx += 1;
	          }
	          return -1;
	        }
	        // non-zero numbers can utilise Set
	        return list.indexOf(a, idx);

	      // all these types can utilise Set
	      case 'string':
	      case 'boolean':
	      case 'function':
	      case 'undefined':
	        return list.indexOf(a, idx);

	      case 'object':
	        if (a === null) {
	          // null can utilise Set
	          return list.indexOf(a, idx);
	        }
	    }
	  }
	  // anything else not covered above, defer to R.equals
	  while (idx < list.length) {
	    if (equals(list[idx], a)) {
	      return idx;
	    }
	    idx += 1;
	  }
	  return -1;
	}
	module.exports = _indexOf;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _equals = /*#__PURE__*/__webpack_require__(99);

	/**
	 * Returns `true` if its arguments are equivalent, `false` otherwise. Handles
	 * cyclical data structures.
	 *
	 * Dispatches symmetrically to the `equals` methods of both arguments, if
	 * present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.15.0
	 * @category Relation
	 * @sig a -> b -> Boolean
	 * @param {*} a
	 * @param {*} b
	 * @return {Boolean}
	 * @example
	 *
	 *      R.equals(1, 1); //=> true
	 *      R.equals(1, '1'); //=> false
	 *      R.equals([1, 2, 3], [1, 2, 3]); //=> true
	 *
	 *      var a = {}; a.v = a;
	 *      var b = {}; b.v = b;
	 *      R.equals(a, b); //=> true
	 */


	var equals = /*#__PURE__*/_curry2(function equals(a, b) {
	  return _equals(a, b, [], []);
	});
	module.exports = equals;

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

	var _arrayFromIterator = /*#__PURE__*/__webpack_require__(100);

	var _containsWith = /*#__PURE__*/__webpack_require__(101);

	var _functionName = /*#__PURE__*/__webpack_require__(102);

	var _has = /*#__PURE__*/__webpack_require__(38);

	var identical = /*#__PURE__*/__webpack_require__(103);

	var keys = /*#__PURE__*/__webpack_require__(37);

	var type = /*#__PURE__*/__webpack_require__(78);

	/**
	 * private _uniqContentEquals function.
	 * That function is checking equality of 2 iterator contents with 2 assumptions
	 * - iterators lengths are the same
	 * - iterators values are unique
	 *
	 * false-positive result will be returned for comparision of, e.g.
	 * - [1,2,3] and [1,2,3,4]
	 * - [1,1,1] and [1,2,3]
	 * */

	function _uniqContentEquals(aIterator, bIterator, stackA, stackB) {
	  var a = _arrayFromIterator(aIterator);
	  var b = _arrayFromIterator(bIterator);

	  function eq(_a, _b) {
	    return _equals(_a, _b, stackA.slice(), stackB.slice());
	  }

	  // if *a* array contains any element that is not included in *b*
	  return !_containsWith(function (b, aItem) {
	    return !_containsWith(eq, aItem, b);
	  }, b, a);
	}

	function _equals(a, b, stackA, stackB) {
	  if (identical(a, b)) {
	    return true;
	  }

	  var typeA = type(a);

	  if (typeA !== type(b)) {
	    return false;
	  }

	  if (a == null || b == null) {
	    return false;
	  }

	  if (typeof a['fantasy-land/equals'] === 'function' || typeof b['fantasy-land/equals'] === 'function') {
	    return typeof a['fantasy-land/equals'] === 'function' && a['fantasy-land/equals'](b) && typeof b['fantasy-land/equals'] === 'function' && b['fantasy-land/equals'](a);
	  }

	  if (typeof a.equals === 'function' || typeof b.equals === 'function') {
	    return typeof a.equals === 'function' && a.equals(b) && typeof b.equals === 'function' && b.equals(a);
	  }

	  switch (typeA) {
	    case 'Arguments':
	    case 'Array':
	    case 'Object':
	      if (typeof a.constructor === 'function' && _functionName(a.constructor) === 'Promise') {
	        return a === b;
	      }
	      break;
	    case 'Boolean':
	    case 'Number':
	    case 'String':
	      if (!(typeof a === typeof b && identical(a.valueOf(), b.valueOf()))) {
	        return false;
	      }
	      break;
	    case 'Date':
	      if (!identical(a.valueOf(), b.valueOf())) {
	        return false;
	      }
	      break;
	    case 'Error':
	      return a.name === b.name && a.message === b.message;
	    case 'RegExp':
	      if (!(a.source === b.source && a.global === b.global && a.ignoreCase === b.ignoreCase && a.multiline === b.multiline && a.sticky === b.sticky && a.unicode === b.unicode)) {
	        return false;
	      }
	      break;
	  }

	  var idx = stackA.length - 1;
	  while (idx >= 0) {
	    if (stackA[idx] === a) {
	      return stackB[idx] === b;
	    }
	    idx -= 1;
	  }

	  switch (typeA) {
	    case 'Map':
	      if (a.size !== b.size) {
	        return false;
	      }

	      return _uniqContentEquals(a.entries(), b.entries(), stackA.concat([a]), stackB.concat([b]));
	    case 'Set':
	      if (a.size !== b.size) {
	        return false;
	      }

	      return _uniqContentEquals(a.values(), b.values(), stackA.concat([a]), stackB.concat([b]));
	    case 'Arguments':
	    case 'Array':
	    case 'Object':
	    case 'Boolean':
	    case 'Number':
	    case 'String':
	    case 'Date':
	    case 'Error':
	    case 'RegExp':
	    case 'Int8Array':
	    case 'Uint8Array':
	    case 'Uint8ClampedArray':
	    case 'Int16Array':
	    case 'Uint16Array':
	    case 'Int32Array':
	    case 'Uint32Array':
	    case 'Float32Array':
	    case 'Float64Array':
	    case 'ArrayBuffer':
	      break;
	    default:
	      // Values of other types are only equal if identical.
	      return false;
	  }

	  var keysA = keys(a);
	  if (keysA.length !== keys(b).length) {
	    return false;
	  }

	  var extendedStackA = stackA.concat([a]);
	  var extendedStackB = stackB.concat([b]);

	  idx = keysA.length - 1;
	  while (idx >= 0) {
	    var key = keysA[idx];
	    if (!(_has(key, b) && _equals(b[key], a[key], extendedStackA, extendedStackB))) {
	      return false;
	    }
	    idx -= 1;
	  }
	  return true;
	}
	module.exports = _equals;

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

	function _arrayFromIterator(iter) {
	  var list = [];
	  var next;
	  while (!(next = iter.next()).done) {
	    list.push(next.value);
	  }
	  return list;
	}
	module.exports = _arrayFromIterator;

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

	function _containsWith(pred, x, list) {
	  var idx = 0;
	  var len = list.length;

	  while (idx < len) {
	    if (pred(x, list[idx])) {
	      return true;
	    }
	    idx += 1;
	  }
	  return false;
	}
	module.exports = _containsWith;

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

	function _functionName(f) {
	  // String(x => x) evaluates to "x => x", so the pattern may not match.
	  var match = String(f).match(/^function (\w*)/);
	  return match == null ? '' : match[1];
	}
	module.exports = _functionName;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns true if its arguments are identical, false otherwise. Values are
	 * identical if they reference the same memory. `NaN` is identical to `NaN`;
	 * `0` and `-0` are not identical.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.15.0
	 * @category Relation
	 * @sig a -> a -> Boolean
	 * @param {*} a
	 * @param {*} b
	 * @return {Boolean}
	 * @example
	 *
	 *      var o = {};
	 *      R.identical(o, o); //=> true
	 *      R.identical(1, 1); //=> true
	 *      R.identical(1, '1'); //=> false
	 *      R.identical([], []); //=> false
	 *      R.identical(0, -0); //=> false
	 *      R.identical(NaN, NaN); //=> true
	 */


	var identical = /*#__PURE__*/_curry2(function identical(a, b) {
	  // SameValue algorithm
	  if (a === b) {
	    // Steps 1-5, 7-10
	    // Steps 6.b-6.e: +0 != -0
	    return a !== 0 || 1 / a === 1 / b;
	  } else {
	    // Step 6.a: NaN == NaN
	    return a !== a && b !== b;
	  }
	});
	module.exports = identical;

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

	function _quote(s) {
	  var escaped = s.replace(/\\/g, '\\\\').replace(/[\b]/g, '\\b') // \b matches word boundary; [\b] matches backspace
	  .replace(/\f/g, '\\f').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t').replace(/\v/g, '\\v').replace(/\0/g, '\\0');

	  return '"' + escaped.replace(/"/g, '\\"') + '"';
	}
	module.exports = _quote;

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

	/**
	 * Polyfill from <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString>.
	 */
	var pad = function pad(n) {
	  return (n < 10 ? '0' : '') + n;
	};

	var _toISOString = typeof Date.prototype.toISOString === 'function' ? function _toISOString(d) {
	  return d.toISOString();
	} : function _toISOString(d) {
	  return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) + '.' + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z';
	};

	module.exports = _toISOString;

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

	var _complement = /*#__PURE__*/__webpack_require__(107);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var filter = /*#__PURE__*/__webpack_require__(108);

	/**
	 * The complement of [`filter`](#filter).
	 *
	 * Acts as a transducer if a transformer is given in list position. Filterable
	 * objects include plain objects or any object that has a filter method such
	 * as `Array`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig Filterable f => (a -> Boolean) -> f a -> f a
	 * @param {Function} pred
	 * @param {Array} filterable
	 * @return {Array}
	 * @see R.filter, R.transduce, R.addIndex
	 * @example
	 *
	 *      var isOdd = (n) => n % 2 === 1;
	 *
	 *      R.reject(isOdd, [1, 2, 3, 4]); //=> [2, 4]
	 *
	 *      R.reject(isOdd, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}
	 */


	var reject = /*#__PURE__*/_curry2(function reject(pred, filterable) {
	  return filter(_complement(pred), filterable);
	});
	module.exports = reject;

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

	function _complement(f) {
	  return function () {
	    return !f.apply(this, arguments);
	  };
	}
	module.exports = _complement;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _filter = /*#__PURE__*/__webpack_require__(109);

	var _isObject = /*#__PURE__*/__webpack_require__(110);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var _xfilter = /*#__PURE__*/__webpack_require__(111);

	var keys = /*#__PURE__*/__webpack_require__(37);

	/**
	 * Takes a predicate and a `Filterable`, and returns a new filterable of the
	 * same type containing the members of the given filterable which satisfy the
	 * given predicate. Filterable objects include plain objects or any object
	 * that has a filter method such as `Array`.
	 *
	 * Dispatches to the `filter` method of the second argument, if present.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig Filterable f => (a -> Boolean) -> f a -> f a
	 * @param {Function} pred
	 * @param {Array} filterable
	 * @return {Array} Filterable
	 * @see R.reject, R.transduce, R.addIndex
	 * @example
	 *
	 *      var isEven = n => n % 2 === 0;
	 *
	 *      R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]
	 *
	 *      R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}
	 */


	var filter = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['filter'], _xfilter, function (pred, filterable) {
	  return _isObject(filterable) ? _reduce(function (acc, key) {
	    if (pred(filterable[key])) {
	      acc[key] = filterable[key];
	    }
	    return acc;
	  }, {}, keys(filterable)) :
	  // else
	  _filter(pred, filterable);
	}));
	module.exports = filter;

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

	function _filter(fn, list) {
	  var idx = 0;
	  var len = list.length;
	  var result = [];

	  while (idx < len) {
	    if (fn(list[idx])) {
	      result[result.length] = list[idx];
	    }
	    idx += 1;
	  }
	  return result;
	}
	module.exports = _filter;

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

	function _isObject(x) {
	  return Object.prototype.toString.call(x) === '[object Object]';
	}
	module.exports = _isObject;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XFilter = /*#__PURE__*/function () {

	  function XFilter(f, xf) {
	    this.xf = xf;
	    this.f = f;
	  }
	  XFilter.prototype['@@transducer/init'] = _xfBase.init;
	  XFilter.prototype['@@transducer/result'] = _xfBase.result;
	  XFilter.prototype['@@transducer/step'] = function (result, input) {
	    return this.f(input) ? this.xf['@@transducer/step'](result, input) : result;
	  };

	  return XFilter;
	}();

	var _xfilter = /*#__PURE__*/_curry2(function _xfilter(f, xf) {
	  return new XFilter(f, xf);
	});
	module.exports = _xfilter;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var map = /*#__PURE__*/__webpack_require__(29);

	var max = /*#__PURE__*/__webpack_require__(27);

	var reduce = /*#__PURE__*/__webpack_require__(42);

	/**
	 * Returns a function, `fn`, which encapsulates `if/else, if/else, ...` logic.
	 * `R.cond` takes a list of [predicate, transformer] pairs. All of the arguments
	 * to `fn` are applied to each of the predicates in turn until one returns a
	 * "truthy" value, at which point `fn` returns the result of applying its
	 * arguments to the corresponding transformer. If none of the predicates
	 * matches, `fn` returns undefined.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.6.0
	 * @category Logic
	 * @sig [[(*... -> Boolean),(*... -> *)]] -> (*... -> *)
	 * @param {Array} pairs A list of [predicate, transformer]
	 * @return {Function}
	 * @example
	 *
	 *      var fn = R.cond([
	 *        [R.equals(0),   R.always('water freezes at 0°C')],
	 *        [R.equals(100), R.always('water boils at 100°C')],
	 *        [R.T,           temp => 'nothing special happens at ' + temp + '°C']
	 *      ]);
	 *      fn(0); //=> 'water freezes at 0°C'
	 *      fn(50); //=> 'nothing special happens at 50°C'
	 *      fn(100); //=> 'water boils at 100°C'
	 */


	var cond = /*#__PURE__*/_curry1(function cond(pairs) {
	  var arity = reduce(max, 0, map(function (pair) {
	    return pair[0].length;
	  }, pairs));
	  return _arity(arity, function () {
	    var idx = 0;
	    while (idx < pairs.length) {
	      if (pairs[idx][0].apply(this, arguments)) {
	        return pairs[idx][1].apply(this, arguments);
	      }
	      idx += 1;
	    }
	  });
	});
	module.exports = cond;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var constructN = /*#__PURE__*/__webpack_require__(114);

	/**
	 * Wraps a constructor function inside a curried function that can be called
	 * with the same arguments and returns the same type.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig (* -> {*}) -> (* -> {*})
	 * @param {Function} fn The constructor function to wrap.
	 * @return {Function} A wrapped, curried constructor function.
	 * @see R.invoker
	 * @example
	 *
	 *      // Constructor function
	 *      function Animal(kind) {
	 *        this.kind = kind;
	 *      };
	 *      Animal.prototype.sighting = function() {
	 *        return "It's a " + this.kind + "!";
	 *      }
	 *
	 *      var AnimalConstructor = R.construct(Animal)
	 *
	 *      // Notice we no longer need the 'new' keyword:
	 *      AnimalConstructor('Pig'); //=> {"kind": "Pig", "sighting": function (){...}};
	 *
	 *      var animalTypes = ["Lion", "Tiger", "Bear"];
	 *      var animalSighting = R.invoker(0, 'sighting');
	 *      var sightNewAnimal = R.compose(animalSighting, AnimalConstructor);
	 *      R.map(sightNewAnimal, animalTypes); //=> ["It's a Lion!", "It's a Tiger!", "It's a Bear!"]
	 */


	var construct = /*#__PURE__*/_curry1(function construct(Fn) {
	  return constructN(Fn.length, Fn);
	});
	module.exports = construct;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var curry = /*#__PURE__*/__webpack_require__(68);

	var nAry = /*#__PURE__*/__webpack_require__(62);

	/**
	 * Wraps a constructor function inside a curried function that can be called
	 * with the same arguments and returns the same type. The arity of the function
	 * returned is specified to allow using variadic constructor functions.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.4.0
	 * @category Function
	 * @sig Number -> (* -> {*}) -> (* -> {*})
	 * @param {Number} n The arity of the constructor function.
	 * @param {Function} Fn The constructor function to wrap.
	 * @return {Function} A wrapped, curried constructor function.
	 * @example
	 *
	 *      // Variadic Constructor function
	 *      function Salad() {
	 *        this.ingredients = arguments;
	 *      }
	 *
	 *      Salad.prototype.recipe = function() {
	 *        var instructions = R.map(ingredient => 'Add a dollop of ' + ingredient, this.ingredients);
	 *        return R.join('\n', instructions);
	 *      };
	 *
	 *      var ThreeLayerSalad = R.constructN(3, Salad);
	 *
	 *      // Notice we no longer need the 'new' keyword, and the constructor is curried for 3 arguments.
	 *      var salad = ThreeLayerSalad('Mayonnaise')('Potato Chips')('Ketchup');
	 *
	 *      console.log(salad.recipe());
	 *      // Add a dollop of Mayonnaise
	 *      // Add a dollop of Potato Chips
	 *      // Add a dollop of Ketchup
	 */


	var constructN = /*#__PURE__*/_curry2(function constructN(n, Fn) {
	  if (n > 10) {
	    throw new Error('Constructor with greater than ten arguments');
	  }
	  if (n === 0) {
	    return function () {
	      return new Fn();
	    };
	  }
	  return curry(nAry(n, function ($0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
	    switch (arguments.length) {
	      case 1:
	        return new Fn($0);
	      case 2:
	        return new Fn($0, $1);
	      case 3:
	        return new Fn($0, $1, $2);
	      case 4:
	        return new Fn($0, $1, $2, $3);
	      case 5:
	        return new Fn($0, $1, $2, $3, $4);
	      case 6:
	        return new Fn($0, $1, $2, $3, $4, $5);
	      case 7:
	        return new Fn($0, $1, $2, $3, $4, $5, $6);
	      case 8:
	        return new Fn($0, $1, $2, $3, $4, $5, $6, $7);
	      case 9:
	        return new Fn($0, $1, $2, $3, $4, $5, $6, $7, $8);
	      case 10:
	        return new Fn($0, $1, $2, $3, $4, $5, $6, $7, $8, $9);
	    }
	  }));
	});
	module.exports = constructN;

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

	var _contains = /*#__PURE__*/__webpack_require__(96);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns `true` if the specified value is equal, in [`R.equals`](#equals)
	 * terms, to at least one element of the given list; `false` otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig a -> [a] -> Boolean
	 * @param {Object} a The item to compare against.
	 * @param {Array} list The array to consider.
	 * @return {Boolean} `true` if an equivalent item is in the list, `false` otherwise.
	 * @see R.any
	 * @example
	 *
	 *      R.contains(3, [1, 2, 3]); //=> true
	 *      R.contains(4, [1, 2, 3]); //=> false
	 *      R.contains({ name: 'Fred' }, [{ name: 'Fred' }]); //=> true
	 *      R.contains([42], [[42]]); //=> true
	 */


	var contains = /*#__PURE__*/_curry2(_contains);
	module.exports = contains;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _map = /*#__PURE__*/__webpack_require__(30);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	var max = /*#__PURE__*/__webpack_require__(27);

	var pluck = /*#__PURE__*/__webpack_require__(28);

	var reduce = /*#__PURE__*/__webpack_require__(42);

	/**
	 * Accepts a converging function and a list of branching functions and returns
	 * a new function. When invoked, this new function is applied to some
	 * arguments, each branching function is applied to those same arguments. The
	 * results of each branching function are passed as arguments to the converging
	 * function to produce the return value.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.4.2
	 * @category Function
	 * @sig ((x1, x2, ...) -> z) -> [((a, b, ...) -> x1), ((a, b, ...) -> x2), ...] -> (a -> b -> ... -> z)
	 * @param {Function} after A function. `after` will be invoked with the return values of
	 *        `fn1` and `fn2` as its arguments.
	 * @param {Array} functions A list of functions.
	 * @return {Function} A new function.
	 * @see R.useWith
	 * @example
	 *
	 *      var average = R.converge(R.divide, [R.sum, R.length])
	 *      average([1, 2, 3, 4, 5, 6, 7]) //=> 4
	 *
	 *      var strangeConcat = R.converge(R.concat, [R.toUpper, R.toLower])
	 *      strangeConcat("Yodel") //=> "YODELyodel"
	 *
	 * @symb R.converge(f, [g, h])(a, b) = f(g(a, b), h(a, b))
	 */


	var converge = /*#__PURE__*/_curry2(function converge(after, fns) {
	  return curryN(reduce(max, 0, pluck('length', fns)), function () {
	    var args = arguments;
	    var context = this;
	    return after.apply(context, _map(function (fn) {
	      return fn.apply(context, args);
	    }, fns));
	  });
	});
	module.exports = converge;

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

	var reduceBy = /*#__PURE__*/__webpack_require__(118);

	/**
	 * Counts the elements of a list according to how many match each value of a
	 * key generated by the supplied function. Returns an object mapping the keys
	 * produced by `fn` to the number of occurrences in the list. Note that all
	 * keys are coerced to strings because of how JavaScript objects work.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig (a -> String) -> [a] -> {*}
	 * @param {Function} fn The function used to map values to keys.
	 * @param {Array} list The list to count elements from.
	 * @return {Object} An object mapping keys to number of occurrences in the list.
	 * @example
	 *
	 *      var numbers = [1.0, 1.1, 1.2, 2.0, 3.0, 2.2];
	 *      R.countBy(Math.floor)(numbers);    //=> {'1': 3, '2': 2, '3': 1}
	 *
	 *      var letters = ['a', 'b', 'A', 'a', 'B', 'c'];
	 *      R.countBy(R.toLower)(letters);   //=> {'a': 3, 'b': 2, 'c': 1}
	 */


	var countBy = /*#__PURE__*/reduceBy(function (acc, elem) {
	  return acc + 1;
	}, 0);
	module.exports = countBy;

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

	var _curryN = /*#__PURE__*/__webpack_require__(16);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _has = /*#__PURE__*/__webpack_require__(38);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var _xreduceBy = /*#__PURE__*/__webpack_require__(119);

	/**
	 * Groups the elements of the list according to the result of calling
	 * the String-returning function `keyFn` on each element and reduces the elements
	 * of each group to a single value via the reducer function `valueFn`.
	 *
	 * This function is basically a more general [`groupBy`](#groupBy) function.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.20.0
	 * @category List
	 * @sig ((a, b) -> a) -> a -> (b -> String) -> [b] -> {String: a}
	 * @param {Function} valueFn The function that reduces the elements of each group to a single
	 *        value. Receives two values, accumulator for a particular group and the current element.
	 * @param {*} acc The (initial) accumulator value for each group.
	 * @param {Function} keyFn The function that maps the list's element into a key.
	 * @param {Array} list The array to group.
	 * @return {Object} An object with the output of `keyFn` for keys, mapped to the output of
	 *         `valueFn` for elements which produced that key when passed to `keyFn`.
	 * @see R.groupBy, R.reduce
	 * @example
	 *
	 *      var reduceToNamesBy = R.reduceBy((acc, student) => acc.concat(student.name), []);
	 *      var namesByGrade = reduceToNamesBy(function(student) {
	 *        var score = student.score;
	 *        return score < 65 ? 'F' :
	 *               score < 70 ? 'D' :
	 *               score < 80 ? 'C' :
	 *               score < 90 ? 'B' : 'A';
	 *      });
	 *      var students = [{name: 'Lucy', score: 92},
	 *                      {name: 'Drew', score: 85},
	 *                      // ...
	 *                      {name: 'Bart', score: 62}];
	 *      namesByGrade(students);
	 *      // {
	 *      //   'A': ['Lucy'],
	 *      //   'B': ['Drew']
	 *      //   // ...,
	 *      //   'F': ['Bart']
	 *      // }
	 */


	var reduceBy = /*#__PURE__*/_curryN(4, [], /*#__PURE__*/_dispatchable([], _xreduceBy, function reduceBy(valueFn, valueAcc, keyFn, list) {
	  return _reduce(function (acc, elt) {
	    var key = keyFn(elt);
	    acc[key] = valueFn(_has(key, acc) ? acc[key] : valueAcc, elt);
	    return acc;
	  }, {}, list);
	}));
	module.exports = reduceBy;

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

	var _curryN = /*#__PURE__*/__webpack_require__(16);

	var _has = /*#__PURE__*/__webpack_require__(38);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XReduceBy = /*#__PURE__*/function () {

	  function XReduceBy(valueFn, valueAcc, keyFn, xf) {
	    this.valueFn = valueFn;
	    this.valueAcc = valueAcc;
	    this.keyFn = keyFn;
	    this.xf = xf;
	    this.inputs = {};
	  }
	  XReduceBy.prototype['@@transducer/init'] = _xfBase.init;
	  XReduceBy.prototype['@@transducer/result'] = function (result) {
	    var key;
	    for (key in this.inputs) {
	      if (_has(key, this.inputs)) {
	        result = this.xf['@@transducer/step'](result, this.inputs[key]);
	        if (result['@@transducer/reduced']) {
	          result = result['@@transducer/value'];
	          break;
	        }
	      }
	    }
	    this.inputs = null;
	    return this.xf['@@transducer/result'](result);
	  };
	  XReduceBy.prototype['@@transducer/step'] = function (result, input) {
	    var key = this.keyFn(input);
	    this.inputs[key] = this.inputs[key] || [key, this.valueAcc];
	    this.inputs[key][1] = this.valueFn(this.inputs[key][1], input);
	    return result;
	  };

	  return XReduceBy;
	}();

	var _xreduceBy = /*#__PURE__*/_curryN(4, [], function _xreduceBy(valueFn, valueAcc, keyFn, xf) {
	  return new XReduceBy(valueFn, valueAcc, keyFn, xf);
	});
	module.exports = _xreduceBy;

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

	var add = /*#__PURE__*/__webpack_require__(10);

	/**
	 * Decrements its argument.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Math
	 * @sig Number -> Number
	 * @param {Number} n
	 * @return {Number} n - 1
	 * @see R.inc
	 * @example
	 *
	 *      R.dec(42); //=> 41
	 */


	var dec = /*#__PURE__*/add(-1);
	module.exports = dec;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns the second argument if it is not `null`, `undefined` or `NaN`;
	 * otherwise the first argument is returned.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category Logic
	 * @sig a -> b -> a | b
	 * @param {a} default The default value.
	 * @param {b} val `val` will be returned instead of `default` unless `val` is `null`, `undefined` or `NaN`.
	 * @return {*} The second value if it is not `null`, `undefined` or `NaN`, otherwise the default value
	 * @example
	 *
	 *      var defaultTo42 = R.defaultTo(42);
	 *
	 *      defaultTo42(null);  //=> 42
	 *      defaultTo42(undefined);  //=> 42
	 *      defaultTo42('Ramda');  //=> 'Ramda'
	 *      // parseInt('string') results in NaN
	 *      defaultTo42(parseInt('string')); //=> 42
	 */


	var defaultTo = /*#__PURE__*/_curry2(function defaultTo(d, v) {
	  return v == null || v !== v ? d : v;
	});
	module.exports = defaultTo;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Makes a descending comparator function out of a function that returns a value
	 * that can be compared with `<` and `>`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.23.0
	 * @category Function
	 * @sig Ord b => (a -> b) -> a -> a -> Number
	 * @param {Function} fn A function of arity one that returns a value that can be compared
	 * @param {*} a The first item to be compared.
	 * @param {*} b The second item to be compared.
	 * @return {Number} `-1` if fn(a) > fn(b), `1` if fn(b) > fn(a), otherwise `0`
	 * @see R.ascend
	 * @example
	 *
	 *      var byAge = R.descend(R.prop('age'));
	 *      var people = [
	 *        // ...
	 *      ];
	 *      var peopleByOldestFirst = R.sort(byAge, people);
	 */


	var descend = /*#__PURE__*/_curry3(function descend(fn, a, b) {
	  var aa = fn(a);
	  var bb = fn(b);
	  return aa > bb ? -1 : aa < bb ? 1 : 0;
	});
	module.exports = descend;

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

	var _contains = /*#__PURE__*/__webpack_require__(96);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Finds the set (i.e. no duplicates) of all elements in the first list not
	 * contained in the second list. Objects and Arrays are compared in terms of
	 * value equality, not reference equality.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig [*] -> [*] -> [*]
	 * @param {Array} list1 The first list.
	 * @param {Array} list2 The second list.
	 * @return {Array} The elements in `list1` that are not in `list2`.
	 * @see R.differenceWith, R.symmetricDifference, R.symmetricDifferenceWith, R.without
	 * @example
	 *
	 *      R.difference([1,2,3,4], [7,6,5,4,3]); //=> [1,2]
	 *      R.difference([7,6,5,4,3], [1,2,3,4]); //=> [7,6,5]
	 *      R.difference([{a: 1}, {b: 2}], [{a: 1}, {c: 3}]) //=> [{b: 2}]
	 */


	var difference = /*#__PURE__*/_curry2(function difference(first, second) {
	  var out = [];
	  var idx = 0;
	  var firstLen = first.length;
	  while (idx < firstLen) {
	    if (!_contains(first[idx], second) && !_contains(first[idx], out)) {
	      out[out.length] = first[idx];
	    }
	    idx += 1;
	  }
	  return out;
	});
	module.exports = difference;

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

	var _containsWith = /*#__PURE__*/__webpack_require__(101);

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Finds the set (i.e. no duplicates) of all elements in the first list not
	 * contained in the second list. Duplication is determined according to the
	 * value returned by applying the supplied predicate to two list elements.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig ((a, a) -> Boolean) -> [a] -> [a] -> [a]
	 * @param {Function} pred A predicate used to test whether two items are equal.
	 * @param {Array} list1 The first list.
	 * @param {Array} list2 The second list.
	 * @return {Array} The elements in `list1` that are not in `list2`.
	 * @see R.difference, R.symmetricDifference, R.symmetricDifferenceWith
	 * @example
	 *
	 *      var cmp = (x, y) => x.a === y.a;
	 *      var l1 = [{a: 1}, {a: 2}, {a: 3}];
	 *      var l2 = [{a: 3}, {a: 4}];
	 *      R.differenceWith(cmp, l1, l2); //=> [{a: 1}, {a: 2}]
	 */


	var differenceWith = /*#__PURE__*/_curry3(function differenceWith(pred, first, second) {
	  var out = [];
	  var idx = 0;
	  var firstLen = first.length;
	  while (idx < firstLen) {
	    if (!_containsWith(pred, first[idx], second) && !_containsWith(pred, first[idx], out)) {
	      out.push(first[idx]);
	    }
	    idx += 1;
	  }
	  return out;
	});
	module.exports = differenceWith;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns a new object that does not contain a `prop` property.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category Object
	 * @sig String -> {k: v} -> {k: v}
	 * @param {String} prop The name of the property to dissociate
	 * @param {Object} obj The object to clone
	 * @return {Object} A new object equivalent to the original but without the specified property
	 * @see R.assoc
	 * @example
	 *
	 *      R.dissoc('b', {a: 1, b: 2, c: 3}); //=> {a: 1, c: 3}
	 */


	var dissoc = /*#__PURE__*/_curry2(function dissoc(prop, obj) {
	  var result = {};
	  for (var p in obj) {
	    result[p] = obj[p];
	  }
	  delete result[prop];
	  return result;
	});
	module.exports = dissoc;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isInteger = /*#__PURE__*/__webpack_require__(59);

	var assoc = /*#__PURE__*/__webpack_require__(57);

	var dissoc = /*#__PURE__*/__webpack_require__(125);

	var remove = /*#__PURE__*/__webpack_require__(127);

	var update = /*#__PURE__*/__webpack_require__(128);

	/**
	 * Makes a shallow clone of an object, omitting the property at the given path.
	 * Note that this copies and flattens prototype properties onto the new object
	 * as well. All non-primitive properties are copied by reference.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.11.0
	 * @category Object
	 * @typedefn Idx = String | Int
	 * @sig [Idx] -> {k: v} -> {k: v}
	 * @param {Array} path The path to the value to omit
	 * @param {Object} obj The object to clone
	 * @return {Object} A new object without the property at path
	 * @see R.assocPath
	 * @example
	 *
	 *      R.dissocPath(['a', 'b', 'c'], {a: {b: {c: 42}}}); //=> {a: {b: {}}}
	 */


	var dissocPath = /*#__PURE__*/_curry2(function dissocPath(path, obj) {
	  switch (path.length) {
	    case 0:
	      return obj;
	    case 1:
	      return _isInteger(path[0]) ? remove(path[0], 1, obj) : dissoc(path[0], obj);
	    default:
	      var head = path[0];
	      var tail = Array.prototype.slice.call(path, 1);
	      if (obj[head] == null) {
	        return obj;
	      } else if (_isInteger(path[0])) {
	        return update(head, dissocPath(tail, obj[head]), obj);
	      } else {
	        return assoc(head, dissocPath(tail, obj[head]), obj);
	      }
	  }
	});
	module.exports = dissocPath;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Removes the sub-list of `list` starting at index `start` and containing
	 * `count` elements. _Note that this is not destructive_: it returns a copy of
	 * the list with the changes.
	 * <small>No lists have been harmed in the application of this function.</small>
	 *
	 * @func
	 * @memberOf R
	 * @since v0.2.2
	 * @category List
	 * @sig Number -> Number -> [a] -> [a]
	 * @param {Number} start The position to start removing elements
	 * @param {Number} count The number of elements to remove
	 * @param {Array} list The list to remove from
	 * @return {Array} A new Array with `count` elements from `start` removed.
	 * @example
	 *
	 *      R.remove(2, 3, [1,2,3,4,5,6,7,8]); //=> [1,2,6,7,8]
	 */


	var remove = /*#__PURE__*/_curry3(function remove(start, count, list) {
	  var result = Array.prototype.slice.call(list, 0);
	  result.splice(start, count);
	  return result;
	});
	module.exports = remove;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var adjust = /*#__PURE__*/__webpack_require__(17);

	var always = /*#__PURE__*/__webpack_require__(5);

	/**
	 * Returns a new copy of the array with the element at the provided index
	 * replaced with the given value.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category List
	 * @sig Number -> a -> [a] -> [a]
	 * @param {Number} idx The index to update.
	 * @param {*} x The value to exist at the given index of the returned array.
	 * @param {Array|Arguments} list The source array-like object to be updated.
	 * @return {Array} A copy of `list` with the value at index `idx` replaced with `x`.
	 * @see R.adjust
	 * @example
	 *
	 *      R.update(1, 11, [0, 1, 2]);     //=> [0, 11, 2]
	 *      R.update(1)(11)([0, 1, 2]);     //=> [0, 11, 2]
	 * @symb R.update(-1, a, [b, c]) = [b, a]
	 * @symb R.update(0, a, [b, c]) = [a, c]
	 * @symb R.update(1, a, [b, c]) = [b, a]
	 */


	var update = /*#__PURE__*/_curry3(function update(idx, x, list) {
	  return adjust(always(x), idx, list);
	});
	module.exports = update;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Divides two numbers. Equivalent to `a / b`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Math
	 * @sig Number -> Number -> Number
	 * @param {Number} a The first value.
	 * @param {Number} b The second value.
	 * @return {Number} The result of `a / b`.
	 * @see R.multiply
	 * @example
	 *
	 *      R.divide(71, 100); //=> 0.71
	 *
	 *      var half = R.divide(R.__, 2);
	 *      half(42); //=> 21
	 *
	 *      var reciprocal = R.divide(1);
	 *      reciprocal(4);   //=> 0.25
	 */


	var divide = /*#__PURE__*/_curry2(function divide(a, b) {
	  return a / b;
	});
	module.exports = divide;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xdrop = /*#__PURE__*/__webpack_require__(131);

	var slice = /*#__PURE__*/__webpack_require__(87);

	/**
	 * Returns all but the first `n` elements of the given list, string, or
	 * transducer/transformer (or object with a `drop` method).
	 *
	 * Dispatches to the `drop` method of the second argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig Number -> [a] -> [a]
	 * @sig Number -> String -> String
	 * @param {Number} n
	 * @param {*} list
	 * @return {*} A copy of list without the first `n` elements
	 * @see R.take, R.transduce, R.dropLast, R.dropWhile
	 * @example
	 *
	 *      R.drop(1, ['foo', 'bar', 'baz']); //=> ['bar', 'baz']
	 *      R.drop(2, ['foo', 'bar', 'baz']); //=> ['baz']
	 *      R.drop(3, ['foo', 'bar', 'baz']); //=> []
	 *      R.drop(4, ['foo', 'bar', 'baz']); //=> []
	 *      R.drop(3, 'ramda');               //=> 'da'
	 */


	var drop = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['drop'], _xdrop, function drop(n, xs) {
	  return slice(Math.max(0, n), Infinity, xs);
	}));
	module.exports = drop;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XDrop = /*#__PURE__*/function () {

	  function XDrop(n, xf) {
	    this.xf = xf;
	    this.n = n;
	  }
	  XDrop.prototype['@@transducer/init'] = _xfBase.init;
	  XDrop.prototype['@@transducer/result'] = _xfBase.result;
	  XDrop.prototype['@@transducer/step'] = function (result, input) {
	    if (this.n > 0) {
	      this.n -= 1;
	      return result;
	    }
	    return this.xf['@@transducer/step'](result, input);
	  };

	  return XDrop;
	}();

	var _xdrop = /*#__PURE__*/_curry2(function _xdrop(n, xf) {
	  return new XDrop(n, xf);
	});
	module.exports = _xdrop;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _dropLast = /*#__PURE__*/__webpack_require__(133);

	var _xdropLast = /*#__PURE__*/__webpack_require__(136);

	/**
	 * Returns a list containing all but the last `n` elements of the given `list`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category List
	 * @sig Number -> [a] -> [a]
	 * @sig Number -> String -> String
	 * @param {Number} n The number of elements of `list` to skip.
	 * @param {Array} list The list of elements to consider.
	 * @return {Array} A copy of the list with only the first `list.length - n` elements
	 * @see R.takeLast, R.drop, R.dropWhile, R.dropLastWhile
	 * @example
	 *
	 *      R.dropLast(1, ['foo', 'bar', 'baz']); //=> ['foo', 'bar']
	 *      R.dropLast(2, ['foo', 'bar', 'baz']); //=> ['foo']
	 *      R.dropLast(3, ['foo', 'bar', 'baz']); //=> []
	 *      R.dropLast(4, ['foo', 'bar', 'baz']); //=> []
	 *      R.dropLast(3, 'ramda');               //=> 'ra'
	 */


	var dropLast = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xdropLast, _dropLast));
	module.exports = dropLast;

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

	var take = /*#__PURE__*/__webpack_require__(134);

	function dropLast(n, xs) {
	  return take(n < xs.length ? xs.length - n : 0, xs);
	}
	module.exports = dropLast;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xtake = /*#__PURE__*/__webpack_require__(135);

	var slice = /*#__PURE__*/__webpack_require__(87);

	/**
	 * Returns the first `n` elements of the given list, string, or
	 * transducer/transformer (or object with a `take` method).
	 *
	 * Dispatches to the `take` method of the second argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig Number -> [a] -> [a]
	 * @sig Number -> String -> String
	 * @param {Number} n
	 * @param {*} list
	 * @return {*}
	 * @see R.drop
	 * @example
	 *
	 *      R.take(1, ['foo', 'bar', 'baz']); //=> ['foo']
	 *      R.take(2, ['foo', 'bar', 'baz']); //=> ['foo', 'bar']
	 *      R.take(3, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']
	 *      R.take(4, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']
	 *      R.take(3, 'ramda');               //=> 'ram'
	 *
	 *      var personnel = [
	 *        'Dave Brubeck',
	 *        'Paul Desmond',
	 *        'Eugene Wright',
	 *        'Joe Morello',
	 *        'Gerry Mulligan',
	 *        'Bob Bates',
	 *        'Joe Dodge',
	 *        'Ron Crotty'
	 *      ];
	 *
	 *      var takeFive = R.take(5);
	 *      takeFive(personnel);
	 *      //=> ['Dave Brubeck', 'Paul Desmond', 'Eugene Wright', 'Joe Morello', 'Gerry Mulligan']
	 * @symb R.take(-1, [a, b]) = [a, b]
	 * @symb R.take(0, [a, b]) = []
	 * @symb R.take(1, [a, b]) = [a]
	 * @symb R.take(2, [a, b]) = [a, b]
	 */


	var take = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['take'], _xtake, function take(n, xs) {
	  return slice(0, n < 0 ? Infinity : n, xs);
	}));
	module.exports = take;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduced = /*#__PURE__*/__webpack_require__(24);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XTake = /*#__PURE__*/function () {

	  function XTake(n, xf) {
	    this.xf = xf;
	    this.n = n;
	    this.i = 0;
	  }
	  XTake.prototype['@@transducer/init'] = _xfBase.init;
	  XTake.prototype['@@transducer/result'] = _xfBase.result;
	  XTake.prototype['@@transducer/step'] = function (result, input) {
	    this.i += 1;
	    var ret = this.n === 0 ? result : this.xf['@@transducer/step'](result, input);
	    return this.n >= 0 && this.i >= this.n ? _reduced(ret) : ret;
	  };

	  return XTake;
	}();

	var _xtake = /*#__PURE__*/_curry2(function _xtake(n, xf) {
	  return new XTake(n, xf);
	});
	module.exports = _xtake;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XDropLast = /*#__PURE__*/function () {

	  function XDropLast(n, xf) {
	    this.xf = xf;
	    this.pos = 0;
	    this.full = false;
	    this.acc = new Array(n);
	  }
	  XDropLast.prototype['@@transducer/init'] = _xfBase.init;
	  XDropLast.prototype['@@transducer/result'] = function (result) {
	    this.acc = null;
	    return this.xf['@@transducer/result'](result);
	  };
	  XDropLast.prototype['@@transducer/step'] = function (result, input) {
	    if (this.full) {
	      result = this.xf['@@transducer/step'](result, this.acc[this.pos]);
	    }
	    this.store(input);
	    return result;
	  };
	  XDropLast.prototype.store = function (input) {
	    this.acc[this.pos] = input;
	    this.pos += 1;
	    if (this.pos === this.acc.length) {
	      this.pos = 0;
	      this.full = true;
	    }
	  };

	  return XDropLast;
	}();

	var _xdropLast = /*#__PURE__*/_curry2(function _xdropLast(n, xf) {
	  return new XDropLast(n, xf);
	});
	module.exports = _xdropLast;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _dropLastWhile = /*#__PURE__*/__webpack_require__(138);

	var _xdropLastWhile = /*#__PURE__*/__webpack_require__(139);

	/**
	 * Returns a new list excluding all the tailing elements of a given list which
	 * satisfy the supplied predicate function. It passes each value from the right
	 * to the supplied predicate function, skipping elements until the predicate
	 * function returns a `falsy` value. The predicate function is applied to one argument:
	 * *(value)*.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> [a]
	 * @sig (a -> Boolean) -> String -> String
	 * @param {Function} predicate The function to be called on each element
	 * @param {Array} xs The collection to iterate over.
	 * @return {Array} A new array without any trailing elements that return `falsy` values from the `predicate`.
	 * @see R.takeLastWhile, R.addIndex, R.drop, R.dropWhile
	 * @example
	 *
	 *      var lteThree = x => x <= 3;
	 *
	 *      R.dropLastWhile(lteThree, [1, 2, 3, 4, 3, 2, 1]); //=> [1, 2, 3, 4]
	 *
	 *      R.dropLastWhile(x => x !== 'd' , 'Ramda'); //=> 'Ramd'
	 */


	var dropLastWhile = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xdropLastWhile, _dropLastWhile));
	module.exports = dropLastWhile;

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

	var slice = /*#__PURE__*/__webpack_require__(87);

	function dropLastWhile(pred, xs) {
	  var idx = xs.length - 1;
	  while (idx >= 0 && pred(xs[idx])) {
	    idx -= 1;
	  }
	  return slice(0, idx + 1, xs);
	}
	module.exports = dropLastWhile;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XDropLastWhile = /*#__PURE__*/function () {

	  function XDropLastWhile(fn, xf) {
	    this.f = fn;
	    this.retained = [];
	    this.xf = xf;
	  }
	  XDropLastWhile.prototype['@@transducer/init'] = _xfBase.init;
	  XDropLastWhile.prototype['@@transducer/result'] = function (result) {
	    this.retained = null;
	    return this.xf['@@transducer/result'](result);
	  };
	  XDropLastWhile.prototype['@@transducer/step'] = function (result, input) {
	    return this.f(input) ? this.retain(result, input) : this.flush(result, input);
	  };
	  XDropLastWhile.prototype.flush = function (result, input) {
	    result = _reduce(this.xf['@@transducer/step'], result, this.retained);
	    this.retained = [];
	    return this.xf['@@transducer/step'](result, input);
	  };
	  XDropLastWhile.prototype.retain = function (result, input) {
	    this.retained.push(input);
	    return result;
	  };

	  return XDropLastWhile;
	}();

	var _xdropLastWhile = /*#__PURE__*/_curry2(function _xdropLastWhile(fn, xf) {
	  return new XDropLastWhile(fn, xf);
	});
	module.exports = _xdropLastWhile;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xdropRepeatsWith = /*#__PURE__*/__webpack_require__(141);

	var dropRepeatsWith = /*#__PURE__*/__webpack_require__(142);

	var equals = /*#__PURE__*/__webpack_require__(98);

	/**
	 * Returns a new list without any consecutively repeating elements.
	 * [`R.equals`](#equals) is used to determine equality.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category List
	 * @sig [a] -> [a]
	 * @param {Array} list The array to consider.
	 * @return {Array} `list` without repeating elements.
	 * @see R.transduce
	 * @example
	 *
	 *     R.dropRepeats([1, 1, 1, 2, 3, 4, 4, 2, 2]); //=> [1, 2, 3, 4, 2]
	 */


	var dropRepeats = /*#__PURE__*/_curry1( /*#__PURE__*/_dispatchable([], /*#__PURE__*/_xdropRepeatsWith(equals), /*#__PURE__*/dropRepeatsWith(equals)));
	module.exports = dropRepeats;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XDropRepeatsWith = /*#__PURE__*/function () {

	  function XDropRepeatsWith(pred, xf) {
	    this.xf = xf;
	    this.pred = pred;
	    this.lastValue = undefined;
	    this.seenFirstValue = false;
	  }

	  XDropRepeatsWith.prototype['@@transducer/init'] = _xfBase.init;
	  XDropRepeatsWith.prototype['@@transducer/result'] = _xfBase.result;
	  XDropRepeatsWith.prototype['@@transducer/step'] = function (result, input) {
	    var sameAsLast = false;
	    if (!this.seenFirstValue) {
	      this.seenFirstValue = true;
	    } else if (this.pred(this.lastValue, input)) {
	      sameAsLast = true;
	    }
	    this.lastValue = input;
	    return sameAsLast ? result : this.xf['@@transducer/step'](result, input);
	  };

	  return XDropRepeatsWith;
	}();

	var _xdropRepeatsWith = /*#__PURE__*/_curry2(function _xdropRepeatsWith(pred, xf) {
	  return new XDropRepeatsWith(pred, xf);
	});
	module.exports = _xdropRepeatsWith;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xdropRepeatsWith = /*#__PURE__*/__webpack_require__(141);

	var last = /*#__PURE__*/__webpack_require__(143);

	/**
	 * Returns a new list without any consecutively repeating elements. Equality is
	 * determined by applying the supplied predicate to each pair of consecutive elements. The
	 * first element in a series of equal elements will be preserved.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category List
	 * @sig ((a, a) -> Boolean) -> [a] -> [a]
	 * @param {Function} pred A predicate used to test whether two items are equal.
	 * @param {Array} list The array to consider.
	 * @return {Array} `list` without repeating elements.
	 * @see R.transduce
	 * @example
	 *
	 *      var l = [1, -1, 1, 3, 4, -4, -4, -5, 5, 3, 3];
	 *      R.dropRepeatsWith(R.eqBy(Math.abs), l); //=> [1, 3, 4, -5, 3]
	 */


	var dropRepeatsWith = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xdropRepeatsWith, function dropRepeatsWith(pred, list) {
	  var result = [];
	  var idx = 1;
	  var len = list.length;
	  if (len !== 0) {
	    result[0] = list[0];
	    while (idx < len) {
	      if (!pred(last(result), list[idx])) {
	        result[result.length] = list[idx];
	      }
	      idx += 1;
	    }
	  }
	  return result;
	}));
	module.exports = dropRepeatsWith;

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

	var nth = /*#__PURE__*/__webpack_require__(144);

	/**
	 * Returns the last element of the given list or string.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.4
	 * @category List
	 * @sig [a] -> a | Undefined
	 * @sig String -> String
	 * @param {*} list
	 * @return {*}
	 * @see R.init, R.head, R.tail
	 * @example
	 *
	 *      R.last(['fi', 'fo', 'fum']); //=> 'fum'
	 *      R.last([]); //=> undefined
	 *
	 *      R.last('abc'); //=> 'c'
	 *      R.last(''); //=> ''
	 */


	var last = /*#__PURE__*/nth(-1);
	module.exports = last;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isString = /*#__PURE__*/__webpack_require__(33);

	/**
	 * Returns the nth element of the given list or string. If n is negative the
	 * element at index length + n is returned.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig Number -> [a] -> a | Undefined
	 * @sig Number -> String -> String
	 * @param {Number} offset
	 * @param {*} list
	 * @return {*}
	 * @example
	 *
	 *      var list = ['foo', 'bar', 'baz', 'quux'];
	 *      R.nth(1, list); //=> 'bar'
	 *      R.nth(-1, list); //=> 'quux'
	 *      R.nth(-99, list); //=> undefined
	 *
	 *      R.nth(2, 'abc'); //=> 'c'
	 *      R.nth(3, 'abc'); //=> ''
	 * @symb R.nth(-1, [a, b, c]) = c
	 * @symb R.nth(0, [a, b, c]) = a
	 * @symb R.nth(1, [a, b, c]) = b
	 */


	var nth = /*#__PURE__*/_curry2(function nth(offset, list) {
	  var idx = offset < 0 ? list.length + offset : offset;
	  return _isString(list) ? list.charAt(idx) : list[idx];
	});
	module.exports = nth;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xdropWhile = /*#__PURE__*/__webpack_require__(146);

	var slice = /*#__PURE__*/__webpack_require__(87);

	/**
	 * Returns a new list excluding the leading elements of a given list which
	 * satisfy the supplied predicate function. It passes each value to the supplied
	 * predicate function, skipping elements while the predicate function returns
	 * `true`. The predicate function is applied to one argument: *(value)*.
	 *
	 * Dispatches to the `dropWhile` method of the second argument, if present.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> [a]
	 * @sig (a -> Boolean) -> String -> String
	 * @param {Function} fn The function called per iteration.
	 * @param {Array} xs The collection to iterate over.
	 * @return {Array} A new array.
	 * @see R.takeWhile, R.transduce, R.addIndex
	 * @example
	 *
	 *      var lteTwo = x => x <= 2;
	 *
	 *      R.dropWhile(lteTwo, [1, 2, 3, 4, 3, 2, 1]); //=> [3, 4, 3, 2, 1]
	 *
	 *      R.dropWhile(x => x !== 'd' , 'Ramda'); //=> 'da'
	 */


	var dropWhile = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['dropWhile'], _xdropWhile, function dropWhile(pred, xs) {
	  var idx = 0;
	  var len = xs.length;
	  while (idx < len && pred(xs[idx])) {
	    idx += 1;
	  }
	  return slice(idx, Infinity, xs);
	}));
	module.exports = dropWhile;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XDropWhile = /*#__PURE__*/function () {

	  function XDropWhile(f, xf) {
	    this.xf = xf;
	    this.f = f;
	  }
	  XDropWhile.prototype['@@transducer/init'] = _xfBase.init;
	  XDropWhile.prototype['@@transducer/result'] = _xfBase.result;
	  XDropWhile.prototype['@@transducer/step'] = function (result, input) {
	    if (this.f) {
	      if (this.f(input)) {
	        return result;
	      }
	      this.f = null;
	    }
	    return this.xf['@@transducer/step'](result, input);
	  };

	  return XDropWhile;
	}();

	var _xdropWhile = /*#__PURE__*/_curry2(function _xdropWhile(f, xf) {
	  return new XDropWhile(f, xf);
	});
	module.exports = _xdropWhile;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isFunction = /*#__PURE__*/__webpack_require__(64);

	var lift = /*#__PURE__*/__webpack_require__(65);

	var or = /*#__PURE__*/__webpack_require__(148);

	/**
	 * A function wrapping calls to the two functions in an `||` operation,
	 * returning the result of the first function if it is truth-y and the result
	 * of the second function otherwise. Note that this is short-circuited,
	 * meaning that the second function will not be invoked if the first returns a
	 * truth-y value.
	 *
	 * In addition to functions, `R.either` also accepts any fantasy-land compatible
	 * applicative functor.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.12.0
	 * @category Logic
	 * @sig (*... -> Boolean) -> (*... -> Boolean) -> (*... -> Boolean)
	 * @param {Function} f a predicate
	 * @param {Function} g another predicate
	 * @return {Function} a function that applies its arguments to `f` and `g` and `||`s their outputs together.
	 * @see R.or
	 * @example
	 *
	 *      var gt10 = x => x > 10;
	 *      var even = x => x % 2 === 0;
	 *      var f = R.either(gt10, even);
	 *      f(101); //=> true
	 *      f(8); //=> true
	 */


	var either = /*#__PURE__*/_curry2(function either(f, g) {
	  return _isFunction(f) ? function _either() {
	    return f.apply(this, arguments) || g.apply(this, arguments);
	  } : lift(or)(f, g);
	});
	module.exports = either;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns `true` if one or both of its arguments are `true`. Returns `false`
	 * if both arguments are `false`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Logic
	 * @sig a -> b -> a | b
	 * @param {Any} a
	 * @param {Any} b
	 * @return {Any} the first argument if truthy, otherwise the second argument.
	 * @see R.either
	 * @example
	 *
	 *      R.or(true, true); //=> true
	 *      R.or(true, false); //=> true
	 *      R.or(false, true); //=> true
	 *      R.or(false, false); //=> false
	 */


	var or = /*#__PURE__*/_curry2(function or(a, b) {
	  return a || b;
	});
	module.exports = or;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _isArguments = /*#__PURE__*/__webpack_require__(39);

	var _isArray = /*#__PURE__*/__webpack_require__(21);

	var _isObject = /*#__PURE__*/__webpack_require__(110);

	var _isString = /*#__PURE__*/__webpack_require__(33);

	/**
	 * Returns the empty value of its argument's type. Ramda defines the empty
	 * value of Array (`[]`), Object (`{}`), String (`''`), and Arguments. Other
	 * types are supported if they define `<Type>.empty`,
	 * `<Type>.prototype.empty` or implement the
	 * [FantasyLand Monoid spec](https://github.com/fantasyland/fantasy-land#monoid).
	 *
	 * Dispatches to the `empty` method of the first argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category Function
	 * @sig a -> a
	 * @param {*} x
	 * @return {*}
	 * @example
	 *
	 *      R.empty(Just(42));      //=> Nothing()
	 *      R.empty([1, 2, 3]);     //=> []
	 *      R.empty('unicorns');    //=> ''
	 *      R.empty({x: 1, y: 2});  //=> {}
	 */


	var empty = /*#__PURE__*/_curry1(function empty(x) {
	  return x != null && typeof x['fantasy-land/empty'] === 'function' ? x['fantasy-land/empty']() : x != null && x.constructor != null && typeof x.constructor['fantasy-land/empty'] === 'function' ? x.constructor['fantasy-land/empty']() : x != null && typeof x.empty === 'function' ? x.empty() : x != null && x.constructor != null && typeof x.constructor.empty === 'function' ? x.constructor.empty() : _isArray(x) ? [] : _isString(x) ? '' : _isObject(x) ? {} : _isArguments(x) ? function () {
	    return arguments;
	  }() :
	  // else
	  void 0;
	});
	module.exports = empty;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var equals = /*#__PURE__*/__webpack_require__(98);

	var takeLast = /*#__PURE__*/__webpack_require__(151);

	/**
	 * Checks if a list ends with the provided values
	 *
	 * @func
	 * @memberOf R
	 * @since v0.24.0
	 * @category List
	 * @sig [a] -> Boolean
	 * @sig String -> Boolean
	 * @param {*} suffix
	 * @param {*} list
	 * @return {Boolean}
	 * @example
	 *
	 *      R.endsWith('c', 'abc')                //=> true
	 *      R.endsWith('b', 'abc')                //=> false
	 *      R.endsWith(['c'], ['a', 'b', 'c'])    //=> true
	 *      R.endsWith(['b'], ['a', 'b', 'c'])    //=> false
	 */


	var endsWith = /*#__PURE__*/_curry2(function (suffix, list) {
	  return equals(takeLast(suffix.length, list), suffix);
	});
	module.exports = endsWith;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var drop = /*#__PURE__*/__webpack_require__(130);

	/**
	 * Returns a new list containing the last `n` elements of the given list.
	 * If `n > list.length`, returns a list of `list.length` elements.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category List
	 * @sig Number -> [a] -> [a]
	 * @sig Number -> String -> String
	 * @param {Number} n The number of elements to return.
	 * @param {Array} xs The collection to consider.
	 * @return {Array}
	 * @see R.dropLast
	 * @example
	 *
	 *      R.takeLast(1, ['foo', 'bar', 'baz']); //=> ['baz']
	 *      R.takeLast(2, ['foo', 'bar', 'baz']); //=> ['bar', 'baz']
	 *      R.takeLast(3, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']
	 *      R.takeLast(4, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']
	 *      R.takeLast(3, 'ramda');               //=> 'mda'
	 */


	var takeLast = /*#__PURE__*/_curry2(function takeLast(n, xs) {
	  return drop(n >= 0 ? xs.length - n : 0, xs);
	});
	module.exports = takeLast;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var equals = /*#__PURE__*/__webpack_require__(98);

	/**
	 * Takes a function and two values in its domain and returns `true` if the
	 * values map to the same value in the codomain; `false` otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.18.0
	 * @category Relation
	 * @sig (a -> b) -> a -> a -> Boolean
	 * @param {Function} f
	 * @param {*} x
	 * @param {*} y
	 * @return {Boolean}
	 * @example
	 *
	 *      R.eqBy(Math.abs, 5, -5); //=> true
	 */


	var eqBy = /*#__PURE__*/_curry3(function eqBy(f, x, y) {
	  return equals(f(x), f(y));
	});
	module.exports = eqBy;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var equals = /*#__PURE__*/__webpack_require__(98);

	/**
	 * Reports whether two objects have the same value, in [`R.equals`](#equals)
	 * terms, for the specified property. Useful as a curried predicate.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig k -> {k: v} -> {k: v} -> Boolean
	 * @param {String} prop The name of the property to compare
	 * @param {Object} obj1
	 * @param {Object} obj2
	 * @return {Boolean}
	 *
	 * @example
	 *
	 *      var o1 = { a: 1, b: 2, c: 3, d: 4 };
	 *      var o2 = { a: 10, b: 20, c: 3, d: 40 };
	 *      R.eqProps('a', o1, o2); //=> false
	 *      R.eqProps('c', o1, o2); //=> true
	 */


	var eqProps = /*#__PURE__*/_curry3(function eqProps(prop, obj1, obj2) {
	  return equals(obj1[prop], obj2[prop]);
	});
	module.exports = eqProps;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Creates a new object by recursively evolving a shallow copy of `object`,
	 * according to the `transformation` functions. All non-primitive properties
	 * are copied by reference.
	 *
	 * A `transformation` function will not be invoked if its corresponding key
	 * does not exist in the evolved object.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Object
	 * @sig {k: (v -> v)} -> {k: v} -> {k: v}
	 * @param {Object} transformations The object specifying transformation functions to apply
	 *        to the object.
	 * @param {Object} object The object to be transformed.
	 * @return {Object} The transformed object.
	 * @example
	 *
	 *      var tomato  = {firstName: '  Tomato ', data: {elapsed: 100, remaining: 1400}, id:123};
	 *      var transformations = {
	 *        firstName: R.trim,
	 *        lastName: R.trim, // Will not get invoked.
	 *        data: {elapsed: R.add(1), remaining: R.add(-1)}
	 *      };
	 *      R.evolve(transformations, tomato); //=> {firstName: 'Tomato', data: {elapsed: 101, remaining: 1399}, id:123}
	 */


	var evolve = /*#__PURE__*/_curry2(function evolve(transformations, object) {
	  var result = {};
	  var transformation, key, type;
	  for (key in object) {
	    transformation = transformations[key];
	    type = typeof transformation;
	    result[key] = type === 'function' ? transformation(object[key]) : transformation && type === 'object' ? evolve(transformation, object[key]) : object[key];
	  }
	  return result;
	});
	module.exports = evolve;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xfind = /*#__PURE__*/__webpack_require__(156);

	/**
	 * Returns the first element of the list which matches the predicate, or
	 * `undefined` if no element matches.
	 *
	 * Dispatches to the `find` method of the second argument, if present.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> a | undefined
	 * @param {Function} fn The predicate function used to determine if the element is the
	 *        desired one.
	 * @param {Array} list The array to consider.
	 * @return {Object} The element found, or `undefined`.
	 * @see R.transduce
	 * @example
	 *
	 *      var xs = [{a: 1}, {a: 2}, {a: 3}];
	 *      R.find(R.propEq('a', 2))(xs); //=> {a: 2}
	 *      R.find(R.propEq('a', 4))(xs); //=> undefined
	 */


	var find = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['find'], _xfind, function find(fn, list) {
	  var idx = 0;
	  var len = list.length;
	  while (idx < len) {
	    if (fn(list[idx])) {
	      return list[idx];
	    }
	    idx += 1;
	  }
	}));
	module.exports = find;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduced = /*#__PURE__*/__webpack_require__(24);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XFind = /*#__PURE__*/function () {

	  function XFind(f, xf) {
	    this.xf = xf;
	    this.f = f;
	    this.found = false;
	  }
	  XFind.prototype['@@transducer/init'] = _xfBase.init;
	  XFind.prototype['@@transducer/result'] = function (result) {
	    if (!this.found) {
	      result = this.xf['@@transducer/step'](result, void 0);
	    }
	    return this.xf['@@transducer/result'](result);
	  };
	  XFind.prototype['@@transducer/step'] = function (result, input) {
	    if (this.f(input)) {
	      this.found = true;
	      result = _reduced(this.xf['@@transducer/step'](result, input));
	    }
	    return result;
	  };

	  return XFind;
	}();

	var _xfind = /*#__PURE__*/_curry2(function _xfind(f, xf) {
	  return new XFind(f, xf);
	});
	module.exports = _xfind;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xfindIndex = /*#__PURE__*/__webpack_require__(158);

	/**
	 * Returns the index of the first element of the list which matches the
	 * predicate, or `-1` if no element matches.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.1
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> Number
	 * @param {Function} fn The predicate function used to determine if the element is the
	 * desired one.
	 * @param {Array} list The array to consider.
	 * @return {Number} The index of the element found, or `-1`.
	 * @see R.transduce
	 * @example
	 *
	 *      var xs = [{a: 1}, {a: 2}, {a: 3}];
	 *      R.findIndex(R.propEq('a', 2))(xs); //=> 1
	 *      R.findIndex(R.propEq('a', 4))(xs); //=> -1
	 */


	var findIndex = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xfindIndex, function findIndex(fn, list) {
	  var idx = 0;
	  var len = list.length;
	  while (idx < len) {
	    if (fn(list[idx])) {
	      return idx;
	    }
	    idx += 1;
	  }
	  return -1;
	}));
	module.exports = findIndex;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduced = /*#__PURE__*/__webpack_require__(24);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XFindIndex = /*#__PURE__*/function () {

	  function XFindIndex(f, xf) {
	    this.xf = xf;
	    this.f = f;
	    this.idx = -1;
	    this.found = false;
	  }
	  XFindIndex.prototype['@@transducer/init'] = _xfBase.init;
	  XFindIndex.prototype['@@transducer/result'] = function (result) {
	    if (!this.found) {
	      result = this.xf['@@transducer/step'](result, -1);
	    }
	    return this.xf['@@transducer/result'](result);
	  };
	  XFindIndex.prototype['@@transducer/step'] = function (result, input) {
	    this.idx += 1;
	    if (this.f(input)) {
	      this.found = true;
	      result = _reduced(this.xf['@@transducer/step'](result, this.idx));
	    }
	    return result;
	  };

	  return XFindIndex;
	}();

	var _xfindIndex = /*#__PURE__*/_curry2(function _xfindIndex(f, xf) {
	  return new XFindIndex(f, xf);
	});
	module.exports = _xfindIndex;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xfindLast = /*#__PURE__*/__webpack_require__(160);

	/**
	 * Returns the last element of the list which matches the predicate, or
	 * `undefined` if no element matches.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.1
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> a | undefined
	 * @param {Function} fn The predicate function used to determine if the element is the
	 * desired one.
	 * @param {Array} list The array to consider.
	 * @return {Object} The element found, or `undefined`.
	 * @see R.transduce
	 * @example
	 *
	 *      var xs = [{a: 1, b: 0}, {a:1, b: 1}];
	 *      R.findLast(R.propEq('a', 1))(xs); //=> {a: 1, b: 1}
	 *      R.findLast(R.propEq('a', 4))(xs); //=> undefined
	 */


	var findLast = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xfindLast, function findLast(fn, list) {
	  var idx = list.length - 1;
	  while (idx >= 0) {
	    if (fn(list[idx])) {
	      return list[idx];
	    }
	    idx -= 1;
	  }
	}));
	module.exports = findLast;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XFindLast = /*#__PURE__*/function () {

	  function XFindLast(f, xf) {
	    this.xf = xf;
	    this.f = f;
	  }
	  XFindLast.prototype['@@transducer/init'] = _xfBase.init;
	  XFindLast.prototype['@@transducer/result'] = function (result) {
	    return this.xf['@@transducer/result'](this.xf['@@transducer/step'](result, this.last));
	  };
	  XFindLast.prototype['@@transducer/step'] = function (result, input) {
	    if (this.f(input)) {
	      this.last = input;
	    }
	    return result;
	  };

	  return XFindLast;
	}();

	var _xfindLast = /*#__PURE__*/_curry2(function _xfindLast(f, xf) {
	  return new XFindLast(f, xf);
	});
	module.exports = _xfindLast;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xfindLastIndex = /*#__PURE__*/__webpack_require__(162);

	/**
	 * Returns the index of the last element of the list which matches the
	 * predicate, or `-1` if no element matches.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.1
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> Number
	 * @param {Function} fn The predicate function used to determine if the element is the
	 * desired one.
	 * @param {Array} list The array to consider.
	 * @return {Number} The index of the element found, or `-1`.
	 * @see R.transduce
	 * @example
	 *
	 *      var xs = [{a: 1, b: 0}, {a:1, b: 1}];
	 *      R.findLastIndex(R.propEq('a', 1))(xs); //=> 1
	 *      R.findLastIndex(R.propEq('a', 4))(xs); //=> -1
	 */


	var findLastIndex = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xfindLastIndex, function findLastIndex(fn, list) {
	  var idx = list.length - 1;
	  while (idx >= 0) {
	    if (fn(list[idx])) {
	      return idx;
	    }
	    idx -= 1;
	  }
	  return -1;
	}));
	module.exports = findLastIndex;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XFindLastIndex = /*#__PURE__*/function () {

	  function XFindLastIndex(f, xf) {
	    this.xf = xf;
	    this.f = f;
	    this.idx = -1;
	    this.lastIdx = -1;
	  }
	  XFindLastIndex.prototype['@@transducer/init'] = _xfBase.init;
	  XFindLastIndex.prototype['@@transducer/result'] = function (result) {
	    return this.xf['@@transducer/result'](this.xf['@@transducer/step'](result, this.lastIdx));
	  };
	  XFindLastIndex.prototype['@@transducer/step'] = function (result, input) {
	    this.idx += 1;
	    if (this.f(input)) {
	      this.lastIdx = this.idx;
	    }
	    return result;
	  };

	  return XFindLastIndex;
	}();

	var _xfindLastIndex = /*#__PURE__*/_curry2(function _xfindLastIndex(f, xf) {
	  return new XFindLastIndex(f, xf);
	});
	module.exports = _xfindLastIndex;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _makeFlat = /*#__PURE__*/__webpack_require__(70);

	/**
	 * Returns a new list by pulling every item out of it (and all its sub-arrays)
	 * and putting them in a new array, depth-first.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig [a] -> [b]
	 * @param {Array} list The array to consider.
	 * @return {Array} The flattened list.
	 * @see R.unnest
	 * @example
	 *
	 *      R.flatten([1, 2, [3, 4], 5, [6, [7, 8, [9, [10, 11], 12]]]]);
	 *      //=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
	 */


	var flatten = /*#__PURE__*/_curry1( /*#__PURE__*/_makeFlat(true));
	module.exports = flatten;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	/**
	 * Returns a new function much like the supplied one, except that the first two
	 * arguments' order is reversed.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig ((a, b, c, ...) -> z) -> (b -> a -> c -> ... -> z)
	 * @param {Function} fn The function to invoke with its first two parameters reversed.
	 * @return {*} The result of invoking `fn` with its first two parameters' order reversed.
	 * @example
	 *
	 *      var mergeThree = (a, b, c) => [].concat(a, b, c);
	 *
	 *      mergeThree(1, 2, 3); //=> [1, 2, 3]
	 *
	 *      R.flip(mergeThree)(1, 2, 3); //=> [2, 1, 3]
	 * @symb R.flip(f)(a, b, c) = f(b, a, c)
	 */


	var flip = /*#__PURE__*/_curry1(function flip(fn) {
	  return curryN(fn.length, function (a, b) {
	    var args = Array.prototype.slice.call(arguments, 0);
	    args[0] = b;
	    args[1] = a;
	    return fn.apply(this, args);
	  });
	});
	module.exports = flip;

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

	var _checkForMethod = /*#__PURE__*/__webpack_require__(86);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Iterate over an input `list`, calling a provided function `fn` for each
	 * element in the list.
	 *
	 * `fn` receives one argument: *(value)*.
	 *
	 * Note: `R.forEach` does not skip deleted or unassigned indices (sparse
	 * arrays), unlike the native `Array.prototype.forEach` method. For more
	 * details on this behavior, see:
	 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Description
	 *
	 * Also note that, unlike `Array.prototype.forEach`, Ramda's `forEach` returns
	 * the original array. In some libraries this function is named `each`.
	 *
	 * Dispatches to the `forEach` method of the second argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.1
	 * @category List
	 * @sig (a -> *) -> [a] -> [a]
	 * @param {Function} fn The function to invoke. Receives one argument, `value`.
	 * @param {Array} list The list to iterate over.
	 * @return {Array} The original list.
	 * @see R.addIndex
	 * @example
	 *
	 *      var printXPlusFive = x => console.log(x + 5);
	 *      R.forEach(printXPlusFive, [1, 2, 3]); //=> [1, 2, 3]
	 *      // logs 6
	 *      // logs 7
	 *      // logs 8
	 * @symb R.forEach(f, [a, b, c]) = [a, b, c]
	 */


	var forEach = /*#__PURE__*/_curry2( /*#__PURE__*/_checkForMethod('forEach', function forEach(fn, list) {
	  var len = list.length;
	  var idx = 0;
	  while (idx < len) {
	    fn(list[idx]);
	    idx += 1;
	  }
	  return list;
	}));
	module.exports = forEach;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var keys = /*#__PURE__*/__webpack_require__(37);

	/**
	 * Iterate over an input `object`, calling a provided function `fn` for each
	 * key and value in the object.
	 *
	 * `fn` receives three argument: *(value, key, obj)*.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.23.0
	 * @category Object
	 * @sig ((a, String, StrMap a) -> Any) -> StrMap a -> StrMap a
	 * @param {Function} fn The function to invoke. Receives three argument, `value`, `key`, `obj`.
	 * @param {Object} obj The object to iterate over.
	 * @return {Object} The original object.
	 * @example
	 *
	 *      var printKeyConcatValue = (value, key) => console.log(key + ':' + value);
	 *      R.forEachObjIndexed(printKeyConcatValue, {x: 1, y: 2}); //=> {x: 1, y: 2}
	 *      // logs x:1
	 *      // logs y:2
	 * @symb R.forEachObjIndexed(f, {x: a, y: b}) = {x: a, y: b}
	 */


	var forEachObjIndexed = /*#__PURE__*/_curry2(function forEachObjIndexed(fn, obj) {
	  var keyList = keys(obj);
	  var idx = 0;
	  while (idx < keyList.length) {
	    var key = keyList[idx];
	    fn(obj[key], key, obj);
	    idx += 1;
	  }
	  return obj;
	});
	module.exports = forEachObjIndexed;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Creates a new object from a list key-value pairs. If a key appears in
	 * multiple pairs, the rightmost pair is included in the object.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category List
	 * @sig [[k,v]] -> {k: v}
	 * @param {Array} pairs An array of two-element arrays that will be the keys and values of the output object.
	 * @return {Object} The object made by pairing up `keys` and `values`.
	 * @see R.toPairs, R.pair
	 * @example
	 *
	 *      R.fromPairs([['a', 1], ['b', 2], ['c', 3]]); //=> {a: 1, b: 2, c: 3}
	 */


	var fromPairs = /*#__PURE__*/_curry1(function fromPairs(pairs) {
	  var result = {};
	  var idx = 0;
	  while (idx < pairs.length) {
	    result[pairs[idx][0]] = pairs[idx][1];
	    idx += 1;
	  }
	  return result;
	});
	module.exports = fromPairs;

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

	var _checkForMethod = /*#__PURE__*/__webpack_require__(86);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var reduceBy = /*#__PURE__*/__webpack_require__(118);

	/**
	 * Splits a list into sub-lists stored in an object, based on the result of
	 * calling a String-returning function on each element, and grouping the
	 * results according to values returned.
	 *
	 * Dispatches to the `groupBy` method of the second argument, if present.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig (a -> String) -> [a] -> {String: [a]}
	 * @param {Function} fn Function :: a -> String
	 * @param {Array} list The array to group
	 * @return {Object} An object with the output of `fn` for keys, mapped to arrays of elements
	 *         that produced that key when passed to `fn`.
	 * @see R.transduce
	 * @example
	 *
	 *      var byGrade = R.groupBy(function(student) {
	 *        var score = student.score;
	 *        return score < 65 ? 'F' :
	 *               score < 70 ? 'D' :
	 *               score < 80 ? 'C' :
	 *               score < 90 ? 'B' : 'A';
	 *      });
	 *      var students = [{name: 'Abby', score: 84},
	 *                      {name: 'Eddy', score: 58},
	 *                      // ...
	 *                      {name: 'Jack', score: 69}];
	 *      byGrade(students);
	 *      // {
	 *      //   'A': [{name: 'Dianne', score: 99}],
	 *      //   'B': [{name: 'Abby', score: 84}]
	 *      //   // ...,
	 *      //   'F': [{name: 'Eddy', score: 58}]
	 *      // }
	 */


	var groupBy = /*#__PURE__*/_curry2( /*#__PURE__*/_checkForMethod('groupBy', /*#__PURE__*/reduceBy(function (acc, item) {
	  if (acc == null) {
	    acc = [];
	  }
	  acc.push(item);
	  return acc;
	}, null)));
	module.exports = groupBy;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Takes a list and returns a list of lists where each sublist's elements are
	 * all satisfied pairwise comparison according to the provided function.
	 * Only adjacent elements are passed to the comparison function.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.21.0
	 * @category List
	 * @sig ((a, a) → Boolean) → [a] → [[a]]
	 * @param {Function} fn Function for determining whether two given (adjacent)
	 *        elements should be in the same group
	 * @param {Array} list The array to group. Also accepts a string, which will be
	 *        treated as a list of characters.
	 * @return {List} A list that contains sublists of elements,
	 *         whose concatenations are equal to the original list.
	 * @example
	 *
	 * R.groupWith(R.equals, [0, 1, 1, 2, 3, 5, 8, 13, 21])
	 * //=> [[0], [1, 1], [2], [3], [5], [8], [13], [21]]
	 *
	 * R.groupWith((a, b) => a + 1 === b, [0, 1, 1, 2, 3, 5, 8, 13, 21])
	 * //=> [[0, 1], [1, 2, 3], [5], [8], [13], [21]]
	 *
	 * R.groupWith((a, b) => a % 2 === b % 2, [0, 1, 1, 2, 3, 5, 8, 13, 21])
	 * //=> [[0], [1, 1], [2], [3, 5], [8], [13, 21]]
	 *
	 * R.groupWith(R.eqBy(isVowel), 'aestiou')
	 * //=> ['ae', 'st', 'iou']
	 */


	var groupWith = /*#__PURE__*/_curry2(function (fn, list) {
	  var res = [];
	  var idx = 0;
	  var len = list.length;
	  while (idx < len) {
	    var nextidx = idx + 1;
	    while (nextidx < len && fn(list[nextidx - 1], list[nextidx])) {
	      nextidx += 1;
	    }
	    res.push(list.slice(idx, nextidx));
	    idx = nextidx;
	  }
	  return res;
	});
	module.exports = groupWith;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns `true` if the first argument is greater than the second; `false`
	 * otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig Ord a => a -> a -> Boolean
	 * @param {*} a
	 * @param {*} b
	 * @return {Boolean}
	 * @see R.lt
	 * @example
	 *
	 *      R.gt(2, 1); //=> true
	 *      R.gt(2, 2); //=> false
	 *      R.gt(2, 3); //=> false
	 *      R.gt('a', 'z'); //=> false
	 *      R.gt('z', 'a'); //=> true
	 */


	var gt = /*#__PURE__*/_curry2(function gt(a, b) {
	  return a > b;
	});
	module.exports = gt;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns `true` if the first argument is greater than or equal to the second;
	 * `false` otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig Ord a => a -> a -> Boolean
	 * @param {Number} a
	 * @param {Number} b
	 * @return {Boolean}
	 * @see R.lte
	 * @example
	 *
	 *      R.gte(2, 1); //=> true
	 *      R.gte(2, 2); //=> true
	 *      R.gte(2, 3); //=> false
	 *      R.gte('a', 'z'); //=> false
	 *      R.gte('z', 'a'); //=> true
	 */


	var gte = /*#__PURE__*/_curry2(function gte(a, b) {
	  return a >= b;
	});
	module.exports = gte;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _has = /*#__PURE__*/__webpack_require__(38);

	/**
	 * Returns whether or not an object has an own property with the specified name
	 *
	 * @func
	 * @memberOf R
	 * @since v0.7.0
	 * @category Object
	 * @sig s -> {s: x} -> Boolean
	 * @param {String} prop The name of the property to check for.
	 * @param {Object} obj The object to query.
	 * @return {Boolean} Whether the property exists.
	 * @example
	 *
	 *      var hasName = R.has('name');
	 *      hasName({name: 'alice'});   //=> true
	 *      hasName({name: 'bob'});     //=> true
	 *      hasName({});                //=> false
	 *
	 *      var point = {x: 0, y: 0};
	 *      var pointHas = R.has(R.__, point);
	 *      pointHas('x');  //=> true
	 *      pointHas('y');  //=> true
	 *      pointHas('z');  //=> false
	 */


	var has = /*#__PURE__*/_curry2(_has);
	module.exports = has;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns whether or not an object or its prototype chain has a property with
	 * the specified name
	 *
	 * @func
	 * @memberOf R
	 * @since v0.7.0
	 * @category Object
	 * @sig s -> {s: x} -> Boolean
	 * @param {String} prop The name of the property to check for.
	 * @param {Object} obj The object to query.
	 * @return {Boolean} Whether the property exists.
	 * @example
	 *
	 *      function Rectangle(width, height) {
	 *        this.width = width;
	 *        this.height = height;
	 *      }
	 *      Rectangle.prototype.area = function() {
	 *        return this.width * this.height;
	 *      };
	 *
	 *      var square = new Rectangle(2, 2);
	 *      R.hasIn('width', square);  //=> true
	 *      R.hasIn('area', square);  //=> true
	 */


	var hasIn = /*#__PURE__*/_curry2(function hasIn(prop, obj) {
	  return prop in obj;
	});
	module.exports = hasIn;

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

	var nth = /*#__PURE__*/__webpack_require__(144);

	/**
	 * Returns the first element of the given list or string. In some libraries
	 * this function is named `first`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig [a] -> a | Undefined
	 * @sig String -> String
	 * @param {Array|String} list
	 * @return {*}
	 * @see R.tail, R.init, R.last
	 * @example
	 *
	 *      R.head(['fi', 'fo', 'fum']); //=> 'fi'
	 *      R.head([]); //=> undefined
	 *
	 *      R.head('abc'); //=> 'a'
	 *      R.head(''); //=> ''
	 */


	var head = /*#__PURE__*/nth(0);
	module.exports = head;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _identity = /*#__PURE__*/__webpack_require__(176);

	/**
	 * A function that does nothing but return the parameter supplied to it. Good
	 * as a default or placeholder function.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig a -> a
	 * @param {*} x The value to return.
	 * @return {*} The input value, `x`.
	 * @example
	 *
	 *      R.identity(1); //=> 1
	 *
	 *      var obj = {};
	 *      R.identity(obj) === obj; //=> true
	 * @symb R.identity(a) = a
	 */


	var identity = /*#__PURE__*/_curry1(_identity);
	module.exports = identity;

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

	function _identity(x) {
	  return x;
	}
	module.exports = _identity;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	/**
	 * Creates a function that will process either the `onTrue` or the `onFalse`
	 * function depending upon the result of the `condition` predicate.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.8.0
	 * @category Logic
	 * @sig (*... -> Boolean) -> (*... -> *) -> (*... -> *) -> (*... -> *)
	 * @param {Function} condition A predicate function
	 * @param {Function} onTrue A function to invoke when the `condition` evaluates to a truthy value.
	 * @param {Function} onFalse A function to invoke when the `condition` evaluates to a falsy value.
	 * @return {Function} A new unary function that will process either the `onTrue` or the `onFalse`
	 *                    function depending upon the result of the `condition` predicate.
	 * @see R.unless, R.when
	 * @example
	 *
	 *      var incCount = R.ifElse(
	 *        R.has('count'),
	 *        R.over(R.lensProp('count'), R.inc),
	 *        R.assoc('count', 1)
	 *      );
	 *      incCount({});           //=> { count: 1 }
	 *      incCount({ count: 1 }); //=> { count: 2 }
	 */


	var ifElse = /*#__PURE__*/_curry3(function ifElse(condition, onTrue, onFalse) {
	  return curryN(Math.max(condition.length, onTrue.length, onFalse.length), function _ifElse() {
	    return condition.apply(this, arguments) ? onTrue.apply(this, arguments) : onFalse.apply(this, arguments);
	  });
	});
	module.exports = ifElse;

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

	var add = /*#__PURE__*/__webpack_require__(10);

	/**
	 * Increments its argument.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Math
	 * @sig Number -> Number
	 * @param {Number} n
	 * @return {Number} n + 1
	 * @see R.dec
	 * @example
	 *
	 *      R.inc(42); //=> 43
	 */


	var inc = /*#__PURE__*/add(1);
	module.exports = inc;

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

	var reduceBy = /*#__PURE__*/__webpack_require__(118);

	/**
	 * Given a function that generates a key, turns a list of objects into an
	 * object indexing the objects by the given key. Note that if multiple
	 * objects generate the same value for the indexing key only the last value
	 * will be included in the generated object.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category List
	 * @sig (a -> String) -> [{k: v}] -> {k: {k: v}}
	 * @param {Function} fn Function :: a -> String
	 * @param {Array} array The array of objects to index
	 * @return {Object} An object indexing each array element by the given property.
	 * @example
	 *
	 *      var list = [{id: 'xyz', title: 'A'}, {id: 'abc', title: 'B'}];
	 *      R.indexBy(R.prop('id'), list);
	 *      //=> {abc: {id: 'abc', title: 'B'}, xyz: {id: 'xyz', title: 'A'}}
	 */


	var indexBy = /*#__PURE__*/reduceBy(function (acc, elem) {
	  return elem;
	}, null);
	module.exports = indexBy;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _indexOf = /*#__PURE__*/__webpack_require__(97);

	var _isArray = /*#__PURE__*/__webpack_require__(21);

	/**
	 * Returns the position of the first occurrence of an item in an array, or -1
	 * if the item is not included in the array. [`R.equals`](#equals) is used to
	 * determine equality.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig a -> [a] -> Number
	 * @param {*} target The item to find.
	 * @param {Array} xs The array to search in.
	 * @return {Number} the index of the target, or -1 if the target is not found.
	 * @see R.lastIndexOf
	 * @example
	 *
	 *      R.indexOf(3, [1,2,3,4]); //=> 2
	 *      R.indexOf(10, [1,2,3,4]); //=> -1
	 */


	var indexOf = /*#__PURE__*/_curry2(function indexOf(target, xs) {
	  return typeof xs.indexOf === 'function' && !_isArray(xs) ? xs.indexOf(target) : _indexOf(xs, target, 0);
	});
	module.exports = indexOf;

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

	var slice = /*#__PURE__*/__webpack_require__(87);

	/**
	 * Returns all but the last element of the given list or string.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category List
	 * @sig [a] -> [a]
	 * @sig String -> String
	 * @param {*} list
	 * @return {*}
	 * @see R.last, R.head, R.tail
	 * @example
	 *
	 *      R.init([1, 2, 3]);  //=> [1, 2]
	 *      R.init([1, 2]);     //=> [1]
	 *      R.init([1]);        //=> []
	 *      R.init([]);         //=> []
	 *
	 *      R.init('abc');  //=> 'ab'
	 *      R.init('ab');   //=> 'a'
	 *      R.init('a');    //=> ''
	 *      R.init('');     //=> ''
	 */


	var init = /*#__PURE__*/slice(0, -1);
	module.exports = init;

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

	var _containsWith = /*#__PURE__*/__webpack_require__(101);

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var _filter = /*#__PURE__*/__webpack_require__(109);

	/**
	 * Takes a predicate `pred`, a list `xs`, and a list `ys`, and returns a list
	 * `xs'` comprising each of the elements of `xs` which is equal to one or more
	 * elements of `ys` according to `pred`.
	 *
	 * `pred` must be a binary function expecting an element from each list.
	 *
	 * `xs`, `ys`, and `xs'` are treated as sets, semantically, so ordering should
	 * not be significant, but since `xs'` is ordered the implementation guarantees
	 * that its values are in the same order as they appear in `xs`. Duplicates are
	 * not removed, so `xs'` may contain duplicates if `xs` contains duplicates.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.24.0
	 * @category Relation
	 * @sig ((a, b) -> Boolean) -> [a] -> [b] -> [a]
	 * @param {Function} pred
	 * @param {Array} xs
	 * @param {Array} ys
	 * @return {Array}
	 * @see R.intersection
	 * @example
	 *
	 *      R.innerJoin(
	 *        (record, id) => record.id === id,
	 *        [{id: 824, name: 'Richie Furay'},
	 *         {id: 956, name: 'Dewey Martin'},
	 *         {id: 313, name: 'Bruce Palmer'},
	 *         {id: 456, name: 'Stephen Stills'},
	 *         {id: 177, name: 'Neil Young'}],
	 *        [177, 456, 999]
	 *      );
	 *      //=> [{id: 456, name: 'Stephen Stills'}, {id: 177, name: 'Neil Young'}]
	 */


	var innerJoin = /*#__PURE__*/_curry3(function innerJoin(pred, xs, ys) {
	  return _filter(function (x) {
	    return _containsWith(pred, x, ys);
	  }, xs);
	});
	module.exports = innerJoin;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Inserts the supplied element into the list, at the specified `index`. _Note that

	 * this is not destructive_: it returns a copy of the list with the changes.
	 * <small>No lists have been harmed in the application of this function.</small>
	 *
	 * @func
	 * @memberOf R
	 * @since v0.2.2
	 * @category List
	 * @sig Number -> a -> [a] -> [a]
	 * @param {Number} index The position to insert the element
	 * @param {*} elt The element to insert into the Array
	 * @param {Array} list The list to insert into
	 * @return {Array} A new Array with `elt` inserted at `index`.
	 * @example
	 *
	 *      R.insert(2, 'x', [1,2,3,4]); //=> [1,2,'x',3,4]
	 */


	var insert = /*#__PURE__*/_curry3(function insert(idx, elt, list) {
	  idx = idx < list.length && idx >= 0 ? idx : list.length;
	  var result = Array.prototype.slice.call(list, 0);
	  result.splice(idx, 0, elt);
	  return result;
	});
	module.exports = insert;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Inserts the sub-list into the list, at the specified `index`. _Note that this is not
	 * destructive_: it returns a copy of the list with the changes.
	 * <small>No lists have been harmed in the application of this function.</small>
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category List
	 * @sig Number -> [a] -> [a] -> [a]
	 * @param {Number} index The position to insert the sub-list
	 * @param {Array} elts The sub-list to insert into the Array
	 * @param {Array} list The list to insert the sub-list into
	 * @return {Array} A new Array with `elts` inserted starting at `index`.
	 * @example
	 *
	 *      R.insertAll(2, ['x','y','z'], [1,2,3,4]); //=> [1,2,'x','y','z',3,4]
	 */


	var insertAll = /*#__PURE__*/_curry3(function insertAll(idx, elts, list) {
	  idx = idx < list.length && idx >= 0 ? idx : list.length;
	  return [].concat(Array.prototype.slice.call(list, 0, idx), elts, Array.prototype.slice.call(list, idx));
	});
	module.exports = insertAll;

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

	var _contains = /*#__PURE__*/__webpack_require__(96);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _filter = /*#__PURE__*/__webpack_require__(109);

	var flip = /*#__PURE__*/__webpack_require__(164);

	var uniq = /*#__PURE__*/__webpack_require__(186);

	/**
	 * Combines two lists into a set (i.e. no duplicates) composed of those
	 * elements common to both lists.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig [*] -> [*] -> [*]
	 * @param {Array} list1 The first list.
	 * @param {Array} list2 The second list.
	 * @return {Array} The list of elements found in both `list1` and `list2`.
	 * @see R.innerJoin
	 * @example
	 *
	 *      R.intersection([1,2,3,4], [7,6,5,4,3]); //=> [4, 3]
	 */


	var intersection = /*#__PURE__*/_curry2(function intersection(list1, list2) {
	  var lookupList, filteredList;
	  if (list1.length > list2.length) {
	    lookupList = list1;
	    filteredList = list2;
	  } else {
	    lookupList = list2;
	    filteredList = list1;
	  }
	  return uniq(_filter(flip(_contains)(lookupList), filteredList));
	});
	module.exports = intersection;

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

	var identity = /*#__PURE__*/__webpack_require__(175);

	var uniqBy = /*#__PURE__*/__webpack_require__(187);

	/**
	 * Returns a new list containing only one copy of each element in the original
	 * list. [`R.equals`](#equals) is used to determine equality.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig [a] -> [a]
	 * @param {Array} list The array to consider.
	 * @return {Array} The list of unique items.
	 * @example
	 *
	 *      R.uniq([1, 1, 2, 1]); //=> [1, 2]
	 *      R.uniq([1, '1']);     //=> [1, '1']
	 *      R.uniq([[42], [42]]); //=> [[42]]
	 */


	var uniq = /*#__PURE__*/uniqBy(identity);
	module.exports = uniq;

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

	var _Set = /*#__PURE__*/__webpack_require__(188);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns a new list containing only one copy of each element in the original
	 * list, based upon the value returned by applying the supplied function to
	 * each list element. Prefers the first item if the supplied function produces
	 * the same value on two items. [`R.equals`](#equals) is used for comparison.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category List
	 * @sig (a -> b) -> [a] -> [a]
	 * @param {Function} fn A function used to produce a value to use during comparisons.
	 * @param {Array} list The array to consider.
	 * @return {Array} The list of unique items.
	 * @example
	 *
	 *      R.uniqBy(Math.abs, [-1, -5, 2, 10, 1, 2]); //=> [-1, -5, 2, 10]
	 */


	var uniqBy = /*#__PURE__*/_curry2(function uniqBy(fn, list) {
	  var set = new _Set();
	  var result = [];
	  var idx = 0;
	  var appliedItem, item;

	  while (idx < list.length) {
	    item = list[idx];
	    appliedItem = fn(item);
	    if (set.add(appliedItem)) {
	      result.push(item);
	    }
	    idx += 1;
	  }
	  return result;
	});
	module.exports = uniqBy;

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

	var _contains = /*#__PURE__*/__webpack_require__(96);

	var _Set = /*#__PURE__*/function () {

	  function _Set() {
	    /* globals Set */
	    this._nativeSet = typeof Set === 'function' ? new Set() : null;
	    this._items = {};
	  }

	  // until we figure out why jsdoc chokes on this
	  // @param item The item to add to the Set
	  // @returns {boolean} true if the item did not exist prior, otherwise false
	  //
	  _Set.prototype.add = function (item) {
	    return !hasOrAdd(item, true, this);
	  };

	  //
	  // @param item The item to check for existence in the Set
	  // @returns {boolean} true if the item exists in the Set, otherwise false
	  //
	  _Set.prototype.has = function (item) {
	    return hasOrAdd(item, false, this);
	  };

	  //
	  // Combines the logic for checking whether an item is a member of the set and
	  // for adding a new item to the set.
	  //
	  // @param item       The item to check or add to the Set instance.
	  // @param shouldAdd  If true, the item will be added to the set if it doesn't
	  //                   already exist.
	  // @param set        The set instance to check or add to.
	  // @return {boolean} true if the item already existed, otherwise false.
	  //
	  return _Set;
	}();

	function hasOrAdd(item, shouldAdd, set) {
	  var type = typeof item;
	  var prevSize, newSize;
	  switch (type) {
	    case 'string':
	    case 'number':
	      // distinguish between +0 and -0
	      if (item === 0 && 1 / item === -Infinity) {
	        if (set._items['-0']) {
	          return true;
	        } else {
	          if (shouldAdd) {
	            set._items['-0'] = true;
	          }
	          return false;
	        }
	      }
	      // these types can all utilise the native Set
	      if (set._nativeSet !== null) {
	        if (shouldAdd) {
	          prevSize = set._nativeSet.size;
	          set._nativeSet.add(item);
	          newSize = set._nativeSet.size;
	          return newSize === prevSize;
	        } else {
	          return set._nativeSet.has(item);
	        }
	      } else {
	        if (!(type in set._items)) {
	          if (shouldAdd) {
	            set._items[type] = {};
	            set._items[type][item] = true;
	          }
	          return false;
	        } else if (item in set._items[type]) {
	          return true;
	        } else {
	          if (shouldAdd) {
	            set._items[type][item] = true;
	          }
	          return false;
	        }
	      }

	    case 'boolean':
	      // set._items['boolean'] holds a two element array
	      // representing [ falseExists, trueExists ]
	      if (type in set._items) {
	        var bIdx = item ? 1 : 0;
	        if (set._items[type][bIdx]) {
	          return true;
	        } else {
	          if (shouldAdd) {
	            set._items[type][bIdx] = true;
	          }
	          return false;
	        }
	      } else {
	        if (shouldAdd) {
	          set._items[type] = item ? [false, true] : [true, false];
	        }
	        return false;
	      }

	    case 'function':
	      // compare functions for reference equality
	      if (set._nativeSet !== null) {
	        if (shouldAdd) {
	          prevSize = set._nativeSet.size;
	          set._nativeSet.add(item);
	          newSize = set._nativeSet.size;
	          return newSize === prevSize;
	        } else {
	          return set._nativeSet.has(item);
	        }
	      } else {
	        if (!(type in set._items)) {
	          if (shouldAdd) {
	            set._items[type] = [item];
	          }
	          return false;
	        }
	        if (!_contains(item, set._items[type])) {
	          if (shouldAdd) {
	            set._items[type].push(item);
	          }
	          return false;
	        }
	        return true;
	      }

	    case 'undefined':
	      if (set._items[type]) {
	        return true;
	      } else {
	        if (shouldAdd) {
	          set._items[type] = true;
	        }
	        return false;
	      }

	    case 'object':
	      if (item === null) {
	        if (!set._items['null']) {
	          if (shouldAdd) {
	            set._items['null'] = true;
	          }
	          return false;
	        }
	        return true;
	      }
	    /* falls through */
	    default:
	      // reduce the search size of heterogeneous sets by creating buckets
	      // for each type.
	      type = Object.prototype.toString.call(item);
	      if (!(type in set._items)) {
	        if (shouldAdd) {
	          set._items[type] = [item];
	        }
	        return false;
	      }
	      // scan through all previously applied items
	      if (!_contains(item, set._items[type])) {
	        if (shouldAdd) {
	          set._items[type].push(item);
	        }
	        return false;
	      }
	      return true;
	  }
	}

	// A simple Set type that honours R.equals semantics
	module.exports = _Set;

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

	var _checkForMethod = /*#__PURE__*/__webpack_require__(86);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Creates a new list with the separator interposed between elements.
	 *
	 * Dispatches to the `intersperse` method of the second argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category List
	 * @sig a -> [a] -> [a]
	 * @param {*} separator The element to add to the list.
	 * @param {Array} list The list to be interposed.
	 * @return {Array} The new list.
	 * @example
	 *
	 *      R.intersperse('n', ['ba', 'a', 'a']); //=> ['ba', 'n', 'a', 'n', 'a']
	 */


	var intersperse = /*#__PURE__*/_curry2( /*#__PURE__*/_checkForMethod('intersperse', function intersperse(separator, list) {
	  var out = [];
	  var idx = 0;
	  var length = list.length;
	  while (idx < length) {
	    if (idx === length - 1) {
	      out.push(list[idx]);
	    } else {
	      out.push(list[idx], separator);
	    }
	    idx += 1;
	  }
	  return out;
	}));
	module.exports = intersperse;

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

	var _clone = /*#__PURE__*/__webpack_require__(76);

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var _isTransformer = /*#__PURE__*/__webpack_require__(22);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var _stepCat = /*#__PURE__*/__webpack_require__(191);

	/**
	 * Transforms the items of the list with the transducer and appends the
	 * transformed items to the accumulator using an appropriate iterator function
	 * based on the accumulator type.
	 *
	 * The accumulator can be an array, string, object or a transformer. Iterated
	 * items will be appended to arrays and concatenated to strings. Objects will
	 * be merged directly or 2-item arrays will be merged as key, value pairs.
	 *
	 * The accumulator can also be a transformer object that provides a 2-arity
	 * reducing iterator function, step, 0-arity initial value function, init, and
	 * 1-arity result extraction function result. The step function is used as the
	 * iterator function in reduce. The result function is used to convert the
	 * final accumulator into the return type and in most cases is R.identity. The
	 * init function is used to provide the initial accumulator.
	 *
	 * The iteration is performed with [`R.reduce`](#reduce) after initializing the
	 * transducer.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.12.0
	 * @category List
	 * @sig a -> (b -> b) -> [c] -> a
	 * @param {*} acc The initial accumulator value.
	 * @param {Function} xf The transducer function. Receives a transformer and returns a transformer.
	 * @param {Array} list The list to iterate over.
	 * @return {*} The final, accumulated value.
	 * @example
	 *
	 *      var numbers = [1, 2, 3, 4];
	 *      var transducer = R.compose(R.map(R.add(1)), R.take(2));
	 *
	 *      R.into([], transducer, numbers); //=> [2, 3]
	 *
	 *      var intoArray = R.into([]);
	 *      intoArray(transducer, numbers); //=> [2, 3]
	 */


	var into = /*#__PURE__*/_curry3(function into(acc, xf, list) {
	  return _isTransformer(acc) ? _reduce(xf(acc), acc['@@transducer/init'](), list) : _reduce(xf(_stepCat(acc)), _clone(acc, [], [], false), list);
	});
	module.exports = into;

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

	var _assign = /*#__PURE__*/__webpack_require__(192);

	var _identity = /*#__PURE__*/__webpack_require__(176);

	var _isArrayLike = /*#__PURE__*/__webpack_require__(32);

	var _isTransformer = /*#__PURE__*/__webpack_require__(22);

	var objOf = /*#__PURE__*/__webpack_require__(194);

	var _stepCatArray = {
	  '@@transducer/init': Array,
	  '@@transducer/step': function (xs, x) {
	    xs.push(x);
	    return xs;
	  },
	  '@@transducer/result': _identity
	};
	var _stepCatString = {
	  '@@transducer/init': String,
	  '@@transducer/step': function (a, b) {
	    return a + b;
	  },
	  '@@transducer/result': _identity
	};
	var _stepCatObject = {
	  '@@transducer/init': Object,
	  '@@transducer/step': function (result, input) {
	    return _assign(result, _isArrayLike(input) ? objOf(input[0], input[1]) : input);
	  },
	  '@@transducer/result': _identity
	};

	function _stepCat(obj) {
	  if (_isTransformer(obj)) {
	    return obj;
	  }
	  if (_isArrayLike(obj)) {
	    return _stepCatArray;
	  }
	  if (typeof obj === 'string') {
	    return _stepCatString;
	  }
	  if (typeof obj === 'object') {
	    return _stepCatObject;
	  }
	  throw new Error('Cannot create transformer for ' + obj);
	}
	module.exports = _stepCat;

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

	var _objectAssign = /*#__PURE__*/__webpack_require__(193);

	module.exports = typeof Object.assign === 'function' ? Object.assign : _objectAssign;

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

	var _has = /*#__PURE__*/__webpack_require__(38);

	// Based on https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign


	function _objectAssign(target) {
	  if (target == null) {
	    throw new TypeError('Cannot convert undefined or null to object');
	  }

	  var output = Object(target);
	  var idx = 1;
	  var length = arguments.length;
	  while (idx < length) {
	    var source = arguments[idx];
	    if (source != null) {
	      for (var nextKey in source) {
	        if (_has(nextKey, source)) {
	          output[nextKey] = source[nextKey];
	        }
	      }
	    }
	    idx += 1;
	  }
	  return output;
	}
	module.exports = _objectAssign;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Creates an object containing a single key:value pair.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.18.0
	 * @category Object
	 * @sig String -> a -> {String:a}
	 * @param {String} key
	 * @param {*} val
	 * @return {Object}
	 * @see R.pair
	 * @example
	 *
	 *      var matchPhrases = R.compose(
	 *        R.objOf('must'),
	 *        R.map(R.objOf('match_phrase'))
	 *      );
	 *      matchPhrases(['foo', 'bar', 'baz']); //=> {must: [{match_phrase: 'foo'}, {match_phrase: 'bar'}, {match_phrase: 'baz'}]}
	 */


	var objOf = /*#__PURE__*/_curry2(function objOf(key, val) {
	  var obj = {};
	  obj[key] = val;
	  return obj;
	});
	module.exports = objOf;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _has = /*#__PURE__*/__webpack_require__(38);

	var keys = /*#__PURE__*/__webpack_require__(37);

	/**
	 * Same as [`R.invertObj`](#invertObj), however this accounts for objects with
	 * duplicate values by putting the values into an array.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Object
	 * @sig {s: x} -> {x: [ s, ... ]}
	 * @param {Object} obj The object or array to invert
	 * @return {Object} out A new object with keys in an array.
	 * @see R.invertObj
	 * @example
	 *
	 *      var raceResultsByFirstName = {
	 *        first: 'alice',
	 *        second: 'jake',
	 *        third: 'alice',
	 *      };
	 *      R.invert(raceResultsByFirstName);
	 *      //=> { 'alice': ['first', 'third'], 'jake':['second'] }
	 */


	var invert = /*#__PURE__*/_curry1(function invert(obj) {
	  var props = keys(obj);
	  var len = props.length;
	  var idx = 0;
	  var out = {};

	  while (idx < len) {
	    var key = props[idx];
	    var val = obj[key];
	    var list = _has(val, out) ? out[val] : out[val] = [];
	    list[list.length] = key;
	    idx += 1;
	  }
	  return out;
	});
	module.exports = invert;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var keys = /*#__PURE__*/__webpack_require__(37);

	/**
	 * Returns a new object with the keys of the given object as values, and the
	 * values of the given object, which are coerced to strings, as keys. Note
	 * that the last key found is preferred when handling the same value.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Object
	 * @sig {s: x} -> {x: s}
	 * @param {Object} obj The object or array to invert
	 * @return {Object} out A new object
	 * @see R.invert
	 * @example
	 *
	 *      var raceResults = {
	 *        first: 'alice',
	 *        second: 'jake'
	 *      };
	 *      R.invertObj(raceResults);
	 *      //=> { 'alice': 'first', 'jake':'second' }
	 *
	 *      // Alternatively:
	 *      var raceResults = ['alice', 'jake'];
	 *      R.invertObj(raceResults);
	 *      //=> { 'alice': '0', 'jake':'1' }
	 */


	var invertObj = /*#__PURE__*/_curry1(function invertObj(obj) {
	  var props = keys(obj);
	  var len = props.length;
	  var idx = 0;
	  var out = {};

	  while (idx < len) {
	    var key = props[idx];
	    out[obj[key]] = key;
	    idx += 1;
	  }
	  return out;
	});
	module.exports = invertObj;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isFunction = /*#__PURE__*/__webpack_require__(64);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	var toString = /*#__PURE__*/__webpack_require__(94);

	/**
	 * Turns a named method with a specified arity into a function that can be
	 * called directly supplied with arguments and a target object.
	 *
	 * The returned function is curried and accepts `arity + 1` parameters where
	 * the final parameter is the target object.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig Number -> String -> (a -> b -> ... -> n -> Object -> *)
	 * @param {Number} arity Number of arguments the returned function should take
	 *        before the target object.
	 * @param {String} method Name of the method to call.
	 * @return {Function} A new curried function.
	 * @see R.construct
	 * @example
	 *
	 *      var sliceFrom = R.invoker(1, 'slice');
	 *      sliceFrom(6, 'abcdefghijklm'); //=> 'ghijklm'
	 *      var sliceFrom6 = R.invoker(2, 'slice')(6);
	 *      sliceFrom6(8, 'abcdefghijklm'); //=> 'gh'
	 * @symb R.invoker(0, 'method')(o) = o['method']()
	 * @symb R.invoker(1, 'method')(a, o) = o['method'](a)
	 * @symb R.invoker(2, 'method')(a, b, o) = o['method'](a, b)
	 */


	var invoker = /*#__PURE__*/_curry2(function invoker(arity, method) {
	  return curryN(arity + 1, function () {
	    var target = arguments[arity];
	    if (target != null && _isFunction(target[method])) {
	      return target[method].apply(target, Array.prototype.slice.call(arguments, 0, arity));
	    }
	    throw new TypeError(toString(target) + ' does not have a method named "' + method + '"');
	  });
	});
	module.exports = invoker;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * See if an object (`val`) is an instance of the supplied constructor. This
	 * function will check up the inheritance chain, if any.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category Type
	 * @sig (* -> {*}) -> a -> Boolean
	 * @param {Object} ctor A constructor
	 * @param {*} val The value to test
	 * @return {Boolean}
	 * @example
	 *
	 *      R.is(Object, {}); //=> true
	 *      R.is(Number, 1); //=> true
	 *      R.is(Object, 1); //=> false
	 *      R.is(String, 's'); //=> true
	 *      R.is(String, new String('')); //=> true
	 *      R.is(Object, new String('')); //=> true
	 *      R.is(Object, 's'); //=> false
	 *      R.is(Number, {}); //=> false
	 */


	var is = /*#__PURE__*/_curry2(function is(Ctor, val) {
	  return val != null && val.constructor === Ctor || val instanceof Ctor;
	});
	module.exports = is;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var empty = /*#__PURE__*/__webpack_require__(149);

	var equals = /*#__PURE__*/__webpack_require__(98);

	/**
	 * Returns `true` if the given value is its type's empty value; `false`
	 * otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Logic
	 * @sig a -> Boolean
	 * @param {*} x
	 * @return {Boolean}
	 * @see R.empty
	 * @example
	 *
	 *      R.isEmpty([1, 2, 3]);   //=> false
	 *      R.isEmpty([]);          //=> true
	 *      R.isEmpty('');          //=> true
	 *      R.isEmpty(null);        //=> false
	 *      R.isEmpty({});          //=> true
	 *      R.isEmpty({length: 0}); //=> false
	 */


	var isEmpty = /*#__PURE__*/_curry1(function isEmpty(x) {
	  return x != null && equals(x, empty(x));
	});
	module.exports = isEmpty;

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

	var invoker = /*#__PURE__*/__webpack_require__(197);

	/**
	 * Returns a string made by inserting the `separator` between each element and
	 * concatenating all the elements into a single string.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig String -> [a] -> String
	 * @param {Number|String} separator The string used to separate the elements.
	 * @param {Array} xs The elements to join into a string.
	 * @return {String} str The string made by concatenating `xs` with `separator`.
	 * @see R.split
	 * @example
	 *
	 *      var spacer = R.join(' ');
	 *      spacer(['a', 2, 3.4]);   //=> 'a 2 3.4'
	 *      R.join('|', [1, 2, 3]);    //=> '1|2|3'
	 */


	var join = /*#__PURE__*/invoker(1, 'join');
	module.exports = join;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var converge = /*#__PURE__*/__webpack_require__(116);

	/**
	 * juxt applies a list of functions to a list of values.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category Function
	 * @sig [(a, b, ..., m) -> n] -> ((a, b, ..., m) -> [n])
	 * @param {Array} fns An array of functions
	 * @return {Function} A function that returns a list of values after applying each of the original `fns` to its parameters.
	 * @see R.applySpec
	 * @example
	 *
	 *      var getRange = R.juxt([Math.min, Math.max]);
	 *      getRange(3, 4, 9, -3); //=> [-3, 9]
	 * @symb R.juxt([f, g, h])(a, b) = [f(a, b), g(a, b), h(a, b)]
	 */


	var juxt = /*#__PURE__*/_curry1(function juxt(fns) {
	  return converge(function () {
	    return Array.prototype.slice.call(arguments, 0);
	  }, fns);
	});
	module.exports = juxt;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Returns a list containing the names of all the properties of the supplied
	 * object, including prototype properties.
	 * Note that the order of the output array is not guaranteed to be consistent
	 * across different JS platforms.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.2.0
	 * @category Object
	 * @sig {k: v} -> [k]
	 * @param {Object} obj The object to extract properties from
	 * @return {Array} An array of the object's own and prototype properties.
	 * @see R.keys, R.valuesIn
	 * @example
	 *
	 *      var F = function() { this.x = 'X'; };
	 *      F.prototype.y = 'Y';
	 *      var f = new F();
	 *      R.keysIn(f); //=> ['x', 'y']
	 */


	var keysIn = /*#__PURE__*/_curry1(function keysIn(obj) {
	  var prop;
	  var ks = [];
	  for (prop in obj) {
	    ks[ks.length] = prop;
	  }
	  return ks;
	});
	module.exports = keysIn;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isArray = /*#__PURE__*/__webpack_require__(21);

	var equals = /*#__PURE__*/__webpack_require__(98);

	/**
	 * Returns the position of the last occurrence of an item in an array, or -1 if
	 * the item is not included in the array. [`R.equals`](#equals) is used to
	 * determine equality.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig a -> [a] -> Number
	 * @param {*} target The item to find.
	 * @param {Array} xs The array to search in.
	 * @return {Number} the index of the target, or -1 if the target is not found.
	 * @see R.indexOf
	 * @example
	 *
	 *      R.lastIndexOf(3, [-1,3,3,0,1,2,3,4]); //=> 6
	 *      R.lastIndexOf(10, [1,2,3,4]); //=> -1
	 */


	var lastIndexOf = /*#__PURE__*/_curry2(function lastIndexOf(target, xs) {
	  if (typeof xs.lastIndexOf === 'function' && !_isArray(xs)) {
	    return xs.lastIndexOf(target);
	  } else {
	    var idx = xs.length - 1;
	    while (idx >= 0) {
	      if (equals(xs[idx], target)) {
	        return idx;
	      }
	      idx -= 1;
	    }
	    return -1;
	  }
	});
	module.exports = lastIndexOf;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _isNumber = /*#__PURE__*/__webpack_require__(205);

	/**
	 * Returns the number of elements in the array by returning `list.length`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category List
	 * @sig [a] -> Number
	 * @param {Array} list The array to inspect.
	 * @return {Number} The length of the array.
	 * @example
	 *
	 *      R.length([]); //=> 0
	 *      R.length([1, 2, 3]); //=> 3
	 */


	var length = /*#__PURE__*/_curry1(function length(list) {
	  return list != null && _isNumber(list.length) ? list.length : NaN;
	});
	module.exports = length;

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

	function _isNumber(x) {
	  return Object.prototype.toString.call(x) === '[object Number]';
	}
	module.exports = _isNumber;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var map = /*#__PURE__*/__webpack_require__(29);

	/**
	 * Returns a lens for the given getter and setter functions. The getter "gets"
	 * the value of the focus; the setter "sets" the value of the focus. The setter
	 * should not mutate the data structure.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.8.0
	 * @category Object
	 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s
	 * @sig (s -> a) -> ((a, s) -> s) -> Lens s a
	 * @param {Function} getter
	 * @param {Function} setter
	 * @return {Lens}
	 * @see R.view, R.set, R.over, R.lensIndex, R.lensProp
	 * @example
	 *
	 *      var xLens = R.lens(R.prop('x'), R.assoc('x'));
	 *
	 *      R.view(xLens, {x: 1, y: 2});            //=> 1
	 *      R.set(xLens, 4, {x: 1, y: 2});          //=> {x: 4, y: 2}
	 *      R.over(xLens, R.negate, {x: 1, y: 2});  //=> {x: -1, y: 2}
	 */


	var lens = /*#__PURE__*/_curry2(function lens(getter, setter) {
	  return function (toFunctorFn) {
	    return function (target) {
	      return map(function (focus) {
	        return setter(focus, target);
	      }, toFunctorFn(getter(target)));
	    };
	  };
	});
	module.exports = lens;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var lens = /*#__PURE__*/__webpack_require__(206);

	var nth = /*#__PURE__*/__webpack_require__(144);

	var update = /*#__PURE__*/__webpack_require__(128);

	/**
	 * Returns a lens whose focus is the specified index.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category Object
	 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s
	 * @sig Number -> Lens s a
	 * @param {Number} n
	 * @return {Lens}
	 * @see R.view, R.set, R.over
	 * @example
	 *
	 *      var headLens = R.lensIndex(0);
	 *
	 *      R.view(headLens, ['a', 'b', 'c']);            //=> 'a'
	 *      R.set(headLens, 'x', ['a', 'b', 'c']);        //=> ['x', 'b', 'c']
	 *      R.over(headLens, R.toUpper, ['a', 'b', 'c']); //=> ['A', 'b', 'c']
	 */


	var lensIndex = /*#__PURE__*/_curry1(function lensIndex(n) {
	  return lens(nth(n), update(n));
	});
	module.exports = lensIndex;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var assocPath = /*#__PURE__*/__webpack_require__(58);

	var lens = /*#__PURE__*/__webpack_require__(206);

	var path = /*#__PURE__*/__webpack_require__(41);

	/**
	 * Returns a lens whose focus is the specified path.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category Object
	 * @typedefn Idx = String | Int
	 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s
	 * @sig [Idx] -> Lens s a
	 * @param {Array} path The path to use.
	 * @return {Lens}
	 * @see R.view, R.set, R.over
	 * @example
	 *
	 *      var xHeadYLens = R.lensPath(['x', 0, 'y']);
	 *
	 *      R.view(xHeadYLens, {x: [{y: 2, z: 3}, {y: 4, z: 5}]});
	 *      //=> 2
	 *      R.set(xHeadYLens, 1, {x: [{y: 2, z: 3}, {y: 4, z: 5}]});
	 *      //=> {x: [{y: 1, z: 3}, {y: 4, z: 5}]}
	 *      R.over(xHeadYLens, R.negate, {x: [{y: 2, z: 3}, {y: 4, z: 5}]});
	 *      //=> {x: [{y: -2, z: 3}, {y: 4, z: 5}]}
	 */


	var lensPath = /*#__PURE__*/_curry1(function lensPath(p) {
	  return lens(path(p), assocPath(p));
	});
	module.exports = lensPath;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var assoc = /*#__PURE__*/__webpack_require__(57);

	var lens = /*#__PURE__*/__webpack_require__(206);

	var prop = /*#__PURE__*/__webpack_require__(40);

	/**
	 * Returns a lens whose focus is the specified property.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category Object
	 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s
	 * @sig String -> Lens s a
	 * @param {String} k
	 * @return {Lens}
	 * @see R.view, R.set, R.over
	 * @example
	 *
	 *      var xLens = R.lensProp('x');
	 *
	 *      R.view(xLens, {x: 1, y: 2});            //=> 1
	 *      R.set(xLens, 4, {x: 1, y: 2});          //=> {x: 4, y: 2}
	 *      R.over(xLens, R.negate, {x: 1, y: 2});  //=> {x: -1, y: 2}
	 */


	var lensProp = /*#__PURE__*/_curry1(function lensProp(k) {
	  return lens(prop(k), assoc(k));
	});
	module.exports = lensProp;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns `true` if the first argument is less than the second; `false`
	 * otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig Ord a => a -> a -> Boolean
	 * @param {*} a
	 * @param {*} b
	 * @return {Boolean}
	 * @see R.gt
	 * @example
	 *
	 *      R.lt(2, 1); //=> false
	 *      R.lt(2, 2); //=> false
	 *      R.lt(2, 3); //=> true
	 *      R.lt('a', 'z'); //=> true
	 *      R.lt('z', 'a'); //=> false
	 */


	var lt = /*#__PURE__*/_curry2(function lt(a, b) {
	  return a < b;
	});
	module.exports = lt;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns `true` if the first argument is less than or equal to the second;
	 * `false` otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig Ord a => a -> a -> Boolean
	 * @param {Number} a
	 * @param {Number} b
	 * @return {Boolean}
	 * @see R.gte
	 * @example
	 *
	 *      R.lte(2, 1); //=> false
	 *      R.lte(2, 2); //=> true
	 *      R.lte(2, 3); //=> true
	 *      R.lte('a', 'z'); //=> true
	 *      R.lte('z', 'a'); //=> false
	 */


	var lte = /*#__PURE__*/_curry2(function lte(a, b) {
	  return a <= b;
	});
	module.exports = lte;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * The `mapAccum` function behaves like a combination of map and reduce; it
	 * applies a function to each element of a list, passing an accumulating
	 * parameter from left to right, and returning a final value of this
	 * accumulator together with the new list.
	 *
	 * The iterator function receives two arguments, *acc* and *value*, and should
	 * return a tuple *[acc, value]*.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category List
	 * @sig ((acc, x) -> (acc, y)) -> acc -> [x] -> (acc, [y])
	 * @param {Function} fn The function to be called on every element of the input `list`.
	 * @param {*} acc The accumulator value.
	 * @param {Array} list The list to iterate over.
	 * @return {*} The final, accumulated value.
	 * @see R.addIndex, R.mapAccumRight
	 * @example
	 *
	 *      var digits = ['1', '2', '3', '4'];
	 *      var appender = (a, b) => [a + b, a + b];
	 *
	 *      R.mapAccum(appender, 0, digits); //=> ['01234', ['01', '012', '0123', '01234']]
	 * @symb R.mapAccum(f, a, [b, c, d]) = [
	 *   f(f(f(a, b)[0], c)[0], d)[0],
	 *   [
	 *     f(a, b)[1],
	 *     f(f(a, b)[0], c)[1],
	 *     f(f(f(a, b)[0], c)[0], d)[1]
	 *   ]
	 * ]
	 */


	var mapAccum = /*#__PURE__*/_curry3(function mapAccum(fn, acc, list) {
	  var idx = 0;
	  var len = list.length;
	  var result = [];
	  var tuple = [acc];
	  while (idx < len) {
	    tuple = fn(tuple[0], list[idx]);
	    result[idx] = tuple[1];
	    idx += 1;
	  }
	  return [tuple[0], result];
	});
	module.exports = mapAccum;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * The `mapAccumRight` function behaves like a combination of map and reduce; it
	 * applies a function to each element of a list, passing an accumulating
	 * parameter from right to left, and returning a final value of this
	 * accumulator together with the new list.
	 *
	 * Similar to [`mapAccum`](#mapAccum), except moves through the input list from
	 * the right to the left.
	 *
	 * The iterator function receives two arguments, *value* and *acc*, and should
	 * return a tuple *[value, acc]*.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category List
	 * @sig ((x, acc) -> (y, acc)) -> acc -> [x] -> ([y], acc)
	 * @param {Function} fn The function to be called on every element of the input `list`.
	 * @param {*} acc The accumulator value.
	 * @param {Array} list The list to iterate over.
	 * @return {*} The final, accumulated value.
	 * @see R.addIndex, R.mapAccum
	 * @example
	 *
	 *      var digits = ['1', '2', '3', '4'];
	 *      var append = (a, b) => [a + b, a + b];
	 *
	 *      R.mapAccumRight(append, 5, digits); //=> [['12345', '2345', '345', '45'], '12345']
	 * @symb R.mapAccumRight(f, a, [b, c, d]) = [
	 *   [
	 *     f(b, f(c, f(d, a)[0])[0])[1],
	 *     f(c, f(d, a)[0])[1],
	 *     f(d, a)[1],
	 *   ]
	 *   f(b, f(c, f(d, a)[0])[0])[0],
	 * ]
	 */


	var mapAccumRight = /*#__PURE__*/_curry3(function mapAccumRight(fn, acc, list) {
	  var idx = list.length - 1;
	  var result = [];
	  var tuple = [acc];
	  while (idx >= 0) {
	    tuple = fn(list[idx], tuple[0]);
	    result[idx] = tuple[1];
	    idx -= 1;
	  }
	  return [result, tuple[0]];
	});
	module.exports = mapAccumRight;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var keys = /*#__PURE__*/__webpack_require__(37);

	/**
	 * An Object-specific version of [`map`](#map). The function is applied to three
	 * arguments: *(value, key, obj)*. If only the value is significant, use
	 * [`map`](#map) instead.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Object
	 * @sig ((*, String, Object) -> *) -> Object -> Object
	 * @param {Function} fn
	 * @param {Object} obj
	 * @return {Object}
	 * @see R.map
	 * @example
	 *
	 *      var values = { x: 1, y: 2, z: 3 };
	 *      var prependKeyAndDouble = (num, key, obj) => key + (num * 2);
	 *
	 *      R.mapObjIndexed(prependKeyAndDouble, values); //=> { x: 'x2', y: 'y4', z: 'z6' }
	 */


	var mapObjIndexed = /*#__PURE__*/_curry2(function mapObjIndexed(fn, obj) {
	  return _reduce(function (acc, key) {
	    acc[key] = fn(obj[key], key, obj);
	    return acc;
	  }, {}, keys(obj));
	});
	module.exports = mapObjIndexed;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Tests a regular expression against a String. Note that this function will
	 * return an empty array when there are no matches. This differs from
	 * [`String.prototype.match`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match)
	 * which returns `null` when there are no matches.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category String
	 * @sig RegExp -> String -> [String | Undefined]
	 * @param {RegExp} rx A regular expression.
	 * @param {String} str The string to match against
	 * @return {Array} The list of matches or empty array.
	 * @see R.test
	 * @example
	 *
	 *      R.match(/([a-z]a)/g, 'bananas'); //=> ['ba', 'na', 'na']
	 *      R.match(/a/, 'b'); //=> []
	 *      R.match(/a/, null); //=> TypeError: null does not have a method named "match"
	 */


	var match = /*#__PURE__*/_curry2(function match(rx, str) {
	  return str.match(rx) || [];
	});
	module.exports = match;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isInteger = /*#__PURE__*/__webpack_require__(59);

	/**
	 * `mathMod` behaves like the modulo operator should mathematically, unlike the
	 * `%` operator (and by extension, [`R.modulo`](#modulo)). So while
	 * `-17 % 5` is `-2`, `mathMod(-17, 5)` is `3`. `mathMod` requires Integer
	 * arguments, and returns NaN when the modulus is zero or negative.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category Math
	 * @sig Number -> Number -> Number
	 * @param {Number} m The dividend.
	 * @param {Number} p the modulus.
	 * @return {Number} The result of `b mod a`.
	 * @see R.modulo
	 * @example
	 *
	 *      R.mathMod(-17, 5);  //=> 3
	 *      R.mathMod(17, 5);   //=> 2
	 *      R.mathMod(17, -5);  //=> NaN
	 *      R.mathMod(17, 0);   //=> NaN
	 *      R.mathMod(17.2, 5); //=> NaN
	 *      R.mathMod(17, 5.3); //=> NaN
	 *
	 *      var clock = R.mathMod(R.__, 12);
	 *      clock(15); //=> 3
	 *      clock(24); //=> 0
	 *
	 *      var seventeenMod = R.mathMod(17);
	 *      seventeenMod(3);  //=> 2
	 *      seventeenMod(4);  //=> 1
	 *      seventeenMod(10); //=> 7
	 */


	var mathMod = /*#__PURE__*/_curry2(function mathMod(m, p) {
	  if (!_isInteger(m)) {
	    return NaN;
	  }
	  if (!_isInteger(p) || p < 1) {
	    return NaN;
	  }
	  return (m % p + p) % p;
	});
	module.exports = mathMod;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Takes a function and two values, and returns whichever value produces the
	 * larger result when passed to the provided function.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.8.0
	 * @category Relation
	 * @sig Ord b => (a -> b) -> a -> a -> a
	 * @param {Function} f
	 * @param {*} a
	 * @param {*} b
	 * @return {*}
	 * @see R.max, R.minBy
	 * @example
	 *
	 *      //  square :: Number -> Number
	 *      var square = n => n * n;
	 *
	 *      R.maxBy(square, -3, 2); //=> -3
	 *
	 *      R.reduce(R.maxBy(square), 0, [3, -5, 4, 1, -2]); //=> -5
	 *      R.reduce(R.maxBy(square), 0, []); //=> 0
	 */


	var maxBy = /*#__PURE__*/_curry3(function maxBy(f, a, b) {
	  return f(b) > f(a) ? b : a;
	});
	module.exports = maxBy;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var sum = /*#__PURE__*/__webpack_require__(219);

	/**
	 * Returns the mean of the given list of numbers.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category Math
	 * @sig [Number] -> Number
	 * @param {Array} list
	 * @return {Number}
	 * @see R.median
	 * @example
	 *
	 *      R.mean([2, 7, 9]); //=> 6
	 *      R.mean([]); //=> NaN
	 */


	var mean = /*#__PURE__*/_curry1(function mean(list) {
	  return sum(list) / list.length;
	});
	module.exports = mean;

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

	var add = /*#__PURE__*/__webpack_require__(10);

	var reduce = /*#__PURE__*/__webpack_require__(42);

	/**
	 * Adds together all the elements of a list.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Math
	 * @sig [Number] -> Number
	 * @param {Array} list An array of numbers
	 * @return {Number} The sum of all the numbers in the list.
	 * @see R.reduce
	 * @example
	 *
	 *      R.sum([2,4,6,8,100,1]); //=> 121
	 */


	var sum = /*#__PURE__*/reduce(add, 0);
	module.exports = sum;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var mean = /*#__PURE__*/__webpack_require__(218);

	/**
	 * Returns the median of the given list of numbers.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category Math
	 * @sig [Number] -> Number
	 * @param {Array} list
	 * @return {Number}
	 * @see R.mean
	 * @example
	 *
	 *      R.median([2, 9, 7]); //=> 7
	 *      R.median([7, 2, 10, 9]); //=> 8
	 *      R.median([]); //=> NaN
	 */


	var median = /*#__PURE__*/_curry1(function median(list) {
	  var len = list.length;
	  if (len === 0) {
	    return NaN;
	  }
	  var width = 2 - len % 2;
	  var idx = (len - width) / 2;
	  return mean(Array.prototype.slice.call(list, 0).sort(function (a, b) {
	    return a < b ? -1 : a > b ? 1 : 0;
	  }).slice(idx, idx + width));
	});
	module.exports = median;

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

	var memoizeWith = /*#__PURE__*/__webpack_require__(222);

	var toString = /*#__PURE__*/__webpack_require__(94);

	/**
	 * Creates a new function that, when invoked, caches the result of calling `fn`
	 * for a given argument set and returns the result. Subsequent calls to the
	 * memoized `fn` with the same argument set will not result in an additional
	 * call to `fn`; instead, the cached result for that set of arguments will be
	 * returned.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig (*... -> a) -> (*... -> a)
	 * @param {Function} fn The function to memoize.
	 * @return {Function} Memoized version of `fn`.
	 * @see R.memoizeWith
	 * @deprecated since v0.25.0
	 * @example
	 *
	 *      let count = 0;
	 *      const factorial = R.memoize(n => {
	 *        count += 1;
	 *        return R.product(R.range(1, n + 1));
	 *      });
	 *      factorial(5); //=> 120
	 *      factorial(5); //=> 120
	 *      factorial(5); //=> 120
	 *      count; //=> 1
	 */


	var memoize = /*#__PURE__*/memoizeWith(function () {
	  return toString(arguments);
	});
	module.exports = memoize;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _has = /*#__PURE__*/__webpack_require__(38);

	/**
	 * A customisable version of [`R.memoize`](#memoize). `memoizeWith` takes an
	 * additional function that will be applied to a given argument set and used to
	 * create the cache key under which the results of the function to be memoized
	 * will be stored. Care must be taken when implementing key generation to avoid
	 * clashes that may overwrite previous entries erroneously.
	 *
	 *
	 * @func
	 * @memberOf R
	 * @since v0.24.0
	 * @category Function
	 * @sig (*... -> String) -> (*... -> a) -> (*... -> a)
	 * @param {Function} fn The function to generate the cache key.
	 * @param {Function} fn The function to memoize.
	 * @return {Function} Memoized version of `fn`.
	 * @see R.memoize
	 * @example
	 *
	 *      let count = 0;
	 *      const factorial = R.memoizeWith(R.identity, n => {
	 *        count += 1;
	 *        return R.product(R.range(1, n + 1));
	 *      });
	 *      factorial(5); //=> 120
	 *      factorial(5); //=> 120
	 *      factorial(5); //=> 120
	 *      count; //=> 1
	 */


	var memoizeWith = /*#__PURE__*/_curry2(function memoizeWith(mFn, fn) {
	  var cache = {};
	  return _arity(fn.length, function () {
	    var key = mFn.apply(this, arguments);
	    if (!_has(key, cache)) {
	      cache[key] = fn.apply(this, arguments);
	    }
	    return cache[key];
	  });
	});
	module.exports = memoizeWith;

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

	var _assign = /*#__PURE__*/__webpack_require__(192);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Create a new object with the own properties of the first object merged with
	 * the own properties of the second object. If a key exists in both objects,
	 * the value from the second object will be used.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig {k: v} -> {k: v} -> {k: v}
	 * @param {Object} l
	 * @param {Object} r
	 * @return {Object}
	 * @see R.mergeDeepRight, R.mergeWith, R.mergeWithKey
	 * @example
	 *
	 *      R.merge({ 'name': 'fred', 'age': 10 }, { 'age': 40 });
	 *      //=> { 'name': 'fred', 'age': 40 }
	 *
	 *      var resetToDefault = R.merge(R.__, {x: 0});
	 *      resetToDefault({x: 5, y: 2}); //=> {x: 0, y: 2}
	 * @symb R.merge({ x: 1, y: 2 }, { y: 5, z: 3 }) = { x: 1, y: 5, z: 3 }
	 */


	var merge = /*#__PURE__*/_curry2(function merge(l, r) {
	  return _assign({}, l, r);
	});
	module.exports = merge;

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

	var _assign = /*#__PURE__*/__webpack_require__(192);

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Merges a list of objects together into one object.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category List
	 * @sig [{k: v}] -> {k: v}
	 * @param {Array} list An array of objects
	 * @return {Object} A merged object.
	 * @see R.reduce
	 * @example
	 *
	 *      R.mergeAll([{foo:1},{bar:2},{baz:3}]); //=> {foo:1,bar:2,baz:3}
	 *      R.mergeAll([{foo:1},{foo:2},{bar:2}]); //=> {foo:2,bar:2}
	 * @symb R.mergeAll([{ x: 1 }, { y: 2 }, { z: 3 }]) = { x: 1, y: 2, z: 3 }
	 */


	var mergeAll = /*#__PURE__*/_curry1(function mergeAll(list) {
	  return _assign.apply(null, [{}].concat(list));
	});
	module.exports = mergeAll;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var mergeDeepWithKey = /*#__PURE__*/__webpack_require__(226);

	/**
	 * Creates a new object with the own properties of the first object merged with
	 * the own properties of the second object. If a key exists in both objects:
	 * - and both values are objects, the two values will be recursively merged
	 * - otherwise the value from the first object will be used.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.24.0
	 * @category Object
	 * @sig {a} -> {a} -> {a}
	 * @param {Object} lObj
	 * @param {Object} rObj
	 * @return {Object}
	 * @see R.merge, R.mergeDeepRight, R.mergeDeepWith, R.mergeDeepWithKey
	 * @example
	 *
	 *      R.mergeDeepLeft({ name: 'fred', age: 10, contact: { email: 'moo@example.com' }},
	 *                      { age: 40, contact: { email: 'baa@example.com' }});
	 *      //=> { name: 'fred', age: 10, contact: { email: 'moo@example.com' }}
	 */


	var mergeDeepLeft = /*#__PURE__*/_curry2(function mergeDeepLeft(lObj, rObj) {
	  return mergeDeepWithKey(function (k, lVal, rVal) {
	    return lVal;
	  }, lObj, rObj);
	});
	module.exports = mergeDeepLeft;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var _isObject = /*#__PURE__*/__webpack_require__(110);

	var mergeWithKey = /*#__PURE__*/__webpack_require__(227);

	/**
	 * Creates a new object with the own properties of the two provided objects.
	 * If a key exists in both objects:
	 * - and both associated values are also objects then the values will be
	 *   recursively merged.
	 * - otherwise the provided function is applied to the key and associated values
	 *   using the resulting value as the new value associated with the key.
	 * If a key only exists in one object, the value will be associated with the key
	 * of the resulting object.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.24.0
	 * @category Object
	 * @sig ((String, a, a) -> a) -> {a} -> {a} -> {a}
	 * @param {Function} fn
	 * @param {Object} lObj
	 * @param {Object} rObj
	 * @return {Object}
	 * @see R.mergeWithKey, R.mergeDeep, R.mergeDeepWith
	 * @example
	 *
	 *      let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r
	 *      R.mergeDeepWithKey(concatValues,
	 *                         { a: true, c: { thing: 'foo', values: [10, 20] }},
	 *                         { b: true, c: { thing: 'bar', values: [15, 35] }});
	 *      //=> { a: true, b: true, c: { thing: 'bar', values: [10, 20, 15, 35] }}
	 */


	var mergeDeepWithKey = /*#__PURE__*/_curry3(function mergeDeepWithKey(fn, lObj, rObj) {
	  return mergeWithKey(function (k, lVal, rVal) {
	    if (_isObject(lVal) && _isObject(rVal)) {
	      return mergeDeepWithKey(fn, lVal, rVal);
	    } else {
	      return fn(k, lVal, rVal);
	    }
	  }, lObj, rObj);
	});
	module.exports = mergeDeepWithKey;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var _has = /*#__PURE__*/__webpack_require__(38);

	/**
	 * Creates a new object with the own properties of the two provided objects. If
	 * a key exists in both objects, the provided function is applied to the key
	 * and the values associated with the key in each object, with the result being
	 * used as the value associated with the key in the returned object.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category Object
	 * @sig ((String, a, a) -> a) -> {a} -> {a} -> {a}
	 * @param {Function} fn
	 * @param {Object} l
	 * @param {Object} r
	 * @return {Object}
	 * @see R.mergeDeepWithKey, R.merge, R.mergeWith
	 * @example
	 *
	 *      let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r
	 *      R.mergeWithKey(concatValues,
	 *                     { a: true, thing: 'foo', values: [10, 20] },
	 *                     { b: true, thing: 'bar', values: [15, 35] });
	 *      //=> { a: true, b: true, thing: 'bar', values: [10, 20, 15, 35] }
	 * @symb R.mergeWithKey(f, { x: 1, y: 2 }, { y: 5, z: 3 }) = { x: 1, y: f('y', 2, 5), z: 3 }
	 */


	var mergeWithKey = /*#__PURE__*/_curry3(function mergeWithKey(fn, l, r) {
	  var result = {};
	  var k;

	  for (k in l) {
	    if (_has(k, l)) {
	      result[k] = _has(k, r) ? fn(k, l[k], r[k]) : l[k];
	    }
	  }

	  for (k in r) {
	    if (_has(k, r) && !_has(k, result)) {
	      result[k] = r[k];
	    }
	  }

	  return result;
	});
	module.exports = mergeWithKey;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var mergeDeepWithKey = /*#__PURE__*/__webpack_require__(226);

	/**
	 * Creates a new object with the own properties of the first object merged with
	 * the own properties of the second object. If a key exists in both objects:
	 * - and both values are objects, the two values will be recursively merged
	 * - otherwise the value from the second object will be used.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.24.0
	 * @category Object
	 * @sig {a} -> {a} -> {a}
	 * @param {Object} lObj
	 * @param {Object} rObj
	 * @return {Object}
	 * @see R.merge, R.mergeDeepLeft, R.mergeDeepWith, R.mergeDeepWithKey
	 * @example
	 *
	 *      R.mergeDeepRight({ name: 'fred', age: 10, contact: { email: 'moo@example.com' }},
	 *                       { age: 40, contact: { email: 'baa@example.com' }});
	 *      //=> { name: 'fred', age: 40, contact: { email: 'baa@example.com' }}
	 */


	var mergeDeepRight = /*#__PURE__*/_curry2(function mergeDeepRight(lObj, rObj) {
	  return mergeDeepWithKey(function (k, lVal, rVal) {
	    return rVal;
	  }, lObj, rObj);
	});
	module.exports = mergeDeepRight;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var mergeDeepWithKey = /*#__PURE__*/__webpack_require__(226);

	/**
	 * Creates a new object with the own properties of the two provided objects.
	 * If a key exists in both objects:
	 * - and both associated values are also objects then the values will be
	 *   recursively merged.
	 * - otherwise the provided function is applied to associated values using the
	 *   resulting value as the new value associated with the key.
	 * If a key only exists in one object, the value will be associated with the key
	 * of the resulting object.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.24.0
	 * @category Object
	 * @sig ((a, a) -> a) -> {a} -> {a} -> {a}
	 * @param {Function} fn
	 * @param {Object} lObj
	 * @param {Object} rObj
	 * @return {Object}
	 * @see R.mergeWith, R.mergeDeep, R.mergeDeepWithKey
	 * @example
	 *
	 *      R.mergeDeepWith(R.concat,
	 *                      { a: true, c: { values: [10, 20] }},
	 *                      { b: true, c: { values: [15, 35] }});
	 *      //=> { a: true, b: true, c: { values: [10, 20, 15, 35] }}
	 */


	var mergeDeepWith = /*#__PURE__*/_curry3(function mergeDeepWith(fn, lObj, rObj) {
	  return mergeDeepWithKey(function (k, lVal, rVal) {
	    return fn(lVal, rVal);
	  }, lObj, rObj);
	});
	module.exports = mergeDeepWith;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var mergeWithKey = /*#__PURE__*/__webpack_require__(227);

	/**
	 * Creates a new object with the own properties of the two provided objects. If
	 * a key exists in both objects, the provided function is applied to the values
	 * associated with the key in each object, with the result being used as the
	 * value associated with the key in the returned object.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category Object
	 * @sig ((a, a) -> a) -> {a} -> {a} -> {a}
	 * @param {Function} fn
	 * @param {Object} l
	 * @param {Object} r
	 * @return {Object}
	 * @see R.mergeDeepWith, R.merge, R.mergeWithKey
	 * @example
	 *
	 *      R.mergeWith(R.concat,
	 *                  { a: true, values: [10, 20] },
	 *                  { b: true, values: [15, 35] });
	 *      //=> { a: true, b: true, values: [10, 20, 15, 35] }
	 */


	var mergeWith = /*#__PURE__*/_curry3(function mergeWith(fn, l, r) {
	  return mergeWithKey(function (_, _l, _r) {
	    return fn(_l, _r);
	  }, l, r);
	});
	module.exports = mergeWith;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns the smaller of its two arguments.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig Ord a => a -> a -> a
	 * @param {*} a
	 * @param {*} b
	 * @return {*}
	 * @see R.minBy, R.max
	 * @example
	 *
	 *      R.min(789, 123); //=> 123
	 *      R.min('a', 'b'); //=> 'a'
	 */


	var min = /*#__PURE__*/_curry2(function min(a, b) {
	  return b < a ? b : a;
	});
	module.exports = min;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Takes a function and two values, and returns whichever value produces the
	 * smaller result when passed to the provided function.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.8.0
	 * @category Relation
	 * @sig Ord b => (a -> b) -> a -> a -> a
	 * @param {Function} f
	 * @param {*} a
	 * @param {*} b
	 * @return {*}
	 * @see R.min, R.maxBy
	 * @example
	 *
	 *      //  square :: Number -> Number
	 *      var square = n => n * n;
	 *
	 *      R.minBy(square, -3, 2); //=> 2
	 *
	 *      R.reduce(R.minBy(square), Infinity, [3, -5, 4, 1, -2]); //=> 1
	 *      R.reduce(R.minBy(square), Infinity, []); //=> Infinity
	 */


	var minBy = /*#__PURE__*/_curry3(function minBy(f, a, b) {
	  return f(b) < f(a) ? b : a;
	});
	module.exports = minBy;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Divides the first parameter by the second and returns the remainder. Note
	 * that this function preserves the JavaScript-style behavior for modulo. For
	 * mathematical modulo see [`mathMod`](#mathMod).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.1
	 * @category Math
	 * @sig Number -> Number -> Number
	 * @param {Number} a The value to the divide.
	 * @param {Number} b The pseudo-modulus
	 * @return {Number} The result of `b % a`.
	 * @see R.mathMod
	 * @example
	 *
	 *      R.modulo(17, 3); //=> 2
	 *      // JS behavior:
	 *      R.modulo(-17, 3); //=> -2
	 *      R.modulo(17, -3); //=> 2
	 *
	 *      var isOdd = R.modulo(R.__, 2);
	 *      isOdd(42); //=> 0
	 *      isOdd(21); //=> 1
	 */


	var modulo = /*#__PURE__*/_curry2(function modulo(a, b) {
	  return a % b;
	});
	module.exports = modulo;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Multiplies two numbers. Equivalent to `a * b` but curried.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Math
	 * @sig Number -> Number -> Number
	 * @param {Number} a The first value.
	 * @param {Number} b The second value.
	 * @return {Number} The result of `a * b`.
	 * @see R.divide
	 * @example
	 *
	 *      var double = R.multiply(2);
	 *      var triple = R.multiply(3);
	 *      double(3);       //=>  6
	 *      triple(4);       //=> 12
	 *      R.multiply(2, 5);  //=> 10
	 */


	var multiply = /*#__PURE__*/_curry2(function multiply(a, b) {
	  return a * b;
	});
	module.exports = multiply;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Negates its argument.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Math
	 * @sig Number -> Number
	 * @param {Number} n
	 * @return {Number}
	 * @example
	 *
	 *      R.negate(42); //=> -42
	 */


	var negate = /*#__PURE__*/_curry1(function negate(n) {
	  return -n;
	});
	module.exports = negate;

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

	var _complement = /*#__PURE__*/__webpack_require__(107);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xany = /*#__PURE__*/__webpack_require__(45);

	var any = /*#__PURE__*/__webpack_require__(44);

	/**
	 * Returns `true` if no elements of the list match the predicate, `false`
	 * otherwise.
	 *
	 * Dispatches to the `any` method of the second argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.12.0
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> Boolean
	 * @param {Function} fn The predicate function.
	 * @param {Array} list The array to consider.
	 * @return {Boolean} `true` if the predicate is not satisfied by every element, `false` otherwise.
	 * @see R.all, R.any
	 * @example
	 *
	 *      var isEven = n => n % 2 === 0;
	 *      var isOdd = n => n % 2 === 1;
	 *
	 *      R.none(isEven, [1, 3, 5, 7, 9, 11]); //=> true
	 *      R.none(isOdd, [1, 3, 5, 7, 8, 11]); //=> false
	 */


	var none = /*#__PURE__*/_curry2( /*#__PURE__*/_complement( /*#__PURE__*/_dispatchable(['any'], _xany, any)));
	module.exports = none;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	var nth = /*#__PURE__*/__webpack_require__(144);

	/**
	 * Returns a function which returns its nth argument.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category Function
	 * @sig Number -> *... -> *
	 * @param {Number} n
	 * @return {Function}
	 * @example
	 *
	 *      R.nthArg(1)('a', 'b', 'c'); //=> 'b'
	 *      R.nthArg(-1)('a', 'b', 'c'); //=> 'c'
	 * @symb R.nthArg(-1)(a, b, c) = c
	 * @symb R.nthArg(0)(a, b, c) = a
	 * @symb R.nthArg(1)(a, b, c) = b
	 */


	var nthArg = /*#__PURE__*/_curry1(function nthArg(n) {
	  var arity = n < 0 ? 1 : n + 1;
	  return curryN(arity, function () {
	    return nth(n, arguments);
	  });
	});
	module.exports = nthArg;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * `o` is a curried composition function that returns a unary function.
	 * Like [`compose`](#compose), `o` performs right-to-left function composition.
	 * Unlike [`compose`](#compose), the rightmost function passed to `o` will be
	 * invoked with only one argument.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.24.0
	 * @category Function
	 * @sig (b -> c) -> (a -> b) -> a -> c
	 * @param {Function} f
	 * @param {Function} g
	 * @return {Function}
	 * @see R.compose, R.pipe
	 * @example
	 *
	 *      var classyGreeting = name => "The name's " + name.last + ", " + name.first + " " + name.last
	 *      var yellGreeting = R.o(R.toUpper, classyGreeting);
	 *      yellGreeting({first: 'James', last: 'Bond'}); //=> "THE NAME'S BOND, JAMES BOND"
	 *
	 *      R.o(R.multiply(10), R.add(10))(-4) //=> 60
	 *
	 * @symb R.o(f, g, x) = f(g(x))
	 */


	var o = /*#__PURE__*/_curry3(function o(f, g, x) {
	  return f(g(x));
	});
	module.exports = o;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _of = /*#__PURE__*/__webpack_require__(240);

	/**
	 * Returns a singleton array containing the value provided.
	 *
	 * Note this `of` is different from the ES6 `of`; See
	 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category Function
	 * @sig a -> [a]
	 * @param {*} x any value
	 * @return {Array} An array wrapping `x`.
	 * @example
	 *
	 *      R.of(null); //=> [null]
	 *      R.of([42]); //=> [[42]]
	 */


	var of = /*#__PURE__*/_curry1(_of);
	module.exports = of;

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

	function _of(x) {
	  return [x];
	}
	module.exports = _of;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns a partial copy of an object omitting the keys specified.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig [String] -> {String: *} -> {String: *}
	 * @param {Array} names an array of String property names to omit from the new object
	 * @param {Object} obj The object to copy from
	 * @return {Object} A new object with properties from `names` not on it.
	 * @see R.pick
	 * @example
	 *
	 *      R.omit(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, c: 3}
	 */


	var omit = /*#__PURE__*/_curry2(function omit(names, obj) {
	  var result = {};
	  var index = {};
	  var idx = 0;
	  var len = names.length;

	  while (idx < len) {
	    index[names[idx]] = 1;
	    idx += 1;
	  }

	  for (var prop in obj) {
	    if (!index.hasOwnProperty(prop)) {
	      result[prop] = obj[prop];
	    }
	  }
	  return result;
	});
	module.exports = omit;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Accepts a function `fn` and returns a function that guards invocation of
	 * `fn` such that `fn` can only ever be called once, no matter how many times
	 * the returned function is invoked. The first value calculated is returned in
	 * subsequent invocations.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig (a... -> b) -> (a... -> b)
	 * @param {Function} fn The function to wrap in a call-only-once wrapper.
	 * @return {Function} The wrapped function.
	 * @example
	 *
	 *      var addOneOnce = R.once(x => x + 1);
	 *      addOneOnce(10); //=> 11
	 *      addOneOnce(addOneOnce(50)); //=> 11
	 */


	var once = /*#__PURE__*/_curry1(function once(fn) {
	  var called = false;
	  var result;
	  return _arity(fn.length, function () {
	    if (called) {
	      return result;
	    }
	    called = true;
	    result = fn.apply(this, arguments);
	    return result;
	  });
	});
	module.exports = once;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	// `Identity` is a functor that holds a single value, where `map` simply
	// transforms the held value with the provided function.


	var Identity = function (x) {
	  return { value: x, map: function (f) {
	      return Identity(f(x));
	    } };
	};

	/**
	 * Returns the result of "setting" the portion of the given data structure
	 * focused by the given lens to the result of applying the given function to
	 * the focused value.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category Object
	 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s
	 * @sig Lens s a -> (a -> a) -> s -> s
	 * @param {Lens} lens
	 * @param {*} v
	 * @param {*} x
	 * @return {*}
	 * @see R.prop, R.lensIndex, R.lensProp
	 * @example
	 *
	 *      var headLens = R.lensIndex(0);
	 *
	 *      R.over(headLens, R.toUpper, ['foo', 'bar', 'baz']); //=> ['FOO', 'bar', 'baz']
	 */
	var over = /*#__PURE__*/_curry3(function over(lens, f, x) {
	  // The value returned by the getter function is first transformed with `f`,
	  // then set as the value of an `Identity`. This is then mapped over with the
	  // setter function of the lens.
	  return lens(function (y) {
	    return Identity(f(y));
	  })(x).value;
	});
	module.exports = over;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Takes two arguments, `fst` and `snd`, and returns `[fst, snd]`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.18.0
	 * @category List
	 * @sig a -> b -> (a,b)
	 * @param {*} fst
	 * @param {*} snd
	 * @return {Array}
	 * @see R.objOf, R.of
	 * @example
	 *
	 *      R.pair('foo', 'bar'); //=> ['foo', 'bar']
	 */


	var pair = /*#__PURE__*/_curry2(function pair(fst, snd) {
	  return [fst, snd];
	});
	module.exports = pair;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _createPartialApplicator = /*#__PURE__*/__webpack_require__(246);

	/**
	 * Takes a function `f` and a list of arguments, and returns a function `g`.
	 * When applied, `g` returns the result of applying `f` to the arguments
	 * provided initially followed by the arguments provided to `g`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category Function
	 * @sig ((a, b, c, ..., n) -> x) -> [a, b, c, ...] -> ((d, e, f, ..., n) -> x)
	 * @param {Function} f
	 * @param {Array} args
	 * @return {Function}
	 * @see R.partialRight
	 * @example
	 *
	 *      var multiply2 = (a, b) => a * b;
	 *      var double = R.partial(multiply2, [2]);
	 *      double(2); //=> 4
	 *
	 *      var greet = (salutation, title, firstName, lastName) =>
	 *        salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!';
	 *
	 *      var sayHello = R.partial(greet, ['Hello']);
	 *      var sayHelloToMs = R.partial(sayHello, ['Ms.']);
	 *      sayHelloToMs('Jane', 'Jones'); //=> 'Hello, Ms. Jane Jones!'
	 * @symb R.partial(f, [a, b])(c, d) = f(a, b, c, d)
	 */


	var partial = /*#__PURE__*/_createPartialApplicator(_concat);
	module.exports = partial;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	function _createPartialApplicator(concat) {
	  return _curry2(function (fn, args) {
	    return _arity(Math.max(0, fn.length - args.length), function () {
	      return fn.apply(this, concat(args, arguments));
	    });
	  });
	}
	module.exports = _createPartialApplicator;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _createPartialApplicator = /*#__PURE__*/__webpack_require__(246);

	var flip = /*#__PURE__*/__webpack_require__(164);

	/**
	 * Takes a function `f` and a list of arguments, and returns a function `g`.
	 * When applied, `g` returns the result of applying `f` to the arguments
	 * provided to `g` followed by the arguments provided initially.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category Function
	 * @sig ((a, b, c, ..., n) -> x) -> [d, e, f, ..., n] -> ((a, b, c, ...) -> x)
	 * @param {Function} f
	 * @param {Array} args
	 * @return {Function}
	 * @see R.partial
	 * @example
	 *
	 *      var greet = (salutation, title, firstName, lastName) =>
	 *        salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!';
	 *
	 *      var greetMsJaneJones = R.partialRight(greet, ['Ms.', 'Jane', 'Jones']);
	 *
	 *      greetMsJaneJones('Hello'); //=> 'Hello, Ms. Jane Jones!'
	 * @symb R.partialRight(f, [a, b])(c, d) = f(c, d, a, b)
	 */


	var partialRight = /*#__PURE__*/_createPartialApplicator( /*#__PURE__*/flip(_concat));
	module.exports = partialRight;

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

	var filter = /*#__PURE__*/__webpack_require__(108);

	var juxt = /*#__PURE__*/__webpack_require__(201);

	var reject = /*#__PURE__*/__webpack_require__(106);

	/**
	 * Takes a predicate and a list or other `Filterable` object and returns the
	 * pair of filterable objects of the same type of elements which do and do not
	 * satisfy, the predicate, respectively. Filterable objects include plain objects or any object
	 * that has a filter method such as `Array`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.4
	 * @category List
	 * @sig Filterable f => (a -> Boolean) -> f a -> [f a, f a]
	 * @param {Function} pred A predicate to determine which side the element belongs to.
	 * @param {Array} filterable the list (or other filterable) to partition.
	 * @return {Array} An array, containing first the subset of elements that satisfy the
	 *         predicate, and second the subset of elements that do not satisfy.
	 * @see R.filter, R.reject
	 * @example
	 *
	 *      R.partition(R.contains('s'), ['sss', 'ttt', 'foo', 'bars']);
	 *      // => [ [ 'sss', 'bars' ],  [ 'ttt', 'foo' ] ]
	 *
	 *      R.partition(R.contains('s'), { a: 'sss', b: 'ttt', foo: 'bars' });
	 *      // => [ { a: 'sss', foo: 'bars' }, { b: 'ttt' }  ]
	 */


	var partition = /*#__PURE__*/juxt([filter, reject]);
	module.exports = partition;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var equals = /*#__PURE__*/__webpack_require__(98);

	var path = /*#__PURE__*/__webpack_require__(41);

	/**
	 * Determines whether a nested path on an object has a specific value, in
	 * [`R.equals`](#equals) terms. Most likely used to filter a list.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.7.0
	 * @category Relation
	 * @typedefn Idx = String | Int
	 * @sig [Idx] -> a -> {a} -> Boolean
	 * @param {Array} path The path of the nested property to use
	 * @param {*} val The value to compare the nested property with
	 * @param {Object} obj The object to check the nested property in
	 * @return {Boolean} `true` if the value equals the nested object property,
	 *         `false` otherwise.
	 * @example
	 *
	 *      var user1 = { address: { zipCode: 90210 } };
	 *      var user2 = { address: { zipCode: 55555 } };
	 *      var user3 = { name: 'Bob' };
	 *      var users = [ user1, user2, user3 ];
	 *      var isFamous = R.pathEq(['address', 'zipCode'], 90210);
	 *      R.filter(isFamous, users); //=> [ user1 ]
	 */


	var pathEq = /*#__PURE__*/_curry3(function pathEq(_path, val, obj) {
	  return equals(path(_path, obj), val);
	});
	module.exports = pathEq;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var defaultTo = /*#__PURE__*/__webpack_require__(121);

	var path = /*#__PURE__*/__webpack_require__(41);

	/**
	 * If the given, non-null object has a value at the given path, returns the
	 * value at that path. Otherwise returns the provided default value.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.18.0
	 * @category Object
	 * @typedefn Idx = String | Int
	 * @sig a -> [Idx] -> {a} -> a
	 * @param {*} d The default value.
	 * @param {Array} p The path to use.
	 * @param {Object} obj The object to retrieve the nested property from.
	 * @return {*} The data at `path` of the supplied object or the default value.
	 * @example
	 *
	 *      R.pathOr('N/A', ['a', 'b'], {a: {b: 2}}); //=> 2
	 *      R.pathOr('N/A', ['a', 'b'], {c: {b: 2}}); //=> "N/A"
	 */


	var pathOr = /*#__PURE__*/_curry3(function pathOr(d, p, obj) {
	  return defaultTo(d, path(p, obj));
	});
	module.exports = pathOr;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var path = /*#__PURE__*/__webpack_require__(41);

	/**
	 * Returns `true` if the specified object property at given path satisfies the
	 * given predicate; `false` otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category Logic
	 * @typedefn Idx = String | Int
	 * @sig (a -> Boolean) -> [Idx] -> {a} -> Boolean
	 * @param {Function} pred
	 * @param {Array} propPath
	 * @param {*} obj
	 * @return {Boolean}
	 * @see R.propSatisfies, R.path
	 * @example
	 *
	 *      R.pathSatisfies(y => y > 0, ['x', 'y'], {x: {y: 2}}); //=> true
	 */


	var pathSatisfies = /*#__PURE__*/_curry3(function pathSatisfies(pred, propPath, obj) {
	  return propPath.length > 0 && pred(path(propPath, obj));
	});
	module.exports = pathSatisfies;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns a partial copy of an object containing only the keys specified. If
	 * the key does not exist, the property is ignored.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig [k] -> {k: v} -> {k: v}
	 * @param {Array} names an array of String property names to copy onto a new object
	 * @param {Object} obj The object to copy from
	 * @return {Object} A new object with only properties from `names` on it.
	 * @see R.omit, R.props
	 * @example
	 *
	 *      R.pick(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4}
	 *      R.pick(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1}
	 */


	var pick = /*#__PURE__*/_curry2(function pick(names, obj) {
	  var result = {};
	  var idx = 0;
	  while (idx < names.length) {
	    if (names[idx] in obj) {
	      result[names[idx]] = obj[names[idx]];
	    }
	    idx += 1;
	  }
	  return result;
	});
	module.exports = pick;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Similar to `pick` except that this one includes a `key: undefined` pair for
	 * properties that don't exist.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig [k] -> {k: v} -> {k: v}
	 * @param {Array} names an array of String property names to copy onto a new object
	 * @param {Object} obj The object to copy from
	 * @return {Object} A new object with only properties from `names` on it.
	 * @see R.pick
	 * @example
	 *
	 *      R.pickAll(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4}
	 *      R.pickAll(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, e: undefined, f: undefined}
	 */


	var pickAll = /*#__PURE__*/_curry2(function pickAll(names, obj) {
	  var result = {};
	  var idx = 0;
	  var len = names.length;
	  while (idx < len) {
	    var name = names[idx];
	    result[name] = obj[name];
	    idx += 1;
	  }
	  return result;
	});
	module.exports = pickAll;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns a partial copy of an object containing only the keys that satisfy
	 * the supplied predicate.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.8.0
	 * @category Object
	 * @sig ((v, k) -> Boolean) -> {k: v} -> {k: v}
	 * @param {Function} pred A predicate to determine whether or not a key
	 *        should be included on the output object.
	 * @param {Object} obj The object to copy from
	 * @return {Object} A new object with only properties that satisfy `pred`
	 *         on it.
	 * @see R.pick, R.filter
	 * @example
	 *
	 *      var isUpperCase = (val, key) => key.toUpperCase() === key;
	 *      R.pickBy(isUpperCase, {a: 1, b: 2, A: 3, B: 4}); //=> {A: 3, B: 4}
	 */


	var pickBy = /*#__PURE__*/_curry2(function pickBy(test, obj) {
	  var result = {};
	  for (var prop in obj) {
	    if (test(obj[prop], prop, obj)) {
	      result[prop] = obj[prop];
	    }
	  }
	  return result;
	});
	module.exports = pickBy;

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

	var composeK = /*#__PURE__*/__webpack_require__(89);

	var reverse = /*#__PURE__*/__webpack_require__(88);

	/**
	 * Returns the left-to-right Kleisli composition of the provided functions,
	 * each of which must return a value of a type supported by [`chain`](#chain).
	 *
	 * `R.pipeK(f, g, h)` is equivalent to `R.pipe(f, R.chain(g), R.chain(h))`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category Function
	 * @sig Chain m => ((a -> m b), (b -> m c), ..., (y -> m z)) -> (a -> m z)
	 * @param {...Function}
	 * @return {Function}
	 * @see R.composeK
	 * @example
	 *
	 *      //  parseJson :: String -> Maybe *
	 *      //  get :: String -> Object -> Maybe *
	 *
	 *      //  getStateCode :: Maybe String -> Maybe String
	 *      var getStateCode = R.pipeK(
	 *        parseJson,
	 *        get('user'),
	 *        get('address'),
	 *        get('state'),
	 *        R.compose(Maybe.of, R.toUpper)
	 *      );
	 *
	 *      getStateCode('{"user":{"address":{"state":"ny"}}}');
	 *      //=> Just('NY')
	 *      getStateCode('[Invalid JSON]');
	 *      //=> Nothing()
	 * @symb R.pipeK(f, g, h)(a) = R.chain(h, R.chain(g, f(a)))
	 */


	function pipeK() {
	  if (arguments.length === 0) {
	    throw new Error('pipeK requires at least one argument');
	  }
	  return composeK.apply(this, reverse(arguments));
	}
	module.exports = pipeK;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns a new list with the given element at the front, followed by the
	 * contents of the list.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig a -> [a] -> [a]
	 * @param {*} el The item to add to the head of the output list.
	 * @param {Array} list The array to add to the tail of the output list.
	 * @return {Array} A new array.
	 * @see R.append
	 * @example
	 *
	 *      R.prepend('fee', ['fi', 'fo', 'fum']); //=> ['fee', 'fi', 'fo', 'fum']
	 */


	var prepend = /*#__PURE__*/_curry2(function prepend(el, list) {
	  return _concat([el], list);
	});
	module.exports = prepend;

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

	var multiply = /*#__PURE__*/__webpack_require__(234);

	var reduce = /*#__PURE__*/__webpack_require__(42);

	/**
	 * Multiplies together all the elements of a list.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Math
	 * @sig [Number] -> Number
	 * @param {Array} list An array of numbers
	 * @return {Number} The product of all the numbers in the list.
	 * @see R.reduce
	 * @example
	 *
	 *      R.product([2,4,6,8,100,1]); //=> 38400
	 */


	var product = /*#__PURE__*/reduce(multiply, 1);
	module.exports = product;

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

	var _map = /*#__PURE__*/__webpack_require__(30);

	var identity = /*#__PURE__*/__webpack_require__(175);

	var pickAll = /*#__PURE__*/__webpack_require__(253);

	var useWith = /*#__PURE__*/__webpack_require__(259);

	/**
	 * Reasonable analog to SQL `select` statement.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @category Relation
	 * @sig [k] -> [{k: v}] -> [{k: v}]
	 * @param {Array} props The property names to project
	 * @param {Array} objs The objects to query
	 * @return {Array} An array of objects with just the `props` properties.
	 * @example
	 *
	 *      var abby = {name: 'Abby', age: 7, hair: 'blond', grade: 2};
	 *      var fred = {name: 'Fred', age: 12, hair: 'brown', grade: 7};
	 *      var kids = [abby, fred];
	 *      R.project(['name', 'grade'], kids); //=> [{name: 'Abby', grade: 2}, {name: 'Fred', grade: 7}]
	 */


	var project = /*#__PURE__*/useWith(_map, [pickAll, identity]); // passing `identity` gives correct arity
	module.exports = project;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	/**
	 * Accepts a function `fn` and a list of transformer functions and returns a
	 * new curried function. When the new function is invoked, it calls the
	 * function `fn` with parameters consisting of the result of calling each
	 * supplied handler on successive arguments to the new function.
	 *
	 * If more arguments are passed to the returned function than transformer
	 * functions, those arguments are passed directly to `fn` as additional
	 * parameters. If you expect additional arguments that don't need to be
	 * transformed, although you can ignore them, it's best to pass an identity
	 * function so that the new function reports the correct arity.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig ((x1, x2, ...) -> z) -> [(a -> x1), (b -> x2), ...] -> (a -> b -> ... -> z)
	 * @param {Function} fn The function to wrap.
	 * @param {Array} transformers A list of transformer functions
	 * @return {Function} The wrapped function.
	 * @see R.converge
	 * @example
	 *
	 *      R.useWith(Math.pow, [R.identity, R.identity])(3, 4); //=> 81
	 *      R.useWith(Math.pow, [R.identity, R.identity])(3)(4); //=> 81
	 *      R.useWith(Math.pow, [R.dec, R.inc])(3, 4); //=> 32
	 *      R.useWith(Math.pow, [R.dec, R.inc])(3)(4); //=> 32
	 * @symb R.useWith(f, [g, h])(a, b) = f(g(a), h(b))
	 */


	var useWith = /*#__PURE__*/_curry2(function useWith(fn, transformers) {
	  return curryN(transformers.length, function () {
	    var args = [];
	    var idx = 0;
	    while (idx < transformers.length) {
	      args.push(transformers[idx].call(this, arguments[idx]));
	      idx += 1;
	    }
	    return fn.apply(this, args.concat(Array.prototype.slice.call(arguments, transformers.length)));
	  });
	});
	module.exports = useWith;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var equals = /*#__PURE__*/__webpack_require__(98);

	/**
	 * Returns `true` if the specified object property is equal, in
	 * [`R.equals`](#equals) terms, to the given value; `false` otherwise.
	 * You can test multiple properties with [`R.where`](#where).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig String -> a -> Object -> Boolean
	 * @param {String} name
	 * @param {*} val
	 * @param {*} obj
	 * @return {Boolean}
	 * @see R.whereEq, R.propSatisfies, R.equals
	 * @example
	 *
	 *      var abby = {name: 'Abby', age: 7, hair: 'blond'};
	 *      var fred = {name: 'Fred', age: 12, hair: 'brown'};
	 *      var rusty = {name: 'Rusty', age: 10, hair: 'brown'};
	 *      var alois = {name: 'Alois', age: 15, disposition: 'surly'};
	 *      var kids = [abby, fred, rusty, alois];
	 *      var hasBrownHair = R.propEq('hair', 'brown');
	 *      R.filter(hasBrownHair, kids); //=> [fred, rusty]
	 */


	var propEq = /*#__PURE__*/_curry3(function propEq(name, val, obj) {
	  return equals(val, obj[name]);
	});
	module.exports = propEq;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var is = /*#__PURE__*/__webpack_require__(198);

	/**
	 * Returns `true` if the specified object property is of the given type;
	 * `false` otherwise.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category Type
	 * @sig Type -> String -> Object -> Boolean
	 * @param {Function} type
	 * @param {String} name
	 * @param {*} obj
	 * @return {Boolean}
	 * @see R.is, R.propSatisfies
	 * @example
	 *
	 *      R.propIs(Number, 'x', {x: 1, y: 2});  //=> true
	 *      R.propIs(Number, 'x', {x: 'foo'});    //=> false
	 *      R.propIs(Number, 'x', {});            //=> false
	 */


	var propIs = /*#__PURE__*/_curry3(function propIs(type, name, obj) {
	  return is(type, obj[name]);
	});
	module.exports = propIs;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var _has = /*#__PURE__*/__webpack_require__(38);

	/**
	 * If the given, non-null object has an own property with the specified name,
	 * returns the value of that property. Otherwise returns the provided default
	 * value.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.6.0
	 * @category Object
	 * @sig a -> String -> Object -> a
	 * @param {*} val The default value.
	 * @param {String} p The name of the property to return.
	 * @param {Object} obj The object to query.
	 * @return {*} The value of given property of the supplied object or the default value.
	 * @example
	 *
	 *      var alice = {
	 *        name: 'ALICE',
	 *        age: 101
	 *      };
	 *      var favorite = R.prop('favoriteLibrary');
	 *      var favoriteWithDefault = R.propOr('Ramda', 'favoriteLibrary');
	 *
	 *      favorite(alice);  //=> undefined
	 *      favoriteWithDefault(alice);  //=> 'Ramda'
	 */


	var propOr = /*#__PURE__*/_curry3(function propOr(val, p, obj) {
	  return obj != null && _has(p, obj) ? obj[p] : val;
	});
	module.exports = propOr;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Returns `true` if the specified object property satisfies the given
	 * predicate; `false` otherwise. You can test multiple properties with
	 * [`R.where`](#where).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category Logic
	 * @sig (a -> Boolean) -> String -> {String: a} -> Boolean
	 * @param {Function} pred
	 * @param {String} name
	 * @param {*} obj
	 * @return {Boolean}
	 * @see R.where, R.propEq, R.propIs
	 * @example
	 *
	 *      R.propSatisfies(x => x > 0, 'x', {x: 1, y: 2}); //=> true
	 */


	var propSatisfies = /*#__PURE__*/_curry3(function propSatisfies(pred, name, obj) {
	  return pred(obj[name]);
	});
	module.exports = propSatisfies;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Acts as multiple `prop`: array of keys in, array of values out. Preserves
	 * order.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Object
	 * @sig [k] -> {k: v} -> [v]
	 * @param {Array} ps The property names to fetch
	 * @param {Object} obj The object to query
	 * @return {Array} The corresponding values or partially applied function.
	 * @example
	 *
	 *      R.props(['x', 'y'], {x: 1, y: 2}); //=> [1, 2]
	 *      R.props(['c', 'a', 'b'], {b: 2, a: 1}); //=> [undefined, 1, 2]
	 *
	 *      var fullName = R.compose(R.join(' '), R.props(['first', 'last']));
	 *      fullName({last: 'Bullet-Tooth', age: 33, first: 'Tony'}); //=> 'Tony Bullet-Tooth'
	 */


	var props = /*#__PURE__*/_curry2(function props(ps, obj) {
	  var len = ps.length;
	  var out = [];
	  var idx = 0;

	  while (idx < len) {
	    out[idx] = obj[ps[idx]];
	    idx += 1;
	  }

	  return out;
	});
	module.exports = props;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isNumber = /*#__PURE__*/__webpack_require__(205);

	/**
	 * Returns a list of numbers from `from` (inclusive) to `to` (exclusive).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig Number -> Number -> [Number]
	 * @param {Number} from The first number in the list.
	 * @param {Number} to One more than the last number in the list.
	 * @return {Array} The list of numbers in tthe set `[a, b)`.
	 * @example
	 *
	 *      R.range(1, 5);    //=> [1, 2, 3, 4]
	 *      R.range(50, 53);  //=> [50, 51, 52]
	 */


	var range = /*#__PURE__*/_curry2(function range(from, to) {
	  if (!(_isNumber(from) && _isNumber(to))) {
	    throw new TypeError('Both arguments to range must be numbers');
	  }
	  var result = [];
	  var n = from;
	  while (n < to) {
	    result.push(n);
	    n += 1;
	  }
	  return result;
	});
	module.exports = range;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Returns a single item by iterating through the list, successively calling
	 * the iterator function and passing it an accumulator value and the current
	 * value from the array, and then passing the result to the next call.
	 *
	 * Similar to [`reduce`](#reduce), except moves through the input list from the
	 * right to the left.
	 *
	 * The iterator function receives two values: *(value, acc)*, while the arguments'
	 * order of `reduce`'s iterator function is *(acc, value)*.
	 *
	 * Note: `R.reduceRight` does not skip deleted or unassigned indices (sparse
	 * arrays), unlike the native `Array.prototype.reduceRight` method. For more details
	 * on this behavior, see:
	 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight#Description
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig ((a, b) -> b) -> b -> [a] -> b
	 * @param {Function} fn The iterator function. Receives two values, the current element from the array
	 *        and the accumulator.
	 * @param {*} acc The accumulator value.
	 * @param {Array} list The list to iterate over.
	 * @return {*} The final, accumulated value.
	 * @see R.reduce, R.addIndex
	 * @example
	 *
	 *      R.reduceRight(R.subtract, 0, [1, 2, 3, 4]) // => (1 - (2 - (3 - (4 - 0)))) = -2
	 *      //    -               -2
	 *      //   / \              / \
	 *      //  1   -            1   3
	 *      //     / \              / \
	 *      //    2   -     ==>    2  -1
	 *      //       / \              / \
	 *      //      3   -            3   4
	 *      //         / \              / \
	 *      //        4   0            4   0
	 *
	 * @symb R.reduceRight(f, a, [b, c, d]) = f(b, f(c, f(d, a)))
	 */


	var reduceRight = /*#__PURE__*/_curry3(function reduceRight(fn, acc, list) {
	  var idx = list.length - 1;
	  while (idx >= 0) {
	    acc = fn(list[idx], acc);
	    idx -= 1;
	  }
	  return acc;
	});
	module.exports = reduceRight;

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

	var _curryN = /*#__PURE__*/__webpack_require__(16);

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var _reduced = /*#__PURE__*/__webpack_require__(24);

	/**
	 * Like [`reduce`](#reduce), `reduceWhile` returns a single item by iterating
	 * through the list, successively calling the iterator function. `reduceWhile`
	 * also takes a predicate that is evaluated before each step. If the predicate
	 * returns `false`, it "short-circuits" the iteration and returns the current
	 * value of the accumulator.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.22.0
	 * @category List
	 * @sig ((a, b) -> Boolean) -> ((a, b) -> a) -> a -> [b] -> a
	 * @param {Function} pred The predicate. It is passed the accumulator and the
	 *        current element.
	 * @param {Function} fn The iterator function. Receives two values, the
	 *        accumulator and the current element.
	 * @param {*} a The accumulator value.
	 * @param {Array} list The list to iterate over.
	 * @return {*} The final, accumulated value.
	 * @see R.reduce, R.reduced
	 * @example
	 *
	 *      var isOdd = (acc, x) => x % 2 === 1;
	 *      var xs = [1, 3, 5, 60, 777, 800];
	 *      R.reduceWhile(isOdd, R.add, 0, xs); //=> 9
	 *
	 *      var ys = [2, 4, 6]
	 *      R.reduceWhile(isOdd, R.add, 111, ys); //=> 111
	 */


	var reduceWhile = /*#__PURE__*/_curryN(4, [], function _reduceWhile(pred, fn, a, list) {
	  return _reduce(function (acc, x) {
	    return pred(acc, x) ? fn(acc, x) : _reduced(acc);
	  }, a, list);
	});
	module.exports = reduceWhile;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _reduced = /*#__PURE__*/__webpack_require__(24);

	/**
	 * Returns a value wrapped to indicate that it is the final value of the reduce
	 * and transduce functions. The returned value should be considered a black
	 * box: the internal structure is not guaranteed to be stable.
	 *
	 * Note: this optimization is unavailable to functions not explicitly listed
	 * above. For instance, it is not currently supported by
	 * [`reduceRight`](#reduceRight).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.15.0
	 * @category List
	 * @sig a -> *
	 * @param {*} x The final value of the reduce.
	 * @return {*} The wrapped value.
	 * @see R.reduce, R.transduce
	 * @example
	 *
	 *     R.reduce(
	 *       (acc, item) => item > 3 ? R.reduced(acc) : acc.concat(item),
	 *       [],
	 *       [1, 2, 3, 4, 5]) // [1, 2, 3]
	 */


	var reduced = /*#__PURE__*/_curry1(_reduced);
	module.exports = reduced;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var always = /*#__PURE__*/__webpack_require__(5);

	var times = /*#__PURE__*/__webpack_require__(270);

	/**
	 * Returns a fixed list of size `n` containing a specified identical value.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.1
	 * @category List
	 * @sig a -> n -> [a]
	 * @param {*} value The value to repeat.
	 * @param {Number} n The desired size of the output list.
	 * @return {Array} A new array containing `n` `value`s.
	 * @see R.times
	 * @example
	 *
	 *      R.repeat('hi', 5); //=> ['hi', 'hi', 'hi', 'hi', 'hi']
	 *
	 *      var obj = {};
	 *      var repeatedObjs = R.repeat(obj, 5); //=> [{}, {}, {}, {}, {}]
	 *      repeatedObjs[0] === repeatedObjs[1]; //=> true
	 * @symb R.repeat(a, 0) = []
	 * @symb R.repeat(a, 1) = [a]
	 * @symb R.repeat(a, 2) = [a, a]
	 */


	var repeat = /*#__PURE__*/_curry2(function repeat(value, n) {
	  return times(always(value), n);
	});
	module.exports = repeat;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Calls an input function `n` times, returning an array containing the results
	 * of those function calls.
	 *
	 * `fn` is passed one argument: The current value of `n`, which begins at `0`
	 * and is gradually incremented to `n - 1`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.2.3
	 * @category List
	 * @sig (Number -> a) -> Number -> [a]
	 * @param {Function} fn The function to invoke. Passed one argument, the current value of `n`.
	 * @param {Number} n A value between `0` and `n - 1`. Increments after each function call.
	 * @return {Array} An array containing the return values of all calls to `fn`.
	 * @see R.repeat
	 * @example
	 *
	 *      R.times(R.identity, 5); //=> [0, 1, 2, 3, 4]
	 * @symb R.times(f, 0) = []
	 * @symb R.times(f, 1) = [f(0)]
	 * @symb R.times(f, 2) = [f(0), f(1)]
	 */


	var times = /*#__PURE__*/_curry2(function times(fn, n) {
	  var len = Number(n);
	  var idx = 0;
	  var list;

	  if (len < 0 || isNaN(len)) {
	    throw new RangeError('n must be a non-negative number');
	  }
	  list = new Array(len);
	  while (idx < len) {
	    list[idx] = fn(idx);
	    idx += 1;
	  }
	  return list;
	});
	module.exports = times;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Replace a substring or regex match in a string with a replacement.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.7.0
	 * @category String
	 * @sig RegExp|String -> String -> String -> String
	 * @param {RegExp|String} pattern A regular expression or a substring to match.
	 * @param {String} replacement The string to replace the matches with.
	 * @param {String} str The String to do the search and replacement in.
	 * @return {String} The result.
	 * @example
	 *
	 *      R.replace('foo', 'bar', 'foo foo foo'); //=> 'bar foo foo'
	 *      R.replace(/foo/, 'bar', 'foo foo foo'); //=> 'bar foo foo'
	 *
	 *      // Use the "g" (global) flag to replace all occurrences:
	 *      R.replace(/foo/g, 'bar', 'foo foo foo'); //=> 'bar bar bar'
	 */


	var replace = /*#__PURE__*/_curry3(function replace(regex, replacement, str) {
	  return str.replace(regex, replacement);
	});
	module.exports = replace;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Scan is similar to [`reduce`](#reduce), but returns a list of successively
	 * reduced values from the left
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category List
	 * @sig ((a, b) -> a) -> a -> [b] -> [a]
	 * @param {Function} fn The iterator function. Receives two values, the accumulator and the
	 *        current element from the array
	 * @param {*} acc The accumulator value.
	 * @param {Array} list The list to iterate over.
	 * @return {Array} A list of all intermediately reduced values.
	 * @see R.reduce
	 * @example
	 *
	 *      var numbers = [1, 2, 3, 4];
	 *      var factorials = R.scan(R.multiply, 1, numbers); //=> [1, 1, 2, 6, 24]
	 * @symb R.scan(f, a, [b, c]) = [a, f(a, b), f(f(a, b), c)]
	 */


	var scan = /*#__PURE__*/_curry3(function scan(fn, acc, list) {
	  var idx = 0;
	  var len = list.length;
	  var result = [acc];
	  while (idx < len) {
	    acc = fn(acc, list[idx]);
	    result[idx + 1] = acc;
	    idx += 1;
	  }
	  return result;
	});
	module.exports = scan;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var ap = /*#__PURE__*/__webpack_require__(47);

	var map = /*#__PURE__*/__webpack_require__(29);

	var prepend = /*#__PURE__*/__webpack_require__(256);

	var reduceRight = /*#__PURE__*/__webpack_require__(266);

	/**
	 * Transforms a [Traversable](https://github.com/fantasyland/fantasy-land#traversable)
	 * of [Applicative](https://github.com/fantasyland/fantasy-land#applicative) into an
	 * Applicative of Traversable.
	 *
	 * Dispatches to the `sequence` method of the second argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category List
	 * @sig (Applicative f, Traversable t) => (a -> f a) -> t (f a) -> f (t a)
	 * @param {Function} of
	 * @param {*} traversable
	 * @return {*}
	 * @see R.traverse
	 * @example
	 *
	 *      R.sequence(Maybe.of, [Just(1), Just(2), Just(3)]);   //=> Just([1, 2, 3])
	 *      R.sequence(Maybe.of, [Just(1), Just(2), Nothing()]); //=> Nothing()
	 *
	 *      R.sequence(R.of, Just([1, 2, 3])); //=> [Just(1), Just(2), Just(3)]
	 *      R.sequence(R.of, Nothing());       //=> [Nothing()]
	 */


	var sequence = /*#__PURE__*/_curry2(function sequence(of, traversable) {
	  return typeof traversable.sequence === 'function' ? traversable.sequence(of) : reduceRight(function (x, acc) {
	    return ap(map(prepend, x), acc);
	  }, of([]), traversable);
	});
	module.exports = sequence;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var always = /*#__PURE__*/__webpack_require__(5);

	var over = /*#__PURE__*/__webpack_require__(243);

	/**
	 * Returns the result of "setting" the portion of the given data structure
	 * focused by the given lens to the given value.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category Object
	 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s
	 * @sig Lens s a -> a -> s -> s
	 * @param {Lens} lens
	 * @param {*} v
	 * @param {*} x
	 * @return {*}
	 * @see R.prop, R.lensIndex, R.lensProp
	 * @example
	 *
	 *      var xLens = R.lensProp('x');
	 *
	 *      R.set(xLens, 4, {x: 1, y: 2});  //=> {x: 4, y: 2}
	 *      R.set(xLens, 8, {x: 1, y: 2});  //=> {x: 8, y: 2}
	 */


	var set = /*#__PURE__*/_curry3(function set(lens, v, x) {
	  return over(lens, always(v), x);
	});
	module.exports = set;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns a copy of the list, sorted according to the comparator function,
	 * which should accept two values at a time and return a negative number if the
	 * first value is smaller, a positive number if it's larger, and zero if they
	 * are equal. Please note that this is a **copy** of the list. It does not
	 * modify the original.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig ((a, a) -> Number) -> [a] -> [a]
	 * @param {Function} comparator A sorting function :: a -> b -> Int
	 * @param {Array} list The list to sort
	 * @return {Array} a new array with its elements sorted by the comparator function.
	 * @example
	 *
	 *      var diff = function(a, b) { return a - b; };
	 *      R.sort(diff, [4,2,7,5]); //=> [2, 4, 5, 7]
	 */


	var sort = /*#__PURE__*/_curry2(function sort(comparator, list) {
	  return Array.prototype.slice.call(list, 0).sort(comparator);
	});
	module.exports = sort;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Sorts the list according to the supplied function.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig Ord b => (a -> b) -> [a] -> [a]
	 * @param {Function} fn
	 * @param {Array} list The list to sort.
	 * @return {Array} A new list sorted by the keys generated by `fn`.
	 * @example
	 *
	 *      var sortByFirstItem = R.sortBy(R.prop(0));
	 *      var sortByNameCaseInsensitive = R.sortBy(R.compose(R.toLower, R.prop('name')));
	 *      var pairs = [[-1, 1], [-2, 2], [-3, 3]];
	 *      sortByFirstItem(pairs); //=> [[-3, 3], [-2, 2], [-1, 1]]
	 *      var alice = {
	 *        name: 'ALICE',
	 *        age: 101
	 *      };
	 *      var bob = {
	 *        name: 'Bob',
	 *        age: -10
	 *      };
	 *      var clara = {
	 *        name: 'clara',
	 *        age: 314.159
	 *      };
	 *      var people = [clara, bob, alice];
	 *      sortByNameCaseInsensitive(people); //=> [alice, bob, clara]
	 */


	var sortBy = /*#__PURE__*/_curry2(function sortBy(fn, list) {
	  return Array.prototype.slice.call(list, 0).sort(function (a, b) {
	    var aa = fn(a);
	    var bb = fn(b);
	    return aa < bb ? -1 : aa > bb ? 1 : 0;
	  });
	});
	module.exports = sortBy;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Sorts a list according to a list of comparators.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.23.0
	 * @category Relation
	 * @sig [(a, a) -> Number] -> [a] -> [a]
	 * @param {Array} functions A list of comparator functions.
	 * @param {Array} list The list to sort.
	 * @return {Array} A new list sorted according to the comarator functions.
	 * @example
	 *
	 *      var alice = {
	 *        name: 'alice',
	 *        age: 40
	 *      };
	 *      var bob = {
	 *        name: 'bob',
	 *        age: 30
	 *      };
	 *      var clara = {
	 *        name: 'clara',
	 *        age: 40
	 *      };
	 *      var people = [clara, bob, alice];
	 *      var ageNameSort = R.sortWith([
	 *        R.descend(R.prop('age')),
	 *        R.ascend(R.prop('name'))
	 *      ]);
	 *      ageNameSort(people); //=> [alice, clara, bob]
	 */


	var sortWith = /*#__PURE__*/_curry2(function sortWith(fns, list) {
	  return Array.prototype.slice.call(list, 0).sort(function (a, b) {
	    var result = 0;
	    var i = 0;
	    while (result === 0 && i < fns.length) {
	      result = fns[i](a, b);
	      i += 1;
	    }
	    return result;
	  });
	});
	module.exports = sortWith;

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

	var invoker = /*#__PURE__*/__webpack_require__(197);

	/**
	 * Splits a string into an array of strings based on the given
	 * separator.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category String
	 * @sig (String | RegExp) -> String -> [String]
	 * @param {String|RegExp} sep The pattern.
	 * @param {String} str The string to separate into an array.
	 * @return {Array} The array of strings from `str` separated by `str`.
	 * @see R.join
	 * @example
	 *
	 *      var pathComponents = R.split('/');
	 *      R.tail(pathComponents('/usr/local/bin/node')); //=> ['usr', 'local', 'bin', 'node']
	 *
	 *      R.split('.', 'a.b.c.xyz.d'); //=> ['a', 'b', 'c', 'xyz', 'd']
	 */


	var split = /*#__PURE__*/invoker(1, 'split');
	module.exports = split;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var length = /*#__PURE__*/__webpack_require__(204);

	var slice = /*#__PURE__*/__webpack_require__(87);

	/**
	 * Splits a given list or string at a given index.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category List
	 * @sig Number -> [a] -> [[a], [a]]
	 * @sig Number -> String -> [String, String]
	 * @param {Number} index The index where the array/string is split.
	 * @param {Array|String} array The array/string to be split.
	 * @return {Array}
	 * @example
	 *
	 *      R.splitAt(1, [1, 2, 3]);          //=> [[1], [2, 3]]
	 *      R.splitAt(5, 'hello world');      //=> ['hello', ' world']
	 *      R.splitAt(-1, 'foobar');          //=> ['fooba', 'r']
	 */


	var splitAt = /*#__PURE__*/_curry2(function splitAt(index, array) {
	  return [slice(0, index, array), slice(index, length(array), array)];
	});
	module.exports = splitAt;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var slice = /*#__PURE__*/__webpack_require__(87);

	/**
	 * Splits a collection into slices of the specified length.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category List
	 * @sig Number -> [a] -> [[a]]
	 * @sig Number -> String -> [String]
	 * @param {Number} n
	 * @param {Array} list
	 * @return {Array}
	 * @example
	 *
	 *      R.splitEvery(3, [1, 2, 3, 4, 5, 6, 7]); //=> [[1, 2, 3], [4, 5, 6], [7]]
	 *      R.splitEvery(3, 'foobarbaz'); //=> ['foo', 'bar', 'baz']
	 */


	var splitEvery = /*#__PURE__*/_curry2(function splitEvery(n, list) {
	  if (n <= 0) {
	    throw new Error('First argument to splitEvery must be a positive integer');
	  }
	  var result = [];
	  var idx = 0;
	  while (idx < list.length) {
	    result.push(slice(idx, idx += n, list));
	  }
	  return result;
	});
	module.exports = splitEvery;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Takes a list and a predicate and returns a pair of lists with the following properties:
	 *
	 *  - the result of concatenating the two output lists is equivalent to the input list;
	 *  - none of the elements of the first output list satisfies the predicate; and
	 *  - if the second output list is non-empty, its first element satisfies the predicate.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> [[a], [a]]
	 * @param {Function} pred The predicate that determines where the array is split.
	 * @param {Array} list The array to be split.
	 * @return {Array}
	 * @example
	 *
	 *      R.splitWhen(R.equals(2), [1, 2, 3, 1, 2, 3]);   //=> [[1], [2, 3, 1, 2, 3]]
	 */


	var splitWhen = /*#__PURE__*/_curry2(function splitWhen(pred, list) {
	  var idx = 0;
	  var len = list.length;
	  var prefix = [];

	  while (idx < len && !pred(list[idx])) {
	    prefix.push(list[idx]);
	    idx += 1;
	  }

	  return [prefix, Array.prototype.slice.call(list, idx)];
	});
	module.exports = splitWhen;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var equals = /*#__PURE__*/__webpack_require__(98);

	var take = /*#__PURE__*/__webpack_require__(134);

	/**
	 * Checks if a list starts with the provided values
	 *
	 * @func
	 * @memberOf R
	 * @since v0.24.0
	 * @category List
	 * @sig [a] -> Boolean
	 * @sig String -> Boolean
	 * @param {*} prefix
	 * @param {*} list
	 * @return {Boolean}
	 * @example
	 *
	 *      R.startsWith('a', 'abc')                //=> true
	 *      R.startsWith('b', 'abc')                //=> false
	 *      R.startsWith(['a'], ['a', 'b', 'c'])    //=> true
	 *      R.startsWith(['b'], ['a', 'b', 'c'])    //=> false
	 */


	var startsWith = /*#__PURE__*/_curry2(function (prefix, list) {
	  return equals(take(prefix.length, list), prefix);
	});
	module.exports = startsWith;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Subtracts its second argument from its first argument.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Math
	 * @sig Number -> Number -> Number
	 * @param {Number} a The first value.
	 * @param {Number} b The second value.
	 * @return {Number} The result of `a - b`.
	 * @see R.add
	 * @example
	 *
	 *      R.subtract(10, 8); //=> 2
	 *
	 *      var minus5 = R.subtract(R.__, 5);
	 *      minus5(17); //=> 12
	 *
	 *      var complementaryAngle = R.subtract(90);
	 *      complementaryAngle(30); //=> 60
	 *      complementaryAngle(72); //=> 18
	 */


	var subtract = /*#__PURE__*/_curry2(function subtract(a, b) {
	  return Number(a) - Number(b);
	});
	module.exports = subtract;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var concat = /*#__PURE__*/__webpack_require__(93);

	var difference = /*#__PURE__*/__webpack_require__(123);

	/**
	 * Finds the set (i.e. no duplicates) of all elements contained in the first or
	 * second list, but not both.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category Relation
	 * @sig [*] -> [*] -> [*]
	 * @param {Array} list1 The first list.
	 * @param {Array} list2 The second list.
	 * @return {Array} The elements in `list1` or `list2`, but not both.
	 * @see R.symmetricDifferenceWith, R.difference, R.differenceWith
	 * @example
	 *
	 *      R.symmetricDifference([1,2,3,4], [7,6,5,4,3]); //=> [1,2,7,6,5]
	 *      R.symmetricDifference([7,6,5,4,3], [1,2,3,4]); //=> [7,6,5,1,2]
	 */


	var symmetricDifference = /*#__PURE__*/_curry2(function symmetricDifference(list1, list2) {
	  return concat(difference(list1, list2), difference(list2, list1));
	});
	module.exports = symmetricDifference;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var concat = /*#__PURE__*/__webpack_require__(93);

	var differenceWith = /*#__PURE__*/__webpack_require__(124);

	/**
	 * Finds the set (i.e. no duplicates) of all elements contained in the first or
	 * second list, but not both. Duplication is determined according to the value
	 * returned by applying the supplied predicate to two list elements.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category Relation
	 * @sig ((a, a) -> Boolean) -> [a] -> [a] -> [a]
	 * @param {Function} pred A predicate used to test whether two items are equal.
	 * @param {Array} list1 The first list.
	 * @param {Array} list2 The second list.
	 * @return {Array} The elements in `list1` or `list2`, but not both.
	 * @see R.symmetricDifference, R.difference, R.differenceWith
	 * @example
	 *
	 *      var eqA = R.eqBy(R.prop('a'));
	 *      var l1 = [{a: 1}, {a: 2}, {a: 3}, {a: 4}];
	 *      var l2 = [{a: 3}, {a: 4}, {a: 5}, {a: 6}];
	 *      R.symmetricDifferenceWith(eqA, l1, l2); //=> [{a: 1}, {a: 2}, {a: 5}, {a: 6}]
	 */


	var symmetricDifferenceWith = /*#__PURE__*/_curry3(function symmetricDifferenceWith(pred, list1, list2) {
	  return concat(differenceWith(pred, list1, list2), differenceWith(pred, list2, list1));
	});
	module.exports = symmetricDifferenceWith;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var slice = /*#__PURE__*/__webpack_require__(87);

	/**
	 * Returns a new list containing the last `n` elements of a given list, passing
	 * each value to the supplied predicate function, and terminating when the
	 * predicate function returns `false`. Excludes the element that caused the
	 * predicate function to fail. The predicate function is passed one argument:
	 * *(value)*.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> [a]
	 * @sig (a -> Boolean) -> String -> String
	 * @param {Function} fn The function called per iteration.
	 * @param {Array} xs The collection to iterate over.
	 * @return {Array} A new array.
	 * @see R.dropLastWhile, R.addIndex
	 * @example
	 *
	 *      var isNotOne = x => x !== 1;
	 *
	 *      R.takeLastWhile(isNotOne, [1, 2, 3, 4]); //=> [2, 3, 4]
	 *
	 *      R.takeLastWhile(x => x !== 'R' , 'Ramda'); //=> 'amda'
	 */


	var takeLastWhile = /*#__PURE__*/_curry2(function takeLastWhile(fn, xs) {
	  var idx = xs.length - 1;
	  while (idx >= 0 && fn(xs[idx])) {
	    idx -= 1;
	  }
	  return slice(idx + 1, Infinity, xs);
	});
	module.exports = takeLastWhile;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xtakeWhile = /*#__PURE__*/__webpack_require__(288);

	var slice = /*#__PURE__*/__webpack_require__(87);

	/**
	 * Returns a new list containing the first `n` elements of a given list,
	 * passing each value to the supplied predicate function, and terminating when
	 * the predicate function returns `false`. Excludes the element that caused the
	 * predicate function to fail. The predicate function is passed one argument:
	 * *(value)*.
	 *
	 * Dispatches to the `takeWhile` method of the second argument, if present.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig (a -> Boolean) -> [a] -> [a]
	 * @sig (a -> Boolean) -> String -> String
	 * @param {Function} fn The function called per iteration.
	 * @param {Array} xs The collection to iterate over.
	 * @return {Array} A new array.
	 * @see R.dropWhile, R.transduce, R.addIndex
	 * @example
	 *
	 *      var isNotFour = x => x !== 4;
	 *
	 *      R.takeWhile(isNotFour, [1, 2, 3, 4, 3, 2, 1]); //=> [1, 2, 3]
	 *
	 *      R.takeWhile(x => x !== 'd' , 'Ramda'); //=> 'Ram'
	 */


	var takeWhile = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['takeWhile'], _xtakeWhile, function takeWhile(fn, xs) {
	  var idx = 0;
	  var len = xs.length;
	  while (idx < len && fn(xs[idx])) {
	    idx += 1;
	  }
	  return slice(0, idx, xs);
	}));
	module.exports = takeWhile;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _reduced = /*#__PURE__*/__webpack_require__(24);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XTakeWhile = /*#__PURE__*/function () {

	  function XTakeWhile(f, xf) {
	    this.xf = xf;
	    this.f = f;
	  }
	  XTakeWhile.prototype['@@transducer/init'] = _xfBase.init;
	  XTakeWhile.prototype['@@transducer/result'] = _xfBase.result;
	  XTakeWhile.prototype['@@transducer/step'] = function (result, input) {
	    return this.f(input) ? this.xf['@@transducer/step'](result, input) : _reduced(result);
	  };

	  return XTakeWhile;
	}();

	var _xtakeWhile = /*#__PURE__*/_curry2(function _xtakeWhile(f, xf) {
	  return new XTakeWhile(f, xf);
	});
	module.exports = _xtakeWhile;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _dispatchable = /*#__PURE__*/__webpack_require__(20);

	var _xtap = /*#__PURE__*/__webpack_require__(290);

	/**
	 * Runs the given function with the supplied object, then returns the object.
	 *
	 * Acts as a transducer if a transformer is given as second parameter.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Function
	 * @sig (a -> *) -> a -> a
	 * @param {Function} fn The function to call with `x`. The return value of `fn` will be thrown away.
	 * @param {*} x
	 * @return {*} `x`.
	 * @example
	 *
	 *      var sayX = x => console.log('x is ' + x);
	 *      R.tap(sayX, 100); //=> 100
	 *      // logs 'x is 100'
	 * @symb R.tap(f, a) = a
	 */


	var tap = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xtap, function tap(fn, x) {
	  fn(x);
	  return x;
	}));
	module.exports = tap;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _xfBase = /*#__PURE__*/__webpack_require__(25);

	var XTap = /*#__PURE__*/function () {

	  function XTap(f, xf) {
	    this.xf = xf;
	    this.f = f;
	  }
	  XTap.prototype['@@transducer/init'] = _xfBase.init;
	  XTap.prototype['@@transducer/result'] = _xfBase.result;
	  XTap.prototype['@@transducer/step'] = function (result, input) {
	    this.f(input);
	    return this.xf['@@transducer/step'](result, input);
	  };

	  return XTap;
	}();

	var _xtap = /*#__PURE__*/_curry2(function _xtap(f, xf) {
	  return new XTap(f, xf);
	});
	module.exports = _xtap;

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

	var _cloneRegExp = /*#__PURE__*/__webpack_require__(77);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _isRegExp = /*#__PURE__*/__webpack_require__(292);

	var toString = /*#__PURE__*/__webpack_require__(94);

	/**
	 * Determines whether a given string matches a given regular expression.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.12.0
	 * @category String
	 * @sig RegExp -> String -> Boolean
	 * @param {RegExp} pattern
	 * @param {String} str
	 * @return {Boolean}
	 * @see R.match
	 * @example
	 *
	 *      R.test(/^x/, 'xyz'); //=> true
	 *      R.test(/^y/, 'xyz'); //=> false
	 */


	var test = /*#__PURE__*/_curry2(function test(pattern, str) {
	  if (!_isRegExp(pattern)) {
	    throw new TypeError('‘test’ requires a value of type RegExp as its first argument; received ' + toString(pattern));
	  }
	  return _cloneRegExp(pattern).test(str);
	});
	module.exports = test;

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

	function _isRegExp(x) {
	  return Object.prototype.toString.call(x) === '[object RegExp]';
	}
	module.exports = _isRegExp;

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

	var invoker = /*#__PURE__*/__webpack_require__(197);

	/**
	 * The lower case version of a string.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category String
	 * @sig String -> String
	 * @param {String} str The string to lower case.
	 * @return {String} The lower case version of `str`.
	 * @see R.toUpper
	 * @example
	 *
	 *      R.toLower('XYZ'); //=> 'xyz'
	 */


	var toLower = /*#__PURE__*/invoker(0, 'toLowerCase');
	module.exports = toLower;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var _has = /*#__PURE__*/__webpack_require__(38);

	/**
	 * Converts an object into an array of key, value arrays. Only the object's
	 * own properties are used.
	 * Note that the order of the output array is not guaranteed to be consistent
	 * across different JS platforms.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.4.0
	 * @category Object
	 * @sig {String: *} -> [[String,*]]
	 * @param {Object} obj The object to extract from
	 * @return {Array} An array of key, value arrays from the object's own properties.
	 * @see R.fromPairs
	 * @example
	 *
	 *      R.toPairs({a: 1, b: 2, c: 3}); //=> [['a', 1], ['b', 2], ['c', 3]]
	 */


	var toPairs = /*#__PURE__*/_curry1(function toPairs(obj) {
	  var pairs = [];
	  for (var prop in obj) {
	    if (_has(prop, obj)) {
	      pairs[pairs.length] = [prop, obj[prop]];
	    }
	  }
	  return pairs;
	});
	module.exports = toPairs;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Converts an object into an array of key, value arrays. The object's own
	 * properties and prototype properties are used. Note that the order of the
	 * output array is not guaranteed to be consistent across different JS
	 * platforms.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.4.0
	 * @category Object
	 * @sig {String: *} -> [[String,*]]
	 * @param {Object} obj The object to extract from
	 * @return {Array} An array of key, value arrays from the object's own
	 *         and prototype properties.
	 * @example
	 *
	 *      var F = function() { this.x = 'X'; };
	 *      F.prototype.y = 'Y';
	 *      var f = new F();
	 *      R.toPairsIn(f); //=> [['x','X'], ['y','Y']]
	 */


	var toPairsIn = /*#__PURE__*/_curry1(function toPairsIn(obj) {
	  var pairs = [];
	  for (var prop in obj) {
	    pairs[pairs.length] = [prop, obj[prop]];
	  }
	  return pairs;
	});
	module.exports = toPairsIn;

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

	var invoker = /*#__PURE__*/__webpack_require__(197);

	/**
	 * The upper case version of a string.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.9.0
	 * @category String
	 * @sig String -> String
	 * @param {String} str The string to upper case.
	 * @return {String} The upper case version of `str`.
	 * @see R.toLower
	 * @example
	 *
	 *      R.toUpper('abc'); //=> 'ABC'
	 */


	var toUpper = /*#__PURE__*/invoker(0, 'toUpperCase');
	module.exports = toUpper;

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

	var _reduce = /*#__PURE__*/__webpack_require__(31);

	var _xwrap = /*#__PURE__*/__webpack_require__(34);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	/**
	 * Initializes a transducer using supplied iterator function. Returns a single
	 * item by iterating through the list, successively calling the transformed
	 * iterator function and passing it an accumulator value and the current value
	 * from the array, and then passing the result to the next call.
	 *
	 * The iterator function receives two values: *(acc, value)*. It will be
	 * wrapped as a transformer to initialize the transducer. A transformer can be
	 * passed directly in place of an iterator function. In both cases, iteration
	 * may be stopped early with the [`R.reduced`](#reduced) function.
	 *
	 * A transducer is a function that accepts a transformer and returns a
	 * transformer and can be composed directly.
	 *
	 * A transformer is an an object that provides a 2-arity reducing iterator
	 * function, step, 0-arity initial value function, init, and 1-arity result
	 * extraction function, result. The step function is used as the iterator
	 * function in reduce. The result function is used to convert the final
	 * accumulator into the return type and in most cases is
	 * [`R.identity`](#identity). The init function can be used to provide an
	 * initial accumulator, but is ignored by transduce.
	 *
	 * The iteration is performed with [`R.reduce`](#reduce) after initializing the transducer.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.12.0
	 * @category List
	 * @sig (c -> c) -> ((a, b) -> a) -> a -> [b] -> a
	 * @param {Function} xf The transducer function. Receives a transformer and returns a transformer.
	 * @param {Function} fn The iterator function. Receives two values, the accumulator and the
	 *        current element from the array. Wrapped as transformer, if necessary, and used to
	 *        initialize the transducer
	 * @param {*} acc The initial accumulator value.
	 * @param {Array} list The list to iterate over.
	 * @return {*} The final, accumulated value.
	 * @see R.reduce, R.reduced, R.into
	 * @example
	 *
	 *      var numbers = [1, 2, 3, 4];
	 *      var transducer = R.compose(R.map(R.add(1)), R.take(2));
	 *      R.transduce(transducer, R.flip(R.append), [], numbers); //=> [2, 3]
	 *
	 *      var isOdd = (x) => x % 2 === 1;
	 *      var firstOddTransducer = R.compose(R.filter(isOdd), R.take(1));
	 *      R.transduce(firstOddTransducer, R.flip(R.append), [], R.range(0, 100)); //=> [1]
	 */


	var transduce = /*#__PURE__*/curryN(4, function transduce(xf, fn, acc, list) {
	  return _reduce(xf(typeof fn === 'function' ? _xwrap(fn) : fn), acc, list);
	});
	module.exports = transduce;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Transposes the rows and columns of a 2D list.
	 * When passed a list of `n` lists of length `x`,
	 * returns a list of `x` lists of length `n`.
	 *
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category List
	 * @sig [[a]] -> [[a]]
	 * @param {Array} list A 2D list
	 * @return {Array} A 2D list
	 * @example
	 *
	 *      R.transpose([[1, 'a'], [2, 'b'], [3, 'c']]) //=> [[1, 2, 3], ['a', 'b', 'c']]
	 *      R.transpose([[1, 2, 3], ['a', 'b', 'c']]) //=> [[1, 'a'], [2, 'b'], [3, 'c']]
	 *
	 *      // If some of the rows are shorter than the following rows, their elements are skipped:
	 *      R.transpose([[10, 11], [20], [], [30, 31, 32]]) //=> [[10, 20, 30], [11, 31], [32]]
	 * @symb R.transpose([[a], [b], [c]]) = [a, b, c]
	 * @symb R.transpose([[a, b], [c, d]]) = [[a, c], [b, d]]
	 * @symb R.transpose([[a, b], [c]]) = [[a, c], [b]]
	 */


	var transpose = /*#__PURE__*/_curry1(function transpose(outerlist) {
	  var i = 0;
	  var result = [];
	  while (i < outerlist.length) {
	    var innerlist = outerlist[i];
	    var j = 0;
	    while (j < innerlist.length) {
	      if (typeof result[j] === 'undefined') {
	        result[j] = [];
	      }
	      result[j].push(innerlist[j]);
	      j += 1;
	    }
	    i += 1;
	  }
	  return result;
	});
	module.exports = transpose;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var map = /*#__PURE__*/__webpack_require__(29);

	var sequence = /*#__PURE__*/__webpack_require__(273);

	/**
	 * Maps an [Applicative](https://github.com/fantasyland/fantasy-land#applicative)-returning
	 * function over a [Traversable](https://github.com/fantasyland/fantasy-land#traversable),
	 * then uses [`sequence`](#sequence) to transform the resulting Traversable of Applicative
	 * into an Applicative of Traversable.
	 *
	 * Dispatches to the `traverse` method of the third argument, if present.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category List
	 * @sig (Applicative f, Traversable t) => (a -> f a) -> (a -> f b) -> t a -> f (t b)
	 * @param {Function} of
	 * @param {Function} f
	 * @param {*} traversable
	 * @return {*}
	 * @see R.sequence
	 * @example
	 *
	 *      // Returns `Nothing` if the given divisor is `0`
	 *      safeDiv = n => d => d === 0 ? Nothing() : Just(n / d)
	 *
	 *      R.traverse(Maybe.of, safeDiv(10), [2, 4, 5]); //=> Just([5, 2.5, 2])
	 *      R.traverse(Maybe.of, safeDiv(10), [2, 0, 5]); //=> Nothing
	 */


	var traverse = /*#__PURE__*/_curry3(function traverse(of, f, traversable) {
	  return typeof traversable['fantasy-land/traverse'] === 'function' ? traversable['fantasy-land/traverse'](f, of) : sequence(of, map(f, traversable));
	});
	module.exports = traverse;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' + '\u2029\uFEFF';
	var zeroWidth = '\u200b';
	var hasProtoTrim = typeof String.prototype.trim === 'function';
	/**
	 * Removes (strips) whitespace from both ends of the string.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.6.0
	 * @category String
	 * @sig String -> String
	 * @param {String} str The string to trim.
	 * @return {String} Trimmed version of `str`.
	 * @example
	 *
	 *      R.trim('   xyz  '); //=> 'xyz'
	 *      R.map(R.trim, R.split(',', 'x, y, z')); //=> ['x', 'y', 'z']
	 */
	var _trim = !hasProtoTrim || /*#__PURE__*/ws.trim() || ! /*#__PURE__*/zeroWidth.trim() ? function trim(str) {
	  var beginRx = new RegExp('^[' + ws + '][' + ws + ']*');
	  var endRx = new RegExp('[' + ws + '][' + ws + ']*$');
	  return str.replace(beginRx, '').replace(endRx, '');
	} : function trim(str) {
	  return str.trim();
	};
	var trim = /*#__PURE__*/_curry1(_trim);
	module.exports = trim;

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

	var _arity = /*#__PURE__*/__webpack_require__(15);

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * `tryCatch` takes two functions, a `tryer` and a `catcher`. The returned
	 * function evaluates the `tryer`; if it does not throw, it simply returns the
	 * result. If the `tryer` *does* throw, the returned function evaluates the
	 * `catcher` function and returns its result. Note that for effective
	 * composition with this function, both the `tryer` and `catcher` functions
	 * must return the same type of results.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.20.0
	 * @category Function
	 * @sig (...x -> a) -> ((e, ...x) -> a) -> (...x -> a)
	 * @param {Function} tryer The function that may throw.
	 * @param {Function} catcher The function that will be evaluated if `tryer` throws.
	 * @return {Function} A new function that will catch exceptions and send then to the catcher.
	 * @example
	 *
	 *      R.tryCatch(R.prop('x'), R.F)({x: true}); //=> true
	 *      R.tryCatch(R.prop('x'), R.F)(null);      //=> false
	 */


	var tryCatch = /*#__PURE__*/_curry2(function _tryCatch(tryer, catcher) {
	  return _arity(tryer.length, function () {
	    try {
	      return tryer.apply(this, arguments);
	    } catch (e) {
	      return catcher.apply(this, _concat([e], arguments));
	    }
	  });
	});
	module.exports = tryCatch;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Takes a function `fn`, which takes a single array argument, and returns a
	 * function which:
	 *
	 *   - takes any number of positional arguments;
	 *   - passes these arguments to `fn` as an array; and
	 *   - returns the result.
	 *
	 * In other words, `R.unapply` derives a variadic function from a function which
	 * takes an array. `R.unapply` is the inverse of [`R.apply`](#apply).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.8.0
	 * @category Function
	 * @sig ([*...] -> a) -> (*... -> a)
	 * @param {Function} fn
	 * @return {Function}
	 * @see R.apply
	 * @example
	 *
	 *      R.unapply(JSON.stringify)(1, 2, 3); //=> '[1,2,3]'
	 * @symb R.unapply(f)(a, b) = f([a, b])
	 */


	var unapply = /*#__PURE__*/_curry1(function unapply(fn) {
	  return function () {
	    return fn(Array.prototype.slice.call(arguments, 0));
	  };
	});
	module.exports = unapply;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	var nAry = /*#__PURE__*/__webpack_require__(62);

	/**
	 * Wraps a function of any arity (including nullary) in a function that accepts
	 * exactly 1 parameter. Any extraneous parameters will not be passed to the
	 * supplied function.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.2.0
	 * @category Function
	 * @sig (* -> b) -> (a -> b)
	 * @param {Function} fn The function to wrap.
	 * @return {Function} A new function wrapping `fn`. The new function is guaranteed to be of
	 *         arity 1.
	 * @see R.binary, R.nAry
	 * @example
	 *
	 *      var takesTwoArgs = function(a, b) {
	 *        return [a, b];
	 *      };
	 *      takesTwoArgs.length; //=> 2
	 *      takesTwoArgs(1, 2); //=> [1, 2]
	 *
	 *      var takesOneArg = R.unary(takesTwoArgs);
	 *      takesOneArg.length; //=> 1
	 *      // Only 1 argument is passed to the wrapped function
	 *      takesOneArg(1, 2); //=> [1, undefined]
	 * @symb R.unary(f)(a, b, c) = f(a)
	 */


	var unary = /*#__PURE__*/_curry1(function unary(fn) {
	  return nAry(1, fn);
	});
	module.exports = unary;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var curryN = /*#__PURE__*/__webpack_require__(14);

	/**
	 * Returns a function of arity `n` from a (manually) curried function.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category Function
	 * @sig Number -> (a -> b) -> (a -> c)
	 * @param {Number} length The arity for the returned function.
	 * @param {Function} fn The function to uncurry.
	 * @return {Function} A new function.
	 * @see R.curry
	 * @example
	 *
	 *      var addFour = a => b => c => d => a + b + c + d;
	 *
	 *      var uncurriedAddFour = R.uncurryN(4, addFour);
	 *      uncurriedAddFour(1, 2, 3, 4); //=> 10
	 */


	var uncurryN = /*#__PURE__*/_curry2(function uncurryN(depth, fn) {
	  return curryN(depth, function () {
	    var currentDepth = 1;
	    var value = fn;
	    var idx = 0;
	    var endIdx;
	    while (currentDepth <= depth && typeof value === 'function') {
	      endIdx = currentDepth === depth ? arguments.length : idx + value.length;
	      value = value.apply(this, Array.prototype.slice.call(arguments, idx, endIdx));
	      currentDepth += 1;
	      idx = endIdx;
	    }
	    return value;
	  });
	});
	module.exports = uncurryN;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Builds a list from a seed value. Accepts an iterator function, which returns
	 * either false to stop iteration or an array of length 2 containing the value
	 * to add to the resulting list and the seed to be used in the next call to the
	 * iterator function.
	 *
	 * The iterator function receives one argument: *(seed)*.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.10.0
	 * @category List
	 * @sig (a -> [b]) -> * -> [b]
	 * @param {Function} fn The iterator function. receives one argument, `seed`, and returns
	 *        either false to quit iteration or an array of length two to proceed. The element
	 *        at index 0 of this array will be added to the resulting array, and the element
	 *        at index 1 will be passed to the next call to `fn`.
	 * @param {*} seed The seed value.
	 * @return {Array} The final list.
	 * @example
	 *
	 *      var f = n => n > 50 ? false : [-n, n + 10];
	 *      R.unfold(f, 10); //=> [-10, -20, -30, -40, -50]
	 * @symb R.unfold(f, x) = [f(x)[0], f(f(x)[1])[0], f(f(f(x)[1])[1])[0], ...]
	 */


	var unfold = /*#__PURE__*/_curry2(function unfold(fn, seed) {
	  var pair = fn(seed);
	  var result = [];
	  while (pair && pair.length) {
	    result[result.length] = pair[0];
	    pair = fn(pair[1]);
	  }
	  return result;
	});
	module.exports = unfold;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var compose = /*#__PURE__*/__webpack_require__(82);

	var uniq = /*#__PURE__*/__webpack_require__(186);

	/**
	 * Combines two lists into a set (i.e. no duplicates) composed of the elements
	 * of each list.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig [*] -> [*] -> [*]
	 * @param {Array} as The first list.
	 * @param {Array} bs The second list.
	 * @return {Array} The first and second lists concatenated, with
	 *         duplicates removed.
	 * @example
	 *
	 *      R.union([1, 2, 3], [2, 3, 4]); //=> [1, 2, 3, 4]
	 */


	var union = /*#__PURE__*/_curry2( /*#__PURE__*/compose(uniq, _concat));
	module.exports = union;

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

	var _concat = /*#__PURE__*/__webpack_require__(13);

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	var uniqWith = /*#__PURE__*/__webpack_require__(308);

	/**
	 * Combines two lists into a set (i.e. no duplicates) composed of the elements
	 * of each list. Duplication is determined according to the value returned by
	 * applying the supplied predicate to two list elements.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category Relation
	 * @sig ((a, a) -> Boolean) -> [*] -> [*] -> [*]
	 * @param {Function} pred A predicate used to test whether two items are equal.
	 * @param {Array} list1 The first list.
	 * @param {Array} list2 The second list.
	 * @return {Array} The first and second lists concatenated, with
	 *         duplicates removed.
	 * @see R.union
	 * @example
	 *
	 *      var l1 = [{a: 1}, {a: 2}];
	 *      var l2 = [{a: 1}, {a: 4}];
	 *      R.unionWith(R.eqBy(R.prop('a')), l1, l2); //=> [{a: 1}, {a: 2}, {a: 4}]
	 */


	var unionWith = /*#__PURE__*/_curry3(function unionWith(pred, list1, list2) {
	  return uniqWith(pred, _concat(list1, list2));
	});
	module.exports = unionWith;

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

	var _containsWith = /*#__PURE__*/__webpack_require__(101);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Returns a new list containing only one copy of each element in the original
	 * list, based upon the value returned by applying the supplied predicate to
	 * two list elements. Prefers the first item if two items compare equal based
	 * on the predicate.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.2.0
	 * @category List
	 * @sig ((a, a) -> Boolean) -> [a] -> [a]
	 * @param {Function} pred A predicate used to test whether two items are equal.
	 * @param {Array} list The array to consider.
	 * @return {Array} The list of unique items.
	 * @example
	 *
	 *      var strEq = R.eqBy(String);
	 *      R.uniqWith(strEq)([1, '1', 2, 1]); //=> [1, 2]
	 *      R.uniqWith(strEq)([{}, {}]);       //=> [{}]
	 *      R.uniqWith(strEq)([1, '1', 1]);    //=> [1]
	 *      R.uniqWith(strEq)(['1', 1, 1]);    //=> ['1']
	 */


	var uniqWith = /*#__PURE__*/_curry2(function uniqWith(pred, list) {
	  var idx = 0;
	  var len = list.length;
	  var result = [];
	  var item;
	  while (idx < len) {
	    item = list[idx];
	    if (!_containsWith(pred, item, result)) {
	      result[result.length] = item;
	    }
	    idx += 1;
	  }
	  return result;
	});
	module.exports = uniqWith;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Tests the final argument by passing it to the given predicate function. If
	 * the predicate is not satisfied, the function will return the result of
	 * calling the `whenFalseFn` function with the same argument. If the predicate
	 * is satisfied, the argument is returned as is.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.18.0
	 * @category Logic
	 * @sig (a -> Boolean) -> (a -> a) -> a -> a
	 * @param {Function} pred        A predicate function
	 * @param {Function} whenFalseFn A function to invoke when the `pred` evaluates
	 *                               to a falsy value.
	 * @param {*}        x           An object to test with the `pred` function and
	 *                               pass to `whenFalseFn` if necessary.
	 * @return {*} Either `x` or the result of applying `x` to `whenFalseFn`.
	 * @see R.ifElse, R.when
	 * @example
	 *
	 *      let safeInc = R.unless(R.isNil, R.inc);
	 *      safeInc(null); //=> null
	 *      safeInc(1); //=> 2
	 */


	var unless = /*#__PURE__*/_curry3(function unless(pred, whenFalseFn, x) {
	  return pred(x) ? x : whenFalseFn(x);
	});
	module.exports = unless;

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

	var _identity = /*#__PURE__*/__webpack_require__(176);

	var chain = /*#__PURE__*/__webpack_require__(69);

	/**
	 * Shorthand for `R.chain(R.identity)`, which removes one level of nesting from
	 * any [Chain](https://github.com/fantasyland/fantasy-land#chain).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category List
	 * @sig Chain c => c (c a) -> c a
	 * @param {*} list
	 * @return {*}
	 * @see R.flatten, R.chain
	 * @example
	 *
	 *      R.unnest([1, [2], [[3]]]); //=> [1, 2, [3]]
	 *      R.unnest([[1, 2], [3, 4], [5, 6]]); //=> [1, 2, 3, 4, 5, 6]
	 */


	var unnest = /*#__PURE__*/chain(_identity);
	module.exports = unnest;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Takes a predicate, a transformation function, and an initial value,
	 * and returns a value of the same type as the initial value.
	 * It does so by applying the transformation until the predicate is satisfied,
	 * at which point it returns the satisfactory value.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.20.0
	 * @category Logic
	 * @sig (a -> Boolean) -> (a -> a) -> a -> a
	 * @param {Function} pred A predicate function
	 * @param {Function} fn The iterator function
	 * @param {*} init Initial value
	 * @return {*} Final value that satisfies predicate
	 * @example
	 *
	 *      R.until(R.gt(R.__, 100), R.multiply(2))(1) // => 128
	 */


	var until = /*#__PURE__*/_curry3(function until(pred, fn, init) {
	  var val = init;
	  while (!pred(val)) {
	    val = fn(val);
	  }
	  return val;
	});
	module.exports = until;

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

	var _curry1 = /*#__PURE__*/__webpack_require__(6);

	/**
	 * Returns a list of all the properties, including prototype properties, of the
	 * supplied object.
	 * Note that the order of the output array is not guaranteed to be consistent
	 * across different JS platforms.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.2.0
	 * @category Object
	 * @sig {k: v} -> [v]
	 * @param {Object} obj The object to extract values from
	 * @return {Array} An array of the values of the object's own and prototype properties.
	 * @see R.values, R.keysIn
	 * @example
	 *
	 *      var F = function() { this.x = 'X'; };
	 *      F.prototype.y = 'Y';
	 *      var f = new F();
	 *      R.valuesIn(f); //=> ['X', 'Y']
	 */


	var valuesIn = /*#__PURE__*/_curry1(function valuesIn(obj) {
	  var prop;
	  var vs = [];
	  for (prop in obj) {
	    vs[vs.length] = obj[prop];
	  }
	  return vs;
	});
	module.exports = valuesIn;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	// `Const` is a functor that effectively ignores the function given to `map`.


	var Const = function (x) {
	  return { value: x, 'fantasy-land/map': function () {
	      return this;
	    } };
	};

	/**
	 * Returns a "view" of the given data structure, determined by the given lens.
	 * The lens's focus determines which portion of the data structure is visible.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.16.0
	 * @category Object
	 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s
	 * @sig Lens s a -> s -> a
	 * @param {Lens} lens
	 * @param {*} x
	 * @return {*}
	 * @see R.prop, R.lensIndex, R.lensProp
	 * @example
	 *
	 *      var xLens = R.lensProp('x');
	 *
	 *      R.view(xLens, {x: 1, y: 2});  //=> 1
	 *      R.view(xLens, {x: 4, y: 2});  //=> 4
	 */
	var view = /*#__PURE__*/_curry2(function view(lens, x) {
	  // Using `Const` effectively ignores the setter function of the `lens`,
	  // leaving the value returned by the getter function unmodified.
	  return lens(Const)(x).value;
	});
	module.exports = view;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Tests the final argument by passing it to the given predicate function. If
	 * the predicate is satisfied, the function will return the result of calling
	 * the `whenTrueFn` function with the same argument. If the predicate is not
	 * satisfied, the argument is returned as is.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.18.0
	 * @category Logic
	 * @sig (a -> Boolean) -> (a -> a) -> a -> a
	 * @param {Function} pred       A predicate function
	 * @param {Function} whenTrueFn A function to invoke when the `condition`
	 *                              evaluates to a truthy value.
	 * @param {*}        x          An object to test with the `pred` function and
	 *                              pass to `whenTrueFn` if necessary.
	 * @return {*} Either `x` or the result of applying `x` to `whenTrueFn`.
	 * @see R.ifElse, R.unless
	 * @example
	 *
	 *      // truncate :: String -> String
	 *      var truncate = R.when(
	 *        R.propSatisfies(R.gt(R.__, 10), 'length'),
	 *        R.pipe(R.take(10), R.append('…'), R.join(''))
	 *      );
	 *      truncate('12345');         //=> '12345'
	 *      truncate('0123456789ABC'); //=> '0123456789…'
	 */


	var when = /*#__PURE__*/_curry3(function when(pred, whenTrueFn, x) {
	  return pred(x) ? whenTrueFn(x) : x;
	});
	module.exports = when;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var _has = /*#__PURE__*/__webpack_require__(38);

	/**
	 * Takes a spec object and a test object; returns true if the test satisfies
	 * the spec. Each of the spec's own properties must be a predicate function.
	 * Each predicate is applied to the value of the corresponding property of the
	 * test object. `where` returns true if all the predicates return true, false
	 * otherwise.
	 *
	 * `where` is well suited to declaratively expressing constraints for other
	 * functions such as [`filter`](#filter) and [`find`](#find).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.1
	 * @category Object
	 * @sig {String: (* -> Boolean)} -> {String: *} -> Boolean
	 * @param {Object} spec
	 * @param {Object} testObj
	 * @return {Boolean}
	 * @see R.propSatisfies, R.whereEq
	 * @example
	 *
	 *      // pred :: Object -> Boolean
	 *      var pred = R.where({
	 *        a: R.equals('foo'),
	 *        b: R.complement(R.equals('bar')),
	 *        x: R.gt(R.__, 10),
	 *        y: R.lt(R.__, 20)
	 *      });
	 *
	 *      pred({a: 'foo', b: 'xxx', x: 11, y: 19}); //=> true
	 *      pred({a: 'xxx', b: 'xxx', x: 11, y: 19}); //=> false
	 *      pred({a: 'foo', b: 'bar', x: 11, y: 19}); //=> false
	 *      pred({a: 'foo', b: 'xxx', x: 10, y: 19}); //=> false
	 *      pred({a: 'foo', b: 'xxx', x: 11, y: 20}); //=> false
	 */


	var where = /*#__PURE__*/_curry2(function where(spec, testObj) {
	  for (var prop in spec) {
	    if (_has(prop, spec) && !spec[prop](testObj[prop])) {
	      return false;
	    }
	  }
	  return true;
	});
	module.exports = where;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var equals = /*#__PURE__*/__webpack_require__(98);

	var map = /*#__PURE__*/__webpack_require__(29);

	var where = /*#__PURE__*/__webpack_require__(315);

	/**
	 * Takes a spec object and a test object; returns true if the test satisfies
	 * the spec, false otherwise. An object satisfies the spec if, for each of the
	 * spec's own properties, accessing that property of the object gives the same
	 * value (in [`R.equals`](#equals) terms) as accessing that property of the
	 * spec.
	 *
	 * `whereEq` is a specialization of [`where`](#where).
	 *
	 * @func
	 * @memberOf R
	 * @since v0.14.0
	 * @category Object
	 * @sig {String: *} -> {String: *} -> Boolean
	 * @param {Object} spec
	 * @param {Object} testObj
	 * @return {Boolean}
	 * @see R.propEq, R.where
	 * @example
	 *
	 *      // pred :: Object -> Boolean
	 *      var pred = R.whereEq({a: 1, b: 2});
	 *
	 *      pred({a: 1});              //=> false
	 *      pred({a: 1, b: 2});        //=> true
	 *      pred({a: 1, b: 2, c: 3});  //=> true
	 *      pred({a: 1, b: 1});        //=> false
	 */


	var whereEq = /*#__PURE__*/_curry2(function whereEq(spec, testObj) {
	  return where(map(equals, spec), testObj);
	});
	module.exports = whereEq;

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

	var _contains = /*#__PURE__*/__webpack_require__(96);

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	var flip = /*#__PURE__*/__webpack_require__(164);

	var reject = /*#__PURE__*/__webpack_require__(106);

	/**
	 * Returns a new list without values in the first argument.
	 * [`R.equals`](#equals) is used to determine equality.
	 *
	 * Acts as a transducer if a transformer is given in list position.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.19.0
	 * @category List
	 * @sig [a] -> [a] -> [a]
	 * @param {Array} list1 The values to be removed from `list2`.
	 * @param {Array} list2 The array to remove values from.
	 * @return {Array} The new array without values in `list1`.
	 * @see R.transduce, R.difference
	 * @example
	 *
	 *      R.without([1, 2], [1, 2, 1, 3, 4]); //=> [3, 4]
	 */


	var without = /*#__PURE__*/_curry2(function (xs, list) {
	  return reject(flip(_contains)(xs), list);
	});
	module.exports = without;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Creates a new list out of the two supplied by creating each possible pair
	 * from the lists.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig [a] -> [b] -> [[a,b]]
	 * @param {Array} as The first list.
	 * @param {Array} bs The second list.
	 * @return {Array} The list made by combining each possible pair from
	 *         `as` and `bs` into pairs (`[a, b]`).
	 * @example
	 *
	 *      R.xprod([1, 2], ['a', 'b']); //=> [[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b']]
	 * @symb R.xprod([a, b], [c, d]) = [[a, c], [a, d], [b, c], [b, d]]
	 */


	var xprod = /*#__PURE__*/_curry2(function xprod(a, b) {
	  // = xprodWith(prepend); (takes about 3 times as long...)
	  var idx = 0;
	  var ilen = a.length;
	  var j;
	  var jlen = b.length;
	  var result = [];
	  while (idx < ilen) {
	    j = 0;
	    while (j < jlen) {
	      result[result.length] = [a[idx], b[j]];
	      j += 1;
	    }
	    idx += 1;
	  }
	  return result;
	});
	module.exports = xprod;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Creates a new list out of the two supplied by pairing up equally-positioned
	 * items from both lists. The returned list is truncated to the length of the
	 * shorter of the two input lists.
	 * Note: `zip` is equivalent to `zipWith(function(a, b) { return [a, b] })`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig [a] -> [b] -> [[a,b]]
	 * @param {Array} list1 The first array to consider.
	 * @param {Array} list2 The second array to consider.
	 * @return {Array} The list made by pairing up same-indexed elements of `list1` and `list2`.
	 * @example
	 *
	 *      R.zip([1, 2, 3], ['a', 'b', 'c']); //=> [[1, 'a'], [2, 'b'], [3, 'c']]
	 * @symb R.zip([a, b, c], [d, e, f]) = [[a, d], [b, e], [c, f]]
	 */


	var zip = /*#__PURE__*/_curry2(function zip(a, b) {
	  var rv = [];
	  var idx = 0;
	  var len = Math.min(a.length, b.length);
	  while (idx < len) {
	    rv[idx] = [a[idx], b[idx]];
	    idx += 1;
	  }
	  return rv;
	});
	module.exports = zip;

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

	var _curry2 = /*#__PURE__*/__webpack_require__(11);

	/**
	 * Creates a new object out of a list of keys and a list of values.
	 * Key/value pairing is truncated to the length of the shorter of the two lists.
	 * Note: `zipObj` is equivalent to `pipe(zip, fromPairs)`.
	 *
	 * @func
	 * @memberOf R
	 * @since v0.3.0
	 * @category List
	 * @sig [String] -> [*] -> {String: *}
	 * @param {Array} keys The array that will be properties on the output object.
	 * @param {Array} values The list of values on the output object.
	 * @return {Object} The object made by pairing up same-indexed elements of `keys` and `values`.
	 * @example
	 *
	 *      R.zipObj(['a', 'b', 'c'], [1, 2, 3]); //=> {a: 1, b: 2, c: 3}
	 */


	var zipObj = /*#__PURE__*/_curry2(function zipObj(keys, values) {
	  var idx = 0;
	  var len = Math.min(keys.length, values.length);
	  var out = {};
	  while (idx < len) {
	    out[keys[idx]] = values[idx];
	    idx += 1;
	  }
	  return out;
	});
	module.exports = zipObj;

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

	var _curry3 = /*#__PURE__*/__webpack_require__(18);

	/**
	 * Creates a new list out of the two supplied by applying the function to each
	 * equally-positioned pair in the lists. The returned list is truncated to the
	 * length of the shorter of the two input lists.
	 *
	 * @function
	 * @memberOf R
	 * @since v0.1.0
	 * @category List
	 * @sig ((a, b) -> c) -> [a] -> [b] -> [c]
	 * @param {Function} fn The function used to combine the two elements into one value.
	 * @param {Array} list1 The first array to consider.
	 * @param {Array} list2 The second array to consider.
	 * @return {Array} The list made by combining same-indexed elements of `list1` and `list2`
	 *         using `fn`.
	 * @example
	 *
	 *      var f = (x, y) => {
	 *        // ...
	 *      };
	 *      R.zipWith(f, [1, 2, 3], ['a', 'b', 'c']);
	 *      //=> [f(1, 'a'), f(2, 'b'), f(3, 'c')]
	 * @symb R.zipWith(fn, [a, b, c], [d, e, f]) = [fn(a, d), fn(b, e), fn(c, f)]
	 */


	var zipWith = /*#__PURE__*/_curry3(function zipWith(fn, a, b) {
	  var rv = [];
	  var idx = 0;
	  var len = Math.min(a.length, b.length);
	  while (idx < len) {
	    rv[idx] = fn(a[idx], b[idx]);
	    idx += 1;
	  }
	  return rv;
	});
	module.exports = zipWith;

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

	module.exports = __webpack_require__(323);

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

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(324)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== "undefined") {
	    factory(exports, require('./components/custom-properties'));
	  } else {
	    var mod = {
	      exports: {}
	    };
	    factory(mod.exports, global.customProperties);
	    global.index = mod.exports;
	  }
	})(this, function (exports, _customProperties) {
	  'use strict';

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

	  var _customProperties2 = _interopRequireDefault(_customProperties);

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

	  exports.default = _customProperties2.default;
	});

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

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(2), __webpack_require__(325), __webpack_require__(330)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== "undefined") {
	    factory(exports, require('react'), require('prop-types'), require('../utilities'));
	  } else {
	    var mod = {
	      exports: {}
	    };
	    factory(mod.exports, global.react, global.propTypes, global.utilities);
	    global.customProperties = mod.exports;
	  }
	})(this, function (exports, _react, _propTypes, _utilities) {
	  'use strict';

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

	  var _react2 = _interopRequireDefault(_react);

	  var _propTypes2 = _interopRequireDefault(_propTypes);

	  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 _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;
	    };
	  }();

	  function _possibleConstructorReturn(self, call) {
	    if (!self) {
	      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
	    }

	    return call && (typeof call === "object" || typeof call === "function") ? call : self;
	  }

	  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 CustomProperties = function (_Component) {
	    _inherits(CustomProperties, _Component);

	    function CustomProperties(props) {
	      _classCallCheck(this, CustomProperties);

	      var _this = _possibleConstructorReturn(this, (CustomProperties.__proto__ || Object.getPrototypeOf(CustomProperties)).call(this, props));

	      _this.container = null;
	      _this.containerRef = _this.containerRef.bind(_this);
	      _this.getContainer = _this.getContainer.bind(_this);
	      _this.handleNewProperties = _this.handleNewProperties.bind(_this);
	      return _this;
	    }

	    _createClass(CustomProperties, [{
	      key: 'componentDidMount',
	      value: function componentDidMount() {
	        var _this2 = this;

	        var properties = this.props.properties;

	        var keys = Object.keys(properties);

	        keys.forEach(function (key) {
	          (0, _utilities.setStyleProperty)(_this2.getContainer(), key, properties[key]);
	        });
	      }
	    }, {
	      key: 'componentWillReceiveProps',
	      value: function componentWillReceiveProps(nextProps) {
	        var properties = this.props.properties;


	        if (nextProps.properties !== properties) {
	          this.handleNewProperties(nextProps.properties, properties);
	        }
	      }
	    }, {
	      key: 'componentWillUnmount',
	      value: function componentWillUnmount() {
	        var _this3 = this;

	        var _props = this.props,
	            global = _props.global,
	            properties = _props.properties;


	        if (!global) {
	          return;
	        }

	        var keys = Object.keys(properties);

	        keys.forEach(function (key) {
	          (0, _utilities.removeStyleProperty)(_this3.getContainer(), key);
	        });
	      }
	    }, {
	      key: 'containerRef',
	      value: function containerRef(element) {
	        this.container = element;
	      }
	    }, {
	      key: 'getContainer',
	      value: function getContainer() {
	        var global = this.props.global;


	        return global ? (0, _utilities.getRoot)() : this.container;
	      }
	    }, {
	      key: 'handleNewProperties',
	      value: function handleNewProperties(next, previous) {
	        var _this4 = this;

	        var nextKeys = Object.keys(next);
	        var previousKeys = Object.keys(previous);
	        var removedKeys = previousKeys.filter(function (key) {
	          return typeof next[key] === 'undefined';
	        });

	        nextKeys.filter(function (key) {
	          return next[key] !== previous[key];
	        }).forEach(function (key) {
	          (0, _utilities.setStyleProperty)(_this4.getContainer(), key, next[key]);
	        });

	        removedKeys.forEach(function (key) {
	          (0, _utilities.removeStyleProperty)(_this4.getContainer(), key);
	        });
	      }
	    }, {
	      key: 'render',
	      value: function render() {
	        return !this.props.global ? _react2.default.createElement(
	          'div',
	          { ref: this.containerRef },
	          this.props.children
	        ) : this.props.children || null;
	      }
	    }]);

	    return CustomProperties;
	  }(_react.Component);

	  CustomProperties.propTypes = {
	    global: _propTypes2.default.bool,
	    properties: _propTypes2.default.objectOf(function (value, key, componentName) {
	      if (!(0, _utilities.isValidProperty)(key)) {
	        return new Error(('\n<' + componentName + ' /> could not set the property "' + key + ': ' + value[key] + ';".\nCustom Property names must be a string starting with two dashes, for example "--theme-background".\n      ').trim());
	      }
	    })
	  };

	  CustomProperties.defaultProps = {
	    global: false,
	    properties: {}
	  };

	  exports.default = CustomProperties;
	});

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

	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 */

	if (false) {
	  var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&
	    Symbol.for &&
	    Symbol.for('react.element')) ||
	    0xeac7;

	  var isValidElement = function(object) {
	    return typeof object === 'object' &&
	      object !== null &&
	      object.$$typeof === REACT_ELEMENT_TYPE;
	  };

	  // By explicitly using `prop-types` you are opting into new development behavior.
	  // http://fb.me/prop-types-in-prod
	  var throwOnDirectAccess = true;
	  module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);
	} else {
	  // By explicitly using `prop-types` you are opting into new production behavior.
	  // http://fb.me/prop-types-in-prod
	  module.exports = __webpack_require__(326)();
	}


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

	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 */

	'use strict';

	var emptyFunction = __webpack_require__(327);
	var invariant = __webpack_require__(328);
	var ReactPropTypesSecret = __webpack_require__(329);

	module.exports = function() {
	  function shim(props, propName, componentName, location, propFullName, secret) {
	    if (secret === ReactPropTypesSecret) {
	      // It is still safe when called from React.
	      return;
	    }
	    invariant(
	      false,
	      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
	      'Use PropTypes.checkPropTypes() to call them. ' +
	      'Read more at http://fb.me/use-check-prop-types'
	    );
	  };
	  shim.isRequired = shim;
	  function getShim() {
	    return shim;
	  };
	  // Important!
	  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
	  var ReactPropTypes = {
	    array: shim,
	    bool: shim,
	    func: shim,
	    number: shim,
	    object: shim,
	    string: shim,
	    symbol: shim,

	    any: shim,
	    arrayOf: getShim,
	    element: shim,
	    instanceOf: getShim,
	    node: shim,
	    objectOf: getShim,
	    oneOf: getShim,
	    oneOfType: getShim,
	    shape: getShim,
	    exact: getShim
	  };

	  ReactPropTypes.checkPropTypes = emptyFunction;
	  ReactPropTypes.PropTypes = ReactPropTypes;

	  return ReactPropTypes;
	};


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

	"use strict";

	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 *
	 * 
	 */

	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.
	 */
	var emptyFunction = 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;

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

	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 *
	 */

	'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 validateFormat = function validateFormat(format) {};

	if (false) {
	  validateFormat = function validateFormat(format) {
	    if (format === undefined) {
	      throw new Error('invariant requires an error message argument');
	    }
	  };
	}

	function invariant(condition, format, a, b, c, d, e, f) {
	  validateFormat(format);

	  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(format.replace(/%s/g, function () {
	        return args[argIndex++];
	      }));
	      error.name = 'Invariant Violation';
	    }

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

	module.exports = invariant;

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

	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 */

	'use strict';

	var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';

	module.exports = ReactPropTypesSecret;


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

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(331), __webpack_require__(332), __webpack_require__(333), __webpack_require__(334)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== "undefined") {
	    factory(exports, require('./is-valid-property'), require('./remove-style-property'), require('./set-style-property'), require('./get-root'));
	  } else {
	    var mod = {
	      exports: {}
	    };
	    factory(mod.exports, global.isValidProperty, global.removeStyleProperty, global.setStyleProperty, global.getRoot);
	    global.index = mod.exports;
	  }
	})(this, function (exports, _isValidProperty, _removeStyleProperty, _setStyleProperty, _getRoot) {
	  'use strict';

	  Object.defineProperty(exports, "__esModule", {
	    value: true
	  });
	  exports.setStyleProperty = exports.removeStyleProperty = exports.isValidProperty = exports.getRoot = undefined;

	  var _isValidProperty2 = _interopRequireDefault(_isValidProperty);

	  var _removeStyleProperty2 = _interopRequireDefault(_removeStyleProperty);

	  var _setStyleProperty2 = _interopRequireDefault(_setStyleProperty);

	  var _getRoot2 = _interopRequireDefault(_getRoot);

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

	  exports.getRoot = _getRoot2.default;
	  exports.isValidProperty = _isValidProperty2.default;
	  exports.removeStyleProperty = _removeStyleProperty2.default;
	  exports.setStyleProperty = _setStyleProperty2.default;
	});

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

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== "undefined") {
	    factory(exports);
	  } else {
	    var mod = {
	      exports: {}
	    };
	    factory(mod.exports);
	    global.isValidProperty = mod.exports;
	  }
	})(this, function (exports) {
	  "use strict";

	  Object.defineProperty(exports, "__esModule", {
	    value: true
	  });
	  var pattern = /^--\S+$/;

	  /**
	   * Checks that a property name matches the
	   * custom properties --* syntax format.
	   *
	   * Valid examples:
	   * --foo
	   * --foo-bar
	   * --foo$_bar%^&123
	   *
	   * Invalid examples:
	   * foo
	   * -foo
	   * --
	   * --foo bar
	   *
	   * @param {string} property - The property name to validate
	   *
	   * @return {bool} true if the property name is valid
	   */
	  var isValidProperty = function isValidProperty(property) {
	    return pattern.test(property);
	  };

	  exports.default = isValidProperty;
	});

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

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== "undefined") {
	    factory(exports);
	  } else {
	    var mod = {
	      exports: {}
	    };
	    factory(mod.exports);
	    global.removeStyleProperty = mod.exports;
	  }
	})(this, function (exports) {
	  "use strict";

	  Object.defineProperty(exports, "__esModule", {
	    value: true
	  });
	  /**
	   * A helper utility to abstract directly removing style properties
	   * from DOM elements. This is mainly to help with testing.
	   *
	   * @param {object} element - The DOM element to be styled
	   * @param {string} property - The name of the property to set
	   *
	   * @return {void}
	   */
	  var removeStyleProperty = function removeStyleProperty(element, property) {
	    element.style.removeProperty(property);
	  };

	  exports.default = removeStyleProperty;
	});

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

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(330)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== "undefined") {
	    factory(exports, require('./'));
	  } else {
	    var mod = {
	      exports: {}
	    };
	    factory(mod.exports, global._);
	    global.setStyleProperty = mod.exports;
	  }
	})(this, function (exports, _) {
	  'use strict';

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


	  /**
	   * A helper utility to abstract directly setting style properties
	   * on DOM elements. This is mainly to help with testing.
	   *
	   * @param {object} element - The DOM element to be styled
	   * @param {string} property - The name of the property to set
	   * @param {string} value - The value of the property
	   *
	   * @return {void}
	   */
	  var setStyleProperty = function setStyleProperty(element, property, value) {
	    if ((0, _.isValidProperty)(property)) {
	      element.style.setProperty(property, value);
	    }
	  };

	  exports.default = setStyleProperty;
	});

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

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== "undefined") {
	    factory(exports);
	  } else {
	    var mod = {
	      exports: {}
	    };
	    factory(mod.exports);
	    global.getRoot = mod.exports;
	  }
	})(this, function (exports) {
	  "use strict";

	  Object.defineProperty(exports, "__esModule", {
	    value: true
	  });
	  /**
	   * An abstraction around the document object to
	   * help mocking in tests.
	   *
	   * @return {object} - the root document element
	   */
	  var getRoot = function getRoot() {
	    return document.documentElement;
	  };

	  exports.default = getRoot;
	});

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

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module) {
	/**
	 * @license
	 *
	 * chroma.js - JavaScript library for color conversions
	 * 
	 * Copyright (c) 2011-2017, Gregor Aisch
	 * All rights reserved.
	 * 
	 * Redistribution and use in source and binary forms, with or without
	 * modification, are permitted provided that the following conditions are met:
	 * 
	 * 1. Redistributions of source code must retain the above copyright notice, this
	 *    list of conditions and the following disclaimer.
	 * 
	 * 2. Redistributions in binary form must reproduce the above copyright notice,
	 *    this list of conditions and the following disclaimer in the documentation
	 *    and/or other materials provided with the distribution.
	 * 
	 * 3. The name Gregor Aisch may not be used to endorse or promote products
	 *    derived from this software without specific prior written permission.
	 * 
	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
	 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
	 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
	 * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
	 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
	 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
	 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
	 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
	 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
	 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
	 *
	 */

	(function() {
	  var Color, DEG2RAD, LAB_CONSTANTS, PI, PITHIRD, RAD2DEG, TWOPI, _average_lrgb, _guess_formats, _guess_formats_sorted, _input, _interpolators, abs, atan2, bezier, blend, blend_f, brewer, burn, chroma, clip_rgb, cmyk2rgb, colors, cos, css2rgb, darken, dodge, each, floor, hcg2rgb, hex2rgb, hsi2rgb, hsl2css, hsl2rgb, hsv2rgb, interpolate, interpolate_hsx, interpolate_lab, interpolate_lrgb, interpolate_num, interpolate_rgb, lab2lch, lab2rgb, lab_xyz, lch2lab, lch2rgb, lighten, limit, log, luminance_x, m, max, multiply, normal, num2rgb, overlay, pow, rgb2cmyk, rgb2css, rgb2hcg, rgb2hex, rgb2hsi, rgb2hsl, rgb2hsv, rgb2lab, rgb2lch, rgb2luminance, rgb2num, rgb2temperature, rgb2xyz, rgb_xyz, rnd, root, round, screen, sin, sqrt, temperature2rgb, type, unpack, w3cx11, xyz_lab, xyz_rgb,
	    slice = [].slice;

	  type = (function() {

	    /*
	    for browser-safe type checking+
	    ported from jQuery's $.type
	     */
	    var classToType, len, name, o, ref;
	    classToType = {};
	    ref = "Boolean Number String Function Array Date RegExp Undefined Null".split(" ");
	    for (o = 0, len = ref.length; o < len; o++) {
	      name = ref[o];
	      classToType["[object " + name + "]"] = name.toLowerCase();
	    }
	    return function(obj) {
	      var strType;
	      strType = Object.prototype.toString.call(obj);
	      return classToType[strType] || "object";
	    };
	  })();

	  limit = function(x, min, max) {
	    if (min == null) {
	      min = 0;
	    }
	    if (max == null) {
	      max = 1;
	    }
	    if (x < min) {
	      x = min;
	    }
	    if (x > max) {
	      x = max;
	    }
	    return x;
	  };

	  unpack = function(args) {
	    if (args.length >= 3) {
	      return [].slice.call(args);
	    } else {
	      return args[0];
	    }
	  };

	  clip_rgb = function(rgb) {
	    var i, o;
	    rgb._clipped = false;
	    rgb._unclipped = rgb.slice(0);
	    for (i = o = 0; o < 3; i = ++o) {
	      if (i < 3) {
	        if (rgb[i] < 0 || rgb[i] > 255) {
	          rgb._clipped = true;
	        }
	        if (rgb[i] < 0) {
	          rgb[i] = 0;
	        }
	        if (rgb[i] > 255) {
	          rgb[i] = 255;
	        }
	      } else if (i === 3) {
	        if (rgb[i] < 0) {
	          rgb[i] = 0;
	        }
	        if (rgb[i] > 1) {
	          rgb[i] = 1;
	        }
	      }
	    }
	    if (!rgb._clipped) {
	      delete rgb._unclipped;
	    }
	    return rgb;
	  };

	  PI = Math.PI, round = Math.round, cos = Math.cos, floor = Math.floor, pow = Math.pow, log = Math.log, sin = Math.sin, sqrt = Math.sqrt, atan2 = Math.atan2, max = Math.max, abs = Math.abs;

	  TWOPI = PI * 2;

	  PITHIRD = PI / 3;

	  DEG2RAD = PI / 180;

	  RAD2DEG = 180 / PI;

	  chroma = function() {
	    if (arguments[0] instanceof Color) {
	      return arguments[0];
	    }
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, arguments, function(){});
	  };

	  chroma["default"] = chroma;

	  _interpolators = [];

	  if ((typeof module !== "undefined" && module !== null) && (module.exports != null)) {
	    module.exports = chroma;
	  }

	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
	      return chroma;
	    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else {
	    root = typeof exports !== "undefined" && exports !== null ? exports : this;
	    root.chroma = chroma;
	  }

	  chroma.version = '1.3.5';

	  _input = {};

	  _guess_formats = [];

	  _guess_formats_sorted = false;

	  Color = (function() {
	    function Color() {
	      var arg, args, chk, len, len1, me, mode, o, w;
	      me = this;
	      args = [];
	      for (o = 0, len = arguments.length; o < len; o++) {
	        arg = arguments[o];
	        if (arg != null) {
	          args.push(arg);
	        }
	      }
	      if (args.length > 1) {
	        mode = args[args.length - 1];
	      }
	      if (_input[mode] != null) {
	        me._rgb = clip_rgb(_input[mode](unpack(args.slice(0, -1))));
	      } else {
	        if (!_guess_formats_sorted) {
	          _guess_formats = _guess_formats.sort(function(a, b) {
	            return b.p - a.p;
	          });
	          _guess_formats_sorted = true;
	        }
	        for (w = 0, len1 = _guess_formats.length; w < len1; w++) {
	          chk = _guess_formats[w];
	          mode = chk.test.apply(chk, args);
	          if (mode) {
	            break;
	          }
	        }
	        if (mode) {
	          me._rgb = clip_rgb(_input[mode].apply(_input, args));
	        }
	      }
	      if (me._rgb == null) {
	        console.warn('unknown format: ' + args);
	      }
	      if (me._rgb == null) {
	        me._rgb = [0, 0, 0];
	      }
	      if (me._rgb.length === 3) {
	        me._rgb.push(1);
	      }
	    }

	    Color.prototype.toString = function() {
	      return this.hex();
	    };

	    Color.prototype.clone = function() {
	      return chroma(me._rgb);
	    };

	    return Color;

	  })();

	  chroma._input = _input;


	  /**
	  	ColorBrewer colors for chroma.js
	  
	  	Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The 
	  	Pennsylvania State University.
	  
	  	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.
	  
	      @preserve
	   */

	  chroma.brewer = brewer = {
	    OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],
	    PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],
	    BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],
	    Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],
	    BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],
	    YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],
	    YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],
	    Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],
	    RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],
	    Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],
	    YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],
	    Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],
	    GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],
	    Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],
	    YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],
	    PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],
	    Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],
	    PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],
	    Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],
	    Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],
	    RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],
	    RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],
	    PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],
	    PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],
	    RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],
	    BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],
	    RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],
	    PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],
	    Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],
	    Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],
	    Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],
	    Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],
	    Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],
	    Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],
	    Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],
	    Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']
	  };

	  (function() {
	    var key, results;
	    results = [];
	    for (key in brewer) {
	      results.push(brewer[key.toLowerCase()] = brewer[key]);
	    }
	    return results;
	  })();


	  /**
	  	X11 color names
	  
	  	http://www.w3.org/TR/css3-color/#svg-color
	   */

	  w3cx11 = {
	    aliceblue: '#f0f8ff',
	    antiquewhite: '#faebd7',
	    aqua: '#00ffff',
	    aquamarine: '#7fffd4',
	    azure: '#f0ffff',
	    beige: '#f5f5dc',
	    bisque: '#ffe4c4',
	    black: '#000000',
	    blanchedalmond: '#ffebcd',
	    blue: '#0000ff',
	    blueviolet: '#8a2be2',
	    brown: '#a52a2a',
	    burlywood: '#deb887',
	    cadetblue: '#5f9ea0',
	    chartreuse: '#7fff00',
	    chocolate: '#d2691e',
	    coral: '#ff7f50',
	    cornflower: '#6495ed',
	    cornflowerblue: '#6495ed',
	    cornsilk: '#fff8dc',
	    crimson: '#dc143c',
	    cyan: '#00ffff',
	    darkblue: '#00008b',
	    darkcyan: '#008b8b',
	    darkgoldenrod: '#b8860b',
	    darkgray: '#a9a9a9',
	    darkgreen: '#006400',
	    darkgrey: '#a9a9a9',
	    darkkhaki: '#bdb76b',
	    darkmagenta: '#8b008b',
	    darkolivegreen: '#556b2f',
	    darkorange: '#ff8c00',
	    darkorchid: '#9932cc',
	    darkred: '#8b0000',
	    darksalmon: '#e9967a',
	    darkseagreen: '#8fbc8f',
	    darkslateblue: '#483d8b',
	    darkslategray: '#2f4f4f',
	    darkslategrey: '#2f4f4f',
	    darkturquoise: '#00ced1',
	    darkviolet: '#9400d3',
	    deeppink: '#ff1493',
	    deepskyblue: '#00bfff',
	    dimgray: '#696969',
	    dimgrey: '#696969',
	    dodgerblue: '#1e90ff',
	    firebrick: '#b22222',
	    floralwhite: '#fffaf0',
	    forestgreen: '#228b22',
	    fuchsia: '#ff00ff',
	    gainsboro: '#dcdcdc',
	    ghostwhite: '#f8f8ff',
	    gold: '#ffd700',
	    goldenrod: '#daa520',
	    gray: '#808080',
	    green: '#008000',
	    greenyellow: '#adff2f',
	    grey: '#808080',
	    honeydew: '#f0fff0',
	    hotpink: '#ff69b4',
	    indianred: '#cd5c5c',
	    indigo: '#4b0082',
	    ivory: '#fffff0',
	    khaki: '#f0e68c',
	    laserlemon: '#ffff54',
	    lavender: '#e6e6fa',
	    lavenderblush: '#fff0f5',
	    lawngreen: '#7cfc00',
	    lemonchiffon: '#fffacd',
	    lightblue: '#add8e6',
	    lightcoral: '#f08080',
	    lightcyan: '#e0ffff',
	    lightgoldenrod: '#fafad2',
	    lightgoldenrodyellow: '#fafad2',
	    lightgray: '#d3d3d3',
	    lightgreen: '#90ee90',
	    lightgrey: '#d3d3d3',
	    lightpink: '#ffb6c1',
	    lightsalmon: '#ffa07a',
	    lightseagreen: '#20b2aa',
	    lightskyblue: '#87cefa',
	    lightslategray: '#778899',
	    lightslategrey: '#778899',
	    lightsteelblue: '#b0c4de',
	    lightyellow: '#ffffe0',
	    lime: '#00ff00',
	    limegreen: '#32cd32',
	    linen: '#faf0e6',
	    magenta: '#ff00ff',
	    maroon: '#800000',
	    maroon2: '#7f0000',
	    maroon3: '#b03060',
	    mediumaquamarine: '#66cdaa',
	    mediumblue: '#0000cd',
	    mediumorchid: '#ba55d3',
	    mediumpurple: '#9370db',
	    mediumseagreen: '#3cb371',
	    mediumslateblue: '#7b68ee',
	    mediumspringgreen: '#00fa9a',
	    mediumturquoise: '#48d1cc',
	    mediumvioletred: '#c71585',
	    midnightblue: '#191970',
	    mintcream: '#f5fffa',
	    mistyrose: '#ffe4e1',
	    moccasin: '#ffe4b5',
	    navajowhite: '#ffdead',
	    navy: '#000080',
	    oldlace: '#fdf5e6',
	    olive: '#808000',
	    olivedrab: '#6b8e23',
	    orange: '#ffa500',
	    orangered: '#ff4500',
	    orchid: '#da70d6',
	    palegoldenrod: '#eee8aa',
	    palegreen: '#98fb98',
	    paleturquoise: '#afeeee',
	    palevioletred: '#db7093',
	    papayawhip: '#ffefd5',
	    peachpuff: '#ffdab9',
	    peru: '#cd853f',
	    pink: '#ffc0cb',
	    plum: '#dda0dd',
	    powderblue: '#b0e0e6',
	    purple: '#800080',
	    purple2: '#7f007f',
	    purple3: '#a020f0',
	    rebeccapurple: '#663399',
	    red: '#ff0000',
	    rosybrown: '#bc8f8f',
	    royalblue: '#4169e1',
	    saddlebrown: '#8b4513',
	    salmon: '#fa8072',
	    sandybrown: '#f4a460',
	    seagreen: '#2e8b57',
	    seashell: '#fff5ee',
	    sienna: '#a0522d',
	    silver: '#c0c0c0',
	    skyblue: '#87ceeb',
	    slateblue: '#6a5acd',
	    slategray: '#708090',
	    slategrey: '#708090',
	    snow: '#fffafa',
	    springgreen: '#00ff7f',
	    steelblue: '#4682b4',
	    tan: '#d2b48c',
	    teal: '#008080',
	    thistle: '#d8bfd8',
	    tomato: '#ff6347',
	    turquoise: '#40e0d0',
	    violet: '#ee82ee',
	    wheat: '#f5deb3',
	    white: '#ffffff',
	    whitesmoke: '#f5f5f5',
	    yellow: '#ffff00',
	    yellowgreen: '#9acd32'
	  };

	  chroma.colors = colors = w3cx11;

	  lab2rgb = function() {
	    var a, args, b, g, l, r, x, y, z;
	    args = unpack(arguments);
	    l = args[0], a = args[1], b = args[2];
	    y = (l + 16) / 116;
	    x = isNaN(a) ? y : y + a / 500;
	    z = isNaN(b) ? y : y - b / 200;
	    y = LAB_CONSTANTS.Yn * lab_xyz(y);
	    x = LAB_CONSTANTS.Xn * lab_xyz(x);
	    z = LAB_CONSTANTS.Zn * lab_xyz(z);
	    r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z);
	    g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z);
	    b = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);
	    return [r, g, b, args.length > 3 ? args[3] : 1];
	  };

	  xyz_rgb = function(r) {
	    return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow(r, 1 / 2.4) - 0.055);
	  };

	  lab_xyz = function(t) {
	    if (t > LAB_CONSTANTS.t1) {
	      return t * t * t;
	    } else {
	      return LAB_CONSTANTS.t2 * (t - LAB_CONSTANTS.t0);
	    }
	  };

	  LAB_CONSTANTS = {
	    Kn: 18,
	    Xn: 0.950470,
	    Yn: 1,
	    Zn: 1.088830,
	    t0: 0.137931034,
	    t1: 0.206896552,
	    t2: 0.12841855,
	    t3: 0.008856452
	  };

	  rgb2lab = function() {
	    var b, g, r, ref, ref1, x, y, z;
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    ref1 = rgb2xyz(r, g, b), x = ref1[0], y = ref1[1], z = ref1[2];
	    return [116 * y - 16, 500 * (x - y), 200 * (y - z)];
	  };

	  rgb_xyz = function(r) {
	    if ((r /= 255) <= 0.04045) {
	      return r / 12.92;
	    } else {
	      return pow((r + 0.055) / 1.055, 2.4);
	    }
	  };

	  xyz_lab = function(t) {
	    if (t > LAB_CONSTANTS.t3) {
	      return pow(t, 1 / 3);
	    } else {
	      return t / LAB_CONSTANTS.t2 + LAB_CONSTANTS.t0;
	    }
	  };

	  rgb2xyz = function() {
	    var b, g, r, ref, x, y, z;
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    r = rgb_xyz(r);
	    g = rgb_xyz(g);
	    b = rgb_xyz(b);
	    x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / LAB_CONSTANTS.Xn);
	    y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / LAB_CONSTANTS.Yn);
	    z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / LAB_CONSTANTS.Zn);
	    return [x, y, z];
	  };

	  chroma.lab = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['lab']), function(){});
	  };

	  _input.lab = lab2rgb;

	  Color.prototype.lab = function() {
	    return rgb2lab(this._rgb);
	  };

	  bezier = function(colors) {
	    var I, I0, I1, c, lab0, lab1, lab2, lab3, ref, ref1, ref2;
	    colors = (function() {
	      var len, o, results;
	      results = [];
	      for (o = 0, len = colors.length; o < len; o++) {
	        c = colors[o];
	        results.push(chroma(c));
	      }
	      return results;
	    })();
	    if (colors.length === 2) {
	      ref = (function() {
	        var len, o, results;
	        results = [];
	        for (o = 0, len = colors.length; o < len; o++) {
	          c = colors[o];
	          results.push(c.lab());
	        }
	        return results;
	      })(), lab0 = ref[0], lab1 = ref[1];
	      I = function(t) {
	        var i, lab;
	        lab = (function() {
	          var o, results;
	          results = [];
	          for (i = o = 0; o <= 2; i = ++o) {
	            results.push(lab0[i] + t * (lab1[i] - lab0[i]));
	          }
	          return results;
	        })();
	        return chroma.lab.apply(chroma, lab);
	      };
	    } else if (colors.length === 3) {
	      ref1 = (function() {
	        var len, o, results;
	        results = [];
	        for (o = 0, len = colors.length; o < len; o++) {
	          c = colors[o];
	          results.push(c.lab());
	        }
	        return results;
	      })(), lab0 = ref1[0], lab1 = ref1[1], lab2 = ref1[2];
	      I = function(t) {
	        var i, lab;
	        lab = (function() {
	          var o, results;
	          results = [];
	          for (i = o = 0; o <= 2; i = ++o) {
	            results.push((1 - t) * (1 - t) * lab0[i] + 2 * (1 - t) * t * lab1[i] + t * t * lab2[i]);
	          }
	          return results;
	        })();
	        return chroma.lab.apply(chroma, lab);
	      };
	    } else if (colors.length === 4) {
	      ref2 = (function() {
	        var len, o, results;
	        results = [];
	        for (o = 0, len = colors.length; o < len; o++) {
	          c = colors[o];
	          results.push(c.lab());
	        }
	        return results;
	      })(), lab0 = ref2[0], lab1 = ref2[1], lab2 = ref2[2], lab3 = ref2[3];
	      I = function(t) {
	        var i, lab;
	        lab = (function() {
	          var o, results;
	          results = [];
	          for (i = o = 0; o <= 2; i = ++o) {
	            results.push((1 - t) * (1 - t) * (1 - t) * lab0[i] + 3 * (1 - t) * (1 - t) * t * lab1[i] + 3 * (1 - t) * t * t * lab2[i] + t * t * t * lab3[i]);
	          }
	          return results;
	        })();
	        return chroma.lab.apply(chroma, lab);
	      };
	    } else if (colors.length === 5) {
	      I0 = bezier(colors.slice(0, 3));
	      I1 = bezier(colors.slice(2, 5));
	      I = function(t) {
	        if (t < 0.5) {
	          return I0(t * 2);
	        } else {
	          return I1((t - 0.5) * 2);
	        }
	      };
	    }
	    return I;
	  };

	  chroma.bezier = function(colors) {
	    var f;
	    f = bezier(colors);
	    f.scale = function() {
	      return chroma.scale(f);
	    };
	    return f;
	  };


	  /*
	      chroma.js
	  
	      Copyright (c) 2011-2013, Gregor Aisch
	      All rights reserved.
	  
	      Redistribution and use in source and binary forms, with or without
	      modification, are permitted provided that the following conditions are met:
	  
	      * Redistributions of source code must retain the above copyright notice, this
	        list of conditions and the following disclaimer.
	  
	      * Redistributions in binary form must reproduce the above copyright notice,
	        this list of conditions and the following disclaimer in the documentation
	        and/or other materials provided with the distribution.
	  
	      * The name Gregor Aisch may not be used to endorse or promote products
	        derived from this software without specific prior written permission.
	  
	      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
	      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
	      IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
	      DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
	      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
	      BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
	      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
	      OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
	      NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
	      EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
	  
	      @source: https://github.com/gka/chroma.js
	   */

	  chroma.cubehelix = function(start, rotations, hue, gamma, lightness) {
	    var dh, dl, f;
	    if (start == null) {
	      start = 300;
	    }
	    if (rotations == null) {
	      rotations = -1.5;
	    }
	    if (hue == null) {
	      hue = 1;
	    }
	    if (gamma == null) {
	      gamma = 1;
	    }
	    if (lightness == null) {
	      lightness = [0, 1];
	    }
	    dh = 0;
	    if (type(lightness) === 'array') {
	      dl = lightness[1] - lightness[0];
	    } else {
	      dl = 0;
	      lightness = [lightness, lightness];
	    }
	    f = function(fract) {
	      var a, amp, b, cos_a, g, h, l, r, sin_a;
	      a = TWOPI * ((start + 120) / 360 + rotations * fract);
	      l = pow(lightness[0] + dl * fract, gamma);
	      h = dh !== 0 ? hue[0] + fract * dh : hue;
	      amp = h * l * (1 - l) / 2;
	      cos_a = cos(a);
	      sin_a = sin(a);
	      r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);
	      g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);
	      b = l + amp * (+1.97294 * cos_a);
	      return chroma(clip_rgb([r * 255, g * 255, b * 255]));
	    };
	    f.start = function(s) {
	      if (s == null) {
	        return start;
	      }
	      start = s;
	      return f;
	    };
	    f.rotations = function(r) {
	      if (r == null) {
	        return rotations;
	      }
	      rotations = r;
	      return f;
	    };
	    f.gamma = function(g) {
	      if (g == null) {
	        return gamma;
	      }
	      gamma = g;
	      return f;
	    };
	    f.hue = function(h) {
	      if (h == null) {
	        return hue;
	      }
	      hue = h;
	      if (type(hue) === 'array') {
	        dh = hue[1] - hue[0];
	        if (dh === 0) {
	          hue = hue[1];
	        }
	      } else {
	        dh = 0;
	      }
	      return f;
	    };
	    f.lightness = function(h) {
	      if (h == null) {
	        return lightness;
	      }
	      if (type(h) === 'array') {
	        lightness = h;
	        dl = h[1] - h[0];
	      } else {
	        lightness = [h, h];
	        dl = 0;
	      }
	      return f;
	    };
	    f.scale = function() {
	      return chroma.scale(f);
	    };
	    f.hue(hue);
	    return f;
	  };

	  chroma.random = function() {
	    var code, digits, i, o;
	    digits = '0123456789abcdef';
	    code = '#';
	    for (i = o = 0; o < 6; i = ++o) {
	      code += digits.charAt(floor(Math.random() * 16));
	    }
	    return new Color(code);
	  };

	  _interpolators = [];

	  interpolate = function(col1, col2, f, m) {
	    var interpol, len, o, res;
	    if (f == null) {
	      f = 0.5;
	    }
	    if (m == null) {
	      m = 'rgb';
	    }

	    /*
	    interpolates between colors
	    f = 0 --> me
	    f = 1 --> col
	     */
	    if (type(col1) !== 'object') {
	      col1 = chroma(col1);
	    }
	    if (type(col2) !== 'object') {
	      col2 = chroma(col2);
	    }
	    for (o = 0, len = _interpolators.length; o < len; o++) {
	      interpol = _interpolators[o];
	      if (m === interpol[0]) {
	        res = interpol[1](col1, col2, f, m);
	        break;
	      }
	    }
	    if (res == null) {
	      throw "color mode " + m + " is not supported";
	    }
	    return res.alpha(col1.alpha() + f * (col2.alpha() - col1.alpha()));
	  };

	  chroma.interpolate = interpolate;

	  Color.prototype.interpolate = function(col2, f, m) {
	    return interpolate(this, col2, f, m);
	  };

	  chroma.mix = interpolate;

	  Color.prototype.mix = Color.prototype.interpolate;

	  _input.rgb = function() {
	    var k, ref, results, v;
	    ref = unpack(arguments);
	    results = [];
	    for (k in ref) {
	      v = ref[k];
	      results.push(v);
	    }
	    return results;
	  };

	  chroma.rgb = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['rgb']), function(){});
	  };

	  Color.prototype.rgb = function(round) {
	    if (round == null) {
	      round = true;
	    }
	    if (round) {
	      return this._rgb.map(Math.round).slice(0, 3);
	    } else {
	      return this._rgb.slice(0, 3);
	    }
	  };

	  Color.prototype.rgba = function(round) {
	    if (round == null) {
	      round = true;
	    }
	    if (!round) {
	      return this._rgb.slice(0);
	    }
	    return [Math.round(this._rgb[0]), Math.round(this._rgb[1]), Math.round(this._rgb[2]), this._rgb[3]];
	  };

	  _guess_formats.push({
	    p: 3,
	    test: function(n) {
	      var a;
	      a = unpack(arguments);
	      if (type(a) === 'array' && a.length === 3) {
	        return 'rgb';
	      }
	      if (a.length === 4 && type(a[3]) === "number" && a[3] >= 0 && a[3] <= 1) {
	        return 'rgb';
	      }
	    }
	  });

	  _input.lrgb = _input.rgb;

	  interpolate_lrgb = function(col1, col2, f, m) {
	    var xyz0, xyz1;
	    xyz0 = col1._rgb;
	    xyz1 = col2._rgb;
	    return new Color(sqrt(pow(xyz0[0], 2) * (1 - f) + pow(xyz1[0], 2) * f), sqrt(pow(xyz0[1], 2) * (1 - f) + pow(xyz1[1], 2) * f), sqrt(pow(xyz0[2], 2) * (1 - f) + pow(xyz1[2], 2) * f), m);
	  };

	  _average_lrgb = function(colors) {
	    var col, f, len, o, rgb, xyz;
	    f = 1 / colors.length;
	    xyz = [0, 0, 0, 0];
	    for (o = 0, len = colors.length; o < len; o++) {
	      col = colors[o];
	      rgb = col._rgb;
	      xyz[0] += pow(rgb[0], 2) * f;
	      xyz[1] += pow(rgb[1], 2) * f;
	      xyz[2] += pow(rgb[2], 2) * f;
	      xyz[3] += rgb[3] * f;
	    }
	    xyz[0] = sqrt(xyz[0]);
	    xyz[1] = sqrt(xyz[1]);
	    xyz[2] = sqrt(xyz[2]);
	    return new Color(xyz);
	  };

	  _interpolators.push(['lrgb', interpolate_lrgb]);

	  chroma.average = function(colors, mode) {
	    var A, alpha, c, cnt, dx, dy, first, i, l, len, o, xyz, xyz2;
	    if (mode == null) {
	      mode = 'rgb';
	    }
	    l = colors.length;
	    colors = colors.map(function(c) {
	      return chroma(c);
	    });
	    first = colors.splice(0, 1)[0];
	    if (mode === 'lrgb') {
	      return _average_lrgb(colors);
	    }
	    xyz = first.get(mode);
	    cnt = [];
	    dx = 0;
	    dy = 0;
	    for (i in xyz) {
	      xyz[i] = xyz[i] || 0;
	      cnt.push(!isNaN(xyz[i]) ? 1 : 0);
	      if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {
	        A = xyz[i] / 180 * PI;
	        dx += cos(A);
	        dy += sin(A);
	      }
	    }
	    alpha = first.alpha();
	    for (o = 0, len = colors.length; o < len; o++) {
	      c = colors[o];
	      xyz2 = c.get(mode);
	      alpha += c.alpha();
	      for (i in xyz) {
	        if (!isNaN(xyz2[i])) {
	          xyz[i] += xyz2[i];
	          cnt[i] += 1;
	          if (mode.charAt(i) === 'h') {
	            A = xyz[i] / 180 * PI;
	            dx += cos(A);
	            dy += sin(A);
	          }
	        }
	      }
	    }
	    for (i in xyz) {
	      xyz[i] = xyz[i] / cnt[i];
	      if (mode.charAt(i) === 'h') {
	        A = atan2(dy / cnt[i], dx / cnt[i]) / PI * 180;
	        while (A < 0) {
	          A += 360;
	        }
	        while (A >= 360) {
	          A -= 360;
	        }
	        xyz[i] = A;
	      }
	    }
	    return chroma(xyz, mode).alpha(alpha / l);
	  };

	  hex2rgb = function(hex) {
	    var a, b, g, r, rgb, u;
	    if (hex.match(/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/)) {
	      if (hex.length === 4 || hex.length === 7) {
	        hex = hex.substr(1);
	      }
	      if (hex.length === 3) {
	        hex = hex.split("");
	        hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
	      }
	      u = parseInt(hex, 16);
	      r = u >> 16;
	      g = u >> 8 & 0xFF;
	      b = u & 0xFF;
	      return [r, g, b, 1];
	    }
	    if (hex.match(/^#?([A-Fa-f0-9]{8})$/)) {
	      if (hex.length === 9) {
	        hex = hex.substr(1);
	      }
	      u = parseInt(hex, 16);
	      r = u >> 24 & 0xFF;
	      g = u >> 16 & 0xFF;
	      b = u >> 8 & 0xFF;
	      a = round((u & 0xFF) / 0xFF * 100) / 100;
	      return [r, g, b, a];
	    }
	    if ((_input.css != null) && (rgb = _input.css(hex))) {
	      return rgb;
	    }
	    throw "unknown color: " + hex;
	  };

	  rgb2hex = function(channels, mode) {
	    var a, b, g, hxa, r, str, u;
	    if (mode == null) {
	      mode = 'rgb';
	    }
	    r = channels[0], g = channels[1], b = channels[2], a = channels[3];
	    r = Math.round(r);
	    g = Math.round(g);
	    b = Math.round(b);
	    u = r << 16 | g << 8 | b;
	    str = "000000" + u.toString(16);
	    str = str.substr(str.length - 6);
	    hxa = '0' + round(a * 255).toString(16);
	    hxa = hxa.substr(hxa.length - 2);
	    return "#" + (function() {
	      switch (mode.toLowerCase()) {
	        case 'rgba':
	          return str + hxa;
	        case 'argb':
	          return hxa + str;
	        default:
	          return str;
	      }
	    })();
	  };

	  _input.hex = function(h) {
	    return hex2rgb(h);
	  };

	  chroma.hex = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['hex']), function(){});
	  };

	  Color.prototype.hex = function(mode) {
	    if (mode == null) {
	      mode = 'rgb';
	    }
	    return rgb2hex(this._rgb, mode);
	  };

	  _guess_formats.push({
	    p: 4,
	    test: function(n) {
	      if (arguments.length === 1 && type(n) === "string") {
	        return 'hex';
	      }
	    }
	  });

	  hsl2rgb = function() {
	    var args, b, c, g, h, i, l, o, r, ref, s, t1, t2, t3;
	    args = unpack(arguments);
	    h = args[0], s = args[1], l = args[2];
	    if (s === 0) {
	      r = g = b = l * 255;
	    } else {
	      t3 = [0, 0, 0];
	      c = [0, 0, 0];
	      t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;
	      t1 = 2 * l - t2;
	      h /= 360;
	      t3[0] = h + 1 / 3;
	      t3[1] = h;
	      t3[2] = h - 1 / 3;
	      for (i = o = 0; o <= 2; i = ++o) {
	        if (t3[i] < 0) {
	          t3[i] += 1;
	        }
	        if (t3[i] > 1) {
	          t3[i] -= 1;
	        }
	        if (6 * t3[i] < 1) {
	          c[i] = t1 + (t2 - t1) * 6 * t3[i];
	        } else if (2 * t3[i] < 1) {
	          c[i] = t2;
	        } else if (3 * t3[i] < 2) {
	          c[i] = t1 + (t2 - t1) * ((2 / 3) - t3[i]) * 6;
	        } else {
	          c[i] = t1;
	        }
	      }
	      ref = [round(c[0] * 255), round(c[1] * 255), round(c[2] * 255)], r = ref[0], g = ref[1], b = ref[2];
	    }
	    if (args.length > 3) {
	      return [r, g, b, args[3]];
	    } else {
	      return [r, g, b];
	    }
	  };

	  rgb2hsl = function(r, g, b) {
	    var h, l, min, ref, s;
	    if (r !== void 0 && r.length >= 3) {
	      ref = r, r = ref[0], g = ref[1], b = ref[2];
	    }
	    r /= 255;
	    g /= 255;
	    b /= 255;
	    min = Math.min(r, g, b);
	    max = Math.max(r, g, b);
	    l = (max + min) / 2;
	    if (max === min) {
	      s = 0;
	      h = Number.NaN;
	    } else {
	      s = l < 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min);
	    }
	    if (r === max) {
	      h = (g - b) / (max - min);
	    } else if (g === max) {
	      h = 2 + (b - r) / (max - min);
	    } else if (b === max) {
	      h = 4 + (r - g) / (max - min);
	    }
	    h *= 60;
	    if (h < 0) {
	      h += 360;
	    }
	    return [h, s, l];
	  };

	  chroma.hsl = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['hsl']), function(){});
	  };

	  _input.hsl = hsl2rgb;

	  Color.prototype.hsl = function() {
	    return rgb2hsl(this._rgb);
	  };

	  hsv2rgb = function() {
	    var args, b, f, g, h, i, p, q, r, ref, ref1, ref2, ref3, ref4, ref5, s, t, v;
	    args = unpack(arguments);
	    h = args[0], s = args[1], v = args[2];
	    v *= 255;
	    if (s === 0) {
	      r = g = b = v;
	    } else {
	      if (h === 360) {
	        h = 0;
	      }
	      if (h > 360) {
	        h -= 360;
	      }
	      if (h < 0) {
	        h += 360;
	      }
	      h /= 60;
	      i = floor(h);
	      f = h - i;
	      p = v * (1 - s);
	      q = v * (1 - s * f);
	      t = v * (1 - s * (1 - f));
	      switch (i) {
	        case 0:
	          ref = [v, t, p], r = ref[0], g = ref[1], b = ref[2];
	          break;
	        case 1:
	          ref1 = [q, v, p], r = ref1[0], g = ref1[1], b = ref1[2];
	          break;
	        case 2:
	          ref2 = [p, v, t], r = ref2[0], g = ref2[1], b = ref2[2];
	          break;
	        case 3:
	          ref3 = [p, q, v], r = ref3[0], g = ref3[1], b = ref3[2];
	          break;
	        case 4:
	          ref4 = [t, p, v], r = ref4[0], g = ref4[1], b = ref4[2];
	          break;
	        case 5:
	          ref5 = [v, p, q], r = ref5[0], g = ref5[1], b = ref5[2];
	      }
	    }
	    return [r, g, b, args.length > 3 ? args[3] : 1];
	  };

	  rgb2hsv = function() {
	    var b, delta, g, h, min, r, ref, s, v;
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    min = Math.min(r, g, b);
	    max = Math.max(r, g, b);
	    delta = max - min;
	    v = max / 255.0;
	    if (max === 0) {
	      h = Number.NaN;
	      s = 0;
	    } else {
	      s = delta / max;
	      if (r === max) {
	        h = (g - b) / delta;
	      }
	      if (g === max) {
	        h = 2 + (b - r) / delta;
	      }
	      if (b === max) {
	        h = 4 + (r - g) / delta;
	      }
	      h *= 60;
	      if (h < 0) {
	        h += 360;
	      }
	    }
	    return [h, s, v];
	  };

	  chroma.hsv = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['hsv']), function(){});
	  };

	  _input.hsv = hsv2rgb;

	  Color.prototype.hsv = function() {
	    return rgb2hsv(this._rgb);
	  };

	  num2rgb = function(num) {
	    var b, g, r;
	    if (type(num) === "number" && num >= 0 && num <= 0xFFFFFF) {
	      r = num >> 16;
	      g = (num >> 8) & 0xFF;
	      b = num & 0xFF;
	      return [r, g, b, 1];
	    }
	    console.warn("unknown num color: " + num);
	    return [0, 0, 0, 1];
	  };

	  rgb2num = function() {
	    var b, g, r, ref;
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    return (r << 16) + (g << 8) + b;
	  };

	  chroma.num = function(num) {
	    return new Color(num, 'num');
	  };

	  Color.prototype.num = function(mode) {
	    if (mode == null) {
	      mode = 'rgb';
	    }
	    return rgb2num(this._rgb, mode);
	  };

	  _input.num = num2rgb;

	  _guess_formats.push({
	    p: 1,
	    test: function(n) {
	      if (arguments.length === 1 && type(n) === "number" && n >= 0 && n <= 0xFFFFFF) {
	        return 'num';
	      }
	    }
	  });

	  hcg2rgb = function() {
	    var _c, _g, args, b, c, f, g, h, i, p, q, r, ref, ref1, ref2, ref3, ref4, ref5, t, v;
	    args = unpack(arguments);
	    h = args[0], c = args[1], _g = args[2];
	    c = c / 100;
	    g = g / 100 * 255;
	    _c = c * 255;
	    if (c === 0) {
	      r = g = b = _g;
	    } else {
	      if (h === 360) {
	        h = 0;
	      }
	      if (h > 360) {
	        h -= 360;
	      }
	      if (h < 0) {
	        h += 360;
	      }
	      h /= 60;
	      i = floor(h);
	      f = h - i;
	      p = _g * (1 - c);
	      q = p + _c * (1 - f);
	      t = p + _c * f;
	      v = p + _c;
	      switch (i) {
	        case 0:
	          ref = [v, t, p], r = ref[0], g = ref[1], b = ref[2];
	          break;
	        case 1:
	          ref1 = [q, v, p], r = ref1[0], g = ref1[1], b = ref1[2];
	          break;
	        case 2:
	          ref2 = [p, v, t], r = ref2[0], g = ref2[1], b = ref2[2];
	          break;
	        case 3:
	          ref3 = [p, q, v], r = ref3[0], g = ref3[1], b = ref3[2];
	          break;
	        case 4:
	          ref4 = [t, p, v], r = ref4[0], g = ref4[1], b = ref4[2];
	          break;
	        case 5:
	          ref5 = [v, p, q], r = ref5[0], g = ref5[1], b = ref5[2];
	      }
	    }
	    return [r, g, b, args.length > 3 ? args[3] : 1];
	  };

	  rgb2hcg = function() {
	    var _g, b, c, delta, g, h, min, r, ref;
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    min = Math.min(r, g, b);
	    max = Math.max(r, g, b);
	    delta = max - min;
	    c = delta * 100 / 255;
	    _g = min / (255 - delta) * 100;
	    if (delta === 0) {
	      h = Number.NaN;
	    } else {
	      if (r === max) {
	        h = (g - b) / delta;
	      }
	      if (g === max) {
	        h = 2 + (b - r) / delta;
	      }
	      if (b === max) {
	        h = 4 + (r - g) / delta;
	      }
	      h *= 60;
	      if (h < 0) {
	        h += 360;
	      }
	    }
	    return [h, c, _g];
	  };

	  chroma.hcg = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['hcg']), function(){});
	  };

	  _input.hcg = hcg2rgb;

	  Color.prototype.hcg = function() {
	    return rgb2hcg(this._rgb);
	  };

	  css2rgb = function(css) {
	    var aa, ab, hsl, i, m, o, rgb, w;
	    css = css.toLowerCase();
	    if ((chroma.colors != null) && chroma.colors[css]) {
	      return hex2rgb(chroma.colors[css]);
	    }
	    if (m = css.match(/rgb\(\s*(\-?\d+),\s*(\-?\d+)\s*,\s*(\-?\d+)\s*\)/)) {
	      rgb = m.slice(1, 4);
	      for (i = o = 0; o <= 2; i = ++o) {
	        rgb[i] = +rgb[i];
	      }
	      rgb[3] = 1;
	    } else if (m = css.match(/rgba\(\s*(\-?\d+),\s*(\-?\d+)\s*,\s*(\-?\d+)\s*,\s*([01]|[01]?\.\d+)\)/)) {
	      rgb = m.slice(1, 5);
	      for (i = w = 0; w <= 3; i = ++w) {
	        rgb[i] = +rgb[i];
	      }
	    } else if (m = css.match(/rgb\(\s*(\-?\d+(?:\.\d+)?)%,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*\)/)) {
	      rgb = m.slice(1, 4);
	      for (i = aa = 0; aa <= 2; i = ++aa) {
	        rgb[i] = round(rgb[i] * 2.55);
	      }
	      rgb[3] = 1;
	    } else if (m = css.match(/rgba\(\s*(\-?\d+(?:\.\d+)?)%,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)/)) {
	      rgb = m.slice(1, 5);
	      for (i = ab = 0; ab <= 2; i = ++ab) {
	        rgb[i] = round(rgb[i] * 2.55);
	      }
	      rgb[3] = +rgb[3];
	    } else if (m = css.match(/hsl\(\s*(\-?\d+(?:\.\d+)?),\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*\)/)) {
	      hsl = m.slice(1, 4);
	      hsl[1] *= 0.01;
	      hsl[2] *= 0.01;
	      rgb = hsl2rgb(hsl);
	      rgb[3] = 1;
	    } else if (m = css.match(/hsla\(\s*(\-?\d+(?:\.\d+)?),\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)/)) {
	      hsl = m.slice(1, 4);
	      hsl[1] *= 0.01;
	      hsl[2] *= 0.01;
	      rgb = hsl2rgb(hsl);
	      rgb[3] = +m[4];
	    }
	    return rgb;
	  };

	  rgb2css = function(rgba) {
	    var mode;
	    mode = rgba[3] < 1 ? 'rgba' : 'rgb';
	    if (mode === 'rgb') {
	      return mode + '(' + rgba.slice(0, 3).map(round).join(',') + ')';
	    } else if (mode === 'rgba') {
	      return mode + '(' + rgba.slice(0, 3).map(round).join(',') + ',' + rgba[3] + ')';
	    } else {

	    }
	  };

	  rnd = function(a) {
	    return round(a * 100) / 100;
	  };

	  hsl2css = function(hsl, alpha) {
	    var mode;
	    mode = alpha < 1 ? 'hsla' : 'hsl';
	    hsl[0] = rnd(hsl[0] || 0);
	    hsl[1] = rnd(hsl[1] * 100) + '%';
	    hsl[2] = rnd(hsl[2] * 100) + '%';
	    if (mode === 'hsla') {
	      hsl[3] = alpha;
	    }
	    return mode + '(' + hsl.join(',') + ')';
	  };

	  _input.css = function(h) {
	    return css2rgb(h);
	  };

	  chroma.css = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['css']), function(){});
	  };

	  Color.prototype.css = function(mode) {
	    if (mode == null) {
	      mode = 'rgb';
	    }
	    if (mode.slice(0, 3) === 'rgb') {
	      return rgb2css(this._rgb);
	    } else if (mode.slice(0, 3) === 'hsl') {
	      return hsl2css(this.hsl(), this.alpha());
	    }
	  };

	  _input.named = function(name) {
	    return hex2rgb(w3cx11[name]);
	  };

	  _guess_formats.push({
	    p: 5,
	    test: function(n) {
	      if (arguments.length === 1 && (w3cx11[n] != null)) {
	        return 'named';
	      }
	    }
	  });

	  Color.prototype.name = function(n) {
	    var h, k;
	    if (arguments.length) {
	      if (w3cx11[n]) {
	        this._rgb = hex2rgb(w3cx11[n]);
	      }
	      this._rgb[3] = 1;
	      this;
	    }
	    h = this.hex();
	    for (k in w3cx11) {
	      if (h === w3cx11[k]) {
	        return k;
	      }
	    }
	    return h;
	  };

	  lch2lab = function() {

	    /*
	    Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.
	    These formulas were invented by David Dalrymple to obtain maximum contrast without going
	    out of gamut if the parameters are in the range 0-1.
	    
	    A saturation multiplier was added by Gregor Aisch
	     */
	    var c, h, l, ref;
	    ref = unpack(arguments), l = ref[0], c = ref[1], h = ref[2];
	    h = h * DEG2RAD;
	    return [l, cos(h) * c, sin(h) * c];
	  };

	  lch2rgb = function() {
	    var L, a, args, b, c, g, h, l, r, ref, ref1;
	    args = unpack(arguments);
	    l = args[0], c = args[1], h = args[2];
	    ref = lch2lab(l, c, h), L = ref[0], a = ref[1], b = ref[2];
	    ref1 = lab2rgb(L, a, b), r = ref1[0], g = ref1[1], b = ref1[2];
	    return [r, g, b, args.length > 3 ? args[3] : 1];
	  };

	  lab2lch = function() {
	    var a, b, c, h, l, ref;
	    ref = unpack(arguments), l = ref[0], a = ref[1], b = ref[2];
	    c = sqrt(a * a + b * b);
	    h = (atan2(b, a) * RAD2DEG + 360) % 360;
	    if (round(c * 10000) === 0) {
	      h = Number.NaN;
	    }
	    return [l, c, h];
	  };

	  rgb2lch = function() {
	    var a, b, g, l, r, ref, ref1;
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    ref1 = rgb2lab(r, g, b), l = ref1[0], a = ref1[1], b = ref1[2];
	    return lab2lch(l, a, b);
	  };

	  chroma.lch = function() {
	    var args;
	    args = unpack(arguments);
	    return new Color(args, 'lch');
	  };

	  chroma.hcl = function() {
	    var args;
	    args = unpack(arguments);
	    return new Color(args, 'hcl');
	  };

	  _input.lch = lch2rgb;

	  _input.hcl = function() {
	    var c, h, l, ref;
	    ref = unpack(arguments), h = ref[0], c = ref[1], l = ref[2];
	    return lch2rgb([l, c, h]);
	  };

	  Color.prototype.lch = function() {
	    return rgb2lch(this._rgb);
	  };

	  Color.prototype.hcl = function() {
	    return rgb2lch(this._rgb).reverse();
	  };

	  rgb2cmyk = function(mode) {
	    var b, c, f, g, k, m, r, ref, y;
	    if (mode == null) {
	      mode = 'rgb';
	    }
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    r = r / 255;
	    g = g / 255;
	    b = b / 255;
	    k = 1 - Math.max(r, Math.max(g, b));
	    f = k < 1 ? 1 / (1 - k) : 0;
	    c = (1 - r - k) * f;
	    m = (1 - g - k) * f;
	    y = (1 - b - k) * f;
	    return [c, m, y, k];
	  };

	  cmyk2rgb = function() {
	    var alpha, args, b, c, g, k, m, r, y;
	    args = unpack(arguments);
	    c = args[0], m = args[1], y = args[2], k = args[3];
	    alpha = args.length > 4 ? args[4] : 1;
	    if (k === 1) {
	      return [0, 0, 0, alpha];
	    }
	    r = c >= 1 ? 0 : 255 * (1 - c) * (1 - k);
	    g = m >= 1 ? 0 : 255 * (1 - m) * (1 - k);
	    b = y >= 1 ? 0 : 255 * (1 - y) * (1 - k);
	    return [r, g, b, alpha];
	  };

	  _input.cmyk = function() {
	    return cmyk2rgb(unpack(arguments));
	  };

	  chroma.cmyk = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['cmyk']), function(){});
	  };

	  Color.prototype.cmyk = function() {
	    return rgb2cmyk(this._rgb);
	  };

	  _input.gl = function() {
	    var i, k, o, rgb, v;
	    rgb = (function() {
	      var ref, results;
	      ref = unpack(arguments);
	      results = [];
	      for (k in ref) {
	        v = ref[k];
	        results.push(v);
	      }
	      return results;
	    }).apply(this, arguments);
	    for (i = o = 0; o <= 2; i = ++o) {
	      rgb[i] *= 255;
	    }
	    return rgb;
	  };

	  chroma.gl = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['gl']), function(){});
	  };

	  Color.prototype.gl = function() {
	    var rgb;
	    rgb = this._rgb;
	    return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];
	  };

	  rgb2luminance = function(r, g, b) {
	    var ref;
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    r = luminance_x(r);
	    g = luminance_x(g);
	    b = luminance_x(b);
	    return 0.2126 * r + 0.7152 * g + 0.0722 * b;
	  };

	  luminance_x = function(x) {
	    x /= 255;
	    if (x <= 0.03928) {
	      return x / 12.92;
	    } else {
	      return pow((x + 0.055) / 1.055, 2.4);
	    }
	  };

	  interpolate_rgb = function(col1, col2, f, m) {
	    var xyz0, xyz1;
	    xyz0 = col1._rgb;
	    xyz1 = col2._rgb;
	    return new Color(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), m);
	  };

	  _interpolators.push(['rgb', interpolate_rgb]);

	  Color.prototype.luminance = function(lum, mode) {
	    var cur_lum, eps, max_iter, test;
	    if (mode == null) {
	      mode = 'rgb';
	    }
	    if (!arguments.length) {
	      return rgb2luminance(this._rgb);
	    }
	    if (lum === 0) {
	      this._rgb = [0, 0, 0, this._rgb[3]];
	    } else if (lum === 1) {
	      this._rgb = [255, 255, 255, this._rgb[3]];
	    } else {
	      eps = 1e-7;
	      max_iter = 20;
	      test = function(l, h) {
	        var lm, m;
	        m = l.interpolate(h, 0.5, mode);
	        lm = m.luminance();
	        if (Math.abs(lum - lm) < eps || !max_iter--) {
	          return m;
	        }
	        if (lm > lum) {
	          return test(l, m);
	        }
	        return test(m, h);
	      };
	      cur_lum = rgb2luminance(this._rgb);
	      this._rgb = (cur_lum > lum ? test(chroma('black'), this) : test(this, chroma('white'))).rgba();
	    }
	    return this;
	  };

	  temperature2rgb = function(kelvin) {
	    var b, g, r, temp;
	    temp = kelvin / 100;
	    if (temp < 66) {
	      r = 255;
	      g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g);
	      b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b);
	    } else {
	      r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r);
	      g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g);
	      b = 255;
	    }
	    return [r, g, b];
	  };

	  rgb2temperature = function() {
	    var b, eps, g, maxTemp, minTemp, r, ref, rgb, temp;
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    minTemp = 1000;
	    maxTemp = 40000;
	    eps = 0.4;
	    while (maxTemp - minTemp > eps) {
	      temp = (maxTemp + minTemp) * 0.5;
	      rgb = temperature2rgb(temp);
	      if ((rgb[2] / rgb[0]) >= (b / r)) {
	        maxTemp = temp;
	      } else {
	        minTemp = temp;
	      }
	    }
	    return round(temp);
	  };

	  chroma.temperature = chroma.kelvin = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['temperature']), function(){});
	  };

	  _input.temperature = _input.kelvin = _input.K = temperature2rgb;

	  Color.prototype.temperature = function() {
	    return rgb2temperature(this._rgb);
	  };

	  Color.prototype.kelvin = Color.prototype.temperature;

	  chroma.contrast = function(a, b) {
	    var l1, l2, ref, ref1;
	    if ((ref = type(a)) === 'string' || ref === 'number') {
	      a = new Color(a);
	    }
	    if ((ref1 = type(b)) === 'string' || ref1 === 'number') {
	      b = new Color(b);
	    }
	    l1 = a.luminance();
	    l2 = b.luminance();
	    if (l1 > l2) {
	      return (l1 + 0.05) / (l2 + 0.05);
	    } else {
	      return (l2 + 0.05) / (l1 + 0.05);
	    }
	  };

	  chroma.distance = function(a, b, mode) {
	    var d, i, l1, l2, ref, ref1, sum_sq;
	    if (mode == null) {
	      mode = 'lab';
	    }
	    if ((ref = type(a)) === 'string' || ref === 'number') {
	      a = new Color(a);
	    }
	    if ((ref1 = type(b)) === 'string' || ref1 === 'number') {
	      b = new Color(b);
	    }
	    l1 = a.get(mode);
	    l2 = b.get(mode);
	    sum_sq = 0;
	    for (i in l1) {
	      d = (l1[i] || 0) - (l2[i] || 0);
	      sum_sq += d * d;
	    }
	    return Math.sqrt(sum_sq);
	  };

	  chroma.deltaE = function(a, b, L, C) {
	    var L1, L2, a1, a2, b1, b2, c1, c2, c4, dH2, delA, delB, delC, delL, f, h1, ref, ref1, ref2, ref3, sc, sh, sl, t, v1, v2, v3;
	    if (L == null) {
	      L = 1;
	    }
	    if (C == null) {
	      C = 1;
	    }
	    if ((ref = type(a)) === 'string' || ref === 'number') {
	      a = new Color(a);
	    }
	    if ((ref1 = type(b)) === 'string' || ref1 === 'number') {
	      b = new Color(b);
	    }
	    ref2 = a.lab(), L1 = ref2[0], a1 = ref2[1], b1 = ref2[2];
	    ref3 = b.lab(), L2 = ref3[0], a2 = ref3[1], b2 = ref3[2];
	    c1 = sqrt(a1 * a1 + b1 * b1);
	    c2 = sqrt(a2 * a2 + b2 * b2);
	    sl = L1 < 16.0 ? 0.511 : (0.040975 * L1) / (1.0 + 0.01765 * L1);
	    sc = (0.0638 * c1) / (1.0 + 0.0131 * c1) + 0.638;
	    h1 = c1 < 0.000001 ? 0.0 : (atan2(b1, a1) * 180.0) / PI;
	    while (h1 < 0) {
	      h1 += 360;
	    }
	    while (h1 >= 360) {
	      h1 -= 360;
	    }
	    t = (h1 >= 164.0) && (h1 <= 345.0) ? 0.56 + abs(0.2 * cos((PI * (h1 + 168.0)) / 180.0)) : 0.36 + abs(0.4 * cos((PI * (h1 + 35.0)) / 180.0));
	    c4 = c1 * c1 * c1 * c1;
	    f = sqrt(c4 / (c4 + 1900.0));
	    sh = sc * (f * t + 1.0 - f);
	    delL = L1 - L2;
	    delC = c1 - c2;
	    delA = a1 - a2;
	    delB = b1 - b2;
	    dH2 = delA * delA + delB * delB - delC * delC;
	    v1 = delL / (L * sl);
	    v2 = delC / (C * sc);
	    v3 = sh;
	    return sqrt(v1 * v1 + v2 * v2 + (dH2 / (v3 * v3)));
	  };

	  Color.prototype.get = function(modechan) {
	    var channel, i, me, mode, ref, src;
	    me = this;
	    ref = modechan.split('.'), mode = ref[0], channel = ref[1];
	    src = me[mode]();
	    if (channel) {
	      i = mode.indexOf(channel);
	      if (i > -1) {
	        return src[i];
	      } else {
	        return console.warn('unknown channel ' + channel + ' in mode ' + mode);
	      }
	    } else {
	      return src;
	    }
	  };

	  Color.prototype.set = function(modechan, value) {
	    var channel, i, me, mode, ref, src;
	    me = this;
	    ref = modechan.split('.'), mode = ref[0], channel = ref[1];
	    if (channel) {
	      src = me[mode]();
	      i = mode.indexOf(channel);
	      if (i > -1) {
	        if (type(value) === 'string') {
	          switch (value.charAt(0)) {
	            case '+':
	              src[i] += +value;
	              break;
	            case '-':
	              src[i] += +value;
	              break;
	            case '*':
	              src[i] *= +(value.substr(1));
	              break;
	            case '/':
	              src[i] /= +(value.substr(1));
	              break;
	            default:
	              src[i] = +value;
	          }
	        } else {
	          src[i] = value;
	        }
	      } else {
	        console.warn('unknown channel ' + channel + ' in mode ' + mode);
	      }
	    } else {
	      src = value;
	    }
	    return chroma(src, mode).alpha(me.alpha());
	  };

	  Color.prototype.clipped = function() {
	    return this._rgb._clipped || false;
	  };

	  Color.prototype.alpha = function(a) {
	    if (arguments.length) {
	      return chroma.rgb([this._rgb[0], this._rgb[1], this._rgb[2], a]);
	    }
	    return this._rgb[3];
	  };

	  Color.prototype.darken = function(amount) {
	    var lab, me;
	    if (amount == null) {
	      amount = 1;
	    }
	    me = this;
	    lab = me.lab();
	    lab[0] -= LAB_CONSTANTS.Kn * amount;
	    return chroma.lab(lab).alpha(me.alpha());
	  };

	  Color.prototype.brighten = function(amount) {
	    if (amount == null) {
	      amount = 1;
	    }
	    return this.darken(-amount);
	  };

	  Color.prototype.darker = Color.prototype.darken;

	  Color.prototype.brighter = Color.prototype.brighten;

	  Color.prototype.saturate = function(amount) {
	    var lch, me;
	    if (amount == null) {
	      amount = 1;
	    }
	    me = this;
	    lch = me.lch();
	    lch[1] += amount * LAB_CONSTANTS.Kn;
	    if (lch[1] < 0) {
	      lch[1] = 0;
	    }
	    return chroma.lch(lch).alpha(me.alpha());
	  };

	  Color.prototype.desaturate = function(amount) {
	    if (amount == null) {
	      amount = 1;
	    }
	    return this.saturate(-amount);
	  };

	  Color.prototype.premultiply = function() {
	    var a, rgb;
	    rgb = this.rgb();
	    a = this.alpha();
	    return chroma(rgb[0] * a, rgb[1] * a, rgb[2] * a, a);
	  };

	  blend = function(bottom, top, mode) {
	    if (!blend[mode]) {
	      throw 'unknown blend mode ' + mode;
	    }
	    return blend[mode](bottom, top);
	  };

	  blend_f = function(f) {
	    return function(bottom, top) {
	      var c0, c1;
	      c0 = chroma(top).rgb();
	      c1 = chroma(bottom).rgb();
	      return chroma(f(c0, c1), 'rgb');
	    };
	  };

	  each = function(f) {
	    return function(c0, c1) {
	      var i, o, out;
	      out = [];
	      for (i = o = 0; o <= 3; i = ++o) {
	        out[i] = f(c0[i], c1[i]);
	      }
	      return out;
	    };
	  };

	  normal = function(a, b) {
	    return a;
	  };

	  multiply = function(a, b) {
	    return a * b / 255;
	  };

	  darken = function(a, b) {
	    if (a > b) {
	      return b;
	    } else {
	      return a;
	    }
	  };

	  lighten = function(a, b) {
	    if (a > b) {
	      return a;
	    } else {
	      return b;
	    }
	  };

	  screen = function(a, b) {
	    return 255 * (1 - (1 - a / 255) * (1 - b / 255));
	  };

	  overlay = function(a, b) {
	    if (b < 128) {
	      return 2 * a * b / 255;
	    } else {
	      return 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));
	    }
	  };

	  burn = function(a, b) {
	    return 255 * (1 - (1 - b / 255) / (a / 255));
	  };

	  dodge = function(a, b) {
	    if (a === 255) {
	      return 255;
	    }
	    a = 255 * (b / 255) / (1 - a / 255);
	    if (a > 255) {
	      return 255;
	    } else {
	      return a;
	    }
	  };

	  blend.normal = blend_f(each(normal));

	  blend.multiply = blend_f(each(multiply));

	  blend.screen = blend_f(each(screen));

	  blend.overlay = blend_f(each(overlay));

	  blend.darken = blend_f(each(darken));

	  blend.lighten = blend_f(each(lighten));

	  blend.dodge = blend_f(each(dodge));

	  blend.burn = blend_f(each(burn));

	  chroma.blend = blend;

	  chroma.analyze = function(data) {
	    var len, o, r, val;
	    r = {
	      min: Number.MAX_VALUE,
	      max: Number.MAX_VALUE * -1,
	      sum: 0,
	      values: [],
	      count: 0
	    };
	    for (o = 0, len = data.length; o < len; o++) {
	      val = data[o];
	      if ((val != null) && !isNaN(val)) {
	        r.values.push(val);
	        r.sum += val;
	        if (val < r.min) {
	          r.min = val;
	        }
	        if (val > r.max) {
	          r.max = val;
	        }
	        r.count += 1;
	      }
	    }
	    r.domain = [r.min, r.max];
	    r.limits = function(mode, num) {
	      return chroma.limits(r, mode, num);
	    };
	    return r;
	  };

	  chroma.scale = function(colors, positions) {
	    var _classes, _colorCache, _colors, _correctLightness, _domain, _fixed, _gamma, _max, _min, _mode, _nacol, _out, _padding, _pos, _spread, _useCache, classifyValue, f, getClass, getColor, resetCache, setColors, tmap;
	    _mode = 'rgb';
	    _nacol = chroma('#ccc');
	    _spread = 0;
	    _fixed = false;
	    _domain = [0, 1];
	    _pos = [];
	    _padding = [0, 0];
	    _classes = false;
	    _colors = [];
	    _out = false;
	    _min = 0;
	    _max = 1;
	    _correctLightness = false;
	    _colorCache = {};
	    _useCache = true;
	    _gamma = 1;
	    setColors = function(colors) {
	      var c, col, o, ref, ref1, w;
	      if (colors == null) {
	        colors = ['#fff', '#000'];
	      }
	      if ((colors != null) && type(colors) === 'string' && (chroma.brewer != null)) {
	        colors = chroma.brewer[colors] || chroma.brewer[colors.toLowerCase()] || colors;
	      }
	      if (type(colors) === 'array') {
	        colors = colors.slice(0);
	        for (c = o = 0, ref = colors.length - 1; 0 <= ref ? o <= ref : o >= ref; c = 0 <= ref ? ++o : --o) {
	          col = colors[c];
	          if (type(col) === "string") {
	            colors[c] = chroma(col);
	          }
	        }
	        _pos.length = 0;
	        for (c = w = 0, ref1 = colors.length - 1; 0 <= ref1 ? w <= ref1 : w >= ref1; c = 0 <= ref1 ? ++w : --w) {
	          _pos.push(c / (colors.length - 1));
	        }
	      }
	      resetCache();
	      return _colors = colors;
	    };
	    getClass = function(value) {
	      var i, n;
	      if (_classes != null) {
	        n = _classes.length - 1;
	        i = 0;
	        while (i < n && value >= _classes[i]) {
	          i++;
	        }
	        return i - 1;
	      }
	      return 0;
	    };
	    tmap = function(t) {
	      return t;
	    };
	    classifyValue = function(value) {
	      var i, maxc, minc, n, val;
	      val = value;
	      if (_classes.length > 2) {
	        n = _classes.length - 1;
	        i = getClass(value);
	        minc = _classes[0] + (_classes[1] - _classes[0]) * (0 + _spread * 0.5);
	        maxc = _classes[n - 1] + (_classes[n] - _classes[n - 1]) * (1 - _spread * 0.5);
	        val = _min + ((_classes[i] + (_classes[i + 1] - _classes[i]) * 0.5 - minc) / (maxc - minc)) * (_max - _min);
	      }
	      return val;
	    };
	    getColor = function(val, bypassMap) {
	      var c, col, i, k, o, p, ref, t;
	      if (bypassMap == null) {
	        bypassMap = false;
	      }
	      if (isNaN(val)) {
	        return _nacol;
	      }
	      if (!bypassMap) {
	        if (_classes && _classes.length > 2) {
	          c = getClass(val);
	          t = c / (_classes.length - 2);
	        } else if (_max !== _min) {
	          t = (val - _min) / (_max - _min);
	        } else {
	          t = 1;
	        }
	      } else {
	        t = val;
	      }
	      if (!bypassMap) {
	        t = tmap(t);
	      }
	      if (_gamma !== 1) {
	        t = pow(t, _gamma);
	      }
	      t = _padding[0] + (t * (1 - _padding[0] - _padding[1]));
	      t = Math.min(1, Math.max(0, t));
	      k = Math.floor(t * 10000);
	      if (_useCache && _colorCache[k]) {
	        col = _colorCache[k];
	      } else {
	        if (type(_colors) === 'array') {
	          for (i = o = 0, ref = _pos.length - 1; 0 <= ref ? o <= ref : o >= ref; i = 0 <= ref ? ++o : --o) {
	            p = _pos[i];
	            if (t <= p) {
	              col = _colors[i];
	              break;
	            }
	            if (t >= p && i === _pos.length - 1) {
	              col = _colors[i];
	              break;
	            }
	            if (t > p && t < _pos[i + 1]) {
	              t = (t - p) / (_pos[i + 1] - p);
	              col = chroma.interpolate(_colors[i], _colors[i + 1], t, _mode);
	              break;
	            }
	          }
	        } else if (type(_colors) === 'function') {
	          col = _colors(t);
	        }
	        if (_useCache) {
	          _colorCache[k] = col;
	        }
	      }
	      return col;
	    };
	    resetCache = function() {
	      return _colorCache = {};
	    };
	    setColors(colors);
	    f = function(v) {
	      var c;
	      c = chroma(getColor(v));
	      if (_out && c[_out]) {
	        return c[_out]();
	      } else {
	        return c;
	      }
	    };
	    f.classes = function(classes) {
	      var d;
	      if (classes != null) {
	        if (type(classes) === 'array') {
	          _classes = classes;
	          _domain = [classes[0], classes[classes.length - 1]];
	        } else {
	          d = chroma.analyze(_domain);
	          if (classes === 0) {
	            _classes = [d.min, d.max];
	          } else {
	            _classes = chroma.limits(d, 'e', classes);
	          }
	        }
	        return f;
	      }
	      return _classes;
	    };
	    f.domain = function(domain) {
	      var c, d, k, len, o, ref, w;
	      if (!arguments.length) {
	        return _domain;
	      }
	      _min = domain[0];
	      _max = domain[domain.length - 1];
	      _pos = [];
	      k = _colors.length;
	      if (domain.length === k && _min !== _max) {
	        for (o = 0, len = domain.length; o < len; o++) {
	          d = domain[o];
	          _pos.push((d - _min) / (_max - _min));
	        }
	      } else {
	        for (c = w = 0, ref = k - 1; 0 <= ref ? w <= ref : w >= ref; c = 0 <= ref ? ++w : --w) {
	          _pos.push(c / (k - 1));
	        }
	      }
	      _domain = [_min, _max];
	      return f;
	    };
	    f.mode = function(_m) {
	      if (!arguments.length) {
	        return _mode;
	      }
	      _mode = _m;
	      resetCache();
	      return f;
	    };
	    f.range = function(colors, _pos) {
	      setColors(colors, _pos);
	      return f;
	    };
	    f.out = function(_o) {
	      _out = _o;
	      return f;
	    };
	    f.spread = function(val) {
	      if (!arguments.length) {
	        return _spread;
	      }
	      _spread = val;
	      return f;
	    };
	    f.correctLightness = function(v) {
	      if (v == null) {
	        v = true;
	      }
	      _correctLightness = v;
	      resetCache();
	      if (_correctLightness) {
	        tmap = function(t) {
	          var L0, L1, L_actual, L_diff, L_ideal, max_iter, pol, t0, t1;
	          L0 = getColor(0, true).lab()[0];
	          L1 = getColor(1, true).lab()[0];
	          pol = L0 > L1;
	          L_actual = getColor(t, true).lab()[0];
	          L_ideal = L0 + (L1 - L0) * t;
	          L_diff = L_actual - L_ideal;
	          t0 = 0;
	          t1 = 1;
	          max_iter = 20;
	          while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {
	            (function() {
	              if (pol) {
	                L_diff *= -1;
	              }
	              if (L_diff < 0) {
	                t0 = t;
	                t += (t1 - t) * 0.5;
	              } else {
	                t1 = t;
	                t += (t0 - t) * 0.5;
	              }
	              L_actual = getColor(t, true).lab()[0];
	              return L_diff = L_actual - L_ideal;
	            })();
	          }
	          return t;
	        };
	      } else {
	        tmap = function(t) {
	          return t;
	        };
	      }
	      return f;
	    };
	    f.padding = function(p) {
	      if (p != null) {
	        if (type(p) === 'number') {
	          p = [p, p];
	        }
	        _padding = p;
	        return f;
	      } else {
	        return _padding;
	      }
	    };
	    f.colors = function(numColors, out) {
	      var dd, dm, i, o, ref, result, results, samples, w;
	      if (arguments.length < 2) {
	        out = 'hex';
	      }
	      result = [];
	      if (arguments.length === 0) {
	        result = _colors.slice(0);
	      } else if (numColors === 1) {
	        result = [f(0.5)];
	      } else if (numColors > 1) {
	        dm = _domain[0];
	        dd = _domain[1] - dm;
	        result = (function() {
	          results = [];
	          for (var o = 0; 0 <= numColors ? o < numColors : o > numColors; 0 <= numColors ? o++ : o--){ results.push(o); }
	          return results;
	        }).apply(this).map(function(i) {
	          return f(dm + i / (numColors - 1) * dd);
	        });
	      } else {
	        colors = [];
	        samples = [];
	        if (_classes && _classes.length > 2) {
	          for (i = w = 1, ref = _classes.length; 1 <= ref ? w < ref : w > ref; i = 1 <= ref ? ++w : --w) {
	            samples.push((_classes[i - 1] + _classes[i]) * 0.5);
	          }
	        } else {
	          samples = _domain;
	        }
	        result = samples.map(function(v) {
	          return f(v);
	        });
	      }
	      if (chroma[out]) {
	        result = result.map(function(c) {
	          return c[out]();
	        });
	      }
	      return result;
	    };
	    f.cache = function(c) {
	      if (c != null) {
	        _useCache = c;
	        return f;
	      } else {
	        return _useCache;
	      }
	    };
	    f.gamma = function(g) {
	      if (g != null) {
	        _gamma = g;
	        return f;
	      } else {
	        return _gamma;
	      }
	    };
	    return f;
	  };

	  if (chroma.scales == null) {
	    chroma.scales = {};
	  }

	  chroma.scales.cool = function() {
	    return chroma.scale([chroma.hsl(180, 1, .9), chroma.hsl(250, .7, .4)]);
	  };

	  chroma.scales.hot = function() {
	    return chroma.scale(['#000', '#f00', '#ff0', '#fff'], [0, .25, .75, 1]).mode('rgb');
	  };

	  chroma.analyze = function(data, key, filter) {
	    var add, k, len, o, r, val, visit;
	    r = {
	      min: Number.MAX_VALUE,
	      max: Number.MAX_VALUE * -1,
	      sum: 0,
	      values: [],
	      count: 0
	    };
	    if (filter == null) {
	      filter = function() {
	        return true;
	      };
	    }
	    add = function(val) {
	      if ((val != null) && !isNaN(val)) {
	        r.values.push(val);
	        r.sum += val;
	        if (val < r.min) {
	          r.min = val;
	        }
	        if (val > r.max) {
	          r.max = val;
	        }
	        r.count += 1;
	      }
	    };
	    visit = function(val, k) {
	      if (filter(val, k)) {
	        if ((key != null) && type(key) === 'function') {
	          return add(key(val));
	        } else if ((key != null) && type(key) === 'string' || type(key) === 'number') {
	          return add(val[key]);
	        } else {
	          return add(val);
	        }
	      }
	    };
	    if (type(data) === 'array') {
	      for (o = 0, len = data.length; o < len; o++) {
	        val = data[o];
	        visit(val);
	      }
	    } else {
	      for (k in data) {
	        val = data[k];
	        visit(val, k);
	      }
	    }
	    r.domain = [r.min, r.max];
	    r.limits = function(mode, num) {
	      return chroma.limits(r, mode, num);
	    };
	    return r;
	  };

	  chroma.limits = function(data, mode, num) {
	    var aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, assignments, best, centroids, cluster, clusterSizes, dist, i, j, kClusters, limits, max_log, min, min_log, mindist, n, nb_iters, newCentroids, o, p, pb, pr, ref, ref1, ref10, ref11, ref12, ref13, ref14, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9, repeat, sum, tmpKMeansBreaks, v, value, values, w;
	    if (mode == null) {
	      mode = 'equal';
	    }
	    if (num == null) {
	      num = 7;
	    }
	    if (type(data) === 'array') {
	      data = chroma.analyze(data);
	    }
	    min = data.min;
	    max = data.max;
	    sum = data.sum;
	    values = data.values.sort(function(a, b) {
	      return a - b;
	    });
	    if (num === 1) {
	      return [min, max];
	    }
	    limits = [];
	    if (mode.substr(0, 1) === 'c') {
	      limits.push(min);
	      limits.push(max);
	    }
	    if (mode.substr(0, 1) === 'e') {
	      limits.push(min);
	      for (i = o = 1, ref = num - 1; 1 <= ref ? o <= ref : o >= ref; i = 1 <= ref ? ++o : --o) {
	        limits.push(min + (i / num) * (max - min));
	      }
	      limits.push(max);
	    } else if (mode.substr(0, 1) === 'l') {
	      if (min <= 0) {
	        throw 'Logarithmic scales are only possible for values > 0';
	      }
	      min_log = Math.LOG10E * log(min);
	      max_log = Math.LOG10E * log(max);
	      limits.push(min);
	      for (i = w = 1, ref1 = num - 1; 1 <= ref1 ? w <= ref1 : w >= ref1; i = 1 <= ref1 ? ++w : --w) {
	        limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));
	      }
	      limits.push(max);
	    } else if (mode.substr(0, 1) === 'q') {
	      limits.push(min);
	      for (i = aa = 1, ref2 = num - 1; 1 <= ref2 ? aa <= ref2 : aa >= ref2; i = 1 <= ref2 ? ++aa : --aa) {
	        p = (values.length - 1) * i / num;
	        pb = floor(p);
	        if (pb === p) {
	          limits.push(values[pb]);
	        } else {
	          pr = p - pb;
	          limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);
	        }
	      }
	      limits.push(max);
	    } else if (mode.substr(0, 1) === 'k') {

	      /*
	      implementation based on
	      http://code.google.com/p/figue/source/browse/trunk/figue.js#336
	      simplified for 1-d input values
	       */
	      n = values.length;
	      assignments = new Array(n);
	      clusterSizes = new Array(num);
	      repeat = true;
	      nb_iters = 0;
	      centroids = null;
	      centroids = [];
	      centroids.push(min);
	      for (i = ab = 1, ref3 = num - 1; 1 <= ref3 ? ab <= ref3 : ab >= ref3; i = 1 <= ref3 ? ++ab : --ab) {
	        centroids.push(min + (i / num) * (max - min));
	      }
	      centroids.push(max);
	      while (repeat) {
	        for (j = ac = 0, ref4 = num - 1; 0 <= ref4 ? ac <= ref4 : ac >= ref4; j = 0 <= ref4 ? ++ac : --ac) {
	          clusterSizes[j] = 0;
	        }
	        for (i = ad = 0, ref5 = n - 1; 0 <= ref5 ? ad <= ref5 : ad >= ref5; i = 0 <= ref5 ? ++ad : --ad) {
	          value = values[i];
	          mindist = Number.MAX_VALUE;
	          for (j = ae = 0, ref6 = num - 1; 0 <= ref6 ? ae <= ref6 : ae >= ref6; j = 0 <= ref6 ? ++ae : --ae) {
	            dist = abs(centroids[j] - value);
	            if (dist < mindist) {
	              mindist = dist;
	              best = j;
	            }
	          }
	          clusterSizes[best]++;
	          assignments[i] = best;
	        }
	        newCentroids = new Array(num);
	        for (j = af = 0, ref7 = num - 1; 0 <= ref7 ? af <= ref7 : af >= ref7; j = 0 <= ref7 ? ++af : --af) {
	          newCentroids[j] = null;
	        }
	        for (i = ag = 0, ref8 = n - 1; 0 <= ref8 ? ag <= ref8 : ag >= ref8; i = 0 <= ref8 ? ++ag : --ag) {
	          cluster = assignments[i];
	          if (newCentroids[cluster] === null) {
	            newCentroids[cluster] = values[i];
	          } else {
	            newCentroids[cluster] += values[i];
	          }
	        }
	        for (j = ah = 0, ref9 = num - 1; 0 <= ref9 ? ah <= ref9 : ah >= ref9; j = 0 <= ref9 ? ++ah : --ah) {
	          newCentroids[j] *= 1 / clusterSizes[j];
	        }
	        repeat = false;
	        for (j = ai = 0, ref10 = num - 1; 0 <= ref10 ? ai <= ref10 : ai >= ref10; j = 0 <= ref10 ? ++ai : --ai) {
	          if (newCentroids[j] !== centroids[i]) {
	            repeat = true;
	            break;
	          }
	        }
	        centroids = newCentroids;
	        nb_iters++;
	        if (nb_iters > 200) {
	          repeat = false;
	        }
	      }
	      kClusters = {};
	      for (j = aj = 0, ref11 = num - 1; 0 <= ref11 ? aj <= ref11 : aj >= ref11; j = 0 <= ref11 ? ++aj : --aj) {
	        kClusters[j] = [];
	      }
	      for (i = ak = 0, ref12 = n - 1; 0 <= ref12 ? ak <= ref12 : ak >= ref12; i = 0 <= ref12 ? ++ak : --ak) {
	        cluster = assignments[i];
	        kClusters[cluster].push(values[i]);
	      }
	      tmpKMeansBreaks = [];
	      for (j = al = 0, ref13 = num - 1; 0 <= ref13 ? al <= ref13 : al >= ref13; j = 0 <= ref13 ? ++al : --al) {
	        tmpKMeansBreaks.push(kClusters[j][0]);
	        tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);
	      }
	      tmpKMeansBreaks = tmpKMeansBreaks.sort(function(a, b) {
	        return a - b;
	      });
	      limits.push(tmpKMeansBreaks[0]);
	      for (i = am = 1, ref14 = tmpKMeansBreaks.length - 1; am <= ref14; i = am += 2) {
	        v = tmpKMeansBreaks[i];
	        if (!isNaN(v) && limits.indexOf(v) === -1) {
	          limits.push(v);
	        }
	      }
	    }
	    return limits;
	  };

	  hsi2rgb = function(h, s, i) {

	    /*
	    borrowed from here:
	    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp
	     */
	    var args, b, g, r;
	    args = unpack(arguments);
	    h = args[0], s = args[1], i = args[2];
	    if (isNaN(h)) {
	      h = 0;
	    }
	    h /= 360;
	    if (h < 1 / 3) {
	      b = (1 - s) / 3;
	      r = (1 + s * cos(TWOPI * h) / cos(PITHIRD - TWOPI * h)) / 3;
	      g = 1 - (b + r);
	    } else if (h < 2 / 3) {
	      h -= 1 / 3;
	      r = (1 - s) / 3;
	      g = (1 + s * cos(TWOPI * h) / cos(PITHIRD - TWOPI * h)) / 3;
	      b = 1 - (r + g);
	    } else {
	      h -= 2 / 3;
	      g = (1 - s) / 3;
	      b = (1 + s * cos(TWOPI * h) / cos(PITHIRD - TWOPI * h)) / 3;
	      r = 1 - (g + b);
	    }
	    r = limit(i * r * 3);
	    g = limit(i * g * 3);
	    b = limit(i * b * 3);
	    return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];
	  };

	  rgb2hsi = function() {

	    /*
	    borrowed from here:
	    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp
	     */
	    var b, g, h, i, min, r, ref, s;
	    ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
	    TWOPI = Math.PI * 2;
	    r /= 255;
	    g /= 255;
	    b /= 255;
	    min = Math.min(r, g, b);
	    i = (r + g + b) / 3;
	    s = 1 - min / i;
	    if (s === 0) {
	      h = 0;
	    } else {
	      h = ((r - g) + (r - b)) / 2;
	      h /= Math.sqrt((r - g) * (r - g) + (r - b) * (g - b));
	      h = Math.acos(h);
	      if (b > g) {
	        h = TWOPI - h;
	      }
	      h /= TWOPI;
	    }
	    return [h * 360, s, i];
	  };

	  chroma.hsi = function() {
	    return (function(func, args, ctor) {
	      ctor.prototype = func.prototype;
	      var child = new ctor, result = func.apply(child, args);
	      return Object(result) === result ? result : child;
	    })(Color, slice.call(arguments).concat(['hsi']), function(){});
	  };

	  _input.hsi = hsi2rgb;

	  Color.prototype.hsi = function() {
	    return rgb2hsi(this._rgb);
	  };

	  interpolate_hsx = function(col1, col2, f, m) {
	    var dh, hue, hue0, hue1, lbv, lbv0, lbv1, res, sat, sat0, sat1, xyz0, xyz1;
	    if (m === 'hsl') {
	      xyz0 = col1.hsl();
	      xyz1 = col2.hsl();
	    } else if (m === 'hsv') {
	      xyz0 = col1.hsv();
	      xyz1 = col2.hsv();
	    } else if (m === 'hcg') {
	      xyz0 = col1.hcg();
	      xyz1 = col2.hcg();
	    } else if (m === 'hsi') {
	      xyz0 = col1.hsi();
	      xyz1 = col2.hsi();
	    } else if (m === 'lch' || m === 'hcl') {
	      m = 'hcl';
	      xyz0 = col1.hcl();
	      xyz1 = col2.hcl();
	    }
	    if (m.substr(0, 1) === 'h') {
	      hue0 = xyz0[0], sat0 = xyz0[1], lbv0 = xyz0[2];
	      hue1 = xyz1[0], sat1 = xyz1[1], lbv1 = xyz1[2];
	    }
	    if (!isNaN(hue0) && !isNaN(hue1)) {
	      if (hue1 > hue0 && hue1 - hue0 > 180) {
	        dh = hue1 - (hue0 + 360);
	      } else if (hue1 < hue0 && hue0 - hue1 > 180) {
	        dh = hue1 + 360 - hue0;
	      } else {
	        dh = hue1 - hue0;
	      }
	      hue = hue0 + f * dh;
	    } else if (!isNaN(hue0)) {
	      hue = hue0;
	      if ((lbv1 === 1 || lbv1 === 0) && m !== 'hsv') {
	        sat = sat0;
	      }
	    } else if (!isNaN(hue1)) {
	      hue = hue1;
	      if ((lbv0 === 1 || lbv0 === 0) && m !== 'hsv') {
	        sat = sat1;
	      }
	    } else {
	      hue = Number.NaN;
	    }
	    if (sat == null) {
	      sat = sat0 + f * (sat1 - sat0);
	    }
	    lbv = lbv0 + f * (lbv1 - lbv0);
	    return res = chroma[m](hue, sat, lbv);
	  };

	  _interpolators = _interpolators.concat((function() {
	    var len, o, ref, results;
	    ref = ['hsv', 'hsl', 'hsi', 'hcl', 'lch', 'hcg'];
	    results = [];
	    for (o = 0, len = ref.length; o < len; o++) {
	      m = ref[o];
	      results.push([m, interpolate_hsx]);
	    }
	    return results;
	  })());

	  interpolate_num = function(col1, col2, f, m) {
	    var n1, n2;
	    n1 = col1.num();
	    n2 = col2.num();
	    return chroma.num(n1 + (n2 - n1) * f, 'num');
	  };

	  _interpolators.push(['num', interpolate_num]);

	  interpolate_lab = function(col1, col2, f, m) {
	    var res, xyz0, xyz1;
	    xyz0 = col1.lab();
	    xyz1 = col2.lab();
	    return res = new Color(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), m);
	  };

	  _interpolators.push(['lab', interpolate_lab]);

	}).call(this);

	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(336)(module)))

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

	module.exports = function(module) {
		if(!module.webpackPolyfill) {
			module.deprecate = function() {};
			module.paths = [];
			// module.parent = undefined by default
			module.children = [];
			module.webpackPolyfill = 1;
		}
		return module;
	}


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

	(function webpackUniversalModuleDefinition(root, factory) {
		if(true)
			module.exports = factory(__webpack_require__(338), __webpack_require__(2));
		else if(typeof define === 'function' && define.amd)
			define(["react-dom", "react"], factory);
		else if(typeof exports === 'object')
			exports["ReactDraggable"] = factory(require("react-dom"), require("react"));
		else
			root["ReactDraggable"] = factory(root["ReactDOM"], root["React"]);
	})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_6__) {
	return /******/ (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] = {
	/******/ 			i: moduleId,
	/******/ 			l: false,
	/******/ 			exports: {}
	/******/ 		};
	/******/
	/******/ 		// Execute the module function
	/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
	/******/
	/******/ 		// Flag the module as loaded
	/******/ 		module.l = 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;
	/******/
	/******/ 	// define getter function for harmony exports
	/******/ 	__webpack_require__.d = function(exports, name, getter) {
	/******/ 		if(!__webpack_require__.o(exports, name)) {
	/******/ 			Object.defineProperty(exports, name, {
	/******/ 				configurable: false,
	/******/ 				enumerable: true,
	/******/ 				get: getter
	/******/ 			});
	/******/ 		}
	/******/ 	};
	/******/
	/******/ 	// getDefaultExport function for compatibility with non-harmony modules
	/******/ 	__webpack_require__.n = function(module) {
	/******/ 		var getter = module && module.__esModule ?
	/******/ 			function getDefault() { return module['default']; } :
	/******/ 			function getModuleExports() { return module; };
	/******/ 		__webpack_require__.d(getter, 'a', getter);
	/******/ 		return getter;
	/******/ 	};
	/******/
	/******/ 	// Object.prototype.hasOwnProperty.call
	/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
	/******/
	/******/ 	// __webpack_public_path__
	/******/ 	__webpack_require__.p = "";
	/******/
	/******/ 	// Load entry module and return exports
	/******/ 	return __webpack_require__(__webpack_require__.s = 12);
	/******/ })
	/************************************************************************/
	/******/ ([
	/* 0 */
	/***/ (function(module, exports, __webpack_require__) {

	"use strict";


	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.findInArray = findInArray;
	exports.isFunction = isFunction;
	exports.isNum = isNum;
	exports.int = int;
	exports.dontSetMe = dontSetMe;

	// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc
	function findInArray(array /*: Array<any> | TouchList*/, callback /*: Function*/) /*: any*/ {
	  for (var i = 0, length = array.length; i < length; i++) {
	    if (callback.apply(callback, [array[i], i, array])) return array[i];
	  }
	}

	function isFunction(func /*: any*/) /*: boolean*/ {
	  return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';
	}

	function isNum(num /*: any*/) /*: boolean*/ {
	  return typeof num === 'number' && !isNaN(num);
	}

	function int(a /*: string*/) /*: number*/ {
	  return parseInt(a, 10);
	}

	function dontSetMe(props /*: Object*/, propName /*: string*/, componentName /*: string*/) {
	  if (props[propName]) {
	    return new Error('Invalid prop ' + propName + ' passed to ' + componentName + ' - do not set this, set it on the child.');
	  }
	}

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

	"use strict";


	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 *
	 * 
	 */

	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.
	 */
	var emptyFunction = 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;

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

	"use strict";
	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 *
	 */



	/**
	 * 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 validateFormat = function validateFormat(format) {};

	if (Object({"DRAGGABLE_DEBUG":undefined}).NODE_ENV !== 'production') {
	  validateFormat = function validateFormat(format) {
	    if (format === undefined) {
	      throw new Error('invariant requires an error message argument');
	    }
	  };
	}

	function invariant(condition, format, a, b, c, d, e, f) {
	  validateFormat(format);

	  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(format.replace(/%s/g, function () {
	        return args[argIndex++];
	      }));
	      error.name = 'Invariant Violation';
	    }

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

	module.exports = invariant;

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

	"use strict";
	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 */



	var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';

	module.exports = ReactPropTypesSecret;


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

	module.exports = __WEBPACK_EXTERNAL_MODULE_4__;

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

	"use strict";


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

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	exports.matchesSelector = matchesSelector;
	exports.matchesSelectorAndParentsTo = matchesSelectorAndParentsTo;
	exports.addEvent = addEvent;
	exports.removeEvent = removeEvent;
	exports.outerHeight = outerHeight;
	exports.outerWidth = outerWidth;
	exports.innerHeight = innerHeight;
	exports.innerWidth = innerWidth;
	exports.offsetXYFromParent = offsetXYFromParent;
	exports.createCSSTransform = createCSSTransform;
	exports.createSVGTransform = createSVGTransform;
	exports.getTouch = getTouch;
	exports.getTouchIdentifier = getTouchIdentifier;
	exports.addUserSelectStyles = addUserSelectStyles;
	exports.removeUserSelectStyles = removeUserSelectStyles;
	exports.styleHacks = styleHacks;
	exports.addClassName = addClassName;
	exports.removeClassName = removeClassName;

	var _shims = __webpack_require__(0);

	var _getPrefix = __webpack_require__(19);

	var _getPrefix2 = _interopRequireDefault(_getPrefix);

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

	function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

	/*:: import type {ControlPosition, MouseTouchEvent} from './types';*/


	var matchesSelectorFunc = '';
	function matchesSelector(el /*: Node*/, selector /*: string*/) /*: boolean*/ {
	  if (!matchesSelectorFunc) {
	    matchesSelectorFunc = (0, _shims.findInArray)(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {
	      // $FlowIgnore: Doesn't think elements are indexable
	      return (0, _shims.isFunction)(el[method]);
	    });
	  }

	  // Might not be found entirely (not an Element?) - in that case, bail
	  // $FlowIgnore: Doesn't think elements are indexable
	  if (!(0, _shims.isFunction)(el[matchesSelectorFunc])) return false;

	  // $FlowIgnore: Doesn't think elements are indexable
	  return el[matchesSelectorFunc](selector);
	}

	// Works up the tree to the draggable itself attempting to match selector.
	function matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*/, baseNode /*: Node*/) /*: boolean*/ {
	  var node = el;
	  do {
	    if (matchesSelector(node, selector)) return true;
	    if (node === baseNode) return false;
	    node = node.parentNode;
	  } while (node);

	  return false;
	}

	function addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ {
	  if (!el) {
	    return;
	  }
	  if (el.attachEvent) {
	    el.attachEvent('on' + event, handler);
	  } else if (el.addEventListener) {
	    el.addEventListener(event, handler, true);
	  } else {
	    // $FlowIgnore: Doesn't think elements are indexable
	    el['on' + event] = handler;
	  }
	}

	function removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ {
	  if (!el) {
	    return;
	  }
	  if (el.detachEvent) {
	    el.detachEvent('on' + event, handler);
	  } else if (el.removeEventListener) {
	    el.removeEventListener(event, handler, true);
	  } else {
	    // $FlowIgnore: Doesn't think elements are indexable
	    el['on' + event] = null;
	  }
	}

	function outerHeight(node /*: HTMLElement*/) /*: number*/ {
	  // This is deliberately excluding margin for our calculations, since we are using
	  // offsetTop which is including margin. See getBoundPosition
	  var height = node.clientHeight;
	  var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);
	  height += (0, _shims.int)(computedStyle.borderTopWidth);
	  height += (0, _shims.int)(computedStyle.borderBottomWidth);
	  return height;
	}

	function outerWidth(node /*: HTMLElement*/) /*: number*/ {
	  // This is deliberately excluding margin for our calculations, since we are using
	  // offsetLeft which is including margin. See getBoundPosition
	  var width = node.clientWidth;
	  var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);
	  width += (0, _shims.int)(computedStyle.borderLeftWidth);
	  width += (0, _shims.int)(computedStyle.borderRightWidth);
	  return width;
	}
	function innerHeight(node /*: HTMLElement*/) /*: number*/ {
	  var height = node.clientHeight;
	  var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);
	  height -= (0, _shims.int)(computedStyle.paddingTop);
	  height -= (0, _shims.int)(computedStyle.paddingBottom);
	  return height;
	}

	function innerWidth(node /*: HTMLElement*/) /*: number*/ {
	  var width = node.clientWidth;
	  var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);
	  width -= (0, _shims.int)(computedStyle.paddingLeft);
	  width -= (0, _shims.int)(computedStyle.paddingRight);
	  return width;
	}

	// Get from offsetParent
	function offsetXYFromParent(evt /*: {clientX: number, clientY: number}*/, offsetParent /*: HTMLElement*/) /*: ControlPosition*/ {
	  var isBody = offsetParent === offsetParent.ownerDocument.body;
	  var offsetParentRect = isBody ? { left: 0, top: 0 } : offsetParent.getBoundingClientRect();

	  var x = evt.clientX + offsetParent.scrollLeft - offsetParentRect.left;
	  var y = evt.clientY + offsetParent.scrollTop - offsetParentRect.top;

	  return { x: x, y: y };
	}

	function createCSSTransform(_ref) /*: Object*/ {
	  var x = _ref.x,
	      y = _ref.y;

	  // Replace unitless items with px
	  return _defineProperty({}, (0, _getPrefix.browserPrefixToKey)('transform', _getPrefix2.default), 'translate(' + x + 'px,' + y + 'px)');
	}

	function createSVGTransform(_ref3) /*: string*/ {
	  var x = _ref3.x,
	      y = _ref3.y;

	  return 'translate(' + x + ',' + y + ')';
	}

	function getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ?{clientX: number, clientY: number}*/ {
	  return e.targetTouches && (0, _shims.findInArray)(e.targetTouches, function (t) {
	    return identifier === t.identifier;
	  }) || e.changedTouches && (0, _shims.findInArray)(e.changedTouches, function (t) {
	    return identifier === t.identifier;
	  });
	}

	function getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/ {
	  if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;
	  if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;
	}

	// User-select Hacks:
	//
	// Useful for preventing blue highlights all over everything when dragging.

	// Note we're passing `document` b/c we could be iframed
	function addUserSelectStyles(doc /*: ?Document*/) {
	  if (!doc) return;
	  var styleEl = doc.getElementById('react-draggable-style-el');
	  if (!styleEl) {
	    styleEl = doc.createElement('style');
	    styleEl.type = 'text/css';
	    styleEl.id = 'react-draggable-style-el';
	    styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {background: transparent;}\n';
	    styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {background: transparent;}\n';
	    doc.getElementsByTagName('head')[0].appendChild(styleEl);
	  }
	  if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');
	}

	function removeUserSelectStyles(doc /*: ?Document*/) {
	  try {
	    if (doc && doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection');
	    window.getSelection().removeAllRanges(); // remove selection caused by scroll
	  } catch (e) {
	    // probably IE
	  }
	}

	function styleHacks() /*: Object*/ {
	  var childStyle /*: Object*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

	  // Workaround IE pointer events; see #51
	  // https://github.com/mzabriskie/react-draggable/issues/51#issuecomment-103488278
	  return _extends({
	    touchAction: 'none'
	  }, childStyle);
	}

	function addClassName(el /*: HTMLElement*/, className /*: string*/) {
	  if (el.classList) {
	    el.classList.add(className);
	  } else {
	    if (!el.className.match(new RegExp('(?:^|\\s)' + className + '(?!\\S)'))) {
	      el.className += ' ' + className;
	    }
	  }
	}

	function removeClassName(el /*: HTMLElement*/, className /*: string*/) {
	  if (el.classList) {
	    el.classList.remove(className);
	  } else {
	    el.className = el.className.replace(new RegExp('(?:^|\\s)' + className + '(?!\\S)', 'g'), '');
	  }
	}

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

	module.exports = __WEBPACK_EXTERNAL_MODULE_6__;

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

	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 */

	if (Object({"DRAGGABLE_DEBUG":undefined}).NODE_ENV !== 'production') {
	  var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&
	    Symbol.for &&
	    Symbol.for('react.element')) ||
	    0xeac7;

	  var isValidElement = function(object) {
	    return typeof object === 'object' &&
	      object !== null &&
	      object.$$typeof === REACT_ELEMENT_TYPE;
	  };

	  // By explicitly using `prop-types` you are opting into new development behavior.
	  // http://fb.me/prop-types-in-prod
	  var throwOnDirectAccess = true;
	  module.exports = __webpack_require__(14)(isValidElement, throwOnDirectAccess);
	} else {
	  // By explicitly using `prop-types` you are opting into new production behavior.
	  // http://fb.me/prop-types-in-prod
	  module.exports = __webpack_require__(17)();
	}


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

	"use strict";
	/**
	 * Copyright (c) 2014-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 *
	 */



	var emptyFunction = __webpack_require__(1);

	/**
	 * 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 (Object({"DRAGGABLE_DEBUG":undefined}).NODE_ENV !== 'production') {
	  var printWarning = function printWarning(format) {
	    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
	      args[_key - 1] = arguments[_key];
	    }

	    var argIndex = 0;
	    var message = 'Warning: ' + format.replace(/%s/g, function () {
	      return args[argIndex++];
	    });
	    if (typeof console !== 'undefined') {
	      console.error(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) {}
	  };

	  warning = function warning(condition, format) {
	    if (format === undefined) {
	      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
	    }

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

	    if (!condition) {
	      for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
	        args[_key2 - 2] = arguments[_key2];
	      }

	      printWarning.apply(undefined, [format].concat(args));
	    }
	  };
	}

	module.exports = warning;

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

	"use strict";


	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.getBoundPosition = getBoundPosition;
	exports.snapToGrid = snapToGrid;
	exports.canDragX = canDragX;
	exports.canDragY = canDragY;
	exports.getControlPosition = getControlPosition;
	exports.createCoreData = createCoreData;
	exports.createDraggableData = createDraggableData;

	var _shims = __webpack_require__(0);

	var _reactDom = __webpack_require__(4);

	var _reactDom2 = _interopRequireDefault(_reactDom);

	var _domFns = __webpack_require__(5);

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

	/*:: import type Draggable from '../Draggable';*/
	/*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/
	/*:: import type DraggableCore from '../DraggableCore';*/
	function getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /*: number*/) /*: [number, number]*/ {
	  // If no bounds, short-circuit and move on
	  if (!draggable.props.bounds) return [x, y];

	  // Clone new bounds
	  var bounds = draggable.props.bounds;

	  bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);
	  var node = findDOMNode(draggable);

	  if (typeof bounds === 'string') {
	    var ownerDocument = node.ownerDocument;

	    var ownerWindow = ownerDocument.defaultView;
	    var boundNode = void 0;
	    if (bounds === 'parent') {
	      boundNode = node.parentNode;
	    } else {
	      boundNode = ownerDocument.querySelector(bounds);
	    }
	    if (!(boundNode instanceof HTMLElement)) {
	      throw new Error('Bounds selector "' + bounds + '" could not find an element.');
	    }
	    var nodeStyle = ownerWindow.getComputedStyle(node);
	    var boundNodeStyle = ownerWindow.getComputedStyle(boundNode);
	    // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.
	    bounds = {
	      left: -node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingLeft) + (0, _shims.int)(nodeStyle.marginLeft),
	      top: -node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingTop) + (0, _shims.int)(nodeStyle.marginTop),
	      right: (0, _domFns.innerWidth)(boundNode) - (0, _domFns.outerWidth)(node) - node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingRight) - (0, _shims.int)(nodeStyle.marginRight),
	      bottom: (0, _domFns.innerHeight)(boundNode) - (0, _domFns.outerHeight)(node) - node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingBottom) - (0, _shims.int)(nodeStyle.marginBottom)
	    };
	  }

	  // Keep x and y below right and bottom limits...
	  if ((0, _shims.isNum)(bounds.right)) x = Math.min(x, bounds.right);
	  if ((0, _shims.isNum)(bounds.bottom)) y = Math.min(y, bounds.bottom);

	  // But above left and top limits.
	  if ((0, _shims.isNum)(bounds.left)) x = Math.max(x, bounds.left);
	  if ((0, _shims.isNum)(bounds.top)) y = Math.max(y, bounds.top);

	  return [x, y];
	}

	function snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, pendingY /*: number*/) /*: [number, number]*/ {
	  var x = Math.round(pendingX / grid[0]) * grid[0];
	  var y = Math.round(pendingY / grid[1]) * grid[1];
	  return [x, y];
	}

	function canDragX(draggable /*: Draggable*/) /*: boolean*/ {
	  return draggable.props.axis === 'both' || draggable.props.axis === 'x';
	}

	function canDragY(draggable /*: Draggable*/) /*: boolean*/ {
	  return draggable.props.axis === 'both' || draggable.props.axis === 'y';
	}

	// Get {x, y} positions from event.
	function getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*: ?number*/, draggableCore /*: DraggableCore*/) /*: ?ControlPosition*/ {
	  var touchObj = typeof touchIdentifier === 'number' ? (0, _domFns.getTouch)(e, touchIdentifier) : null;
	  if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch
	  var node = findDOMNode(draggableCore);
	  // User can provide an offsetParent if desired.
	  var offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;
	  return (0, _domFns.offsetXYFromParent)(touchObj || e, offsetParent);
	}

	// Create an data object exposed by <DraggableCore>'s events
	function createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y /*: number*/) /*: DraggableData*/ {
	  var state = draggable.state;
	  var isStart = !(0, _shims.isNum)(state.lastX);
	  var node = findDOMNode(draggable);

	  if (isStart) {
	    // If this is our first move, use the x and y as last coords.
	    return {
	      node: node,
	      deltaX: 0, deltaY: 0,
	      lastX: x, lastY: y,
	      x: x, y: y
	    };
	  } else {
	    // Otherwise calculate proper values.
	    return {
	      node: node,
	      deltaX: x - state.lastX, deltaY: y - state.lastY,
	      lastX: state.lastX, lastY: state.lastY,
	      x: x, y: y
	    };
	  }
	}

	// Create an data exposed by <Draggable>'s events
	function createDraggableData(draggable /*: Draggable*/, coreData /*: DraggableData*/) /*: DraggableData*/ {
	  return {
	    node: coreData.node,
	    x: draggable.state.x + coreData.deltaX,
	    y: draggable.state.y + coreData.deltaY,
	    deltaX: coreData.deltaX,
	    deltaY: coreData.deltaY,
	    lastX: draggable.state.x,
	    lastY: draggable.state.y
	  };
	}

	// A lot faster than stringify/parse
	function cloneBounds(bounds /*: Bounds*/) /*: Bounds*/ {
	  return {
	    left: bounds.left,
	    top: bounds.top,
	    right: bounds.right,
	    bottom: bounds.bottom
	  };
	}

	function findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTMLElement*/ {
	  var node = _reactDom2.default.findDOMNode(draggable);
	  if (!node) {
	    throw new Error('<DraggableCore>: Unmounted during event!');
	  }
	  // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME
	  return node;
	}

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

	"use strict";
	/* WEBPACK VAR INJECTION */(function(process) {

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

	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

	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 _react = __webpack_require__(6);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(7);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactDom = __webpack_require__(4);

	var _reactDom2 = _interopRequireDefault(_reactDom);

	var _domFns = __webpack_require__(5);

	var _positionFns = __webpack_require__(9);

	var _shims = __webpack_require__(0);

	var _log = __webpack_require__(11);

	var _log2 = _interopRequireDefault(_log);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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; }

	/*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/


	// Simple abstraction for dragging events names.
	/*:: import type {Element as ReactElement} from 'react';*/
	var eventsFor = {
	  touch: {
	    start: 'touchstart',
	    move: 'touchmove',
	    stop: 'touchend'
	  },
	  mouse: {
	    start: 'mousedown',
	    move: 'mousemove',
	    stop: 'mouseup'
	  }
	};

	// Default to mouse events.
	var dragEventFor = eventsFor.mouse;

	/*:: type DraggableCoreState = {
	  dragging: boolean,
	  lastX: number,
	  lastY: number,
	  touchIdentifier: ?number
	};*/
	/*:: export type DraggableBounds = {
	  left: number,
	  right: number,
	  top: number,
	  bottom: number,
	};*/
	/*:: export type DraggableData = {
	  node: HTMLElement,
	  x: number, y: number,
	  deltaX: number, deltaY: number,
	  lastX: number, lastY: number,
	};*/
	/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void;*/
	/*:: export type ControlPosition = {x: number, y: number};*/


	//
	// Define <DraggableCore>.
	//
	// <DraggableCore> is for advanced usage of <Draggable>. It maintains minimal internal state so it can
	// work well with libraries that require more control over the element.
	//

	/*:: export type DraggableCoreProps = {
	  allowAnyClick: boolean,
	  cancel: string,
	  children: ReactElement<any>,
	  disabled: boolean,
	  enableUserSelectHack: boolean,
	  offsetParent: HTMLElement,
	  grid: [number, number],
	  handle: string,
	  onStart: DraggableEventHandler,
	  onDrag: DraggableEventHandler,
	  onStop: DraggableEventHandler,
	  onMouseDown: (e: MouseEvent) => void,
	};*/

	var DraggableCore = function (_React$Component) {
	  _inherits(DraggableCore, _React$Component);

	  function DraggableCore() {
	    var _ref;

	    var _temp, _this, _ret;

	    _classCallCheck(this, DraggableCore);

	    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
	      args[_key] = arguments[_key];
	    }

	    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = DraggableCore.__proto__ || Object.getPrototypeOf(DraggableCore)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
	      dragging: false,
	      // Used while dragging to determine deltas.
	      lastX: NaN, lastY: NaN,
	      touchIdentifier: null
	    }, _this.handleDragStart = function (e) {
	      // Make it possible to attach event handlers on top of this one.
	      _this.props.onMouseDown(e);

	      // Only accept left-clicks.
	      if (!_this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false;

	      // Get nodes. Be sure to grab relative document (could be iframed)
	      var thisNode = _reactDom2.default.findDOMNode(_this);
	      if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {
	        throw new Error('<DraggableCore> not mounted on DragStart!');
	      }
	      var ownerDocument = thisNode.ownerDocument;

	      // Short circuit if handle or cancel prop was provided and selector doesn't match.

	      if (_this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || _this.props.handle && !(0, _domFns.matchesSelectorAndParentsTo)(e.target, _this.props.handle, thisNode) || _this.props.cancel && (0, _domFns.matchesSelectorAndParentsTo)(e.target, _this.props.cancel, thisNode)) {
	        return;
	      }

	      // Set touch identifier in component state if this is a touch event. This allows us to
	      // distinguish between individual touches on multitouch screens by identifying which
	      // touchpoint was set to this element.
	      var touchIdentifier = (0, _domFns.getTouchIdentifier)(e);
	      _this.setState({ touchIdentifier: touchIdentifier });

	      // Get the current drag point from the event. This is used as the offset.
	      var position = (0, _positionFns.getControlPosition)(e, touchIdentifier, _this);
	      if (position == null) return; // not possible but satisfies flow
	      var x = position.x,
	          y = position.y;

	      // Create an event object with all the data parents need to make a decision here.

	      var coreEvent = (0, _positionFns.createCoreData)(_this, x, y);

	      (0, _log2.default)('DraggableCore: handleDragStart: %j', coreEvent);

	      // Call event handler. If it returns explicit false, cancel.
	      (0, _log2.default)('calling', _this.props.onStart);
	      var shouldUpdate = _this.props.onStart(e, coreEvent);
	      if (shouldUpdate === false) return;

	      // Add a style to the body to disable user-select. This prevents text from
	      // being selected all over the page.
	      if (_this.props.enableUserSelectHack) (0, _domFns.addUserSelectStyles)(ownerDocument);

	      // Initiate dragging. Set the current x and y as offsets
	      // so we know how much we've moved during the drag. This allows us
	      // to drag elements around even if they have been moved, without issue.
	      _this.setState({
	        dragging: true,

	        lastX: x,
	        lastY: y
	      });

	      // Add events to the document directly so we catch when the user's mouse/touch moves outside of
	      // this element. We use different events depending on whether or not we have detected that this
	      // is a touch-capable device.
	      (0, _domFns.addEvent)(ownerDocument, dragEventFor.move, _this.handleDrag);
	      (0, _domFns.addEvent)(ownerDocument, dragEventFor.stop, _this.handleDragStop);
	    }, _this.handleDrag = function (e) {

	      // Prevent scrolling on mobile devices, like ipad/iphone.
	      if (e.type === 'touchmove') e.preventDefault();

	      // Get the current drag point from the event. This is used as the offset.
	      var position = (0, _positionFns.getControlPosition)(e, _this.state.touchIdentifier, _this);
	      if (position == null) return;
	      var x = position.x,
	          y = position.y;

	      // Snap to grid if prop has been provided

	      if (Array.isArray(_this.props.grid)) {
	        var _deltaX = x - _this.state.lastX,
	            _deltaY = y - _this.state.lastY;

	        var _snapToGrid = (0, _positionFns.snapToGrid)(_this.props.grid, _deltaX, _deltaY);

	        var _snapToGrid2 = _slicedToArray(_snapToGrid, 2);

	        _deltaX = _snapToGrid2[0];
	        _deltaY = _snapToGrid2[1];

	        if (!_deltaX && !_deltaY) return; // skip useless drag
	        x = _this.state.lastX + _deltaX, y = _this.state.lastY + _deltaY;
	      }

	      var coreEvent = (0, _positionFns.createCoreData)(_this, x, y);

	      (0, _log2.default)('DraggableCore: handleDrag: %j', coreEvent);

	      // Call event handler. If it returns explicit false, trigger end.
	      var shouldUpdate = _this.props.onDrag(e, coreEvent);
	      if (shouldUpdate === false) {
	        try {
	          // $FlowIgnore
	          _this.handleDragStop(new MouseEvent('mouseup'));
	        } catch (err) {
	          // Old browsers
	          var event = ((document.createEvent('MouseEvents') /*: any*/) /*: MouseTouchEvent*/);
	          // I see why this insanity was deprecated
	          // $FlowIgnore
	          event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
	          _this.handleDragStop(event);
	        }
	        return;
	      }

	      _this.setState({
	        lastX: x,
	        lastY: y
	      });
	    }, _this.handleDragStop = function (e) {
	      if (!_this.state.dragging) return;

	      var position = (0, _positionFns.getControlPosition)(e, _this.state.touchIdentifier, _this);
	      if (position == null) return;
	      var x = position.x,
	          y = position.y;

	      var coreEvent = (0, _positionFns.createCoreData)(_this, x, y);

	      var thisNode = _reactDom2.default.findDOMNode(_this);
	      if (thisNode) {
	        // Remove user-select hack
	        if (_this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(thisNode.ownerDocument);
	      }

	      (0, _log2.default)('DraggableCore: handleDragStop: %j', coreEvent);

	      // Reset the el.
	      _this.setState({
	        dragging: false,
	        lastX: NaN,
	        lastY: NaN
	      });

	      // Call event handler
	      _this.props.onStop(e, coreEvent);

	      if (thisNode) {
	        // Remove event handlers
	        (0, _log2.default)('DraggableCore: Removing handlers');
	        (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.move, _this.handleDrag);
	        (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.stop, _this.handleDragStop);
	      }
	    }, _this.onMouseDown = function (e) {
	      dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse

	      return _this.handleDragStart(e);
	    }, _this.onMouseUp = function (e) {
	      dragEventFor = eventsFor.mouse;

	      return _this.handleDragStop(e);
	    }, _this.onTouchStart = function (e) {
	      // We're on a touch device now, so change the event handlers
	      dragEventFor = eventsFor.touch;

	      return _this.handleDragStart(e);
	    }, _this.onTouchEnd = function (e) {
	      // We're on a touch device now, so change the event handlers
	      dragEventFor = eventsFor.touch;

	      return _this.handleDragStop(e);
	    }, _temp), _possibleConstructorReturn(_this, _ret);
	  }

	  _createClass(DraggableCore, [{
	    key: 'componentWillUnmount',
	    value: function componentWillUnmount() {
	      // Remove any leftover event handlers. Remove both touch and mouse handlers in case
	      // some browser quirk caused a touch event to fire during a mouse move, or vice versa.
	      var thisNode = _reactDom2.default.findDOMNode(this);
	      if (thisNode) {
	        var ownerDocument = thisNode.ownerDocument;

	        (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.move, this.handleDrag);
	        (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.move, this.handleDrag);
	        (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);
	        (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.stop, this.handleDragStop);
	        if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(ownerDocument);
	      }
	    }

	    // Same as onMouseDown (start drag), but now consider this a touch device.

	  }, {
	    key: 'render',
	    value: function render() {
	      // Reuse the child provided
	      // This makes it flexible to use whatever element is wanted (div, ul, etc)
	      return _react2.default.cloneElement(_react2.default.Children.only(this.props.children), {
	        style: (0, _domFns.styleHacks)(this.props.children.props.style),

	        // Note: mouseMove handler is attached to document so it will still function
	        // when the user drags quickly and leaves the bounds of the element.
	        onMouseDown: this.onMouseDown,
	        onTouchStart: this.onTouchStart,
	        onMouseUp: this.onMouseUp,
	        onTouchEnd: this.onTouchEnd
	      });
	    }
	  }]);

	  return DraggableCore;
	}(_react2.default.Component);

	DraggableCore.displayName = 'DraggableCore';
	DraggableCore.propTypes = {
	  /**
	   * `allowAnyClick` allows dragging using any mouse button.
	   * By default, we only accept the left button.
	   *
	   * Defaults to `false`.
	   */
	  allowAnyClick: _propTypes2.default.bool,

	  /**
	   * `disabled`, if true, stops the <Draggable> from dragging. All handlers,
	   * with the exception of `onMouseDown`, will not fire.
	   */
	  disabled: _propTypes2.default.bool,

	  /**
	   * By default, we add 'user-select:none' attributes to the document body
	   * to prevent ugly text selection during drag. If this is causing problems
	   * for your app, set this to `false`.
	   */
	  enableUserSelectHack: _propTypes2.default.bool,

	  /**
	   * `offsetParent`, if set, uses the passed DOM node to compute drag offsets
	   * instead of using the parent node.
	   */
	  offsetParent: function offsetParent(props /*: DraggableCoreProps*/, propName /*: $Keys<DraggableCoreProps>*/) {
	    if (process.browser === true && props[propName] && props[propName].nodeType !== 1) {
	      throw new Error('Draggable\'s offsetParent must be a DOM Node.');
	    }
	  },

	  /**
	   * `grid` specifies the x and y that dragging should snap to.
	   */
	  grid: _propTypes2.default.arrayOf(_propTypes2.default.number),

	  /**
	   * `handle` specifies a selector to be used as the handle that initiates drag.
	   *
	   * Example:
	   *
	   * ```jsx
	   *   let App = React.createClass({
	   *       render: function () {
	   *         return (
	   *            <Draggable handle=".handle">
	   *              <div>
	   *                  <div className="handle">Click me to drag</div>
	   *                  <div>This is some other content</div>
	   *              </div>
	   *           </Draggable>
	   *         );
	   *       }
	   *   });
	   * ```
	   */
	  handle: _propTypes2.default.string,

	  /**
	   * `cancel` specifies a selector to be used to prevent drag initialization.
	   *
	   * Example:
	   *
	   * ```jsx
	   *   let App = React.createClass({
	   *       render: function () {
	   *           return(
	   *               <Draggable cancel=".cancel">
	   *                   <div>
	   *                     <div className="cancel">You can't drag from here</div>
	   *                     <div>Dragging here works fine</div>
	   *                   </div>
	   *               </Draggable>
	   *           );
	   *       }
	   *   });
	   * ```
	   */
	  cancel: _propTypes2.default.string,

	  /**
	   * Called when dragging starts.
	   * If this function returns the boolean false, dragging will be canceled.
	   */
	  onStart: _propTypes2.default.func,

	  /**
	   * Called while dragging.
	   * If this function returns the boolean false, dragging will be canceled.
	   */
	  onDrag: _propTypes2.default.func,

	  /**
	   * Called when dragging stops.
	   * If this function returns the boolean false, the drag will remain active.
	   */
	  onStop: _propTypes2.default.func,

	  /**
	   * A workaround option which can be passed if onMouseDown needs to be accessed,
	   * since it'll always be blocked (as there is internal use of onMouseDown)
	   */
	  onMouseDown: _propTypes2.default.func,

	  /**
	   * These properties should be defined on the child, not here.
	   */
	  className: _shims.dontSetMe,
	  style: _shims.dontSetMe,
	  transform: _shims.dontSetMe
	};
	DraggableCore.defaultProps = {
	  allowAnyClick: false, // by default only accept left click
	  cancel: null,
	  disabled: false,
	  enableUserSelectHack: true,
	  offsetParent: null,
	  handle: null,
	  grid: null,
	  transform: null,
	  onStart: function onStart() {},
	  onDrag: function onDrag() {},
	  onStop: function onStop() {},
	  onMouseDown: function onMouseDown() {}
	};
	exports.default = DraggableCore;
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(20)))

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

	"use strict";


	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.default = log;

	/*eslint no-console:0*/
	function log() {
	  var _console;

	  if (undefined) (_console = console).log.apply(_console, arguments);
	}

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

	"use strict";


	var Draggable = __webpack_require__(13).default;

	// Previous versions of this lib exported <Draggable> as the root export. As to not break
	// them, or TypeScript, we export *both* as the root and as 'default'.
	// See https://github.com/mzabriskie/react-draggable/pull/254
	// and https://github.com/mzabriskie/react-draggable/issues/266
	module.exports = Draggable;
	module.exports.default = Draggable;
	module.exports.DraggableCore = __webpack_require__(10).default;

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

	"use strict";


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

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

	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 _react = __webpack_require__(6);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(7);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactDom = __webpack_require__(4);

	var _reactDom2 = _interopRequireDefault(_reactDom);

	var _classnames = __webpack_require__(18);

	var _classnames2 = _interopRequireDefault(_classnames);

	var _domFns = __webpack_require__(5);

	var _positionFns = __webpack_require__(9);

	var _shims = __webpack_require__(0);

	var _DraggableCore = __webpack_require__(10);

	var _DraggableCore2 = _interopRequireDefault(_DraggableCore);

	var _log = __webpack_require__(11);

	var _log2 = _interopRequireDefault(_log);

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

	function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

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

	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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; }

	/*:: import type {ControlPosition, DraggableBounds, DraggableCoreProps} from './DraggableCore';*/
	/*:: import type {DraggableEventHandler} from './utils/types';*/
	/*:: import type {Element as ReactElement} from 'react';*/
	/*:: type DraggableState = {
	  dragging: boolean,
	  dragged: boolean,
	  x: number, y: number,
	  slackX: number, slackY: number,
	  isElementSVG: boolean
	};*/


	//
	// Define <Draggable>
	//

	/*:: export type DraggableProps = {
	  ...$Exact<DraggableCoreProps>,
	  axis: 'both' | 'x' | 'y' | 'none',
	  bounds: DraggableBounds | string | false,
	  defaultClassName: string,
	  defaultClassNameDragging: string,
	  defaultClassNameDragged: string,
	  defaultPosition: ControlPosition,
	  position: ControlPosition,
	};*/

	var Draggable = function (_React$Component) {
	  _inherits(Draggable, _React$Component);

	  function Draggable(props /*: DraggableProps*/) {
	    _classCallCheck(this, Draggable);

	    var _this = _possibleConstructorReturn(this, (Draggable.__proto__ || Object.getPrototypeOf(Draggable)).call(this, props));

	    _this.onDragStart = function (e, coreData) {
	      (0, _log2.default)('Draggable: onDragStart: %j', coreData);

	      // Short-circuit if user's callback killed it.
	      var shouldStart = _this.props.onStart(e, (0, _positionFns.createDraggableData)(_this, coreData));
	      // Kills start event on core as well, so move handlers are never bound.
	      if (shouldStart === false) return false;

	      _this.setState({ dragging: true, dragged: true });
	    };

	    _this.onDrag = function (e, coreData) {
	      if (!_this.state.dragging) return false;
	      (0, _log2.default)('Draggable: onDrag: %j', coreData);

	      var uiData = (0, _positionFns.createDraggableData)(_this, coreData);

	      var newState /*: $Shape<DraggableState>*/ = {
	        x: uiData.x,
	        y: uiData.y
	      };

	      // Keep within bounds.
	      if (_this.props.bounds) {
	        // Save original x and y.
	        var _x = newState.x,
	            _y = newState.y;

	        // Add slack to the values used to calculate bound position. This will ensure that if
	        // we start removing slack, the element won't react to it right away until it's been
	        // completely removed.

	        newState.x += _this.state.slackX;
	        newState.y += _this.state.slackY;

	        // Get bound position. This will ceil/floor the x and y within the boundaries.

	        var _getBoundPosition = (0, _positionFns.getBoundPosition)(_this, newState.x, newState.y),
	            _getBoundPosition2 = _slicedToArray(_getBoundPosition, 2),
	            newStateX = _getBoundPosition2[0],
	            newStateY = _getBoundPosition2[1];

	        newState.x = newStateX;
	        newState.y = newStateY;

	        // Recalculate slack by noting how much was shaved by the boundPosition handler.
	        newState.slackX = _this.state.slackX + (_x - newState.x);
	        newState.slackY = _this.state.slackY + (_y - newState.y);

	        // Update the event we fire to reflect what really happened after bounds took effect.
	        uiData.x = newState.x;
	        uiData.y = newState.y;
	        uiData.deltaX = newState.x - _this.state.x;
	        uiData.deltaY = newState.y - _this.state.y;
	      }

	      // Short-circuit if user's callback killed it.
	      var shouldUpdate = _this.props.onDrag(e, uiData);
	      if (shouldUpdate === false) return false;

	      _this.setState(newState);
	    };

	    _this.onDragStop = function (e, coreData) {
	      if (!_this.state.dragging) return false;

	      // Short-circuit if user's callback killed it.
	      var shouldStop = _this.props.onStop(e, (0, _positionFns.createDraggableData)(_this, coreData));
	      if (shouldStop === false) return false;

	      (0, _log2.default)('Draggable: onDragStop: %j', coreData);

	      var newState /*: $Shape<DraggableState>*/ = {
	        dragging: false,
	        slackX: 0,
	        slackY: 0
	      };

	      // If this is a controlled component, the result of this operation will be to
	      // revert back to the old position. We expect a handler on `onDragStop`, at the least.
	      var controlled = Boolean(_this.props.position);
	      if (controlled) {
	        var _this$props$position = _this.props.position,
	            _x2 = _this$props$position.x,
	            _y2 = _this$props$position.y;

	        newState.x = _x2;
	        newState.y = _y2;
	      }

	      _this.setState(newState);
	    };

	    _this.state = {
	      // Whether or not we are currently dragging.
	      dragging: false,

	      // Whether or not we have been dragged before.
	      dragged: false,

	      // Current transform x and y.
	      x: props.position ? props.position.x : props.defaultPosition.x,
	      y: props.position ? props.position.y : props.defaultPosition.y,

	      // Used for compensating for out-of-bounds drags
	      slackX: 0, slackY: 0,

	      // Can only determine if SVG after mounting
	      isElementSVG: false
	    };
	    return _this;
	  }

	  _createClass(Draggable, [{
	    key: 'componentWillMount',
	    value: function componentWillMount() {
	      if (this.props.position && !(this.props.onDrag || this.props.onStop)) {
	        // eslint-disable-next-line
	        console.warn('A `position` was applied to this <Draggable>, without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');
	      }
	    }
	  }, {
	    key: 'componentDidMount',
	    value: function componentDidMount() {
	      // Check to see if the element passed is an instanceof SVGElement
	      if (typeof window.SVGElement !== 'undefined' && _reactDom2.default.findDOMNode(this) instanceof window.SVGElement) {
	        this.setState({ isElementSVG: true });
	      }
	    }
	  }, {
	    key: 'componentWillReceiveProps',
	    value: function componentWillReceiveProps(nextProps /*: Object*/) {
	      // Set x/y if position has changed
	      if (nextProps.position && (!this.props.position || nextProps.position.x !== this.props.position.x || nextProps.position.y !== this.props.position.y)) {
	        this.setState({ x: nextProps.position.x, y: nextProps.position.y });
	      }
	    }
	  }, {
	    key: 'componentWillUnmount',
	    value: function componentWillUnmount() {
	      this.setState({ dragging: false }); // prevents invariant if unmounted while dragging
	    }
	  }, {
	    key: 'render',
	    value: function render() /*: ReactElement<any>*/ {
	      var _classNames;

	      var style = {},
	          svgTransform = null;

	      // If this is controlled, we don't want to move it - unless it's dragging.
	      var controlled = Boolean(this.props.position);
	      var draggable = !controlled || this.state.dragging;

	      var position = this.props.position || this.props.defaultPosition;
	      var transformOpts = {
	        // Set left if horizontal drag is enabled
	        x: (0, _positionFns.canDragX)(this) && draggable ? this.state.x : position.x,

	        // Set top if vertical drag is enabled
	        y: (0, _positionFns.canDragY)(this) && draggable ? this.state.y : position.y
	      };

	      // If this element was SVG, we use the `transform` attribute.
	      if (this.state.isElementSVG) {
	        svgTransform = (0, _domFns.createSVGTransform)(transformOpts);
	      } else {
	        // Add a CSS transform to move the element around. This allows us to move the element around
	        // without worrying about whether or not it is relatively or absolutely positioned.
	        // If the item you are dragging already has a transform set, wrap it in a <span> so <Draggable>
	        // has a clean slate.
	        style = (0, _domFns.createCSSTransform)(transformOpts);
	      }

	      var _props = this.props,
	          defaultClassName = _props.defaultClassName,
	          defaultClassNameDragging = _props.defaultClassNameDragging,
	          defaultClassNameDragged = _props.defaultClassNameDragged;


	      var children = _react2.default.Children.only(this.props.children);

	      // Mark with class while dragging
	      var className = (0, _classnames2.default)(children.props.className || '', defaultClassName, (_classNames = {}, _defineProperty(_classNames, defaultClassNameDragging, this.state.dragging), _defineProperty(_classNames, defaultClassNameDragged, this.state.dragged), _classNames));

	      // Reuse the child provided
	      // This makes it flexible to use whatever element is wanted (div, ul, etc)
	      return _react2.default.createElement(
	        _DraggableCore2.default,
	        _extends({}, this.props, { onStart: this.onDragStart, onDrag: this.onDrag, onStop: this.onDragStop }),
	        _react2.default.cloneElement(children, {
	          className: className,
	          style: _extends({}, children.props.style, style),
	          transform: svgTransform
	        })
	      );
	    }
	  }]);

	  return Draggable;
	}(_react2.default.Component);

	Draggable.displayName = 'Draggable';
	Draggable.propTypes = _extends({}, _DraggableCore2.default.propTypes, {

	  /**
	   * `axis` determines which axis the draggable can move.
	   *
	   *  Note that all callbacks will still return data as normal. This only
	   *  controls flushing to the DOM.
	   *
	   * 'both' allows movement horizontally and vertically.
	   * 'x' limits movement to horizontal axis.
	   * 'y' limits movement to vertical axis.
	   * 'none' limits all movement.
	   *
	   * Defaults to 'both'.
	   */
	  axis: _propTypes2.default.oneOf(['both', 'x', 'y', 'none']),

	  /**
	   * `bounds` determines the range of movement available to the element.
	   * Available values are:
	   *
	   * 'parent' restricts movement within the Draggable's parent node.
	   *
	   * Alternatively, pass an object with the following properties, all of which are optional:
	   *
	   * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}
	   *
	   * All values are in px.
	   *
	   * Example:
	   *
	   * ```jsx
	   *   let App = React.createClass({
	   *       render: function () {
	   *         return (
	   *            <Draggable bounds={{right: 300, bottom: 300}}>
	   *              <div>Content</div>
	   *           </Draggable>
	   *         );
	   *       }
	   *   });
	   * ```
	   */
	  bounds: _propTypes2.default.oneOfType([_propTypes2.default.shape({
	    left: _propTypes2.default.number,
	    right: _propTypes2.default.number,
	    top: _propTypes2.default.number,
	    bottom: _propTypes2.default.number
	  }), _propTypes2.default.string, _propTypes2.default.oneOf([false])]),

	  defaultClassName: _propTypes2.default.string,
	  defaultClassNameDragging: _propTypes2.default.string,
	  defaultClassNameDragged: _propTypes2.default.string,

	  /**
	   * `defaultPosition` specifies the x and y that the dragged item should start at
	   *
	   * Example:
	   *
	   * ```jsx
	   *      let App = React.createClass({
	   *          render: function () {
	   *              return (
	   *                  <Draggable defaultPosition={{x: 25, y: 25}}>
	   *                      <div>I start with transformX: 25px and transformY: 25px;</div>
	   *                  </Draggable>
	   *              );
	   *          }
	   *      });
	   * ```
	   */
	  defaultPosition: _propTypes2.default.shape({
	    x: _propTypes2.default.number,
	    y: _propTypes2.default.number
	  }),

	  /**
	   * `position`, if present, defines the current position of the element.
	   *
	   *  This is similar to how form elements in React work - if no `position` is supplied, the component
	   *  is uncontrolled.
	   *
	   * Example:
	   *
	   * ```jsx
	   *      let App = React.createClass({
	   *          render: function () {
	   *              return (
	   *                  <Draggable position={{x: 25, y: 25}}>
	   *                      <div>I start with transformX: 25px and transformY: 25px;</div>
	   *                  </Draggable>
	   *              );
	   *          }
	   *      });
	   * ```
	   */
	  position: _propTypes2.default.shape({
	    x: _propTypes2.default.number,
	    y: _propTypes2.default.number
	  }),

	  /**
	   * These properties should be defined on the child, not here.
	   */
	  className: _shims.dontSetMe,
	  style: _shims.dontSetMe,
	  transform: _shims.dontSetMe
	});
	Draggable.defaultProps = _extends({}, _DraggableCore2.default.defaultProps, {
	  axis: 'both',
	  bounds: false,
	  defaultClassName: 'react-draggable',
	  defaultClassNameDragging: 'react-draggable-dragging',
	  defaultClassNameDragged: 'react-draggable-dragged',
	  defaultPosition: { x: 0, y: 0 },
	  position: null
	});
	exports.default = Draggable;

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

	"use strict";
	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 */



	var emptyFunction = __webpack_require__(1);
	var invariant = __webpack_require__(2);
	var warning = __webpack_require__(8);
	var assign = __webpack_require__(15);

	var ReactPropTypesSecret = __webpack_require__(3);
	var checkPropTypes = __webpack_require__(16);

	module.exports = function(isValidElement, throwOnDirectAccess) {
	  /* 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;
	    }
	  }

	  /**
	   * 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>>';

	  // Important!
	  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
	  var ReactPropTypes = {
	    array: createPrimitiveTypeChecker('array'),
	    bool: createPrimitiveTypeChecker('boolean'),
	    func: createPrimitiveTypeChecker('function'),
	    number: createPrimitiveTypeChecker('number'),
	    object: createPrimitiveTypeChecker('object'),
	    string: createPrimitiveTypeChecker('string'),
	    symbol: createPrimitiveTypeChecker('symbol'),

	    any: createAnyTypeChecker(),
	    arrayOf: createArrayOfTypeChecker,
	    element: createElementTypeChecker(),
	    instanceOf: createInstanceTypeChecker,
	    node: createNodeChecker(),
	    objectOf: createObjectOfTypeChecker,
	    oneOf: createEnumTypeChecker,
	    oneOfType: createUnionTypeChecker,
	    shape: createShapeTypeChecker,
	    exact: createStrictShapeTypeChecker,
	  };

	  /**
	   * inlined Object.is polyfill to avoid requiring consumers ship their own
	   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
	   */
	  /*eslint-disable no-self-compare*/
	  function is(x, y) {
	    // SameValue algorithm
	    if (x === y) {
	      // Steps 1-5, 7-10
	      // Steps 6.b-6.e: +0 != -0
	      return x !== 0 || 1 / x === 1 / y;
	    } else {
	      // Step 6.a: NaN == NaN
	      return x !== x && y !== y;
	    }
	  }
	  /*eslint-enable no-self-compare*/

	  /**
	   * We use an Error-like object for backward compatibility as people may call
	   * PropTypes directly and inspect their output. However, we don't use real
	   * Errors anymore. We don't inspect their stack anyway, and creating them
	   * is prohibitively expensive if they are created too often, such as what
	   * happens in oneOfType() for any type before the one that matched.
	   */
	  function PropTypeError(message) {
	    this.message = message;
	    this.stack = '';
	  }
	  // Make `instanceof Error` still work for returned errors.
	  PropTypeError.prototype = Error.prototype;

	  function createChainableTypeChecker(validate) {
	    if (Object({"DRAGGABLE_DEBUG":undefined}).NODE_ENV !== 'production') {
	      var manualPropTypeCallCache = {};
	      var manualPropTypeWarningCount = 0;
	    }
	    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
	      componentName = componentName || ANONYMOUS;
	      propFullName = propFullName || propName;

	      if (secret !== ReactPropTypesSecret) {
	        if (throwOnDirectAccess) {
	          // New behavior only for users of `prop-types` package
	          invariant(
	            false,
	            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
	            'Use `PropTypes.checkPropTypes()` to call them. ' +
	            'Read more at http://fb.me/use-check-prop-types'
	          );
	        } else if (Object({"DRAGGABLE_DEBUG":undefined}).NODE_ENV !== 'production' && typeof console !== 'undefined') {
	          // Old behavior for people using React.PropTypes
	          var cacheKey = componentName + ':' + propName;
	          if (
	            !manualPropTypeCallCache[cacheKey] &&
	            // Avoid spamming the console because they are often not actionable except for lib authors
	            manualPropTypeWarningCount < 3
	          ) {
	            warning(
	              false,
	              'You are manually calling a React.PropTypes validation ' +
	              'function for the `%s` prop on `%s`. This is deprecated ' +
	              'and will throw in the standalone `prop-types` package. ' +
	              'You may be seeing this warning due to a third-party PropTypes ' +
	              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.',
	              propFullName,
	              componentName
	            );
	            manualPropTypeCallCache[cacheKey] = true;
	            manualPropTypeWarningCount++;
	          }
	        }
	      }
	      if (props[propName] == null) {
	        if (isRequired) {
	          if (props[propName] === null) {
	            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
	          }
	          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
	        }
	        return null;
	      } else {
	        return validate(props, propName, componentName, location, propFullName);
	      }
	    }

	    var chainedCheckType = checkType.bind(null, false);
	    chainedCheckType.isRequired = checkType.bind(null, true);

	    return chainedCheckType;
	  }

	  function createPrimitiveTypeChecker(expectedType) {
	    function validate(props, propName, componentName, location, propFullName, secret) {
	      var propValue = props[propName];
	      var propType = getPropType(propValue);
	      if (propType !== expectedType) {
	        // `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 PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
	      }
	      return null;
	    }
	    return createChainableTypeChecker(validate);
	  }

	  function createAnyTypeChecker() {
	    return createChainableTypeChecker(emptyFunction.thatReturnsNull);
	  }

	  function createArrayOfTypeChecker(typeChecker) {
	    function validate(props, propName, componentName, location, propFullName) {
	      if (typeof typeChecker !== 'function') {
	        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
	      }
	      var propValue = props[propName];
	      if (!Array.isArray(propValue)) {
	        var propType = getPropType(propValue);
	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
	      }
	      for (var i = 0; i < propValue.length; i++) {
	        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
	        if (error instanceof Error) {
	          return error;
	        }
	      }
	      return null;
	    }
	    return createChainableTypeChecker(validate);
	  }

	  function createElementTypeChecker() {
	    function validate(props, propName, componentName, location, propFullName) {
	      var propValue = props[propName];
	      if (!isValidElement(propValue)) {
	        var propType = getPropType(propValue);
	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
	      }
	      return null;
	    }
	    return createChainableTypeChecker(validate);
	  }

	  function createInstanceTypeChecker(expectedClass) {
	    function validate(props, propName, componentName, location, propFullName) {
	      if (!(props[propName] instanceof expectedClass)) {
	        var expectedClassName = expectedClass.name || ANONYMOUS;
	        var actualClassName = getClassName(props[propName]);
	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
	      }
	      return null;
	    }
	    return createChainableTypeChecker(validate);
	  }

	  function createEnumTypeChecker(expectedValues) {
	    if (!Array.isArray(expectedValues)) {
	      Object({"DRAGGABLE_DEBUG":undefined}).NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;
	      return emptyFunction.thatReturnsNull;
	    }

	    function validate(props, propName, componentName, location, propFullName) {
	      var propValue = props[propName];
	      for (var i = 0; i < expectedValues.length; i++) {
	        if (is(propValue, expectedValues[i])) {
	          return null;
	        }
	      }

	      var valuesString = JSON.stringify(expectedValues);
	      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
	    }
	    return createChainableTypeChecker(validate);
	  }

	  function createObjectOfTypeChecker(typeChecker) {
	    function validate(props, propName, componentName, location, propFullName) {
	      if (typeof typeChecker !== 'function') {
	        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
	      }
	      var propValue = props[propName];
	      var propType = getPropType(propValue);
	      if (propType !== 'object') {
	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` 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, propFullName + '.' + key, ReactPropTypesSecret);
	          if (error instanceof Error) {
	            return error;
	          }
	        }
	      }
	      return null;
	    }
	    return createChainableTypeChecker(validate);
	  }

	  function createUnionTypeChecker(arrayOfTypeCheckers) {
	    if (!Array.isArray(arrayOfTypeCheckers)) {
	      Object({"DRAGGABLE_DEBUG":undefined}).NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;
	      return emptyFunction.thatReturnsNull;
	    }

	    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
	      var checker = arrayOfTypeCheckers[i];
	      if (typeof checker !== 'function') {
	        warning(
	          false,
	          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
	          'received %s at index %s.',
	          getPostfixForTypeWarning(checker),
	          i
	        );
	        return emptyFunction.thatReturnsNull;
	      }
	    }

	    function validate(props, propName, componentName, location, propFullName) {
	      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
	        var checker = arrayOfTypeCheckers[i];
	        if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {
	          return null;
	        }
	      }

	      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
	    }
	    return createChainableTypeChecker(validate);
	  }

	  function createNodeChecker() {
	    function validate(props, propName, componentName, location, propFullName) {
	      if (!isNode(props[propName])) {
	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
	      }
	      return null;
	    }
	    return createChainableTypeChecker(validate);
	  }

	  function createShapeTypeChecker(shapeTypes) {
	    function validate(props, propName, componentName, location, propFullName) {
	      var propValue = props[propName];
	      var propType = getPropType(propValue);
	      if (propType !== 'object') {
	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` 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, propFullName + '.' + key, ReactPropTypesSecret);
	        if (error) {
	          return error;
	        }
	      }
	      return null;
	    }
	    return createChainableTypeChecker(validate);
	  }

	  function createStrictShapeTypeChecker(shapeTypes) {
	    function validate(props, propName, componentName, location, propFullName) {
	      var propValue = props[propName];
	      var propType = getPropType(propValue);
	      if (propType !== 'object') {
	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
	      }
	      // We need to check all keys in case some are required but missing from
	      // props.
	      var allKeys = assign({}, props[propName], shapeTypes);
	      for (var key in allKeys) {
	        var checker = shapeTypes[key];
	        if (!checker) {
	          return new PropTypeError(
	            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
	            '\nBad object: ' + JSON.stringify(props[propName], null, '  ') +
	            '\nValid keys: ' +  JSON.stringify(Object.keys(shapeTypes), null, '  ')
	          );
	        }
	        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
	        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 || isValidElement(propValue)) {
	          return true;
	        }

	        var iteratorFn = getIteratorFn(propValue);
	        if (iteratorFn) {
	          var iterator = iteratorFn.call(propValue);
	          var step;
	          if (iteratorFn !== propValue.entries) {
	            while (!(step = iterator.next()).done) {
	              if (!isNode(step.value)) {
	                return false;
	              }
	            }
	          } else {
	            // Iterator will provide entry [k,v] tuples rather than values.
	            while (!(step = iterator.next()).done) {
	              var entry = step.value;
	              if (entry) {
	                if (!isNode(entry[1])) {
	                  return false;
	                }
	              }
	            }
	          }
	        } else {
	          return false;
	        }

	        return true;
	      default:
	        return false;
	    }
	  }

	  function isSymbol(propType, propValue) {
	    // Native Symbol.
	    if (propType === 'symbol') {
	      return true;
	    }

	    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
	    if (propValue['@@toStringTag'] === 'Symbol') {
	      return true;
	    }

	    // Fallback for non-spec compliant Symbols which are polyfilled.
	    if (typeof Symbol === 'function' && propValue instanceof Symbol) {
	      return true;
	    }

	    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';
	    }
	    if (isSymbol(propType, propValue)) {
	      return 'symbol';
	    }
	    return propType;
	  }

	  // This handles more types than `getPropType`. Only used for error messages.
	  // See `createPrimitiveTypeChecker`.
	  function getPreciseType(propValue) {
	    if (typeof propValue === 'undefined' || propValue === null) {
	      return '' + propValue;
	    }
	    var propType = getPropType(propValue);
	    if (propType === 'object') {
	      if (propValue instanceof Date) {
	        return 'date';
	      } else if (propValue instanceof RegExp) {
	        return 'regexp';
	      }
	    }
	    return propType;
	  }

	  // Returns a string that is postfixed to a warning about an invalid type.
	  // For example, "undefined" or "of type array"
	  function getPostfixForTypeWarning(value) {
	    var type = getPreciseType(value);
	    switch (type) {
	      case 'array':
	      case 'object':
	        return 'an ' + type;
	      case 'boolean':
	      case 'date':
	      case 'regexp':
	        return 'a ' + type;
	      default:
	        return type;
	    }
	  }

	  // Returns class name of the object, if any.
	  function getClassName(propValue) {
	    if (!propValue.constructor || !propValue.constructor.name) {
	      return ANONYMOUS;
	    }
	    return propValue.constructor.name;
	  }

	  ReactPropTypes.checkPropTypes = checkPropTypes;
	  ReactPropTypes.PropTypes = ReactPropTypes;

	  return ReactPropTypes;
	};


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

	"use strict";
	/*
	object-assign
	(c) Sindre Sorhus
	@license MIT
	*/


	/* eslint-disable no-unused-vars */
	var getOwnPropertySymbols = Object.getOwnPropertySymbols;
	var hasOwnProperty = Object.prototype.hasOwnProperty;
	var propIsEnumerable = Object.prototype.propertyIsEnumerable;

	function toObject(val) {
		if (val === null || val === undefined) {
			throw new TypeError('Object.assign cannot be called with null or undefined');
		}

		return Object(val);
	}

	function shouldUseNative() {
		try {
			if (!Object.assign) {
				return false;
			}

			// Detect buggy property enumeration order in older V8 versions.

			// https://bugs.chromium.org/p/v8/issues/detail?id=4118
			var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
			test1[5] = 'de';
			if (Object.getOwnPropertyNames(test1)[0] === '5') {
				return false;
			}

			// https://bugs.chromium.org/p/v8/issues/detail?id=3056
			var test2 = {};
			for (var i = 0; i < 10; i++) {
				test2['_' + String.fromCharCode(i)] = i;
			}
			var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
				return test2[n];
			});
			if (order2.join('') !== '0123456789') {
				return false;
			}

			// https://bugs.chromium.org/p/v8/issues/detail?id=3056
			var test3 = {};
			'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
				test3[letter] = letter;
			});
			if (Object.keys(Object.assign({}, test3)).join('') !==
					'abcdefghijklmnopqrst') {
				return false;
			}

			return true;
		} catch (err) {
			// We don't expect any of the above to throw, but better to be safe.
			return false;
		}
	}

	module.exports = shouldUseNative() ? Object.assign : function (target, source) {
		var from;
		var to = toObject(target);
		var symbols;

		for (var s = 1; s < arguments.length; s++) {
			from = Object(arguments[s]);

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

			if (getOwnPropertySymbols) {
				symbols = getOwnPropertySymbols(from);
				for (var i = 0; i < symbols.length; i++) {
					if (propIsEnumerable.call(from, symbols[i])) {
						to[symbols[i]] = from[symbols[i]];
					}
				}
			}
		}

		return to;
	};


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

	"use strict";
	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 */



	if (Object({"DRAGGABLE_DEBUG":undefined}).NODE_ENV !== 'production') {
	  var invariant = __webpack_require__(2);
	  var warning = __webpack_require__(8);
	  var ReactPropTypesSecret = __webpack_require__(3);
	  var loggedTypeFailures = {};
	}

	/**
	 * Assert that the values match with the type specs.
	 * Error messages are memorized and will only be shown once.
	 *
	 * @param {object} typeSpecs Map of name to a ReactPropType
	 * @param {object} values Runtime values that need to be type-checked
	 * @param {string} location e.g. "prop", "context", "child context"
	 * @param {string} componentName Name of the component for error messages.
	 * @param {?Function} getStack Returns the component stack.
	 * @private
	 */
	function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
	  if (Object({"DRAGGABLE_DEBUG":undefined}).NODE_ENV !== 'production') {
	    for (var typeSpecName in typeSpecs) {
	      if (typeSpecs.hasOwnProperty(typeSpecName)) {
	        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.
	          invariant(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]);
	          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
	        } catch (ex) {
	          error = ex;
	        }
	        warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error);
	        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 stack = getStack ? getStack() : '';

	          warning(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');
	        }
	      }
	    }
	  }
	}

	module.exports = checkPropTypes;


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

	"use strict";
	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 */



	var emptyFunction = __webpack_require__(1);
	var invariant = __webpack_require__(2);
	var ReactPropTypesSecret = __webpack_require__(3);

	module.exports = function() {
	  function shim(props, propName, componentName, location, propFullName, secret) {
	    if (secret === ReactPropTypesSecret) {
	      // It is still safe when called from React.
	      return;
	    }
	    invariant(
	      false,
	      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
	      'Use PropTypes.checkPropTypes() to call them. ' +
	      'Read more at http://fb.me/use-check-prop-types'
	    );
	  };
	  shim.isRequired = shim;
	  function getShim() {
	    return shim;
	  };
	  // Important!
	  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
	  var ReactPropTypes = {
	    array: shim,
	    bool: shim,
	    func: shim,
	    number: shim,
	    object: shim,
	    string: shim,
	    symbol: shim,

	    any: shim,
	    arrayOf: getShim,
	    element: shim,
	    instanceOf: getShim,
	    node: shim,
	    objectOf: getShim,
	    oneOf: getShim,
	    oneOfType: getShim,
	    shape: getShim,
	    exact: getShim
	  };

	  ReactPropTypes.checkPropTypes = emptyFunction;
	  ReactPropTypes.PropTypes = ReactPropTypes;

	  return ReactPropTypes;
	};


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

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	  Copyright (c) 2016 Jed Watson.
	  Licensed under the MIT License (MIT), see
	  http://jedwatson.github.io/classnames
	*/
	/* global define */

	(function () {
		'use strict';

		var hasOwn = {}.hasOwnProperty;

		function classNames () {
			var classes = [];

			for (var i = 0; i < arguments.length; i++) {
				var arg = arguments[i];
				if (!arg) continue;

				var argType = typeof arg;

				if (argType === 'string' || argType === 'number') {
					classes.push(arg);
				} else if (Array.isArray(arg)) {
					classes.push(classNames.apply(null, arg));
				} else if (argType === 'object') {
					for (var key in arg) {
						if (hasOwn.call(arg, key) && arg[key]) {
							classes.push(key);
						}
					}
				}
			}

			return classes.join(' ');
		}

		if (typeof module !== 'undefined' && module.exports) {
			module.exports = classNames;
		} else if (true) {
			// register as 'classnames', consistent with npm package name
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {
				return classNames;
			}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
					__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
			window.classNames = classNames;
		}
	}());


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

	"use strict";


	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.getPrefix = getPrefix;
	exports.browserPrefixToKey = browserPrefixToKey;
	exports.browserPrefixToStyle = browserPrefixToStyle;
	var prefixes = ['Moz', 'Webkit', 'O', 'ms'];
	function getPrefix() /*: string*/ {
	  var prop /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';

	  // Checking specifically for 'window.document' is for pseudo-browser server-side
	  // environments that define 'window' as the global context.
	  // E.g. React-rails (see https://github.com/reactjs/react-rails/pull/84)
	  if (typeof window === 'undefined' || typeof window.document === 'undefined') return '';

	  var style = window.document.documentElement.style;

	  if (prop in style) return '';

	  for (var i = 0; i < prefixes.length; i++) {
	    if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];
	  }

	  return '';
	}

	function browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: string*/ {
	  return prefix ? '' + prefix + kebabToTitleCase(prop) : prop;
	}

	function browserPrefixToStyle(prop /*: string*/, prefix /*: string*/) /*: string*/ {
	  return prefix ? '-' + prefix.toLowerCase() + '-' + prop : prop;
	}

	function kebabToTitleCase(str /*: string*/) /*: string*/ {
	  var out = '';
	  var shouldCapitalize = true;
	  for (var i = 0; i < str.length; i++) {
	    if (shouldCapitalize) {
	      out += str[i].toUpperCase();
	      shouldCapitalize = false;
	    } else if (str[i] === '-') {
	      shouldCapitalize = true;
	    } else {
	      out += str[i];
	    }
	  }
	  return out;
	}

	// Default export is the prefix itself, like 'Moz', 'Webkit', etc
	// Note that you may have to re-test for certain things; for instance, Chrome 50
	// can handle unprefixed `transform`, but not unprefixed `user-select`
	exports.default = getPrefix();

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

	// shim for using process in browser
	var process = module.exports = {};

	// cached from whatever global is present so that test runners that stub it
	// don't break things.  But we need to wrap it in a try catch in case it is
	// wrapped in strict mode code which doesn't define any globals.  It's inside a
	// function because try/catches deoptimize in certain engines.

	var cachedSetTimeout;
	var cachedClearTimeout;

	function defaultSetTimout() {
	    throw new Error('setTimeout has not been defined');
	}
	function defaultClearTimeout () {
	    throw new Error('clearTimeout has not been defined');
	}
	(function () {
	    try {
	        if (typeof setTimeout === 'function') {
	            cachedSetTimeout = setTimeout;
	        } else {
	            cachedSetTimeout = defaultSetTimout;
	        }
	    } catch (e) {
	        cachedSetTimeout = defaultSetTimout;
	    }
	    try {
	        if (typeof clearTimeout === 'function') {
	            cachedClearTimeout = clearTimeout;
	        } else {
	            cachedClearTimeout = defaultClearTimeout;
	        }
	    } catch (e) {
	        cachedClearTimeout = defaultClearTimeout;
	    }
	} ())
	function runTimeout(fun) {
	    if (cachedSetTimeout === setTimeout) {
	        //normal enviroments in sane situations
	        return setTimeout(fun, 0);
	    }
	    // if setTimeout wasn't available but was latter defined
	    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
	        cachedSetTimeout = setTimeout;
	        return setTimeout(fun, 0);
	    }
	    try {
	        // when when somebody has screwed with setTimeout but no I.E. maddness
	        return cachedSetTimeout(fun, 0);
	    } catch(e){
	        try {
	            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
	            return cachedSetTimeout.call(null, fun, 0);
	        } catch(e){
	            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
	            return cachedSetTimeout.call(this, fun, 0);
	        }
	    }


	}
	function runClearTimeout(marker) {
	    if (cachedClearTimeout === clearTimeout) {
	        //normal enviroments in sane situations
	        return clearTimeout(marker);
	    }
	    // if clearTimeout wasn't available but was latter defined
	    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
	        cachedClearTimeout = clearTimeout;
	        return clearTimeout(marker);
	    }
	    try {
	        // when when somebody has screwed with setTimeout but no I.E. maddness
	        return cachedClearTimeout(marker);
	    } catch (e){
	        try {
	            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
	            return cachedClearTimeout.call(null, marker);
	        } catch (e){
	            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
	            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
	            return cachedClearTimeout.call(this, marker);
	        }
	    }



	}
	var queue = [];
	var draining = false;
	var currentQueue;
	var queueIndex = -1;

	function cleanUpNextTick() {
	    if (!draining || !currentQueue) {
	        return;
	    }
	    draining = false;
	    if (currentQueue.length) {
	        queue = currentQueue.concat(queue);
	    } else {
	        queueIndex = -1;
	    }
	    if (queue.length) {
	        drainQueue();
	    }
	}

	function drainQueue() {
	    if (draining) {
	        return;
	    }
	    var timeout = runTimeout(cleanUpNextTick);
	    draining = true;

	    var len = queue.length;
	    while(len) {
	        currentQueue = queue;
	        queue = [];
	        while (++queueIndex < len) {
	            if (currentQueue) {
	                currentQueue[queueIndex].run();
	            }
	        }
	        queueIndex = -1;
	        len = queue.length;
	    }
	    currentQueue = null;
	    draining = false;
	    runClearTimeout(timeout);
	}

	process.nextTick = function (fun) {
	    var args = new Array(arguments.length - 1);
	    if (arguments.length > 1) {
	        for (var i = 1; i < arguments.length; i++) {
	            args[i - 1] = arguments[i];
	        }
	    }
	    queue.push(new Item(fun, args));
	    if (queue.length === 1 && !draining) {
	        runTimeout(drainQueue);
	    }
	};

	// v8 likes predictible objects
	function Item(fun, array) {
	    this.fun = fun;
	    this.array = array;
	}
	Item.prototype.run = function () {
	    this.fun.apply(null, this.array);
	};
	process.title = 'browser';
	process.browser = true;
	process.env = {};
	process.argv = [];
	process.version = ''; // empty string to avoid regexp issues
	process.versions = {};

	function noop() {}

	process.on = noop;
	process.addListener = noop;
	process.once = noop;
	process.off = noop;
	process.removeListener = noop;
	process.removeAllListeners = noop;
	process.emit = noop;
	process.prependListener = noop;
	process.prependOnceListener = noop;

	process.listeners = function (name) { return [] }

	process.binding = function (name) {
	    throw new Error('process.binding is not supported');
	};

	process.cwd = function () { return '/' };
	process.chdir = function (dir) {
	    throw new Error('process.chdir is not supported');
	};
	process.umask = function() { return 0; };


	/***/ })
	/******/ ]);
	});
	//# sourceMappingURL=react-draggable.js.map

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

	(function() { module.exports = this["ReactDOM"]; }());

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.default = transformTheme;

	var _chromaJs = __webpack_require__(335);

	var _chromaJs2 = _interopRequireDefault(_chromaJs);

	var _ramda = __webpack_require__(3);

	var R = _interopRequireWildcard(_ramda);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

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

	function transformTheme(theme) {
	    var computedTheme = {
	        accentBrighter: (0, _chromaJs2.default)(theme.accent).brighten().css(),
	        accentFaded: (0, _chromaJs2.default)(theme.accent).alpha(0.5).css(),
	        backgroundSecondaryDarker: (0, _chromaJs2.default)(theme.backgroundSecondary).darken().css(),
	        borderDarker: (0, _chromaJs2.default)(theme.border).darken().css(),
	        seeThroughBackground: (0, _chromaJs2.default)(theme.background).alpha(0.8).css()
	    };
	    var themeConstants = {
	        highlight: '#ffe8bc', // not accessible
	        highlightSecondary: '#007a87', // not accessible
	        overlay: 'rgba(0, 0, 0, 0.3)',
	        boxShadow: computedTheme.accentBrighter
	    };
	    var masterTheme = R.merge({
	        '--background': theme.background,
	        '--border': theme.border,
	        '--text': theme.text
	    }, theme);

	    if (theme.inputBorderStyle === 'underline' || true) {
	        masterTheme['--input-border-color'] = 'transparent';
	        masterTheme['--input-border-color'] = 'transparent';
	        masterTheme['--input-border-color'] = 'transparent';
	        masterTheme['--input-border-width'] = 0;
	        masterTheme['--input-border-radius'] = 0;
	    }
	    masterTheme['--button-border-radius'] = '4px';

	    return R.merge(masterTheme, {

	        /* global override */
	        '--disabled-text': theme.disabledText,
	        '--disabled-background': theme.disabledBackground,
	        '--button-shadow': theme.buttonShadow,

	        /* base */
	        // .button, button, input[type='submit'], input[type='reset'], input[type='button']
	        '--background-color-1-base': theme.background,

	        // .button.button-primary, button.button-primary, input[type='submit'].button-primary, input[type='reset'].button-primary, input[type='button'].button-primary
	        // .button.button-primary, button.button-primary, input[type='submit'].button-primary, input[type='reset'].button-primary, input[type='button'].button-primary
	        // input[type='email']:focus, input[type='number']:focus, input[type='search']:focus, input[type='text']:focus, input[type='tel']:focus, input[type='url']:focus, input[type='password']:focus, textarea:focus, select:focus
	        '--background-color-2-base': theme.accent,

	        // input:not([type]), input[type='email'], input[type='number'], input[type='search'], input[type='text'], input[type='tel'], input[type='url'], input[type='password'], textarea, select
	        '--background-color-3-base': theme.background,

	        // override
	        // input:disabled
	        '--background-color-4-base': theme.disabledBackground,

	        // th, td
	        // hr
	        '--border-bottom-color-1-base': theme.border,

	        // .button, button, input[type='submit'], input[type='reset'], input[type='button']
	        '--border-color-1-base': theme.border,

	        // .button:hover, button:hover, input[type='submit']:hover, input[type='reset']:hover, input[type='button']:hover, .button:focus, button:focus, input[type='submit']:focus, input[type='reset']:focus, input[type='button']:focus
	        '--border-color-2-base': theme.accent,

	        // input:not([type]), input[type='email'], input[type='number'], input[type='search'], input[type='text'], input[type='tel'], input[type='url'], input[type='password'], textarea, select
	        '--border-color-3-base': theme.border,

	        // blockquote
	        '--border-left-color-1-base': theme.border,

	        // body
	        '--color-1-base': theme.text,

	        // a
	        // .button.button-primary:hover, button.button-primary:hover, input[type='submit'].button-primary:hover, input[type='reset'].button-primary:hover, input[type='button'].button-primary:hover, .button.button-primary:focus, button.button-primary:focus, input[type='submit'].button-primary:focus, input[type='reset'].button-primary:focus, input[type='button'].button-primary:focus
	        // .button.button-primary:hover, button.button-primary:hover, input[type='submit'].button-primary:hover, input[type='reset'].button-primary:hover, input[type='button'].button-primary:hover, .button.button-primary:focus, button.button-primary:focus, input[type='submit'].button-primary:focus, input[type='reset'].button-primary:focus, input[type='button'].button-primary:focus
	        '--color-2-base': theme.accent,

	        // a:hover
	        '--color-3-base': theme.accent,

	        // .button, button, input[type='submit'], input[type='reset'], input[type='button']
	        '--color-4-base': theme.text,

	        // .button:hover, button:hover, input[type='submit']:hover, input[type='reset']:hover, input[type='button']:hover, .button:focus, button:focus, input[type='submit']:focus, input[type='reset']:focus, input[type='button']:focus
	        '--color-5-base': theme.accent,

	        // .button.button-primary, button.button-primary, input[type='submit'].button-primary, input[type='reset'].button-primary, input[type='button'].button-primary
	        // .button.button-primary:hover, button.button-primary:hover, input[type='submit'].button-primary:hover, input[type='reset'].button-primary:hover, input[type='button'].button-primary:hover, .button.button-primary:focus, button.button-primary:focus, input[type='submit'].button-primary:focus, input[type='reset'].button-primary:focus, input[type='button'].button-primary:focus
	        '--color-6-base': theme.text,

	        // override
	        // input:disabled
	        '--color-7-base': theme.disabledText,

	        // override
	        '--color-8-base': theme.accent,

	        /* rc-slider */
	        // .rc-slider-rail
	        // .rc-slider-dot
	        // .rc-slider-disabled
	        '--background-color-1-rc-slider': theme.backgroundSecondary,

	        // .rc-slider-track
	        '--background-color-2-rc-slider': theme.accent,

	        // .rc-slider-handle
	        // .rc-slider-dot
	        // .rc-slider-disabled .rc-slider-handle, .rc-slider-disabled .rc-slider-dot
	        // .rc-slider-tooltip-inner
	        '--background-color-3-rc-slider': theme.background,

	        // .rc-slider-step
	        // .rc-slider-tooltip-arrow
	        '--background-color-4-rc-slider': 'transparent',

	        // .rc-slider-disabled .rc-slider-track
	        // .rc-slider-disabled .rc-slider-handle, .rc-slider-disabled .rc-slider-dot
	        '--background-color-5-rc-slider': theme.disabled,

	        // .rc-slider-tooltip-inner
	        // .rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow
	        '--background-color-6-rc-slider': theme.backgroundSecondary,

	        // .rc-slider-handle
	        // .rc-slider-dot-active
	        '--border-color-1-rc-slider': theme.accent,

	        // .rc-slider-handle:hover
	        // .rc-slider-handle-active:active
	        // .rc-slider-handle-active:active
	        '--border-color-2-rc-slider': computedTheme.accentBrighter,

	        // .rc-slider-tooltip-inner
	        '--box-shadow-1-rc-slider': computedTheme.accentBrighter,

	        // .rc-slider-mark-text
	        '--color-1-rc-slider': theme.textSecondary,

	        // .rc-slider-mark-text-active
	        '--color-2-rc-slider': theme.text,

	        /* react-dates */
	        // .CalendarDay--highlighted-calendar
	        // NOTE - This isn't exposed in the date picker
	        '--background-color-1-react-dates': themeConstants.highlight,

	        // .CalendarDay--highlighted-calendar:active
	        // .CalendarDay--hovered-span, .CalendarDay--after-hovered-start
	        // .DateInput__display-text--focused
	        // TODO - Check this one
	        '--background-color-2-react-dates': theme.background,

	        // .CalendarDay--outside:active
	        // .CalendarDay--blocked-minimum-nights
	        // .CalendarDay--blocked-minimum-nights:active
	        // .CalendarDay--selected-span
	        // .CalendarDay--selected-start, .CalendarDay--selected-end, .CalendarDay--selected
	        // .CalendarDay--blocked-out-of-range
	        // .CalendarDay--blocked-out-of-range:active
	        // .CalendarMonthGrid
	        // .DayPicker
	        // .DayPicker--horizontal
	        // .DayPickerNavigation__prev--default, .DayPickerNavigation__next--default
	        // .DayPickerNavigation--vertical
	        // .DayPickerKeyboardShortcuts__show_span
	        // .DayPickerKeyboardShortcuts__panel
	        // .DateInput
	        // .DateInput--with-caret::after
	        // .DateRangePicker__picker
	        // .DateRangePicker__picker--full-screen-portal
	        // .DateRangePickerInput
	        // .SingleDatePicker__picker
	        // .SingleDatePicker__picker--full-screen-portal
	        // .SingleDatePickerInput
	        '--background-color-3-react-dates': theme.background,

	        // .CalendarDay--selected-span
	        // .CalendarDay--selected-span
	        // .CalendarDay--selected-span.CalendarDay--hovered, .CalendarDay--selected-span:active
	        '--background-color-4-react-dates': theme.background,

	        // .CalendarDay--selected-span.CalendarDay--hovered, .CalendarDay--selected-span:active
	        // .CalendarDay--selected-span.CalendarDay--last-in-range
	        // .CalendarDay--selected-start, .CalendarDay--selected-end, .CalendarDay--selected
	        // .CalendarDay--selected-start, .CalendarDay--selected-end, .CalendarDay--selected
	        // .CalendarDay--selected-start:active,   .CalendarDay--selected-end:active,   .CalendarDay--selected:active
	        // .DayPickerKeyboardShortcuts__show--bottom-right
	        // .DayPickerKeyboardShortcuts__show--top-right
	        // .DayPickerKeyboardShortcuts__show--top-left
	        '--background-color-5-react-dates': theme.background,

	        // .CalendarDay--hovered-span, .CalendarDay--after-hovered-start
	        '--background-color-6-react-dates': theme.background,

	        // .DayPicker--vertical-scrollable .DayPicker__week-header
	        '--background-color-7-react-dates': theme.background,

	        // .DayPickerNavigation__prev--default:active,   .DayPickerNavigation__next--default:active
	        // .KeyboardShortcutRow__key
	        '--background-color-8-react-dates': theme.background,

	        // .DateInput__display-text--focused
	        // .DateInput__display-text--focused
	        '--background-color-9-react-dates': theme.background,

	        // .DateRangePicker__picker--portal
	        // .SingleDatePicker__picker--portal
	        '--background-color-10-react-dates': themeConstants.overlay,

	        // override
	        // .CalendarDay--hovered
	        '--background-color-11-react-dates': theme.background,

	        // override
	        // .CalendarDay--selected-start .CalendarDay--selected-end .CalendarDay--selected
	        '--background-color-12-react-dates': theme.background,

	        // override
	        // .SingleDatePickerInput__clear-date:focus
	        // .SingleDatePickerInput__clear-date--hover
	        '--background-color-13-react-dates': theme.background,

	        // override
	        '--background-color-14-react-dates': computedTheme.seeThroughBackground,

	        // .DayPicker--vertical-scrollable .DayPicker__week-header
	        // .DayPickerKeyboardShortcuts__panel
	        // .DateRangePickerInput__clear-dates:focus, .DateRangePickerInput__clear-dates--hover
	        // .SingleDatePickerInput
	        // .SingleDatePickerInput__clear-date:focus, .SingleDatePickerInput__clear-date--hover
	        '--border-bottom-color-1-react-dates': theme.border,

	        // .CalendarDay
	        // .CalendarDay--hovered
	        // .CalendarDay--blocked-minimum-nights
	        // .CalendarDay--blocked-out-of-range
	        '--border-color-1-react-dates': theme.border,

	        // .CalendarDay--hovered
	        '--border-color-2-react-dates': theme.border,

	        // .CalendarDay--hovered-span, .CalendarDay--after-hovered-start
	        // .CalendarDay--hovered-span:active,   .CalendarDay--after-hovered-start:active
	        '--border-color-3-react-dates': theme.border,

	        // .DayPickerNavigation__prev--default, .DayPickerNavigation__next--default
	        '--border-color-4-react-dates': theme.border,

	        // .DayPickerNavigation__prev--default:focus, .DayPickerNavigation__prev--default:hover,   .DayPickerNavigation__next--default:focus,   .DayPickerNavigation__next--default:hover
	        '--border-color-5-react-dates': theme.border,

	        // override
	        // .CalendarDay--hovered
	        '--border-color-6-react-dates': theme.accent,

	        // override
	        // .CalendarDay--selected-start .CalendarDay--selected-end .CalendarDay--selected
	        '--border-color-7-react-dates': theme.accent,

	        // override
	        // .SingleDatePickerInput:hover
	        '--border-color-8-react-dates': theme.accent,

	        // override
	        // .DayPickerNavigation--horizontal .DayPickerNavigation__prev:hover,
	        // .DayPickerNavigation--horizontal .DayPickerNavigation__next:hover
	        '--border-color-9-react-dates': theme.accent,

	        // override
	        // .DateRangePickerInput
	        '--border-color-10-react-dates': theme.border,

	        // .DayPickerKeyboardShortcuts__show--bottom-right:hover
	        // .DayPickerKeyboardShortcuts__show--top-right:hover
	        // .DayPickerKeyboardShortcuts__show--top-left:hover
	        '--border-right-color-1-react-dates': theme.border,

	        // .DayPickerKeyboardShortcuts__show--bottom-right
	        // .DayPickerKeyboardShortcuts__show--top-right
	        // .DayPickerKeyboardShortcuts__show--top-left
	        // .DateInput--with-caret::before, .DateInput--with-caret::after
	        '--border-top-color-1-react-dates': theme.border,

	        // .DayPicker--horizontal
	        '--box-shadow-1-react-dates': '0 2px 6px rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.07)',

	        // .DayPicker--horizontal
	        '--box-shadow-2-react-dates': '0 2px 6px rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.07)',

	        // .DayPickerNavigation--vertical
	        // .DateInput--with-caret::before
	        '--box-shadow-3-react-dates': '0 2px 6px rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.07)',

	        // .CalendarDay
	        // .CalendarDay--highlighted-calendar
	        '--color-1-react-dates': theme.text,

	        // .CalendarDay--blocked-minimum-nights
	        // .CalendarDay--blocked-calendar
	        // .CalendarDay--blocked-calendar:active
	        // .CalendarDay--blocked-out-of-range
	        // .DayPickerKeyboardShortcuts__close svg
	        // .DateInput--disabled
	        // .DateRangePicker__close svg
	        // .DateRangePickerInput
	        // .DateRangePickerInput--disabled
	        // .SingleDatePicker__close svg
	        '--color-2-react-dates': theme.text,

	        // .CalendarDay--blocked-calendar
	        // .DayPickerNavigation--horizontal .DayPickerNavigation__prev--default svg,   .DayPickerNavigation--horizontal .DayPickerNavigation__next--default svg
	        // .DayPickerKeyboardShortcuts__close svg:hover, .DayPickerKeyboardShortcuts__close svg:focus
	        // .DateRangePickerInput__clear-dates svg
	        // .DateRangePickerInput__calendar-icon svg
	        // .SingleDatePickerInput__clear-date svg
	        // .SingleDatePickerInput__calendar-icon svg
	        '--color-3-react-dates': theme.text,

	        // .CalendarMonth__caption
	        '--color-4-react-dates': theme.text,

	        // .DayPicker__week-header
	        // .DayPickerNavigation__prev--default, .DayPickerNavigation__next--default
	        // .DateInput
	        '--color-5-react-dates': theme.text,

	        // .DateRangePicker__close:hover, .DateRangePicker__close:focus
	        // .SingleDatePicker__close:hover, .SingleDatePicker__close:focus
	        '--color-6-react-dates': theme.textSecondary,

	        // override
	        // .CalendarDay--hovered
	        '--color-7-react-dates': theme.accent,

	        // override
	        // .CalendarDay--selected-start .CalendarDay--selected-end .CalendarDay--selected
	        '--color-8-react-dates': theme.accent,

	        // override
	        // .DateInput__display-text--focused
	        '--color-9-react-dates': theme.text,

	        // override
	        // .DateInput__display-text--has-input
	        '--color-10-react-dates': theme.text,

	        // .DayPickerNavigation--vertical .DayPickerNavigation__prev--default svg,     .DayPickerNavigation--vertical .DayPickerNavigation__next--default svg
	        // .DateInput__display-text--has-input
	        // .DateRangePickerInput__arrow svg
	        '--fill-1-react-dates': theme.border,

	        /* react-select */
	        // .Select.is-disabled > .Select-control
	        '--background-color-1-react-select': theme.disabledBackground,

	        // .Select-control
	        // .is-open > .Select-control
	        // .Select-menu-outer
	        // .Select-option
	        '--background-color-2-react-select': theme.background,

	        // .Select-option.is-selected
	        '--background-color-3-react-select': theme.backgroundSecondary,

	        // .Select-option.is-focused
	        // .Select--multi .Select-value
	        '--background-color-4-react-select': computedTheme.background,

	        // .Select--multi .Select-value-icon:hover, .Select--multi .Select-value-icon:focus
	        '--background-color-5-react-select': theme.background,

	        // .Select--multi.is-disabled .Select-value
	        // .Select--multi.is-disabled .Select-value-icon:hover, .Select--multi.is-disabled .Select-value-icon:focus, .Select--multi.is-disabled .Select-value-icon:active
	        '--background-color-6-react-select': theme.disabledBackground,

	        // override
	        // .Select-input > input
	        '--background-color-7-react-select': theme.background,

	        // override
	        // .Select-input > input
	        '--background-color-8-react-select': theme.border,

	        // .Select-control
	        // .is-open > .Select-control
	        '--border-color-1-react-select': theme.border,

	        // .Select-control
	        // .Select-control
	        // .is-open > .Select-control
	        // .Select-loading
	        // .Select-menu-outer
	        '--border-color-2-react-select': theme.border,

	        // .Select-control
	        // .is-open > .Select-control
	        '--border-color-3-react-select': theme.border,

	        // ~.is-open > .Select-control .Select-arrow~
	        // ~.is-open > .Select-control .Select-arrow~
	        // ~.Select-arrow~
	        // ~.Select-arrow~
	        '--border-color-4-react-select': theme.transparent,

	        // .is-open > .Select-control .Select-arrow
	        // .Select-clear-zone
	        // .Select-arrow
	        '--border-color-5-react-select': theme.border,

	        // .is-focused:not(.is-open) > .Select-control
	        // .has-value.Select--single > .Select-control .Select-value a.Select-value-label:hover, .has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:hover, .has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus, .has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus
	        // ~.Select--multi .Select-value~
	        // ~.Select--multi a.Select-value-label~
	        '--border-color-6-react-select': theme.accent,

	        // .Select--multi .Select-value
	        // .Select--multi .Select-value-icon
	        // .Select--multi .Select-value-icon:active
	        '--border-color-7-react-select': theme.accent,

	        // .Select--multi.is-disabled .Select-value
	        // .Select--multi.is-disabled .Select-value-icon
	        '--border-color-8-react-select': theme.border,

	        // override
	        // .Select-control:hover
	        '--border-color-9-react-select': theme.accent,

	        // .is-open .Select-arrow, .Select-arrow-zone:hover > .Select-arrow
	        '--border-top-color-1-react-select': theme.border,

	        // .Select-menu-outer
	        '--border-top-color-2-react-select': theme.border,

	        // .Select-control:hover
	        // .Select-menu-outer
	        '--box-shadow-1-react-select': computedTheme.accentBrighter,

	        // .is-focused:not(.is-open) > .Select-control
	        '--box-shadow-2-react-select': computedTheme.accentBrighter,

	        // .is-focused:not(.is-open) > .Select-control
	        '--box-shadow-3-react-select': computedTheme.accentBrighter,

	        // .Select-control
	        // .has-value.Select--single > .Select-control .Select-value .Select-value-label, .has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label
	        // .Select-loading
	        // .Select-option.is-selected
	        // .Select-option.is-focused
	        // .Select--multi.is-disabled .Select-value
	        '--color-1-react-select': theme.text,

	        // .Select-placeholder, .Select--single > .Select-control .Select-value
	        '--color-2-react-select': theme.textSecondary,

	        // .Select-clear-zone:hover
	        '--color-3-react-select': theme.textSecondary,

	        // .Select-option
	        '--color-4-react-select': theme.text,

	        // .Select-option.is-disabled
	        '--color-5-react-select': theme.disabledText,

	        // .Select-noresults
	        '--color-6-react-select': theme.textSecondary,

	        // .Select--multi .Select-value-icon:hover, .Select--multi .Select-value-icon:focus
	        '--color-7-react-select': theme.accent,

	        // override
	        '--color-8-react-select': theme.text,

	        /* react-virtualized-select */
	        // .VirtualizedSelectFocusedOption
	        '--background-color-1-react-virtualized-select': theme.background,

	        // override
	        '--color-1-react-virtualized-select': theme.accent,

	        /* studio */
	        // .header
	        // .library
	        // .add-component.input
	        '--border-bottom-color-1-studio': theme.border,

	        // .add-component.input:hover
	        // .add-component:hover
	        // .container.selected.edit
	        '--border-bottom-color-2-studio': theme.accent,

	        // .container
	        '--border-color-1-studio': theme.border,

	        // .add-component
	        '--box-shadow-1-studio': computedTheme.accentBrighter

	    });
	}

/***/ }),
/* 340 */
/***/ (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 _reactColor = __webpack_require__(341);

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _ramda = __webpack_require__(3);

	var R = _interopRequireWildcard(_ramda);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 ColorTheme = function (_Component) {
	    _inherits(ColorTheme, _Component);

	    function ColorTheme() {
	        _classCallCheck(this, ColorTheme);

	        var _this = _possibleConstructorReturn(this, (ColorTheme.__proto__ || Object.getPrototypeOf(ColorTheme)).call(this));

	        _this.state = {};
	        return _this;
	    }

	    _createClass(ColorTheme, [{
	        key: 'render',
	        value: function render() {
	            var _this2 = this;

	            var _props = this.props,
	                theme = _props.theme,
	                setTheme = _props.setTheme;
	            var open = this.state.open;

	            return _react2.default.createElement(
	                'div',
	                null,
	                R.keys(theme).map(function (color) {
	                    var varColor = R.replace(/-/g, ' ', color);
	                    return _react2.default.createElement(
	                        'div',
	                        null,
	                        _react2.default.createElement(
	                            'div',
	                            {
	                                style: {
	                                    'cursor': 'pointer',
	                                    'width': '100%',
	                                    'marginBottom': 20
	                                }
	                            },
	                            _react2.default.createElement(
	                                'b',
	                                null,
	                                color
	                            ),
	                            _react2.default.createElement(
	                                'div',
	                                null,
	                                _react2.default.createElement('div', {
	                                    style: {
	                                        'backgroundColor': theme[color],
	                                        'width': '30px',
	                                        'height': '30px',
	                                        'display': 'inline',
	                                        'float': 'left',
	                                        'borderRadius': 2
	                                    },
	                                    onClick: function onClick() {
	                                        return _this2.setState({
	                                            open: open === color ? '' : color
	                                        });
	                                    }
	                                }),
	                                _react2.default.createElement(ControlledInput, {
	                                    type: 'text',
	                                    value: theme[color],
	                                    style: {
	                                        'height': '30px'
	                                    },
	                                    onBlur: function onBlur(newColor) {
	                                        return setTheme(R.set(R.lensProp(color), newColor, theme));
	                                    }
	                                })
	                            )
	                        ),
	                        !Boolean(open === color) ? null : _react2.default.createElement(
	                            'div',
	                            { style: {
	                                    'position': 'absolute',
	                                    'zIndex': '2',
	                                    'backgroundColor': 'var(--background)',
	                                    'padding': 5
	                                } },
	                            _react2.default.createElement(_reactColor.CompactPicker, {
	                                onChange: function onChange(newColor) {
	                                    return setTheme(R.set(R.lensProp(color), newColor.hex, theme));
	                                }
	                            })
	                        )
	                    );
	                })
	            );
	        }
	    }]);

	    return ColorTheme;
	}(_react.Component);

	exports.default = ColorTheme;

	var ControlledInput = function (_Component2) {
	    _inherits(ControlledInput, _Component2);

	    function ControlledInput() {
	        _classCallCheck(this, ControlledInput);

	        var _this3 = _possibleConstructorReturn(this, (ControlledInput.__proto__ || Object.getPrototypeOf(ControlledInput)).call(this));

	        _this3.state = {};
	        return _this3;
	    }

	    _createClass(ControlledInput, [{
	        key: 'componentWillMount',
	        value: function componentWillMount() {
	            this.setState({ value: this.props.value });
	        }
	    }, {
	        key: 'render',
	        value: function render() {
	            var _this4 = this;

	            var value = this.state.value;
	            var _props2 = this.props,
	                _onBlur = _props2.onBlur,
	                style = _props2.style;

	            return _react2.default.createElement('input', {
	                type: 'text',
	                value: value,
	                onChange: function onChange(e) {
	                    return _this4.setState({ value: e.target.value });
	                },
	                onBlur: function onBlur(e) {
	                    return _onBlur(e.target.value);
	                },
	                style: style
	            });
	        }
	    }]);

	    return ControlledInput;
	}(_react.Component);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.CustomPicker = exports.TwitterPicker = exports.SwatchesPicker = exports.SliderPicker = exports.SketchPicker = exports.PhotoshopPicker = exports.MaterialPicker = exports.HuePicker = exports.GithubPicker = exports.CompactPicker = exports.ChromePicker = exports.default = exports.CirclePicker = exports.BlockPicker = exports.AlphaPicker = undefined;

	var _Alpha = __webpack_require__(342);

	Object.defineProperty(exports, 'AlphaPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Alpha).default;
	  }
	});

	var _Block = __webpack_require__(530);

	Object.defineProperty(exports, 'BlockPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Block).default;
	  }
	});

	var _Circle = __webpack_require__(532);

	Object.defineProperty(exports, 'CirclePicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Circle).default;
	  }
	});

	var _Chrome = __webpack_require__(535);

	Object.defineProperty(exports, 'ChromePicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Chrome).default;
	  }
	});

	var _Compact = __webpack_require__(539);

	Object.defineProperty(exports, 'CompactPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Compact).default;
	  }
	});

	var _Github = __webpack_require__(542);

	Object.defineProperty(exports, 'GithubPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Github).default;
	  }
	});

	var _Hue = __webpack_require__(544);

	Object.defineProperty(exports, 'HuePicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Hue).default;
	  }
	});

	var _Material = __webpack_require__(546);

	Object.defineProperty(exports, 'MaterialPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Material).default;
	  }
	});

	var _Photoshop = __webpack_require__(547);

	Object.defineProperty(exports, 'PhotoshopPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Photoshop).default;
	  }
	});

	var _Sketch = __webpack_require__(553);

	Object.defineProperty(exports, 'SketchPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Sketch).default;
	  }
	});

	var _Slider = __webpack_require__(556);

	Object.defineProperty(exports, 'SliderPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Slider).default;
	  }
	});

	var _Swatches = __webpack_require__(560);

	Object.defineProperty(exports, 'SwatchesPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Swatches).default;
	  }
	});

	var _Twitter = __webpack_require__(563);

	Object.defineProperty(exports, 'TwitterPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Twitter).default;
	  }
	});

	var _ColorWrap = __webpack_require__(522);

	Object.defineProperty(exports, 'CustomPicker', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_ColorWrap).default;
	  }
	});

	var _Chrome2 = _interopRequireDefault(_Chrome);

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

	exports.default = _Chrome2.default;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.AlphaPicker = undefined;

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

	var _AlphaPointer = __webpack_require__(529);

	var _AlphaPointer2 = _interopRequireDefault(_AlphaPointer);

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

	var AlphaPicker = exports.AlphaPicker = function AlphaPicker(_ref) {
	  var rgb = _ref.rgb,
	      hsl = _ref.hsl,
	      width = _ref.width,
	      height = _ref.height,
	      onChange = _ref.onChange,
	      direction = _ref.direction,
	      style = _ref.style,
	      renderers = _ref.renderers,
	      pointer = _ref.pointer,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        position: 'relative',
	        width: width,
	        height: height
	      },
	      alpha: {
	        radius: '2px',
	        style: style
	      }
	    }
	  });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.picker, className: 'alpha-picker ' + className },
	    _react2.default.createElement(_common.Alpha, _extends({}, styles.alpha, {
	      rgb: rgb,
	      hsl: hsl,
	      pointer: pointer,
	      renderers: renderers,
	      onChange: onChange,
	      direction: direction
	    }))
	  );
	};

	AlphaPicker.defaultProps = {
	  width: '316px',
	  height: '16px',
	  direction: 'horizontal',
	  pointer: _AlphaPointer2.default
	};

	exports.default = (0, _common.ColorWrap)(AlphaPicker);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.ReactCSS = exports.loop = exports.handleActive = exports.handleHover = exports.hover = undefined;

	var _flattenNames = __webpack_require__(344);

	var _flattenNames2 = _interopRequireDefault(_flattenNames);

	var _mergeClasses = __webpack_require__(471);

	var _mergeClasses2 = _interopRequireDefault(_mergeClasses);

	var _autoprefix = __webpack_require__(503);

	var _autoprefix2 = _interopRequireDefault(_autoprefix);

	var _hover2 = __webpack_require__(504);

	var _hover3 = _interopRequireDefault(_hover2);

	var _active = __webpack_require__(505);

	var _active2 = _interopRequireDefault(_active);

	var _loop2 = __webpack_require__(506);

	var _loop3 = _interopRequireDefault(_loop2);

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

	exports.hover = _hover3.default;
	exports.handleHover = _hover3.default;
	exports.handleActive = _active2.default;
	exports.loop = _loop3.default;
	var ReactCSS = exports.ReactCSS = function ReactCSS(classes) {
	  for (var _len = arguments.length, activations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
	    activations[_key - 1] = arguments[_key];
	  }

	  var activeNames = (0, _flattenNames2.default)(activations);
	  var merged = (0, _mergeClasses2.default)(classes, activeNames);
	  return (0, _autoprefix2.default)(merged);
	};

	exports.default = ReactCSS;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.flattenNames = undefined;

	var _isString2 = __webpack_require__(345);

	var _isString3 = _interopRequireDefault(_isString2);

	var _forOwn2 = __webpack_require__(354);

	var _forOwn3 = _interopRequireDefault(_forOwn2);

	var _isPlainObject2 = __webpack_require__(380);

	var _isPlainObject3 = _interopRequireDefault(_isPlainObject2);

	var _map2 = __webpack_require__(382);

	var _map3 = _interopRequireDefault(_map2);

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

	var flattenNames = exports.flattenNames = function flattenNames() {
	  var things = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];

	  var names = [];

	  (0, _map3.default)(things, function (thing) {
	    if (Array.isArray(thing)) {
	      flattenNames(thing).map(function (name) {
	        return names.push(name);
	      });
	    } else if ((0, _isPlainObject3.default)(thing)) {
	      (0, _forOwn3.default)(thing, function (value, key) {
	        value === true && names.push(key);
	        names.push(key + '-' + value);
	      });
	    } else if ((0, _isString3.default)(thing)) {
	      names.push(thing);
	    }
	  });

	  return names;
	};

	exports.default = flattenNames;

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

	var baseGetTag = __webpack_require__(346),
	    isArray = __webpack_require__(352),
	    isObjectLike = __webpack_require__(353);

	/** `Object#toString` result references. */
	var stringTag = '[object String]';

	/**
	 * Checks if `value` is classified as a `String` primitive or object.
	 *
	 * @static
	 * @since 0.1.0
	 * @memberOf _
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a string, else `false`.
	 * @example
	 *
	 * _.isString('abc');
	 * // => true
	 *
	 * _.isString(1);
	 * // => false
	 */
	function isString(value) {
	  return typeof value == 'string' ||
	    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
	}

	module.exports = isString;


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

	var Symbol = __webpack_require__(347),
	    getRawTag = __webpack_require__(350),
	    objectToString = __webpack_require__(351);

	/** `Object#toString` result references. */
	var nullTag = '[object Null]',
	    undefinedTag = '[object Undefined]';

	/** Built-in value references. */
	var symToStringTag = Symbol ? Symbol.toStringTag : undefined;

	/**
	 * The base implementation of `getTag` without fallbacks for buggy environments.
	 *
	 * @private
	 * @param {*} value The value to query.
	 * @returns {string} Returns the `toStringTag`.
	 */
	function baseGetTag(value) {
	  if (value == null) {
	    return value === undefined ? undefinedTag : nullTag;
	  }
	  return (symToStringTag && symToStringTag in Object(value))
	    ? getRawTag(value)
	    : objectToString(value);
	}

	module.exports = baseGetTag;


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

	var root = __webpack_require__(348);

	/** Built-in value references. */
	var Symbol = root.Symbol;

	module.exports = Symbol;


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

	var freeGlobal = __webpack_require__(349);

	/** Detect free variable `self`. */
	var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

	/** Used as a reference to the global object. */
	var root = freeGlobal || freeSelf || Function('return this')();

	module.exports = root;


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

	/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
	var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

	module.exports = freeGlobal;

	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

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

	var Symbol = __webpack_require__(347);

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * Used to resolve the
	 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
	 * of values.
	 */
	var nativeObjectToString = objectProto.toString;

	/** Built-in value references. */
	var symToStringTag = Symbol ? Symbol.toStringTag : undefined;

	/**
	 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
	 *
	 * @private
	 * @param {*} value The value to query.
	 * @returns {string} Returns the raw `toStringTag`.
	 */
	function getRawTag(value) {
	  var isOwn = hasOwnProperty.call(value, symToStringTag),
	      tag = value[symToStringTag];

	  try {
	    value[symToStringTag] = undefined;
	    var unmasked = true;
	  } catch (e) {}

	  var result = nativeObjectToString.call(value);
	  if (unmasked) {
	    if (isOwn) {
	      value[symToStringTag] = tag;
	    } else {
	      delete value[symToStringTag];
	    }
	  }
	  return result;
	}

	module.exports = getRawTag;


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

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/**
	 * Used to resolve the
	 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
	 * of values.
	 */
	var nativeObjectToString = objectProto.toString;

	/**
	 * Converts `value` to a string using `Object.prototype.toString`.
	 *
	 * @private
	 * @param {*} value The value to convert.
	 * @returns {string} Returns the converted string.
	 */
	function objectToString(value) {
	  return nativeObjectToString.call(value);
	}

	module.exports = objectToString;


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

	/**
	 * Checks if `value` is classified as an `Array` object.
	 *
	 * @static
	 * @memberOf _
	 * @since 0.1.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
	 * @example
	 *
	 * _.isArray([1, 2, 3]);
	 * // => true
	 *
	 * _.isArray(document.body.children);
	 * // => false
	 *
	 * _.isArray('abc');
	 * // => false
	 *
	 * _.isArray(_.noop);
	 * // => false
	 */
	var isArray = Array.isArray;

	module.exports = isArray;


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

	/**
	 * Checks if `value` is object-like. A value is object-like if it's not `null`
	 * and has a `typeof` result of "object".
	 *
	 * @static
	 * @memberOf _
	 * @since 4.0.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
	 * @example
	 *
	 * _.isObjectLike({});
	 * // => true
	 *
	 * _.isObjectLike([1, 2, 3]);
	 * // => true
	 *
	 * _.isObjectLike(_.noop);
	 * // => false
	 *
	 * _.isObjectLike(null);
	 * // => false
	 */
	function isObjectLike(value) {
	  return value != null && typeof value == 'object';
	}

	module.exports = isObjectLike;


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

	var baseForOwn = __webpack_require__(355),
	    castFunction = __webpack_require__(378);

	/**
	 * Iterates over own enumerable string keyed properties of an object and
	 * invokes `iteratee` for each property. The iteratee is invoked with three
	 * arguments: (value, key, object). Iteratee functions may exit iteration
	 * early by explicitly returning `false`.
	 *
	 * @static
	 * @memberOf _
	 * @since 0.3.0
	 * @category Object
	 * @param {Object} object The object to iterate over.
	 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
	 * @returns {Object} Returns `object`.
	 * @see _.forOwnRight
	 * @example
	 *
	 * function Foo() {
	 *   this.a = 1;
	 *   this.b = 2;
	 * }
	 *
	 * Foo.prototype.c = 3;
	 *
	 * _.forOwn(new Foo, function(value, key) {
	 *   console.log(key);
	 * });
	 * // => Logs 'a' then 'b' (iteration order is not guaranteed).
	 */
	function forOwn(object, iteratee) {
	  return object && baseForOwn(object, castFunction(iteratee));
	}

	module.exports = forOwn;


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

	var baseFor = __webpack_require__(356),
	    keys = __webpack_require__(358);

	/**
	 * The base implementation of `_.forOwn` without support for iteratee shorthands.
	 *
	 * @private
	 * @param {Object} object The object to iterate over.
	 * @param {Function} iteratee The function invoked per iteration.
	 * @returns {Object} Returns `object`.
	 */
	function baseForOwn(object, iteratee) {
	  return object && baseFor(object, iteratee, keys);
	}

	module.exports = baseForOwn;


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

	var createBaseFor = __webpack_require__(357);

	/**
	 * The base implementation of `baseForOwn` which iterates over `object`
	 * properties returned by `keysFunc` and invokes `iteratee` for each property.
	 * Iteratee functions may exit iteration early by explicitly returning `false`.
	 *
	 * @private
	 * @param {Object} object The object to iterate over.
	 * @param {Function} iteratee The function invoked per iteration.
	 * @param {Function} keysFunc The function to get the keys of `object`.
	 * @returns {Object} Returns `object`.
	 */
	var baseFor = createBaseFor();

	module.exports = baseFor;


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

	/**
	 * Creates a base function for methods like `_.forIn` and `_.forOwn`.
	 *
	 * @private
	 * @param {boolean} [fromRight] Specify iterating from right to left.
	 * @returns {Function} Returns the new base function.
	 */
	function createBaseFor(fromRight) {
	  return function(object, iteratee, keysFunc) {
	    var index = -1,
	        iterable = Object(object),
	        props = keysFunc(object),
	        length = props.length;

	    while (length--) {
	      var key = props[fromRight ? length : ++index];
	      if (iteratee(iterable[key], key, iterable) === false) {
	        break;
	      }
	    }
	    return object;
	  };
	}

	module.exports = createBaseFor;


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

	var arrayLikeKeys = __webpack_require__(359),
	    baseKeys = __webpack_require__(371),
	    isArrayLike = __webpack_require__(375);

	/**
	 * Creates an array of the own enumerable property names of `object`.
	 *
	 * **Note:** Non-object values are coerced to objects. See the
	 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
	 * for more details.
	 *
	 * @static
	 * @since 0.1.0
	 * @memberOf _
	 * @category Object
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the array of property names.
	 * @example
	 *
	 * function Foo() {
	 *   this.a = 1;
	 *   this.b = 2;
	 * }
	 *
	 * Foo.prototype.c = 3;
	 *
	 * _.keys(new Foo);
	 * // => ['a', 'b'] (iteration order is not guaranteed)
	 *
	 * _.keys('hi');
	 * // => ['0', '1']
	 */
	function keys(object) {
	  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
	}

	module.exports = keys;


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

	var baseTimes = __webpack_require__(360),
	    isArguments = __webpack_require__(361),
	    isArray = __webpack_require__(352),
	    isBuffer = __webpack_require__(363),
	    isIndex = __webpack_require__(365),
	    isTypedArray = __webpack_require__(366);

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * Creates an array of the enumerable property names of the array-like `value`.
	 *
	 * @private
	 * @param {*} value The value to query.
	 * @param {boolean} inherited Specify returning inherited property names.
	 * @returns {Array} Returns the array of property names.
	 */
	function arrayLikeKeys(value, inherited) {
	  var isArr = isArray(value),
	      isArg = !isArr && isArguments(value),
	      isBuff = !isArr && !isArg && isBuffer(value),
	      isType = !isArr && !isArg && !isBuff && isTypedArray(value),
	      skipIndexes = isArr || isArg || isBuff || isType,
	      result = skipIndexes ? baseTimes(value.length, String) : [],
	      length = result.length;

	  for (var key in value) {
	    if ((inherited || hasOwnProperty.call(value, key)) &&
	        !(skipIndexes && (
	           // Safari 9 has enumerable `arguments.length` in strict mode.
	           key == 'length' ||
	           // Node.js 0.10 has enumerable non-index properties on buffers.
	           (isBuff && (key == 'offset' || key == 'parent')) ||
	           // PhantomJS 2 has enumerable non-index properties on typed arrays.
	           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
	           // Skip index properties.
	           isIndex(key, length)
	        ))) {
	      result.push(key);
	    }
	  }
	  return result;
	}

	module.exports = arrayLikeKeys;


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

	/**
	 * The base implementation of `_.times` without support for iteratee shorthands
	 * or max array length checks.
	 *
	 * @private
	 * @param {number} n The number of times to invoke `iteratee`.
	 * @param {Function} iteratee The function invoked per iteration.
	 * @returns {Array} Returns the array of results.
	 */
	function baseTimes(n, iteratee) {
	  var index = -1,
	      result = Array(n);

	  while (++index < n) {
	    result[index] = iteratee(index);
	  }
	  return result;
	}

	module.exports = baseTimes;


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

	var baseIsArguments = __webpack_require__(362),
	    isObjectLike = __webpack_require__(353);

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/** Built-in value references. */
	var propertyIsEnumerable = objectProto.propertyIsEnumerable;

	/**
	 * Checks if `value` is likely an `arguments` object.
	 *
	 * @static
	 * @memberOf _
	 * @since 0.1.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
	 *  else `false`.
	 * @example
	 *
	 * _.isArguments(function() { return arguments; }());
	 * // => true
	 *
	 * _.isArguments([1, 2, 3]);
	 * // => false
	 */
	var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
	  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
	    !propertyIsEnumerable.call(value, 'callee');
	};

	module.exports = isArguments;


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

	var baseGetTag = __webpack_require__(346),
	    isObjectLike = __webpack_require__(353);

	/** `Object#toString` result references. */
	var argsTag = '[object Arguments]';

	/**
	 * The base implementation of `_.isArguments`.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
	 */
	function baseIsArguments(value) {
	  return isObjectLike(value) && baseGetTag(value) == argsTag;
	}

	module.exports = baseIsArguments;


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

	/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(348),
	    stubFalse = __webpack_require__(364);

	/** Detect free variable `exports`. */
	var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

	/** Detect free variable `module`. */
	var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

	/** Detect the popular CommonJS extension `module.exports`. */
	var moduleExports = freeModule && freeModule.exports === freeExports;

	/** Built-in value references. */
	var Buffer = moduleExports ? root.Buffer : undefined;

	/* Built-in method references for those with the same name as other `lodash` methods. */
	var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;

	/**
	 * Checks if `value` is a buffer.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.3.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
	 * @example
	 *
	 * _.isBuffer(new Buffer(2));
	 * // => true
	 *
	 * _.isBuffer(new Uint8Array(2));
	 * // => false
	 */
	var isBuffer = nativeIsBuffer || stubFalse;

	module.exports = isBuffer;

	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(336)(module)))

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

	/**
	 * This method returns `false`.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.13.0
	 * @category Util
	 * @returns {boolean} Returns `false`.
	 * @example
	 *
	 * _.times(2, _.stubFalse);
	 * // => [false, false]
	 */
	function stubFalse() {
	  return false;
	}

	module.exports = stubFalse;


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

	/** Used as references for various `Number` constants. */
	var MAX_SAFE_INTEGER = 9007199254740991;

	/** Used to detect unsigned integer values. */
	var reIsUint = /^(?:0|[1-9]\d*)$/;

	/**
	 * Checks if `value` is a valid array-like index.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
	 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
	 */
	function isIndex(value, length) {
	  var type = typeof value;
	  length = length == null ? MAX_SAFE_INTEGER : length;

	  return !!length &&
	    (type == 'number' ||
	      (type != 'symbol' && reIsUint.test(value))) &&
	        (value > -1 && value % 1 == 0 && value < length);
	}

	module.exports = isIndex;


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

	var baseIsTypedArray = __webpack_require__(367),
	    baseUnary = __webpack_require__(369),
	    nodeUtil = __webpack_require__(370);

	/* Node.js helper references. */
	var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

	/**
	 * Checks if `value` is classified as a typed array.
	 *
	 * @static
	 * @memberOf _
	 * @since 3.0.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
	 * @example
	 *
	 * _.isTypedArray(new Uint8Array);
	 * // => true
	 *
	 * _.isTypedArray([]);
	 * // => false
	 */
	var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

	module.exports = isTypedArray;


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

	var baseGetTag = __webpack_require__(346),
	    isLength = __webpack_require__(368),
	    isObjectLike = __webpack_require__(353);

	/** `Object#toString` result references. */
	var argsTag = '[object Arguments]',
	    arrayTag = '[object Array]',
	    boolTag = '[object Boolean]',
	    dateTag = '[object Date]',
	    errorTag = '[object Error]',
	    funcTag = '[object Function]',
	    mapTag = '[object Map]',
	    numberTag = '[object Number]',
	    objectTag = '[object Object]',
	    regexpTag = '[object RegExp]',
	    setTag = '[object Set]',
	    stringTag = '[object String]',
	    weakMapTag = '[object WeakMap]';

	var arrayBufferTag = '[object ArrayBuffer]',
	    dataViewTag = '[object DataView]',
	    float32Tag = '[object Float32Array]',
	    float64Tag = '[object Float64Array]',
	    int8Tag = '[object Int8Array]',
	    int16Tag = '[object Int16Array]',
	    int32Tag = '[object Int32Array]',
	    uint8Tag = '[object Uint8Array]',
	    uint8ClampedTag = '[object Uint8ClampedArray]',
	    uint16Tag = '[object Uint16Array]',
	    uint32Tag = '[object Uint32Array]';

	/** Used to identify `toStringTag` values of typed arrays. */
	var typedArrayTags = {};
	typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
	typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
	typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
	typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
	typedArrayTags[uint32Tag] = true;
	typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
	typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
	typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
	typedArrayTags[errorTag] = typedArrayTags[funcTag] =
	typedArrayTags[mapTag] = typedArrayTags[numberTag] =
	typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
	typedArrayTags[setTag] = typedArrayTags[stringTag] =
	typedArrayTags[weakMapTag] = false;

	/**
	 * The base implementation of `_.isTypedArray` without Node.js optimizations.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
	 */
	function baseIsTypedArray(value) {
	  return isObjectLike(value) &&
	    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
	}

	module.exports = baseIsTypedArray;


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

	/** Used as references for various `Number` constants. */
	var MAX_SAFE_INTEGER = 9007199254740991;

	/**
	 * Checks if `value` is a valid array-like length.
	 *
	 * **Note:** This method is loosely based on
	 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
	 *
	 * @static
	 * @memberOf _
	 * @since 4.0.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
	 * @example
	 *
	 * _.isLength(3);
	 * // => true
	 *
	 * _.isLength(Number.MIN_VALUE);
	 * // => false
	 *
	 * _.isLength(Infinity);
	 * // => false
	 *
	 * _.isLength('3');
	 * // => false
	 */
	function isLength(value) {
	  return typeof value == 'number' &&
	    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
	}

	module.exports = isLength;


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

	/**
	 * The base implementation of `_.unary` without support for storing metadata.
	 *
	 * @private
	 * @param {Function} func The function to cap arguments for.
	 * @returns {Function} Returns the new capped function.
	 */
	function baseUnary(func) {
	  return function(value) {
	    return func(value);
	  };
	}

	module.exports = baseUnary;


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

	/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(349);

	/** Detect free variable `exports`. */
	var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

	/** Detect free variable `module`. */
	var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

	/** Detect the popular CommonJS extension `module.exports`. */
	var moduleExports = freeModule && freeModule.exports === freeExports;

	/** Detect free variable `process` from Node.js. */
	var freeProcess = moduleExports && freeGlobal.process;

	/** Used to access faster Node.js helpers. */
	var nodeUtil = (function() {
	  try {
	    return freeProcess && freeProcess.binding && freeProcess.binding('util');
	  } catch (e) {}
	}());

	module.exports = nodeUtil;

	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(336)(module)))

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

	var isPrototype = __webpack_require__(372),
	    nativeKeys = __webpack_require__(373);

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the array of property names.
	 */
	function baseKeys(object) {
	  if (!isPrototype(object)) {
	    return nativeKeys(object);
	  }
	  var result = [];
	  for (var key in Object(object)) {
	    if (hasOwnProperty.call(object, key) && key != 'constructor') {
	      result.push(key);
	    }
	  }
	  return result;
	}

	module.exports = baseKeys;


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

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/**
	 * Checks if `value` is likely a prototype object.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
	 */
	function isPrototype(value) {
	  var Ctor = value && value.constructor,
	      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

	  return value === proto;
	}

	module.exports = isPrototype;


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

	var overArg = __webpack_require__(374);

	/* Built-in method references for those with the same name as other `lodash` methods. */
	var nativeKeys = overArg(Object.keys, Object);

	module.exports = nativeKeys;


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

	/**
	 * Creates a unary function that invokes `func` with its argument transformed.
	 *
	 * @private
	 * @param {Function} func The function to wrap.
	 * @param {Function} transform The argument transform.
	 * @returns {Function} Returns the new function.
	 */
	function overArg(func, transform) {
	  return function(arg) {
	    return func(transform(arg));
	  };
	}

	module.exports = overArg;


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

	var isFunction = __webpack_require__(376),
	    isLength = __webpack_require__(368);

	/**
	 * Checks if `value` is array-like. A value is considered array-like if it's
	 * not a function and has a `value.length` that's an integer greater than or
	 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.0.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
	 * @example
	 *
	 * _.isArrayLike([1, 2, 3]);
	 * // => true
	 *
	 * _.isArrayLike(document.body.children);
	 * // => true
	 *
	 * _.isArrayLike('abc');
	 * // => true
	 *
	 * _.isArrayLike(_.noop);
	 * // => false
	 */
	function isArrayLike(value) {
	  return value != null && isLength(value.length) && !isFunction(value);
	}

	module.exports = isArrayLike;


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

	var baseGetTag = __webpack_require__(346),
	    isObject = __webpack_require__(377);

	/** `Object#toString` result references. */
	var asyncTag = '[object AsyncFunction]',
	    funcTag = '[object Function]',
	    genTag = '[object GeneratorFunction]',
	    proxyTag = '[object Proxy]';

	/**
	 * Checks if `value` is classified as a `Function` object.
	 *
	 * @static
	 * @memberOf _
	 * @since 0.1.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
	 * @example
	 *
	 * _.isFunction(_);
	 * // => true
	 *
	 * _.isFunction(/abc/);
	 * // => false
	 */
	function isFunction(value) {
	  if (!isObject(value)) {
	    return false;
	  }
	  // The use of `Object#toString` avoids issues with the `typeof` operator
	  // in Safari 9 which returns 'object' for typed arrays and other constructors.
	  var tag = baseGetTag(value);
	  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
	}

	module.exports = isFunction;


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

	/**
	 * Checks if `value` is the
	 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
	 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
	 *
	 * @static
	 * @memberOf _
	 * @since 0.1.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
	 * @example
	 *
	 * _.isObject({});
	 * // => true
	 *
	 * _.isObject([1, 2, 3]);
	 * // => true
	 *
	 * _.isObject(_.noop);
	 * // => true
	 *
	 * _.isObject(null);
	 * // => false
	 */
	function isObject(value) {
	  var type = typeof value;
	  return value != null && (type == 'object' || type == 'function');
	}

	module.exports = isObject;


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

	var identity = __webpack_require__(379);

	/**
	 * Casts `value` to `identity` if it's not a function.
	 *
	 * @private
	 * @param {*} value The value to inspect.
	 * @returns {Function} Returns cast function.
	 */
	function castFunction(value) {
	  return typeof value == 'function' ? value : identity;
	}

	module.exports = castFunction;


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

	/**
	 * This method returns the first argument it receives.
	 *
	 * @static
	 * @since 0.1.0
	 * @memberOf _
	 * @category Util
	 * @param {*} value Any value.
	 * @returns {*} Returns `value`.
	 * @example
	 *
	 * var object = { 'a': 1 };
	 *
	 * console.log(_.identity(object) === object);
	 * // => true
	 */
	function identity(value) {
	  return value;
	}

	module.exports = identity;


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

	var baseGetTag = __webpack_require__(346),
	    getPrototype = __webpack_require__(381),
	    isObjectLike = __webpack_require__(353);

	/** `Object#toString` result references. */
	var objectTag = '[object Object]';

	/** Used for built-in method references. */
	var funcProto = Function.prototype,
	    objectProto = Object.prototype;

	/** Used to resolve the decompiled source of functions. */
	var funcToString = funcProto.toString;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/** Used to infer the `Object` constructor. */
	var objectCtorString = funcToString.call(Object);

	/**
	 * Checks if `value` is a plain object, that is, an object created by the
	 * `Object` constructor or one with a `[[Prototype]]` of `null`.
	 *
	 * @static
	 * @memberOf _
	 * @since 0.8.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
	 * @example
	 *
	 * function Foo() {
	 *   this.a = 1;
	 * }
	 *
	 * _.isPlainObject(new Foo);
	 * // => false
	 *
	 * _.isPlainObject([1, 2, 3]);
	 * // => false
	 *
	 * _.isPlainObject({ 'x': 0, 'y': 0 });
	 * // => true
	 *
	 * _.isPlainObject(Object.create(null));
	 * // => true
	 */
	function isPlainObject(value) {
	  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
	    return false;
	  }
	  var proto = getPrototype(value);
	  if (proto === null) {
	    return true;
	  }
	  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
	  return typeof Ctor == 'function' && Ctor instanceof Ctor &&
	    funcToString.call(Ctor) == objectCtorString;
	}

	module.exports = isPlainObject;


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

	var overArg = __webpack_require__(374);

	/** Built-in value references. */
	var getPrototype = overArg(Object.getPrototypeOf, Object);

	module.exports = getPrototype;


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

	var arrayMap = __webpack_require__(383),
	    baseIteratee = __webpack_require__(384),
	    baseMap = __webpack_require__(468),
	    isArray = __webpack_require__(352);

	/**
	 * Creates an array of values by running each element in `collection` thru
	 * `iteratee`. The iteratee is invoked with three arguments:
	 * (value, index|key, collection).
	 *
	 * Many lodash methods are guarded to work as iteratees for methods like
	 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
	 *
	 * The guarded methods are:
	 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
	 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
	 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
	 * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
	 *
	 * @static
	 * @memberOf _
	 * @since 0.1.0
	 * @category Collection
	 * @param {Array|Object} collection The collection to iterate over.
	 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
	 * @returns {Array} Returns the new mapped array.
	 * @example
	 *
	 * function square(n) {
	 *   return n * n;
	 * }
	 *
	 * _.map([4, 8], square);
	 * // => [16, 64]
	 *
	 * _.map({ 'a': 4, 'b': 8 }, square);
	 * // => [16, 64] (iteration order is not guaranteed)
	 *
	 * var users = [
	 *   { 'user': 'barney' },
	 *   { 'user': 'fred' }
	 * ];
	 *
	 * // The `_.property` iteratee shorthand.
	 * _.map(users, 'user');
	 * // => ['barney', 'fred']
	 */
	function map(collection, iteratee) {
	  var func = isArray(collection) ? arrayMap : baseMap;
	  return func(collection, baseIteratee(iteratee, 3));
	}

	module.exports = map;


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

	/**
	 * A specialized version of `_.map` for arrays without support for iteratee
	 * shorthands.
	 *
	 * @private
	 * @param {Array} [array] The array to iterate over.
	 * @param {Function} iteratee The function invoked per iteration.
	 * @returns {Array} Returns the new mapped array.
	 */
	function arrayMap(array, iteratee) {
	  var index = -1,
	      length = array == null ? 0 : array.length,
	      result = Array(length);

	  while (++index < length) {
	    result[index] = iteratee(array[index], index, array);
	  }
	  return result;
	}

	module.exports = arrayMap;


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

	var baseMatches = __webpack_require__(385),
	    baseMatchesProperty = __webpack_require__(450),
	    identity = __webpack_require__(379),
	    isArray = __webpack_require__(352),
	    property = __webpack_require__(465);

	/**
	 * The base implementation of `_.iteratee`.
	 *
	 * @private
	 * @param {*} [value=_.identity] The value to convert to an iteratee.
	 * @returns {Function} Returns the iteratee.
	 */
	function baseIteratee(value) {
	  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
	  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
	  if (typeof value == 'function') {
	    return value;
	  }
	  if (value == null) {
	    return identity;
	  }
	  if (typeof value == 'object') {
	    return isArray(value)
	      ? baseMatchesProperty(value[0], value[1])
	      : baseMatches(value);
	  }
	  return property(value);
	}

	module.exports = baseIteratee;


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

	var baseIsMatch = __webpack_require__(386),
	    getMatchData = __webpack_require__(447),
	    matchesStrictComparable = __webpack_require__(449);

	/**
	 * The base implementation of `_.matches` which doesn't clone `source`.
	 *
	 * @private
	 * @param {Object} source The object of property values to match.
	 * @returns {Function} Returns the new spec function.
	 */
	function baseMatches(source) {
	  var matchData = getMatchData(source);
	  if (matchData.length == 1 && matchData[0][2]) {
	    return matchesStrictComparable(matchData[0][0], matchData[0][1]);
	  }
	  return function(object) {
	    return object === source || baseIsMatch(object, source, matchData);
	  };
	}

	module.exports = baseMatches;


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

	var Stack = __webpack_require__(387),
	    baseIsEqual = __webpack_require__(423);

	/** Used to compose bitmasks for value comparisons. */
	var COMPARE_PARTIAL_FLAG = 1,
	    COMPARE_UNORDERED_FLAG = 2;

	/**
	 * The base implementation of `_.isMatch` without support for iteratee shorthands.
	 *
	 * @private
	 * @param {Object} object The object to inspect.
	 * @param {Object} source The object of property values to match.
	 * @param {Array} matchData The property names, values, and compare flags to match.
	 * @param {Function} [customizer] The function to customize comparisons.
	 * @returns {boolean} Returns `true` if `object` is a match, else `false`.
	 */
	function baseIsMatch(object, source, matchData, customizer) {
	  var index = matchData.length,
	      length = index,
	      noCustomizer = !customizer;

	  if (object == null) {
	    return !length;
	  }
	  object = Object(object);
	  while (index--) {
	    var data = matchData[index];
	    if ((noCustomizer && data[2])
	          ? data[1] !== object[data[0]]
	          : !(data[0] in object)
	        ) {
	      return false;
	    }
	  }
	  while (++index < length) {
	    data = matchData[index];
	    var key = data[0],
	        objValue = object[key],
	        srcValue = data[1];

	    if (noCustomizer && data[2]) {
	      if (objValue === undefined && !(key in object)) {
	        return false;
	      }
	    } else {
	      var stack = new Stack;
	      if (customizer) {
	        var result = customizer(objValue, srcValue, key, object, source, stack);
	      }
	      if (!(result === undefined
	            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
	            : result
	          )) {
	        return false;
	      }
	    }
	  }
	  return true;
	}

	module.exports = baseIsMatch;


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

	var ListCache = __webpack_require__(388),
	    stackClear = __webpack_require__(396),
	    stackDelete = __webpack_require__(397),
	    stackGet = __webpack_require__(398),
	    stackHas = __webpack_require__(399),
	    stackSet = __webpack_require__(400);

	/**
	 * Creates a stack cache object to store key-value pairs.
	 *
	 * @private
	 * @constructor
	 * @param {Array} [entries] The key-value pairs to cache.
	 */
	function Stack(entries) {
	  var data = this.__data__ = new ListCache(entries);
	  this.size = data.size;
	}

	// Add methods to `Stack`.
	Stack.prototype.clear = stackClear;
	Stack.prototype['delete'] = stackDelete;
	Stack.prototype.get = stackGet;
	Stack.prototype.has = stackHas;
	Stack.prototype.set = stackSet;

	module.exports = Stack;


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

	var listCacheClear = __webpack_require__(389),
	    listCacheDelete = __webpack_require__(390),
	    listCacheGet = __webpack_require__(393),
	    listCacheHas = __webpack_require__(394),
	    listCacheSet = __webpack_require__(395);

	/**
	 * Creates an list cache object.
	 *
	 * @private
	 * @constructor
	 * @param {Array} [entries] The key-value pairs to cache.
	 */
	function ListCache(entries) {
	  var index = -1,
	      length = entries == null ? 0 : entries.length;

	  this.clear();
	  while (++index < length) {
	    var entry = entries[index];
	    this.set(entry[0], entry[1]);
	  }
	}

	// Add methods to `ListCache`.
	ListCache.prototype.clear = listCacheClear;
	ListCache.prototype['delete'] = listCacheDelete;
	ListCache.prototype.get = listCacheGet;
	ListCache.prototype.has = listCacheHas;
	ListCache.prototype.set = listCacheSet;

	module.exports = ListCache;


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

	/**
	 * Removes all key-value entries from the list cache.
	 *
	 * @private
	 * @name clear
	 * @memberOf ListCache
	 */
	function listCacheClear() {
	  this.__data__ = [];
	  this.size = 0;
	}

	module.exports = listCacheClear;


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

	var assocIndexOf = __webpack_require__(391);

	/** Used for built-in method references. */
	var arrayProto = Array.prototype;

	/** Built-in value references. */
	var splice = arrayProto.splice;

	/**
	 * Removes `key` and its value from the list cache.
	 *
	 * @private
	 * @name delete
	 * @memberOf ListCache
	 * @param {string} key The key of the value to remove.
	 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
	 */
	function listCacheDelete(key) {
	  var data = this.__data__,
	      index = assocIndexOf(data, key);

	  if (index < 0) {
	    return false;
	  }
	  var lastIndex = data.length - 1;
	  if (index == lastIndex) {
	    data.pop();
	  } else {
	    splice.call(data, index, 1);
	  }
	  --this.size;
	  return true;
	}

	module.exports = listCacheDelete;


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

	var eq = __webpack_require__(392);

	/**
	 * Gets the index at which the `key` is found in `array` of key-value pairs.
	 *
	 * @private
	 * @param {Array} array The array to inspect.
	 * @param {*} key The key to search for.
	 * @returns {number} Returns the index of the matched value, else `-1`.
	 */
	function assocIndexOf(array, key) {
	  var length = array.length;
	  while (length--) {
	    if (eq(array[length][0], key)) {
	      return length;
	    }
	  }
	  return -1;
	}

	module.exports = assocIndexOf;


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

	/**
	 * Performs a
	 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
	 * comparison between two values to determine if they are equivalent.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.0.0
	 * @category Lang
	 * @param {*} value The value to compare.
	 * @param {*} other The other value to compare.
	 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
	 * @example
	 *
	 * var object = { 'a': 1 };
	 * var other = { 'a': 1 };
	 *
	 * _.eq(object, object);
	 * // => true
	 *
	 * _.eq(object, other);
	 * // => false
	 *
	 * _.eq('a', 'a');
	 * // => true
	 *
	 * _.eq('a', Object('a'));
	 * // => false
	 *
	 * _.eq(NaN, NaN);
	 * // => true
	 */
	function eq(value, other) {
	  return value === other || (value !== value && other !== other);
	}

	module.exports = eq;


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

	var assocIndexOf = __webpack_require__(391);

	/**
	 * Gets the list cache value for `key`.
	 *
	 * @private
	 * @name get
	 * @memberOf ListCache
	 * @param {string} key The key of the value to get.
	 * @returns {*} Returns the entry value.
	 */
	function listCacheGet(key) {
	  var data = this.__data__,
	      index = assocIndexOf(data, key);

	  return index < 0 ? undefined : data[index][1];
	}

	module.exports = listCacheGet;


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

	var assocIndexOf = __webpack_require__(391);

	/**
	 * Checks if a list cache value for `key` exists.
	 *
	 * @private
	 * @name has
	 * @memberOf ListCache
	 * @param {string} key The key of the entry to check.
	 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
	 */
	function listCacheHas(key) {
	  return assocIndexOf(this.__data__, key) > -1;
	}

	module.exports = listCacheHas;


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

	var assocIndexOf = __webpack_require__(391);

	/**
	 * Sets the list cache `key` to `value`.
	 *
	 * @private
	 * @name set
	 * @memberOf ListCache
	 * @param {string} key The key of the value to set.
	 * @param {*} value The value to set.
	 * @returns {Object} Returns the list cache instance.
	 */
	function listCacheSet(key, value) {
	  var data = this.__data__,
	      index = assocIndexOf(data, key);

	  if (index < 0) {
	    ++this.size;
	    data.push([key, value]);
	  } else {
	    data[index][1] = value;
	  }
	  return this;
	}

	module.exports = listCacheSet;


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

	var ListCache = __webpack_require__(388);

	/**
	 * Removes all key-value entries from the stack.
	 *
	 * @private
	 * @name clear
	 * @memberOf Stack
	 */
	function stackClear() {
	  this.__data__ = new ListCache;
	  this.size = 0;
	}

	module.exports = stackClear;


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

	/**
	 * Removes `key` and its value from the stack.
	 *
	 * @private
	 * @name delete
	 * @memberOf Stack
	 * @param {string} key The key of the value to remove.
	 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
	 */
	function stackDelete(key) {
	  var data = this.__data__,
	      result = data['delete'](key);

	  this.size = data.size;
	  return result;
	}

	module.exports = stackDelete;


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

	/**
	 * Gets the stack value for `key`.
	 *
	 * @private
	 * @name get
	 * @memberOf Stack
	 * @param {string} key The key of the value to get.
	 * @returns {*} Returns the entry value.
	 */
	function stackGet(key) {
	  return this.__data__.get(key);
	}

	module.exports = stackGet;


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

	/**
	 * Checks if a stack value for `key` exists.
	 *
	 * @private
	 * @name has
	 * @memberOf Stack
	 * @param {string} key The key of the entry to check.
	 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
	 */
	function stackHas(key) {
	  return this.__data__.has(key);
	}

	module.exports = stackHas;


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

	var ListCache = __webpack_require__(388),
	    Map = __webpack_require__(401),
	    MapCache = __webpack_require__(408);

	/** Used as the size to enable large array optimizations. */
	var LARGE_ARRAY_SIZE = 200;

	/**
	 * Sets the stack `key` to `value`.
	 *
	 * @private
	 * @name set
	 * @memberOf Stack
	 * @param {string} key The key of the value to set.
	 * @param {*} value The value to set.
	 * @returns {Object} Returns the stack cache instance.
	 */
	function stackSet(key, value) {
	  var data = this.__data__;
	  if (data instanceof ListCache) {
	    var pairs = data.__data__;
	    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
	      pairs.push([key, value]);
	      this.size = ++data.size;
	      return this;
	    }
	    data = this.__data__ = new MapCache(pairs);
	  }
	  data.set(key, value);
	  this.size = data.size;
	  return this;
	}

	module.exports = stackSet;


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

	var getNative = __webpack_require__(402),
	    root = __webpack_require__(348);

	/* Built-in method references that are verified to be native. */
	var Map = getNative(root, 'Map');

	module.exports = Map;


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

	var baseIsNative = __webpack_require__(403),
	    getValue = __webpack_require__(407);

	/**
	 * Gets the native function at `key` of `object`.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @param {string} key The key of the method to get.
	 * @returns {*} Returns the function if it's native, else `undefined`.
	 */
	function getNative(object, key) {
	  var value = getValue(object, key);
	  return baseIsNative(value) ? value : undefined;
	}

	module.exports = getNative;


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

	var isFunction = __webpack_require__(376),
	    isMasked = __webpack_require__(404),
	    isObject = __webpack_require__(377),
	    toSource = __webpack_require__(406);

	/**
	 * Used to match `RegExp`
	 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
	 */
	var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;

	/** Used to detect host constructors (Safari). */
	var reIsHostCtor = /^\[object .+?Constructor\]$/;

	/** Used for built-in method references. */
	var funcProto = Function.prototype,
	    objectProto = Object.prototype;

	/** Used to resolve the decompiled source of functions. */
	var funcToString = funcProto.toString;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/** Used to detect if a method is native. */
	var reIsNative = RegExp('^' +
	  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
	  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
	);

	/**
	 * The base implementation of `_.isNative` without bad shim checks.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a native function,
	 *  else `false`.
	 */
	function baseIsNative(value) {
	  if (!isObject(value) || isMasked(value)) {
	    return false;
	  }
	  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
	  return pattern.test(toSource(value));
	}

	module.exports = baseIsNative;


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

	var coreJsData = __webpack_require__(405);

	/** Used to detect methods masquerading as native. */
	var maskSrcKey = (function() {
	  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
	  return uid ? ('Symbol(src)_1.' + uid) : '';
	}());

	/**
	 * Checks if `func` has its source masked.
	 *
	 * @private
	 * @param {Function} func The function to check.
	 * @returns {boolean} Returns `true` if `func` is masked, else `false`.
	 */
	function isMasked(func) {
	  return !!maskSrcKey && (maskSrcKey in func);
	}

	module.exports = isMasked;


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

	var root = __webpack_require__(348);

	/** Used to detect overreaching core-js shims. */
	var coreJsData = root['__core-js_shared__'];

	module.exports = coreJsData;


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

	/** Used for built-in method references. */
	var funcProto = Function.prototype;

	/** Used to resolve the decompiled source of functions. */
	var funcToString = funcProto.toString;

	/**
	 * Converts `func` to its source code.
	 *
	 * @private
	 * @param {Function} func The function to convert.
	 * @returns {string} Returns the source code.
	 */
	function toSource(func) {
	  if (func != null) {
	    try {
	      return funcToString.call(func);
	    } catch (e) {}
	    try {
	      return (func + '');
	    } catch (e) {}
	  }
	  return '';
	}

	module.exports = toSource;


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

	/**
	 * Gets the value at `key` of `object`.
	 *
	 * @private
	 * @param {Object} [object] The object to query.
	 * @param {string} key The key of the property to get.
	 * @returns {*} Returns the property value.
	 */
	function getValue(object, key) {
	  return object == null ? undefined : object[key];
	}

	module.exports = getValue;


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

	var mapCacheClear = __webpack_require__(409),
	    mapCacheDelete = __webpack_require__(417),
	    mapCacheGet = __webpack_require__(420),
	    mapCacheHas = __webpack_require__(421),
	    mapCacheSet = __webpack_require__(422);

	/**
	 * Creates a map cache object to store key-value pairs.
	 *
	 * @private
	 * @constructor
	 * @param {Array} [entries] The key-value pairs to cache.
	 */
	function MapCache(entries) {
	  var index = -1,
	      length = entries == null ? 0 : entries.length;

	  this.clear();
	  while (++index < length) {
	    var entry = entries[index];
	    this.set(entry[0], entry[1]);
	  }
	}

	// Add methods to `MapCache`.
	MapCache.prototype.clear = mapCacheClear;
	MapCache.prototype['delete'] = mapCacheDelete;
	MapCache.prototype.get = mapCacheGet;
	MapCache.prototype.has = mapCacheHas;
	MapCache.prototype.set = mapCacheSet;

	module.exports = MapCache;


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

	var Hash = __webpack_require__(410),
	    ListCache = __webpack_require__(388),
	    Map = __webpack_require__(401);

	/**
	 * Removes all key-value entries from the map.
	 *
	 * @private
	 * @name clear
	 * @memberOf MapCache
	 */
	function mapCacheClear() {
	  this.size = 0;
	  this.__data__ = {
	    'hash': new Hash,
	    'map': new (Map || ListCache),
	    'string': new Hash
	  };
	}

	module.exports = mapCacheClear;


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

	var hashClear = __webpack_require__(411),
	    hashDelete = __webpack_require__(413),
	    hashGet = __webpack_require__(414),
	    hashHas = __webpack_require__(415),
	    hashSet = __webpack_require__(416);

	/**
	 * Creates a hash object.
	 *
	 * @private
	 * @constructor
	 * @param {Array} [entries] The key-value pairs to cache.
	 */
	function Hash(entries) {
	  var index = -1,
	      length = entries == null ? 0 : entries.length;

	  this.clear();
	  while (++index < length) {
	    var entry = entries[index];
	    this.set(entry[0], entry[1]);
	  }
	}

	// Add methods to `Hash`.
	Hash.prototype.clear = hashClear;
	Hash.prototype['delete'] = hashDelete;
	Hash.prototype.get = hashGet;
	Hash.prototype.has = hashHas;
	Hash.prototype.set = hashSet;

	module.exports = Hash;


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

	var nativeCreate = __webpack_require__(412);

	/**
	 * Removes all key-value entries from the hash.
	 *
	 * @private
	 * @name clear
	 * @memberOf Hash
	 */
	function hashClear() {
	  this.__data__ = nativeCreate ? nativeCreate(null) : {};
	  this.size = 0;
	}

	module.exports = hashClear;


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

	var getNative = __webpack_require__(402);

	/* Built-in method references that are verified to be native. */
	var nativeCreate = getNative(Object, 'create');

	module.exports = nativeCreate;


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

	/**
	 * Removes `key` and its value from the hash.
	 *
	 * @private
	 * @name delete
	 * @memberOf Hash
	 * @param {Object} hash The hash to modify.
	 * @param {string} key The key of the value to remove.
	 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
	 */
	function hashDelete(key) {
	  var result = this.has(key) && delete this.__data__[key];
	  this.size -= result ? 1 : 0;
	  return result;
	}

	module.exports = hashDelete;


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

	var nativeCreate = __webpack_require__(412);

	/** Used to stand-in for `undefined` hash values. */
	var HASH_UNDEFINED = '__lodash_hash_undefined__';

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * Gets the hash value for `key`.
	 *
	 * @private
	 * @name get
	 * @memberOf Hash
	 * @param {string} key The key of the value to get.
	 * @returns {*} Returns the entry value.
	 */
	function hashGet(key) {
	  var data = this.__data__;
	  if (nativeCreate) {
	    var result = data[key];
	    return result === HASH_UNDEFINED ? undefined : result;
	  }
	  return hasOwnProperty.call(data, key) ? data[key] : undefined;
	}

	module.exports = hashGet;


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

	var nativeCreate = __webpack_require__(412);

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * Checks if a hash value for `key` exists.
	 *
	 * @private
	 * @name has
	 * @memberOf Hash
	 * @param {string} key The key of the entry to check.
	 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
	 */
	function hashHas(key) {
	  var data = this.__data__;
	  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
	}

	module.exports = hashHas;


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

	var nativeCreate = __webpack_require__(412);

	/** Used to stand-in for `undefined` hash values. */
	var HASH_UNDEFINED = '__lodash_hash_undefined__';

	/**
	 * Sets the hash `key` to `value`.
	 *
	 * @private
	 * @name set
	 * @memberOf Hash
	 * @param {string} key The key of the value to set.
	 * @param {*} value The value to set.
	 * @returns {Object} Returns the hash instance.
	 */
	function hashSet(key, value) {
	  var data = this.__data__;
	  this.size += this.has(key) ? 0 : 1;
	  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
	  return this;
	}

	module.exports = hashSet;


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

	var getMapData = __webpack_require__(418);

	/**
	 * Removes `key` and its value from the map.
	 *
	 * @private
	 * @name delete
	 * @memberOf MapCache
	 * @param {string} key The key of the value to remove.
	 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
	 */
	function mapCacheDelete(key) {
	  var result = getMapData(this, key)['delete'](key);
	  this.size -= result ? 1 : 0;
	  return result;
	}

	module.exports = mapCacheDelete;


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

	var isKeyable = __webpack_require__(419);

	/**
	 * Gets the data for `map`.
	 *
	 * @private
	 * @param {Object} map The map to query.
	 * @param {string} key The reference key.
	 * @returns {*} Returns the map data.
	 */
	function getMapData(map, key) {
	  var data = map.__data__;
	  return isKeyable(key)
	    ? data[typeof key == 'string' ? 'string' : 'hash']
	    : data.map;
	}

	module.exports = getMapData;


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

	/**
	 * Checks if `value` is suitable for use as unique object key.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
	 */
	function isKeyable(value) {
	  var type = typeof value;
	  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
	    ? (value !== '__proto__')
	    : (value === null);
	}

	module.exports = isKeyable;


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

	var getMapData = __webpack_require__(418);

	/**
	 * Gets the map value for `key`.
	 *
	 * @private
	 * @name get
	 * @memberOf MapCache
	 * @param {string} key The key of the value to get.
	 * @returns {*} Returns the entry value.
	 */
	function mapCacheGet(key) {
	  return getMapData(this, key).get(key);
	}

	module.exports = mapCacheGet;


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

	var getMapData = __webpack_require__(418);

	/**
	 * Checks if a map value for `key` exists.
	 *
	 * @private
	 * @name has
	 * @memberOf MapCache
	 * @param {string} key The key of the entry to check.
	 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
	 */
	function mapCacheHas(key) {
	  return getMapData(this, key).has(key);
	}

	module.exports = mapCacheHas;


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

	var getMapData = __webpack_require__(418);

	/**
	 * Sets the map `key` to `value`.
	 *
	 * @private
	 * @name set
	 * @memberOf MapCache
	 * @param {string} key The key of the value to set.
	 * @param {*} value The value to set.
	 * @returns {Object} Returns the map cache instance.
	 */
	function mapCacheSet(key, value) {
	  var data = getMapData(this, key),
	      size = data.size;

	  data.set(key, value);
	  this.size += data.size == size ? 0 : 1;
	  return this;
	}

	module.exports = mapCacheSet;


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

	var baseIsEqualDeep = __webpack_require__(424),
	    isObjectLike = __webpack_require__(353);

	/**
	 * The base implementation of `_.isEqual` which supports partial comparisons
	 * and tracks traversed objects.
	 *
	 * @private
	 * @param {*} value The value to compare.
	 * @param {*} other The other value to compare.
	 * @param {boolean} bitmask The bitmask flags.
	 *  1 - Unordered comparison
	 *  2 - Partial comparison
	 * @param {Function} [customizer] The function to customize comparisons.
	 * @param {Object} [stack] Tracks traversed `value` and `other` objects.
	 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
	 */
	function baseIsEqual(value, other, bitmask, customizer, stack) {
	  if (value === other) {
	    return true;
	  }
	  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
	    return value !== value && other !== other;
	  }
	  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
	}

	module.exports = baseIsEqual;


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

	var Stack = __webpack_require__(387),
	    equalArrays = __webpack_require__(425),
	    equalByTag = __webpack_require__(431),
	    equalObjects = __webpack_require__(435),
	    getTag = __webpack_require__(442),
	    isArray = __webpack_require__(352),
	    isBuffer = __webpack_require__(363),
	    isTypedArray = __webpack_require__(366);

	/** Used to compose bitmasks for value comparisons. */
	var COMPARE_PARTIAL_FLAG = 1;

	/** `Object#toString` result references. */
	var argsTag = '[object Arguments]',
	    arrayTag = '[object Array]',
	    objectTag = '[object Object]';

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * A specialized version of `baseIsEqual` for arrays and objects which performs
	 * deep comparisons and tracks traversed objects enabling objects with circular
	 * references to be compared.
	 *
	 * @private
	 * @param {Object} object The object to compare.
	 * @param {Object} other The other object to compare.
	 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
	 * @param {Function} customizer The function to customize comparisons.
	 * @param {Function} equalFunc The function to determine equivalents of values.
	 * @param {Object} [stack] Tracks traversed `object` and `other` objects.
	 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
	 */
	function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
	  var objIsArr = isArray(object),
	      othIsArr = isArray(other),
	      objTag = objIsArr ? arrayTag : getTag(object),
	      othTag = othIsArr ? arrayTag : getTag(other);

	  objTag = objTag == argsTag ? objectTag : objTag;
	  othTag = othTag == argsTag ? objectTag : othTag;

	  var objIsObj = objTag == objectTag,
	      othIsObj = othTag == objectTag,
	      isSameTag = objTag == othTag;

	  if (isSameTag && isBuffer(object)) {
	    if (!isBuffer(other)) {
	      return false;
	    }
	    objIsArr = true;
	    objIsObj = false;
	  }
	  if (isSameTag && !objIsObj) {
	    stack || (stack = new Stack);
	    return (objIsArr || isTypedArray(object))
	      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
	      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
	  }
	  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
	    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
	        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');

	    if (objIsWrapped || othIsWrapped) {
	      var objUnwrapped = objIsWrapped ? object.value() : object,
	          othUnwrapped = othIsWrapped ? other.value() : other;

	      stack || (stack = new Stack);
	      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
	    }
	  }
	  if (!isSameTag) {
	    return false;
	  }
	  stack || (stack = new Stack);
	  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
	}

	module.exports = baseIsEqualDeep;


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

	var SetCache = __webpack_require__(426),
	    arraySome = __webpack_require__(429),
	    cacheHas = __webpack_require__(430);

	/** Used to compose bitmasks for value comparisons. */
	var COMPARE_PARTIAL_FLAG = 1,
	    COMPARE_UNORDERED_FLAG = 2;

	/**
	 * A specialized version of `baseIsEqualDeep` for arrays with support for
	 * partial deep comparisons.
	 *
	 * @private
	 * @param {Array} array The array to compare.
	 * @param {Array} other The other array to compare.
	 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
	 * @param {Function} customizer The function to customize comparisons.
	 * @param {Function} equalFunc The function to determine equivalents of values.
	 * @param {Object} stack Tracks traversed `array` and `other` objects.
	 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
	 */
	function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
	  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
	      arrLength = array.length,
	      othLength = other.length;

	  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
	    return false;
	  }
	  // Assume cyclic values are equal.
	  var stacked = stack.get(array);
	  if (stacked && stack.get(other)) {
	    return stacked == other;
	  }
	  var index = -1,
	      result = true,
	      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;

	  stack.set(array, other);
	  stack.set(other, array);

	  // Ignore non-index properties.
	  while (++index < arrLength) {
	    var arrValue = array[index],
	        othValue = other[index];

	    if (customizer) {
	      var compared = isPartial
	        ? customizer(othValue, arrValue, index, other, array, stack)
	        : customizer(arrValue, othValue, index, array, other, stack);
	    }
	    if (compared !== undefined) {
	      if (compared) {
	        continue;
	      }
	      result = false;
	      break;
	    }
	    // Recursively compare arrays (susceptible to call stack limits).
	    if (seen) {
	      if (!arraySome(other, function(othValue, othIndex) {
	            if (!cacheHas(seen, othIndex) &&
	                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
	              return seen.push(othIndex);
	            }
	          })) {
	        result = false;
	        break;
	      }
	    } else if (!(
	          arrValue === othValue ||
	            equalFunc(arrValue, othValue, bitmask, customizer, stack)
	        )) {
	      result = false;
	      break;
	    }
	  }
	  stack['delete'](array);
	  stack['delete'](other);
	  return result;
	}

	module.exports = equalArrays;


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

	var MapCache = __webpack_require__(408),
	    setCacheAdd = __webpack_require__(427),
	    setCacheHas = __webpack_require__(428);

	/**
	 *
	 * Creates an array cache object to store unique values.
	 *
	 * @private
	 * @constructor
	 * @param {Array} [values] The values to cache.
	 */
	function SetCache(values) {
	  var index = -1,
	      length = values == null ? 0 : values.length;

	  this.__data__ = new MapCache;
	  while (++index < length) {
	    this.add(values[index]);
	  }
	}

	// Add methods to `SetCache`.
	SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
	SetCache.prototype.has = setCacheHas;

	module.exports = SetCache;


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

	/** Used to stand-in for `undefined` hash values. */
	var HASH_UNDEFINED = '__lodash_hash_undefined__';

	/**
	 * Adds `value` to the array cache.
	 *
	 * @private
	 * @name add
	 * @memberOf SetCache
	 * @alias push
	 * @param {*} value The value to cache.
	 * @returns {Object} Returns the cache instance.
	 */
	function setCacheAdd(value) {
	  this.__data__.set(value, HASH_UNDEFINED);
	  return this;
	}

	module.exports = setCacheAdd;


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

	/**
	 * Checks if `value` is in the array cache.
	 *
	 * @private
	 * @name has
	 * @memberOf SetCache
	 * @param {*} value The value to search for.
	 * @returns {number} Returns `true` if `value` is found, else `false`.
	 */
	function setCacheHas(value) {
	  return this.__data__.has(value);
	}

	module.exports = setCacheHas;


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

	/**
	 * A specialized version of `_.some` for arrays without support for iteratee
	 * shorthands.
	 *
	 * @private
	 * @param {Array} [array] The array to iterate over.
	 * @param {Function} predicate The function invoked per iteration.
	 * @returns {boolean} Returns `true` if any element passes the predicate check,
	 *  else `false`.
	 */
	function arraySome(array, predicate) {
	  var index = -1,
	      length = array == null ? 0 : array.length;

	  while (++index < length) {
	    if (predicate(array[index], index, array)) {
	      return true;
	    }
	  }
	  return false;
	}

	module.exports = arraySome;


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

	/**
	 * Checks if a `cache` value for `key` exists.
	 *
	 * @private
	 * @param {Object} cache The cache to query.
	 * @param {string} key The key of the entry to check.
	 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
	 */
	function cacheHas(cache, key) {
	  return cache.has(key);
	}

	module.exports = cacheHas;


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

	var Symbol = __webpack_require__(347),
	    Uint8Array = __webpack_require__(432),
	    eq = __webpack_require__(392),
	    equalArrays = __webpack_require__(425),
	    mapToArray = __webpack_require__(433),
	    setToArray = __webpack_require__(434);

	/** Used to compose bitmasks for value comparisons. */
	var COMPARE_PARTIAL_FLAG = 1,
	    COMPARE_UNORDERED_FLAG = 2;

	/** `Object#toString` result references. */
	var boolTag = '[object Boolean]',
	    dateTag = '[object Date]',
	    errorTag = '[object Error]',
	    mapTag = '[object Map]',
	    numberTag = '[object Number]',
	    regexpTag = '[object RegExp]',
	    setTag = '[object Set]',
	    stringTag = '[object String]',
	    symbolTag = '[object Symbol]';

	var arrayBufferTag = '[object ArrayBuffer]',
	    dataViewTag = '[object DataView]';

	/** Used to convert symbols to primitives and strings. */
	var symbolProto = Symbol ? Symbol.prototype : undefined,
	    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;

	/**
	 * A specialized version of `baseIsEqualDeep` for comparing objects of
	 * the same `toStringTag`.
	 *
	 * **Note:** This function only supports comparing values with tags of
	 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
	 *
	 * @private
	 * @param {Object} object The object to compare.
	 * @param {Object} other The other object to compare.
	 * @param {string} tag The `toStringTag` of the objects to compare.
	 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
	 * @param {Function} customizer The function to customize comparisons.
	 * @param {Function} equalFunc The function to determine equivalents of values.
	 * @param {Object} stack Tracks traversed `object` and `other` objects.
	 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
	 */
	function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
	  switch (tag) {
	    case dataViewTag:
	      if ((object.byteLength != other.byteLength) ||
	          (object.byteOffset != other.byteOffset)) {
	        return false;
	      }
	      object = object.buffer;
	      other = other.buffer;

	    case arrayBufferTag:
	      if ((object.byteLength != other.byteLength) ||
	          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
	        return false;
	      }
	      return true;

	    case boolTag:
	    case dateTag:
	    case numberTag:
	      // Coerce booleans to `1` or `0` and dates to milliseconds.
	      // Invalid dates are coerced to `NaN`.
	      return eq(+object, +other);

	    case errorTag:
	      return object.name == other.name && object.message == other.message;

	    case regexpTag:
	    case stringTag:
	      // Coerce regexes to strings and treat strings, primitives and objects,
	      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
	      // for more details.
	      return object == (other + '');

	    case mapTag:
	      var convert = mapToArray;

	    case setTag:
	      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
	      convert || (convert = setToArray);

	      if (object.size != other.size && !isPartial) {
	        return false;
	      }
	      // Assume cyclic values are equal.
	      var stacked = stack.get(object);
	      if (stacked) {
	        return stacked == other;
	      }
	      bitmask |= COMPARE_UNORDERED_FLAG;

	      // Recursively compare objects (susceptible to call stack limits).
	      stack.set(object, other);
	      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
	      stack['delete'](object);
	      return result;

	    case symbolTag:
	      if (symbolValueOf) {
	        return symbolValueOf.call(object) == symbolValueOf.call(other);
	      }
	  }
	  return false;
	}

	module.exports = equalByTag;


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

	var root = __webpack_require__(348);

	/** Built-in value references. */
	var Uint8Array = root.Uint8Array;

	module.exports = Uint8Array;


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

	/**
	 * Converts `map` to its key-value pairs.
	 *
	 * @private
	 * @param {Object} map The map to convert.
	 * @returns {Array} Returns the key-value pairs.
	 */
	function mapToArray(map) {
	  var index = -1,
	      result = Array(map.size);

	  map.forEach(function(value, key) {
	    result[++index] = [key, value];
	  });
	  return result;
	}

	module.exports = mapToArray;


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

	/**
	 * Converts `set` to an array of its values.
	 *
	 * @private
	 * @param {Object} set The set to convert.
	 * @returns {Array} Returns the values.
	 */
	function setToArray(set) {
	  var index = -1,
	      result = Array(set.size);

	  set.forEach(function(value) {
	    result[++index] = value;
	  });
	  return result;
	}

	module.exports = setToArray;


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

	var getAllKeys = __webpack_require__(436);

	/** Used to compose bitmasks for value comparisons. */
	var COMPARE_PARTIAL_FLAG = 1;

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * A specialized version of `baseIsEqualDeep` for objects with support for
	 * partial deep comparisons.
	 *
	 * @private
	 * @param {Object} object The object to compare.
	 * @param {Object} other The other object to compare.
	 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
	 * @param {Function} customizer The function to customize comparisons.
	 * @param {Function} equalFunc The function to determine equivalents of values.
	 * @param {Object} stack Tracks traversed `object` and `other` objects.
	 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
	 */
	function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
	  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
	      objProps = getAllKeys(object),
	      objLength = objProps.length,
	      othProps = getAllKeys(other),
	      othLength = othProps.length;

	  if (objLength != othLength && !isPartial) {
	    return false;
	  }
	  var index = objLength;
	  while (index--) {
	    var key = objProps[index];
	    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
	      return false;
	    }
	  }
	  // Assume cyclic values are equal.
	  var stacked = stack.get(object);
	  if (stacked && stack.get(other)) {
	    return stacked == other;
	  }
	  var result = true;
	  stack.set(object, other);
	  stack.set(other, object);

	  var skipCtor = isPartial;
	  while (++index < objLength) {
	    key = objProps[index];
	    var objValue = object[key],
	        othValue = other[key];

	    if (customizer) {
	      var compared = isPartial
	        ? customizer(othValue, objValue, key, other, object, stack)
	        : customizer(objValue, othValue, key, object, other, stack);
	    }
	    // Recursively compare objects (susceptible to call stack limits).
	    if (!(compared === undefined
	          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
	          : compared
	        )) {
	      result = false;
	      break;
	    }
	    skipCtor || (skipCtor = key == 'constructor');
	  }
	  if (result && !skipCtor) {
	    var objCtor = object.constructor,
	        othCtor = other.constructor;

	    // Non `Object` object instances with different constructors are not equal.
	    if (objCtor != othCtor &&
	        ('constructor' in object && 'constructor' in other) &&
	        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
	          typeof othCtor == 'function' && othCtor instanceof othCtor)) {
	      result = false;
	    }
	  }
	  stack['delete'](object);
	  stack['delete'](other);
	  return result;
	}

	module.exports = equalObjects;


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

	var baseGetAllKeys = __webpack_require__(437),
	    getSymbols = __webpack_require__(439),
	    keys = __webpack_require__(358);

	/**
	 * Creates an array of own enumerable property names and symbols of `object`.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the array of property names and symbols.
	 */
	function getAllKeys(object) {
	  return baseGetAllKeys(object, keys, getSymbols);
	}

	module.exports = getAllKeys;


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

	var arrayPush = __webpack_require__(438),
	    isArray = __webpack_require__(352);

	/**
	 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
	 * `keysFunc` and `symbolsFunc` to get the enumerable property names and
	 * symbols of `object`.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @param {Function} keysFunc The function to get the keys of `object`.
	 * @param {Function} symbolsFunc The function to get the symbols of `object`.
	 * @returns {Array} Returns the array of property names and symbols.
	 */
	function baseGetAllKeys(object, keysFunc, symbolsFunc) {
	  var result = keysFunc(object);
	  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
	}

	module.exports = baseGetAllKeys;


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

	/**
	 * Appends the elements of `values` to `array`.
	 *
	 * @private
	 * @param {Array} array The array to modify.
	 * @param {Array} values The values to append.
	 * @returns {Array} Returns `array`.
	 */
	function arrayPush(array, values) {
	  var index = -1,
	      length = values.length,
	      offset = array.length;

	  while (++index < length) {
	    array[offset + index] = values[index];
	  }
	  return array;
	}

	module.exports = arrayPush;


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

	var arrayFilter = __webpack_require__(440),
	    stubArray = __webpack_require__(441);

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Built-in value references. */
	var propertyIsEnumerable = objectProto.propertyIsEnumerable;

	/* Built-in method references for those with the same name as other `lodash` methods. */
	var nativeGetSymbols = Object.getOwnPropertySymbols;

	/**
	 * Creates an array of the own enumerable symbols of `object`.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the array of symbols.
	 */
	var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
	  if (object == null) {
	    return [];
	  }
	  object = Object(object);
	  return arrayFilter(nativeGetSymbols(object), function(symbol) {
	    return propertyIsEnumerable.call(object, symbol);
	  });
	};

	module.exports = getSymbols;


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

	/**
	 * A specialized version of `_.filter` for arrays without support for
	 * iteratee shorthands.
	 *
	 * @private
	 * @param {Array} [array] The array to iterate over.
	 * @param {Function} predicate The function invoked per iteration.
	 * @returns {Array} Returns the new filtered array.
	 */
	function arrayFilter(array, predicate) {
	  var index = -1,
	      length = array == null ? 0 : array.length,
	      resIndex = 0,
	      result = [];

	  while (++index < length) {
	    var value = array[index];
	    if (predicate(value, index, array)) {
	      result[resIndex++] = value;
	    }
	  }
	  return result;
	}

	module.exports = arrayFilter;


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

	/**
	 * This method returns a new empty array.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.13.0
	 * @category Util
	 * @returns {Array} Returns the new empty array.
	 * @example
	 *
	 * var arrays = _.times(2, _.stubArray);
	 *
	 * console.log(arrays);
	 * // => [[], []]
	 *
	 * console.log(arrays[0] === arrays[1]);
	 * // => false
	 */
	function stubArray() {
	  return [];
	}

	module.exports = stubArray;


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

	var DataView = __webpack_require__(443),
	    Map = __webpack_require__(401),
	    Promise = __webpack_require__(444),
	    Set = __webpack_require__(445),
	    WeakMap = __webpack_require__(446),
	    baseGetTag = __webpack_require__(346),
	    toSource = __webpack_require__(406);

	/** `Object#toString` result references. */
	var mapTag = '[object Map]',
	    objectTag = '[object Object]',
	    promiseTag = '[object Promise]',
	    setTag = '[object Set]',
	    weakMapTag = '[object WeakMap]';

	var dataViewTag = '[object DataView]';

	/** Used to detect maps, sets, and weakmaps. */
	var dataViewCtorString = toSource(DataView),
	    mapCtorString = toSource(Map),
	    promiseCtorString = toSource(Promise),
	    setCtorString = toSource(Set),
	    weakMapCtorString = toSource(WeakMap);

	/**
	 * Gets the `toStringTag` of `value`.
	 *
	 * @private
	 * @param {*} value The value to query.
	 * @returns {string} Returns the `toStringTag`.
	 */
	var getTag = baseGetTag;

	// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
	if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
	    (Map && getTag(new Map) != mapTag) ||
	    (Promise && getTag(Promise.resolve()) != promiseTag) ||
	    (Set && getTag(new Set) != setTag) ||
	    (WeakMap && getTag(new WeakMap) != weakMapTag)) {
	  getTag = function(value) {
	    var result = baseGetTag(value),
	        Ctor = result == objectTag ? value.constructor : undefined,
	        ctorString = Ctor ? toSource(Ctor) : '';

	    if (ctorString) {
	      switch (ctorString) {
	        case dataViewCtorString: return dataViewTag;
	        case mapCtorString: return mapTag;
	        case promiseCtorString: return promiseTag;
	        case setCtorString: return setTag;
	        case weakMapCtorString: return weakMapTag;
	      }
	    }
	    return result;
	  };
	}

	module.exports = getTag;


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

	var getNative = __webpack_require__(402),
	    root = __webpack_require__(348);

	/* Built-in method references that are verified to be native. */
	var DataView = getNative(root, 'DataView');

	module.exports = DataView;


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

	var getNative = __webpack_require__(402),
	    root = __webpack_require__(348);

	/* Built-in method references that are verified to be native. */
	var Promise = getNative(root, 'Promise');

	module.exports = Promise;


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

	var getNative = __webpack_require__(402),
	    root = __webpack_require__(348);

	/* Built-in method references that are verified to be native. */
	var Set = getNative(root, 'Set');

	module.exports = Set;


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

	var getNative = __webpack_require__(402),
	    root = __webpack_require__(348);

	/* Built-in method references that are verified to be native. */
	var WeakMap = getNative(root, 'WeakMap');

	module.exports = WeakMap;


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

	var isStrictComparable = __webpack_require__(448),
	    keys = __webpack_require__(358);

	/**
	 * Gets the property names, values, and compare flags of `object`.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the match data of `object`.
	 */
	function getMatchData(object) {
	  var result = keys(object),
	      length = result.length;

	  while (length--) {
	    var key = result[length],
	        value = object[key];

	    result[length] = [key, value, isStrictComparable(value)];
	  }
	  return result;
	}

	module.exports = getMatchData;


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

	var isObject = __webpack_require__(377);

	/**
	 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` if suitable for strict
	 *  equality comparisons, else `false`.
	 */
	function isStrictComparable(value) {
	  return value === value && !isObject(value);
	}

	module.exports = isStrictComparable;


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

	/**
	 * A specialized version of `matchesProperty` for source values suitable
	 * for strict equality comparisons, i.e. `===`.
	 *
	 * @private
	 * @param {string} key The key of the property to get.
	 * @param {*} srcValue The value to match.
	 * @returns {Function} Returns the new spec function.
	 */
	function matchesStrictComparable(key, srcValue) {
	  return function(object) {
	    if (object == null) {
	      return false;
	    }
	    return object[key] === srcValue &&
	      (srcValue !== undefined || (key in Object(object)));
	  };
	}

	module.exports = matchesStrictComparable;


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

	var baseIsEqual = __webpack_require__(423),
	    get = __webpack_require__(451),
	    hasIn = __webpack_require__(462),
	    isKey = __webpack_require__(454),
	    isStrictComparable = __webpack_require__(448),
	    matchesStrictComparable = __webpack_require__(449),
	    toKey = __webpack_require__(461);

	/** Used to compose bitmasks for value comparisons. */
	var COMPARE_PARTIAL_FLAG = 1,
	    COMPARE_UNORDERED_FLAG = 2;

	/**
	 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
	 *
	 * @private
	 * @param {string} path The path of the property to get.
	 * @param {*} srcValue The value to match.
	 * @returns {Function} Returns the new spec function.
	 */
	function baseMatchesProperty(path, srcValue) {
	  if (isKey(path) && isStrictComparable(srcValue)) {
	    return matchesStrictComparable(toKey(path), srcValue);
	  }
	  return function(object) {
	    var objValue = get(object, path);
	    return (objValue === undefined && objValue === srcValue)
	      ? hasIn(object, path)
	      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
	  };
	}

	module.exports = baseMatchesProperty;


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

	var baseGet = __webpack_require__(452);

	/**
	 * Gets the value at `path` of `object`. If the resolved value is
	 * `undefined`, the `defaultValue` is returned in its place.
	 *
	 * @static
	 * @memberOf _
	 * @since 3.7.0
	 * @category Object
	 * @param {Object} object The object to query.
	 * @param {Array|string} path The path of the property to get.
	 * @param {*} [defaultValue] The value returned for `undefined` resolved values.
	 * @returns {*} Returns the resolved value.
	 * @example
	 *
	 * var object = { 'a': [{ 'b': { 'c': 3 } }] };
	 *
	 * _.get(object, 'a[0].b.c');
	 * // => 3
	 *
	 * _.get(object, ['a', '0', 'b', 'c']);
	 * // => 3
	 *
	 * _.get(object, 'a.b.c', 'default');
	 * // => 'default'
	 */
	function get(object, path, defaultValue) {
	  var result = object == null ? undefined : baseGet(object, path);
	  return result === undefined ? defaultValue : result;
	}

	module.exports = get;


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

	var castPath = __webpack_require__(453),
	    toKey = __webpack_require__(461);

	/**
	 * The base implementation of `_.get` without support for default values.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @param {Array|string} path The path of the property to get.
	 * @returns {*} Returns the resolved value.
	 */
	function baseGet(object, path) {
	  path = castPath(path, object);

	  var index = 0,
	      length = path.length;

	  while (object != null && index < length) {
	    object = object[toKey(path[index++])];
	  }
	  return (index && index == length) ? object : undefined;
	}

	module.exports = baseGet;


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

	var isArray = __webpack_require__(352),
	    isKey = __webpack_require__(454),
	    stringToPath = __webpack_require__(456),
	    toString = __webpack_require__(459);

	/**
	 * Casts `value` to a path array if it's not one.
	 *
	 * @private
	 * @param {*} value The value to inspect.
	 * @param {Object} [object] The object to query keys on.
	 * @returns {Array} Returns the cast property path array.
	 */
	function castPath(value, object) {
	  if (isArray(value)) {
	    return value;
	  }
	  return isKey(value, object) ? [value] : stringToPath(toString(value));
	}

	module.exports = castPath;


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

	var isArray = __webpack_require__(352),
	    isSymbol = __webpack_require__(455);

	/** Used to match property names within property paths. */
	var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
	    reIsPlainProp = /^\w*$/;

	/**
	 * Checks if `value` is a property name and not a property path.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @param {Object} [object] The object to query keys on.
	 * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
	 */
	function isKey(value, object) {
	  if (isArray(value)) {
	    return false;
	  }
	  var type = typeof value;
	  if (type == 'number' || type == 'symbol' || type == 'boolean' ||
	      value == null || isSymbol(value)) {
	    return true;
	  }
	  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
	    (object != null && value in Object(object));
	}

	module.exports = isKey;


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

	var baseGetTag = __webpack_require__(346),
	    isObjectLike = __webpack_require__(353);

	/** `Object#toString` result references. */
	var symbolTag = '[object Symbol]';

	/**
	 * Checks if `value` is classified as a `Symbol` primitive or object.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.0.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
	 * @example
	 *
	 * _.isSymbol(Symbol.iterator);
	 * // => true
	 *
	 * _.isSymbol('abc');
	 * // => false
	 */
	function isSymbol(value) {
	  return typeof value == 'symbol' ||
	    (isObjectLike(value) && baseGetTag(value) == symbolTag);
	}

	module.exports = isSymbol;


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

	var memoizeCapped = __webpack_require__(457);

	/** Used to match property names within property paths. */
	var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;

	/** Used to match backslashes in property paths. */
	var reEscapeChar = /\\(\\)?/g;

	/**
	 * Converts `string` to a property path array.
	 *
	 * @private
	 * @param {string} string The string to convert.
	 * @returns {Array} Returns the property path array.
	 */
	var stringToPath = memoizeCapped(function(string) {
	  var result = [];
	  if (string.charCodeAt(0) === 46 /* . */) {
	    result.push('');
	  }
	  string.replace(rePropName, function(match, number, quote, subString) {
	    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
	  });
	  return result;
	});

	module.exports = stringToPath;


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

	var memoize = __webpack_require__(458);

	/** Used as the maximum memoize cache size. */
	var MAX_MEMOIZE_SIZE = 500;

	/**
	 * A specialized version of `_.memoize` which clears the memoized function's
	 * cache when it exceeds `MAX_MEMOIZE_SIZE`.
	 *
	 * @private
	 * @param {Function} func The function to have its output memoized.
	 * @returns {Function} Returns the new memoized function.
	 */
	function memoizeCapped(func) {
	  var result = memoize(func, function(key) {
	    if (cache.size === MAX_MEMOIZE_SIZE) {
	      cache.clear();
	    }
	    return key;
	  });

	  var cache = result.cache;
	  return result;
	}

	module.exports = memoizeCapped;


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

	var MapCache = __webpack_require__(408);

	/** Error message constants. */
	var FUNC_ERROR_TEXT = 'Expected a function';

	/**
	 * Creates a function that memoizes the result of `func`. If `resolver` is
	 * provided, it determines the cache key for storing the result based on the
	 * arguments provided to the memoized function. By default, the first argument
	 * provided to the memoized function is used as the map cache key. The `func`
	 * is invoked with the `this` binding of the memoized function.
	 *
	 * **Note:** The cache is exposed as the `cache` property on the memoized
	 * function. Its creation may be customized by replacing the `_.memoize.Cache`
	 * constructor with one whose instances implement the
	 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
	 * method interface of `clear`, `delete`, `get`, `has`, and `set`.
	 *
	 * @static
	 * @memberOf _
	 * @since 0.1.0
	 * @category Function
	 * @param {Function} func The function to have its output memoized.
	 * @param {Function} [resolver] The function to resolve the cache key.
	 * @returns {Function} Returns the new memoized function.
	 * @example
	 *
	 * var object = { 'a': 1, 'b': 2 };
	 * var other = { 'c': 3, 'd': 4 };
	 *
	 * var values = _.memoize(_.values);
	 * values(object);
	 * // => [1, 2]
	 *
	 * values(other);
	 * // => [3, 4]
	 *
	 * object.a = 2;
	 * values(object);
	 * // => [1, 2]
	 *
	 * // Modify the result cache.
	 * values.cache.set(object, ['a', 'b']);
	 * values(object);
	 * // => ['a', 'b']
	 *
	 * // Replace `_.memoize.Cache`.
	 * _.memoize.Cache = WeakMap;
	 */
	function memoize(func, resolver) {
	  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
	    throw new TypeError(FUNC_ERROR_TEXT);
	  }
	  var memoized = function() {
	    var args = arguments,
	        key = resolver ? resolver.apply(this, args) : args[0],
	        cache = memoized.cache;

	    if (cache.has(key)) {
	      return cache.get(key);
	    }
	    var result = func.apply(this, args);
	    memoized.cache = cache.set(key, result) || cache;
	    return result;
	  };
	  memoized.cache = new (memoize.Cache || MapCache);
	  return memoized;
	}

	// Expose `MapCache`.
	memoize.Cache = MapCache;

	module.exports = memoize;


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

	var baseToString = __webpack_require__(460);

	/**
	 * Converts `value` to a string. An empty string is returned for `null`
	 * and `undefined` values. The sign of `-0` is preserved.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.0.0
	 * @category Lang
	 * @param {*} value The value to convert.
	 * @returns {string} Returns the converted string.
	 * @example
	 *
	 * _.toString(null);
	 * // => ''
	 *
	 * _.toString(-0);
	 * // => '-0'
	 *
	 * _.toString([1, 2, 3]);
	 * // => '1,2,3'
	 */
	function toString(value) {
	  return value == null ? '' : baseToString(value);
	}

	module.exports = toString;


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

	var Symbol = __webpack_require__(347),
	    arrayMap = __webpack_require__(383),
	    isArray = __webpack_require__(352),
	    isSymbol = __webpack_require__(455);

	/** Used as references for various `Number` constants. */
	var INFINITY = 1 / 0;

	/** Used to convert symbols to primitives and strings. */
	var symbolProto = Symbol ? Symbol.prototype : undefined,
	    symbolToString = symbolProto ? symbolProto.toString : undefined;

	/**
	 * The base implementation of `_.toString` which doesn't convert nullish
	 * values to empty strings.
	 *
	 * @private
	 * @param {*} value The value to process.
	 * @returns {string} Returns the string.
	 */
	function baseToString(value) {
	  // Exit early for strings to avoid a performance hit in some environments.
	  if (typeof value == 'string') {
	    return value;
	  }
	  if (isArray(value)) {
	    // Recursively convert values (susceptible to call stack limits).
	    return arrayMap(value, baseToString) + '';
	  }
	  if (isSymbol(value)) {
	    return symbolToString ? symbolToString.call(value) : '';
	  }
	  var result = (value + '');
	  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
	}

	module.exports = baseToString;


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

	var isSymbol = __webpack_require__(455);

	/** Used as references for various `Number` constants. */
	var INFINITY = 1 / 0;

	/**
	 * Converts `value` to a string key if it's not a string or symbol.
	 *
	 * @private
	 * @param {*} value The value to inspect.
	 * @returns {string|symbol} Returns the key.
	 */
	function toKey(value) {
	  if (typeof value == 'string' || isSymbol(value)) {
	    return value;
	  }
	  var result = (value + '');
	  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
	}

	module.exports = toKey;


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

	var baseHasIn = __webpack_require__(463),
	    hasPath = __webpack_require__(464);

	/**
	 * Checks if `path` is a direct or inherited property of `object`.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.0.0
	 * @category Object
	 * @param {Object} object The object to query.
	 * @param {Array|string} path The path to check.
	 * @returns {boolean} Returns `true` if `path` exists, else `false`.
	 * @example
	 *
	 * var object = _.create({ 'a': _.create({ 'b': 2 }) });
	 *
	 * _.hasIn(object, 'a');
	 * // => true
	 *
	 * _.hasIn(object, 'a.b');
	 * // => true
	 *
	 * _.hasIn(object, ['a', 'b']);
	 * // => true
	 *
	 * _.hasIn(object, 'b');
	 * // => false
	 */
	function hasIn(object, path) {
	  return object != null && hasPath(object, path, baseHasIn);
	}

	module.exports = hasIn;


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

	/**
	 * The base implementation of `_.hasIn` without support for deep paths.
	 *
	 * @private
	 * @param {Object} [object] The object to query.
	 * @param {Array|string} key The key to check.
	 * @returns {boolean} Returns `true` if `key` exists, else `false`.
	 */
	function baseHasIn(object, key) {
	  return object != null && key in Object(object);
	}

	module.exports = baseHasIn;


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

	var castPath = __webpack_require__(453),
	    isArguments = __webpack_require__(361),
	    isArray = __webpack_require__(352),
	    isIndex = __webpack_require__(365),
	    isLength = __webpack_require__(368),
	    toKey = __webpack_require__(461);

	/**
	 * Checks if `path` exists on `object`.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @param {Array|string} path The path to check.
	 * @param {Function} hasFunc The function to check properties.
	 * @returns {boolean} Returns `true` if `path` exists, else `false`.
	 */
	function hasPath(object, path, hasFunc) {
	  path = castPath(path, object);

	  var index = -1,
	      length = path.length,
	      result = false;

	  while (++index < length) {
	    var key = toKey(path[index]);
	    if (!(result = object != null && hasFunc(object, key))) {
	      break;
	    }
	    object = object[key];
	  }
	  if (result || ++index != length) {
	    return result;
	  }
	  length = object == null ? 0 : object.length;
	  return !!length && isLength(length) && isIndex(key, length) &&
	    (isArray(object) || isArguments(object));
	}

	module.exports = hasPath;


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

	var baseProperty = __webpack_require__(466),
	    basePropertyDeep = __webpack_require__(467),
	    isKey = __webpack_require__(454),
	    toKey = __webpack_require__(461);

	/**
	 * Creates a function that returns the value at `path` of a given object.
	 *
	 * @static
	 * @memberOf _
	 * @since 2.4.0
	 * @category Util
	 * @param {Array|string} path The path of the property to get.
	 * @returns {Function} Returns the new accessor function.
	 * @example
	 *
	 * var objects = [
	 *   { 'a': { 'b': 2 } },
	 *   { 'a': { 'b': 1 } }
	 * ];
	 *
	 * _.map(objects, _.property('a.b'));
	 * // => [2, 1]
	 *
	 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
	 * // => [1, 2]
	 */
	function property(path) {
	  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
	}

	module.exports = property;


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

	/**
	 * The base implementation of `_.property` without support for deep paths.
	 *
	 * @private
	 * @param {string} key The key of the property to get.
	 * @returns {Function} Returns the new accessor function.
	 */
	function baseProperty(key) {
	  return function(object) {
	    return object == null ? undefined : object[key];
	  };
	}

	module.exports = baseProperty;


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

	var baseGet = __webpack_require__(452);

	/**
	 * A specialized version of `baseProperty` which supports deep paths.
	 *
	 * @private
	 * @param {Array|string} path The path of the property to get.
	 * @returns {Function} Returns the new accessor function.
	 */
	function basePropertyDeep(path) {
	  return function(object) {
	    return baseGet(object, path);
	  };
	}

	module.exports = basePropertyDeep;


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

	var baseEach = __webpack_require__(469),
	    isArrayLike = __webpack_require__(375);

	/**
	 * The base implementation of `_.map` without support for iteratee shorthands.
	 *
	 * @private
	 * @param {Array|Object} collection The collection to iterate over.
	 * @param {Function} iteratee The function invoked per iteration.
	 * @returns {Array} Returns the new mapped array.
	 */
	function baseMap(collection, iteratee) {
	  var index = -1,
	      result = isArrayLike(collection) ? Array(collection.length) : [];

	  baseEach(collection, function(value, key, collection) {
	    result[++index] = iteratee(value, key, collection);
	  });
	  return result;
	}

	module.exports = baseMap;


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

	var baseForOwn = __webpack_require__(355),
	    createBaseEach = __webpack_require__(470);

	/**
	 * The base implementation of `_.forEach` without support for iteratee shorthands.
	 *
	 * @private
	 * @param {Array|Object} collection The collection to iterate over.
	 * @param {Function} iteratee The function invoked per iteration.
	 * @returns {Array|Object} Returns `collection`.
	 */
	var baseEach = createBaseEach(baseForOwn);

	module.exports = baseEach;


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

	var isArrayLike = __webpack_require__(375);

	/**
	 * Creates a `baseEach` or `baseEachRight` function.
	 *
	 * @private
	 * @param {Function} eachFunc The function to iterate over a collection.
	 * @param {boolean} [fromRight] Specify iterating from right to left.
	 * @returns {Function} Returns the new base function.
	 */
	function createBaseEach(eachFunc, fromRight) {
	  return function(collection, iteratee) {
	    if (collection == null) {
	      return collection;
	    }
	    if (!isArrayLike(collection)) {
	      return eachFunc(collection, iteratee);
	    }
	    var length = collection.length,
	        index = fromRight ? length : -1,
	        iterable = Object(collection);

	    while ((fromRight ? index-- : ++index < length)) {
	      if (iteratee(iterable[index], index, iterable) === false) {
	        break;
	      }
	    }
	    return collection;
	  };
	}

	module.exports = createBaseEach;


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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.mergeClasses = undefined;

	var _forOwn2 = __webpack_require__(354);

	var _forOwn3 = _interopRequireDefault(_forOwn2);

	var _cloneDeep2 = __webpack_require__(472);

	var _cloneDeep3 = _interopRequireDefault(_cloneDeep2);

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

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

	var mergeClasses = exports.mergeClasses = function mergeClasses(classes) {
	  var activeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];

	  var styles = classes.default && (0, _cloneDeep3.default)(classes.default) || {};
	  activeNames.map(function (name) {
	    var toMerge = classes[name];
	    if (toMerge) {
	      (0, _forOwn3.default)(toMerge, function (value, key) {
	        if (!styles[key]) {
	          styles[key] = {};
	        }

	        styles[key] = _extends({}, styles[key], toMerge[key]);
	      });
	    }

	    return name;
	  });
	  return styles;
	};

	exports.default = mergeClasses;

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

	var baseClone = __webpack_require__(473);

	/** Used to compose bitmasks for cloning. */
	var CLONE_DEEP_FLAG = 1,
	    CLONE_SYMBOLS_FLAG = 4;

	/**
	 * This method is like `_.clone` except that it recursively clones `value`.
	 *
	 * @static
	 * @memberOf _
	 * @since 1.0.0
	 * @category Lang
	 * @param {*} value The value to recursively clone.
	 * @returns {*} Returns the deep cloned value.
	 * @see _.clone
	 * @example
	 *
	 * var objects = [{ 'a': 1 }, { 'b': 2 }];
	 *
	 * var deep = _.cloneDeep(objects);
	 * console.log(deep[0] === objects[0]);
	 * // => false
	 */
	function cloneDeep(value) {
	  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
	}

	module.exports = cloneDeep;


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

	var Stack = __webpack_require__(387),
	    arrayEach = __webpack_require__(474),
	    assignValue = __webpack_require__(475),
	    baseAssign = __webpack_require__(478),
	    baseAssignIn = __webpack_require__(480),
	    cloneBuffer = __webpack_require__(484),
	    copyArray = __webpack_require__(485),
	    copySymbols = __webpack_require__(486),
	    copySymbolsIn = __webpack_require__(487),
	    getAllKeys = __webpack_require__(436),
	    getAllKeysIn = __webpack_require__(489),
	    getTag = __webpack_require__(442),
	    initCloneArray = __webpack_require__(490),
	    initCloneByTag = __webpack_require__(491),
	    initCloneObject = __webpack_require__(497),
	    isArray = __webpack_require__(352),
	    isBuffer = __webpack_require__(363),
	    isMap = __webpack_require__(499),
	    isObject = __webpack_require__(377),
	    isSet = __webpack_require__(501),
	    keys = __webpack_require__(358);

	/** Used to compose bitmasks for cloning. */
	var CLONE_DEEP_FLAG = 1,
	    CLONE_FLAT_FLAG = 2,
	    CLONE_SYMBOLS_FLAG = 4;

	/** `Object#toString` result references. */
	var argsTag = '[object Arguments]',
	    arrayTag = '[object Array]',
	    boolTag = '[object Boolean]',
	    dateTag = '[object Date]',
	    errorTag = '[object Error]',
	    funcTag = '[object Function]',
	    genTag = '[object GeneratorFunction]',
	    mapTag = '[object Map]',
	    numberTag = '[object Number]',
	    objectTag = '[object Object]',
	    regexpTag = '[object RegExp]',
	    setTag = '[object Set]',
	    stringTag = '[object String]',
	    symbolTag = '[object Symbol]',
	    weakMapTag = '[object WeakMap]';

	var arrayBufferTag = '[object ArrayBuffer]',
	    dataViewTag = '[object DataView]',
	    float32Tag = '[object Float32Array]',
	    float64Tag = '[object Float64Array]',
	    int8Tag = '[object Int8Array]',
	    int16Tag = '[object Int16Array]',
	    int32Tag = '[object Int32Array]',
	    uint8Tag = '[object Uint8Array]',
	    uint8ClampedTag = '[object Uint8ClampedArray]',
	    uint16Tag = '[object Uint16Array]',
	    uint32Tag = '[object Uint32Array]';

	/** Used to identify `toStringTag` values supported by `_.clone`. */
	var cloneableTags = {};
	cloneableTags[argsTag] = cloneableTags[arrayTag] =
	cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
	cloneableTags[boolTag] = cloneableTags[dateTag] =
	cloneableTags[float32Tag] = cloneableTags[float64Tag] =
	cloneableTags[int8Tag] = cloneableTags[int16Tag] =
	cloneableTags[int32Tag] = cloneableTags[mapTag] =
	cloneableTags[numberTag] = cloneableTags[objectTag] =
	cloneableTags[regexpTag] = cloneableTags[setTag] =
	cloneableTags[stringTag] = cloneableTags[symbolTag] =
	cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
	cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
	cloneableTags[errorTag] = cloneableTags[funcTag] =
	cloneableTags[weakMapTag] = false;

	/**
	 * The base implementation of `_.clone` and `_.cloneDeep` which tracks
	 * traversed objects.
	 *
	 * @private
	 * @param {*} value The value to clone.
	 * @param {boolean} bitmask The bitmask flags.
	 *  1 - Deep clone
	 *  2 - Flatten inherited properties
	 *  4 - Clone symbols
	 * @param {Function} [customizer] The function to customize cloning.
	 * @param {string} [key] The key of `value`.
	 * @param {Object} [object] The parent object of `value`.
	 * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
	 * @returns {*} Returns the cloned value.
	 */
	function baseClone(value, bitmask, customizer, key, object, stack) {
	  var result,
	      isDeep = bitmask & CLONE_DEEP_FLAG,
	      isFlat = bitmask & CLONE_FLAT_FLAG,
	      isFull = bitmask & CLONE_SYMBOLS_FLAG;

	  if (customizer) {
	    result = object ? customizer(value, key, object, stack) : customizer(value);
	  }
	  if (result !== undefined) {
	    return result;
	  }
	  if (!isObject(value)) {
	    return value;
	  }
	  var isArr = isArray(value);
	  if (isArr) {
	    result = initCloneArray(value);
	    if (!isDeep) {
	      return copyArray(value, result);
	    }
	  } else {
	    var tag = getTag(value),
	        isFunc = tag == funcTag || tag == genTag;

	    if (isBuffer(value)) {
	      return cloneBuffer(value, isDeep);
	    }
	    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
	      result = (isFlat || isFunc) ? {} : initCloneObject(value);
	      if (!isDeep) {
	        return isFlat
	          ? copySymbolsIn(value, baseAssignIn(result, value))
	          : copySymbols(value, baseAssign(result, value));
	      }
	    } else {
	      if (!cloneableTags[tag]) {
	        return object ? value : {};
	      }
	      result = initCloneByTag(value, tag, isDeep);
	    }
	  }
	  // Check for circular references and return its corresponding clone.
	  stack || (stack = new Stack);
	  var stacked = stack.get(value);
	  if (stacked) {
	    return stacked;
	  }
	  stack.set(value, result);

	  if (isSet(value)) {
	    value.forEach(function(subValue) {
	      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
	    });

	    return result;
	  }

	  if (isMap(value)) {
	    value.forEach(function(subValue, key) {
	      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
	    });

	    return result;
	  }

	  var keysFunc = isFull
	    ? (isFlat ? getAllKeysIn : getAllKeys)
	    : (isFlat ? keysIn : keys);

	  var props = isArr ? undefined : keysFunc(value);
	  arrayEach(props || value, function(subValue, key) {
	    if (props) {
	      key = subValue;
	      subValue = value[key];
	    }
	    // Recursively populate clone (susceptible to call stack limits).
	    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
	  });
	  return result;
	}

	module.exports = baseClone;


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

	/**
	 * A specialized version of `_.forEach` for arrays without support for
	 * iteratee shorthands.
	 *
	 * @private
	 * @param {Array} [array] The array to iterate over.
	 * @param {Function} iteratee The function invoked per iteration.
	 * @returns {Array} Returns `array`.
	 */
	function arrayEach(array, iteratee) {
	  var index = -1,
	      length = array == null ? 0 : array.length;

	  while (++index < length) {
	    if (iteratee(array[index], index, array) === false) {
	      break;
	    }
	  }
	  return array;
	}

	module.exports = arrayEach;


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

	var baseAssignValue = __webpack_require__(476),
	    eq = __webpack_require__(392);

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * Assigns `value` to `key` of `object` if the existing value is not equivalent
	 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
	 * for equality comparisons.
	 *
	 * @private
	 * @param {Object} object The object to modify.
	 * @param {string} key The key of the property to assign.
	 * @param {*} value The value to assign.
	 */
	function assignValue(object, key, value) {
	  var objValue = object[key];
	  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
	      (value === undefined && !(key in object))) {
	    baseAssignValue(object, key, value);
	  }
	}

	module.exports = assignValue;


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

	var defineProperty = __webpack_require__(477);

	/**
	 * The base implementation of `assignValue` and `assignMergeValue` without
	 * value checks.
	 *
	 * @private
	 * @param {Object} object The object to modify.
	 * @param {string} key The key of the property to assign.
	 * @param {*} value The value to assign.
	 */
	function baseAssignValue(object, key, value) {
	  if (key == '__proto__' && defineProperty) {
	    defineProperty(object, key, {
	      'configurable': true,
	      'enumerable': true,
	      'value': value,
	      'writable': true
	    });
	  } else {
	    object[key] = value;
	  }
	}

	module.exports = baseAssignValue;


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

	var getNative = __webpack_require__(402);

	var defineProperty = (function() {
	  try {
	    var func = getNative(Object, 'defineProperty');
	    func({}, '', {});
	    return func;
	  } catch (e) {}
	}());

	module.exports = defineProperty;


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

	var copyObject = __webpack_require__(479),
	    keys = __webpack_require__(358);

	/**
	 * The base implementation of `_.assign` without support for multiple sources
	 * or `customizer` functions.
	 *
	 * @private
	 * @param {Object} object The destination object.
	 * @param {Object} source The source object.
	 * @returns {Object} Returns `object`.
	 */
	function baseAssign(object, source) {
	  return object && copyObject(source, keys(source), object);
	}

	module.exports = baseAssign;


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

	var assignValue = __webpack_require__(475),
	    baseAssignValue = __webpack_require__(476);

	/**
	 * Copies properties of `source` to `object`.
	 *
	 * @private
	 * @param {Object} source The object to copy properties from.
	 * @param {Array} props The property identifiers to copy.
	 * @param {Object} [object={}] The object to copy properties to.
	 * @param {Function} [customizer] The function to customize copied values.
	 * @returns {Object} Returns `object`.
	 */
	function copyObject(source, props, object, customizer) {
	  var isNew = !object;
	  object || (object = {});

	  var index = -1,
	      length = props.length;

	  while (++index < length) {
	    var key = props[index];

	    var newValue = customizer
	      ? customizer(object[key], source[key], key, object, source)
	      : undefined;

	    if (newValue === undefined) {
	      newValue = source[key];
	    }
	    if (isNew) {
	      baseAssignValue(object, key, newValue);
	    } else {
	      assignValue(object, key, newValue);
	    }
	  }
	  return object;
	}

	module.exports = copyObject;


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

	var copyObject = __webpack_require__(479),
	    keysIn = __webpack_require__(481);

	/**
	 * The base implementation of `_.assignIn` without support for multiple sources
	 * or `customizer` functions.
	 *
	 * @private
	 * @param {Object} object The destination object.
	 * @param {Object} source The source object.
	 * @returns {Object} Returns `object`.
	 */
	function baseAssignIn(object, source) {
	  return object && copyObject(source, keysIn(source), object);
	}

	module.exports = baseAssignIn;


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

	var arrayLikeKeys = __webpack_require__(359),
	    baseKeysIn = __webpack_require__(482),
	    isArrayLike = __webpack_require__(375);

	/**
	 * Creates an array of the own and inherited enumerable property names of `object`.
	 *
	 * **Note:** Non-object values are coerced to objects.
	 *
	 * @static
	 * @memberOf _
	 * @since 3.0.0
	 * @category Object
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the array of property names.
	 * @example
	 *
	 * function Foo() {
	 *   this.a = 1;
	 *   this.b = 2;
	 * }
	 *
	 * Foo.prototype.c = 3;
	 *
	 * _.keysIn(new Foo);
	 * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
	 */
	function keysIn(object) {
	  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
	}

	module.exports = keysIn;


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

	var isObject = __webpack_require__(377),
	    isPrototype = __webpack_require__(372),
	    nativeKeysIn = __webpack_require__(483);

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the array of property names.
	 */
	function baseKeysIn(object) {
	  if (!isObject(object)) {
	    return nativeKeysIn(object);
	  }
	  var isProto = isPrototype(object),
	      result = [];

	  for (var key in object) {
	    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
	      result.push(key);
	    }
	  }
	  return result;
	}

	module.exports = baseKeysIn;


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

	/**
	 * This function is like
	 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
	 * except that it includes inherited enumerable properties.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the array of property names.
	 */
	function nativeKeysIn(object) {
	  var result = [];
	  if (object != null) {
	    for (var key in Object(object)) {
	      result.push(key);
	    }
	  }
	  return result;
	}

	module.exports = nativeKeysIn;


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

	/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(348);

	/** Detect free variable `exports`. */
	var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

	/** Detect free variable `module`. */
	var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

	/** Detect the popular CommonJS extension `module.exports`. */
	var moduleExports = freeModule && freeModule.exports === freeExports;

	/** Built-in value references. */
	var Buffer = moduleExports ? root.Buffer : undefined,
	    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;

	/**
	 * Creates a clone of  `buffer`.
	 *
	 * @private
	 * @param {Buffer} buffer The buffer to clone.
	 * @param {boolean} [isDeep] Specify a deep clone.
	 * @returns {Buffer} Returns the cloned buffer.
	 */
	function cloneBuffer(buffer, isDeep) {
	  if (isDeep) {
	    return buffer.slice();
	  }
	  var length = buffer.length,
	      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);

	  buffer.copy(result);
	  return result;
	}

	module.exports = cloneBuffer;

	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(336)(module)))

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

	/**
	 * Copies the values of `source` to `array`.
	 *
	 * @private
	 * @param {Array} source The array to copy values from.
	 * @param {Array} [array=[]] The array to copy values to.
	 * @returns {Array} Returns `array`.
	 */
	function copyArray(source, array) {
	  var index = -1,
	      length = source.length;

	  array || (array = Array(length));
	  while (++index < length) {
	    array[index] = source[index];
	  }
	  return array;
	}

	module.exports = copyArray;


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

	var copyObject = __webpack_require__(479),
	    getSymbols = __webpack_require__(439);

	/**
	 * Copies own symbols of `source` to `object`.
	 *
	 * @private
	 * @param {Object} source The object to copy symbols from.
	 * @param {Object} [object={}] The object to copy symbols to.
	 * @returns {Object} Returns `object`.
	 */
	function copySymbols(source, object) {
	  return copyObject(source, getSymbols(source), object);
	}

	module.exports = copySymbols;


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

	var copyObject = __webpack_require__(479),
	    getSymbolsIn = __webpack_require__(488);

	/**
	 * Copies own and inherited symbols of `source` to `object`.
	 *
	 * @private
	 * @param {Object} source The object to copy symbols from.
	 * @param {Object} [object={}] The object to copy symbols to.
	 * @returns {Object} Returns `object`.
	 */
	function copySymbolsIn(source, object) {
	  return copyObject(source, getSymbolsIn(source), object);
	}

	module.exports = copySymbolsIn;


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

	var arrayPush = __webpack_require__(438),
	    getPrototype = __webpack_require__(381),
	    getSymbols = __webpack_require__(439),
	    stubArray = __webpack_require__(441);

	/* Built-in method references for those with the same name as other `lodash` methods. */
	var nativeGetSymbols = Object.getOwnPropertySymbols;

	/**
	 * Creates an array of the own and inherited enumerable symbols of `object`.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the array of symbols.
	 */
	var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
	  var result = [];
	  while (object) {
	    arrayPush(result, getSymbols(object));
	    object = getPrototype(object);
	  }
	  return result;
	};

	module.exports = getSymbolsIn;


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

	var baseGetAllKeys = __webpack_require__(437),
	    getSymbolsIn = __webpack_require__(488),
	    keysIn = __webpack_require__(481);

	/**
	 * Creates an array of own and inherited enumerable property names and
	 * symbols of `object`.
	 *
	 * @private
	 * @param {Object} object The object to query.
	 * @returns {Array} Returns the array of property names and symbols.
	 */
	function getAllKeysIn(object) {
	  return baseGetAllKeys(object, keysIn, getSymbolsIn);
	}

	module.exports = getAllKeysIn;


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

	/** Used for built-in method references. */
	var objectProto = Object.prototype;

	/** Used to check objects for own properties. */
	var hasOwnProperty = objectProto.hasOwnProperty;

	/**
	 * Initializes an array clone.
	 *
	 * @private
	 * @param {Array} array The array to clone.
	 * @returns {Array} Returns the initialized clone.
	 */
	function initCloneArray(array) {
	  var length = array.length,
	      result = new array.constructor(length);

	  // Add properties assigned by `RegExp#exec`.
	  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
	    result.index = array.index;
	    result.input = array.input;
	  }
	  return result;
	}

	module.exports = initCloneArray;


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

	var cloneArrayBuffer = __webpack_require__(492),
	    cloneDataView = __webpack_require__(493),
	    cloneRegExp = __webpack_require__(494),
	    cloneSymbol = __webpack_require__(495),
	    cloneTypedArray = __webpack_require__(496);

	/** `Object#toString` result references. */
	var boolTag = '[object Boolean]',
	    dateTag = '[object Date]',
	    mapTag = '[object Map]',
	    numberTag = '[object Number]',
	    regexpTag = '[object RegExp]',
	    setTag = '[object Set]',
	    stringTag = '[object String]',
	    symbolTag = '[object Symbol]';

	var arrayBufferTag = '[object ArrayBuffer]',
	    dataViewTag = '[object DataView]',
	    float32Tag = '[object Float32Array]',
	    float64Tag = '[object Float64Array]',
	    int8Tag = '[object Int8Array]',
	    int16Tag = '[object Int16Array]',
	    int32Tag = '[object Int32Array]',
	    uint8Tag = '[object Uint8Array]',
	    uint8ClampedTag = '[object Uint8ClampedArray]',
	    uint16Tag = '[object Uint16Array]',
	    uint32Tag = '[object Uint32Array]';

	/**
	 * Initializes an object clone based on its `toStringTag`.
	 *
	 * **Note:** This function only supports cloning values with tags of
	 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
	 *
	 * @private
	 * @param {Object} object The object to clone.
	 * @param {string} tag The `toStringTag` of the object to clone.
	 * @param {boolean} [isDeep] Specify a deep clone.
	 * @returns {Object} Returns the initialized clone.
	 */
	function initCloneByTag(object, tag, isDeep) {
	  var Ctor = object.constructor;
	  switch (tag) {
	    case arrayBufferTag:
	      return cloneArrayBuffer(object);

	    case boolTag:
	    case dateTag:
	      return new Ctor(+object);

	    case dataViewTag:
	      return cloneDataView(object, isDeep);

	    case float32Tag: case float64Tag:
	    case int8Tag: case int16Tag: case int32Tag:
	    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
	      return cloneTypedArray(object, isDeep);

	    case mapTag:
	      return new Ctor;

	    case numberTag:
	    case stringTag:
	      return new Ctor(object);

	    case regexpTag:
	      return cloneRegExp(object);

	    case setTag:
	      return new Ctor;

	    case symbolTag:
	      return cloneSymbol(object);
	  }
	}

	module.exports = initCloneByTag;


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

	var Uint8Array = __webpack_require__(432);

	/**
	 * Creates a clone of `arrayBuffer`.
	 *
	 * @private
	 * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
	 * @returns {ArrayBuffer} Returns the cloned array buffer.
	 */
	function cloneArrayBuffer(arrayBuffer) {
	  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
	  new Uint8Array(result).set(new Uint8Array(arrayBuffer));
	  return result;
	}

	module.exports = cloneArrayBuffer;


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

	var cloneArrayBuffer = __webpack_require__(492);

	/**
	 * Creates a clone of `dataView`.
	 *
	 * @private
	 * @param {Object} dataView The data view to clone.
	 * @param {boolean} [isDeep] Specify a deep clone.
	 * @returns {Object} Returns the cloned data view.
	 */
	function cloneDataView(dataView, isDeep) {
	  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
	  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
	}

	module.exports = cloneDataView;


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

	/** Used to match `RegExp` flags from their coerced string values. */
	var reFlags = /\w*$/;

	/**
	 * Creates a clone of `regexp`.
	 *
	 * @private
	 * @param {Object} regexp The regexp to clone.
	 * @returns {Object} Returns the cloned regexp.
	 */
	function cloneRegExp(regexp) {
	  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
	  result.lastIndex = regexp.lastIndex;
	  return result;
	}

	module.exports = cloneRegExp;


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

	var Symbol = __webpack_require__(347);

	/** Used to convert symbols to primitives and strings. */
	var symbolProto = Symbol ? Symbol.prototype : undefined,
	    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;

	/**
	 * Creates a clone of the `symbol` object.
	 *
	 * @private
	 * @param {Object} symbol The symbol object to clone.
	 * @returns {Object} Returns the cloned symbol object.
	 */
	function cloneSymbol(symbol) {
	  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
	}

	module.exports = cloneSymbol;


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

	var cloneArrayBuffer = __webpack_require__(492);

	/**
	 * Creates a clone of `typedArray`.
	 *
	 * @private
	 * @param {Object} typedArray The typed array to clone.
	 * @param {boolean} [isDeep] Specify a deep clone.
	 * @returns {Object} Returns the cloned typed array.
	 */
	function cloneTypedArray(typedArray, isDeep) {
	  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
	  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
	}

	module.exports = cloneTypedArray;


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

	var baseCreate = __webpack_require__(498),
	    getPrototype = __webpack_require__(381),
	    isPrototype = __webpack_require__(372);

	/**
	 * Initializes an object clone.
	 *
	 * @private
	 * @param {Object} object The object to clone.
	 * @returns {Object} Returns the initialized clone.
	 */
	function initCloneObject(object) {
	  return (typeof object.constructor == 'function' && !isPrototype(object))
	    ? baseCreate(getPrototype(object))
	    : {};
	}

	module.exports = initCloneObject;


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

	var isObject = __webpack_require__(377);

	/** Built-in value references. */
	var objectCreate = Object.create;

	/**
	 * The base implementation of `_.create` without support for assigning
	 * properties to the created object.
	 *
	 * @private
	 * @param {Object} proto The object to inherit from.
	 * @returns {Object} Returns the new object.
	 */
	var baseCreate = (function() {
	  function object() {}
	  return function(proto) {
	    if (!isObject(proto)) {
	      return {};
	    }
	    if (objectCreate) {
	      return objectCreate(proto);
	    }
	    object.prototype = proto;
	    var result = new object;
	    object.prototype = undefined;
	    return result;
	  };
	}());

	module.exports = baseCreate;


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

	var baseIsMap = __webpack_require__(500),
	    baseUnary = __webpack_require__(369),
	    nodeUtil = __webpack_require__(370);

	/* Node.js helper references. */
	var nodeIsMap = nodeUtil && nodeUtil.isMap;

	/**
	 * Checks if `value` is classified as a `Map` object.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.3.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a map, else `false`.
	 * @example
	 *
	 * _.isMap(new Map);
	 * // => true
	 *
	 * _.isMap(new WeakMap);
	 * // => false
	 */
	var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;

	module.exports = isMap;


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

	var getTag = __webpack_require__(442),
	    isObjectLike = __webpack_require__(353);

	/** `Object#toString` result references. */
	var mapTag = '[object Map]';

	/**
	 * The base implementation of `_.isMap` without Node.js optimizations.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a map, else `false`.
	 */
	function baseIsMap(value) {
	  return isObjectLike(value) && getTag(value) == mapTag;
	}

	module.exports = baseIsMap;


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

	var baseIsSet = __webpack_require__(502),
	    baseUnary = __webpack_require__(369),
	    nodeUtil = __webpack_require__(370);

	/* Node.js helper references. */
	var nodeIsSet = nodeUtil && nodeUtil.isSet;

	/**
	 * Checks if `value` is classified as a `Set` object.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.3.0
	 * @category Lang
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a set, else `false`.
	 * @example
	 *
	 * _.isSet(new Set);
	 * // => true
	 *
	 * _.isSet(new WeakSet);
	 * // => false
	 */
	var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;

	module.exports = isSet;


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

	var getTag = __webpack_require__(442),
	    isObjectLike = __webpack_require__(353);

	/** `Object#toString` result references. */
	var setTag = '[object Set]';

	/**
	 * The base implementation of `_.isSet` without Node.js optimizations.
	 *
	 * @private
	 * @param {*} value The value to check.
	 * @returns {boolean} Returns `true` if `value` is a set, else `false`.
	 */
	function baseIsSet(value) {
	  return isObjectLike(value) && getTag(value) == setTag;
	}

	module.exports = baseIsSet;


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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.autoprefix = undefined;

	var _forOwn2 = __webpack_require__(354);

	var _forOwn3 = _interopRequireDefault(_forOwn2);

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

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

	var transforms = {
	  borderRadius: function borderRadius(value) {
	    return {
	      msBorderRadius: value,
	      MozBorderRadius: value,
	      OBorderRadius: value,
	      WebkitBorderRadius: value,
	      borderRadius: value
	    };
	  },
	  boxShadow: function boxShadow(value) {
	    return {
	      msBoxShadow: value,
	      MozBoxShadow: value,
	      OBoxShadow: value,
	      WebkitBoxShadow: value,
	      boxShadow: value
	    };
	  },
	  userSelect: function userSelect(value) {
	    return {
	      WebkitTouchCallout: value,
	      KhtmlUserSelect: value,
	      MozUserSelect: value,
	      msUserSelect: value,
	      WebkitUserSelect: value,
	      userSelect: value
	    };
	  },

	  flex: function flex(value) {
	    return {
	      WebkitBoxFlex: value,
	      MozBoxFlex: value,
	      WebkitFlex: value,
	      msFlex: value,
	      flex: value
	    };
	  },
	  flexBasis: function flexBasis(value) {
	    return {
	      WebkitFlexBasis: value,
	      flexBasis: value
	    };
	  },
	  justifyContent: function justifyContent(value) {
	    return {
	      WebkitJustifyContent: value,
	      justifyContent: value
	    };
	  },

	  transition: function transition(value) {
	    return {
	      msTransition: value,
	      MozTransition: value,
	      OTransition: value,
	      WebkitTransition: value,
	      transition: value
	    };
	  },

	  transform: function transform(value) {
	    return {
	      msTransform: value,
	      MozTransform: value,
	      OTransform: value,
	      WebkitTransform: value,
	      transform: value
	    };
	  },
	  absolute: function absolute(value) {
	    var direction = value && value.split(' ');
	    return {
	      position: 'absolute',
	      top: direction && direction[0],
	      right: direction && direction[1],
	      bottom: direction && direction[2],
	      left: direction && direction[3]
	    };
	  },
	  extend: function extend(name, otherElementStyles) {
	    var otherStyle = otherElementStyles[name];
	    if (otherStyle) {
	      return otherStyle;
	    }
	    return {
	      'extend': name
	    };
	  }
	};

	var autoprefix = exports.autoprefix = function autoprefix(elements) {
	  var prefixed = {};
	  (0, _forOwn3.default)(elements, function (styles, element) {
	    var expanded = {};
	    (0, _forOwn3.default)(styles, function (value, key) {
	      var transform = transforms[key];
	      if (transform) {
	        expanded = _extends({}, expanded, transform(value));
	      } else {
	        expanded[key] = value;
	      }
	    });
	    prefixed[element] = expanded;
	  });
	  return prefixed;
	};

	exports.default = autoprefix;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.hover = undefined;

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 hover = exports.hover = function hover(Component) {
	  var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';

	  return function (_React$Component) {
	    _inherits(Hover, _React$Component);

	    function Hover() {
	      var _ref;

	      var _temp, _this, _ret;

	      _classCallCheck(this, Hover);

	      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
	        args[_key] = arguments[_key];
	      }

	      return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Hover.__proto__ || Object.getPrototypeOf(Hover)).call.apply(_ref, [this].concat(args))), _this), _this.state = { hover: false }, _this.handleMouseOver = function () {
	        return _this.setState({ hover: true });
	      }, _this.handleMouseOut = function () {
	        return _this.setState({ hover: false });
	      }, _this.render = function () {
	        return _react2.default.createElement(
	          Span,
	          { onMouseOver: _this.handleMouseOver, onMouseOut: _this.handleMouseOut },
	          _react2.default.createElement(Component, _extends({}, _this.props, _this.state))
	        );
	      }, _temp), _possibleConstructorReturn(_this, _ret);
	    }

	    return Hover;
	  }(_react2.default.Component);
	};

	exports.default = hover;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.active = undefined;

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 active = exports.active = function active(Component) {
	  var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';

	  return function (_React$Component) {
	    _inherits(Active, _React$Component);

	    function Active() {
	      var _ref;

	      var _temp, _this, _ret;

	      _classCallCheck(this, Active);

	      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
	        args[_key] = arguments[_key];
	      }

	      return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Active.__proto__ || Object.getPrototypeOf(Active)).call.apply(_ref, [this].concat(args))), _this), _this.state = { active: false }, _this.handleMouseDown = function () {
	        return _this.setState({ active: true });
	      }, _this.handleMouseUp = function () {
	        return _this.setState({ active: false });
	      }, _this.render = function () {
	        return _react2.default.createElement(
	          Span,
	          { onMouseDown: _this.handleMouseDown, onMouseUp: _this.handleMouseUp },
	          _react2.default.createElement(Component, _extends({}, _this.props, _this.state))
	        );
	      }, _temp), _possibleConstructorReturn(_this, _ret);
	    }

	    return Active;
	  }(_react2.default.Component);
	};

	exports.default = active;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	var loopable = function loopable(i, length) {
	  var props = {};
	  var setProp = function setProp(name) {
	    var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;

	    props[name] = value;
	  };

	  i === 0 && setProp('first-child');
	  i === length - 1 && setProp('last-child');
	  (i === 0 || i % 2 === 0) && setProp('even');
	  Math.abs(i % 2) === 1 && setProp('odd');
	  setProp('nth-child', i);

	  return props;
	};

	exports.default = loopable;

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

	'use strict';

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

	var _Alpha = __webpack_require__(508);

	Object.defineProperty(exports, 'Alpha', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Alpha).default;
	  }
	});

	var _Checkboard = __webpack_require__(510);

	Object.defineProperty(exports, 'Checkboard', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Checkboard).default;
	  }
	});

	var _EditableInput = __webpack_require__(512);

	Object.defineProperty(exports, 'EditableInput', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_EditableInput).default;
	  }
	});

	var _Hue = __webpack_require__(513);

	Object.defineProperty(exports, 'Hue', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Hue).default;
	  }
	});

	var _Raised = __webpack_require__(515);

	Object.defineProperty(exports, 'Raised', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Raised).default;
	  }
	});

	var _Saturation = __webpack_require__(516);

	Object.defineProperty(exports, 'Saturation', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Saturation).default;
	  }
	});

	var _ColorWrap = __webpack_require__(522);

	Object.defineProperty(exports, 'ColorWrap', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_ColorWrap).default;
	  }
	});

	var _Swatch = __webpack_require__(527);

	Object.defineProperty(exports, 'Swatch', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Swatch).default;
	  }
	});

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

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Alpha = undefined;

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _alpha = __webpack_require__(509);

	var alpha = _interopRequireWildcard(_alpha);

	var _Checkboard = __webpack_require__(510);

	var _Checkboard2 = _interopRequireDefault(_Checkboard);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 Alpha = exports.Alpha = function (_ref) {
	  _inherits(Alpha, _ref);

	  function Alpha() {
	    var _ref2;

	    var _temp, _this, _ret;

	    _classCallCheck(this, Alpha);

	    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
	      args[_key] = arguments[_key];
	    }

	    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref2 = Alpha.__proto__ || Object.getPrototypeOf(Alpha)).call.apply(_ref2, [this].concat(args))), _this), _this.handleChange = function (e, skip) {
	      var change = alpha.calculateChange(e, skip, _this.props, _this.container);
	      change && _this.props.onChange && _this.props.onChange(change, e);
	    }, _this.handleMouseDown = function (e) {
	      _this.handleChange(e, true);
	      window.addEventListener('mousemove', _this.handleChange);
	      window.addEventListener('mouseup', _this.handleMouseUp);
	    }, _this.handleMouseUp = function () {
	      _this.unbindEventListeners();
	    }, _this.unbindEventListeners = function () {
	      window.removeEventListener('mousemove', _this.handleChange);
	      window.removeEventListener('mouseup', _this.handleMouseUp);
	    }, _temp), _possibleConstructorReturn(_this, _ret);
	  }

	  _createClass(Alpha, [{
	    key: 'componentWillUnmount',
	    value: function componentWillUnmount() {
	      this.unbindEventListeners();
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      var _this2 = this;

	      var rgb = this.props.rgb;
	      var styles = (0, _reactcss2.default)({
	        'default': {
	          alpha: {
	            absolute: '0px 0px 0px 0px',
	            borderRadius: this.props.radius
	          },
	          checkboard: {
	            absolute: '0px 0px 0px 0px',
	            overflow: 'hidden',
	            borderRadius: this.props.radius
	          },
	          gradient: {
	            absolute: '0px 0px 0px 0px',
	            background: 'linear-gradient(to right, rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 0) 0%,\n           rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 1) 100%)',
	            boxShadow: this.props.shadow,
	            borderRadius: this.props.radius
	          },
	          container: {
	            position: 'relative',
	            height: '100%',
	            margin: '0 3px'
	          },
	          pointer: {
	            position: 'absolute',
	            left: rgb.a * 100 + '%'
	          },
	          slider: {
	            width: '4px',
	            borderRadius: '1px',
	            height: '8px',
	            boxShadow: '0 0 2px rgba(0, 0, 0, .6)',
	            background: '#fff',
	            marginTop: '1px',
	            transform: 'translateX(-2px)'
	          }
	        },
	        'vertical': {
	          gradient: {
	            background: 'linear-gradient(to bottom, rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 0) 0%,\n           rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 1) 100%)'
	          },
	          pointer: {
	            left: 0,
	            top: rgb.a * 100 + '%'
	          }
	        },
	        'overwrite': _extends({}, this.props.style)
	      }, {
	        vertical: this.props.direction === 'vertical',
	        overwrite: true
	      });

	      return _react2.default.createElement(
	        'div',
	        { style: styles.alpha },
	        _react2.default.createElement(
	          'div',
	          { style: styles.checkboard },
	          _react2.default.createElement(_Checkboard2.default, { renderers: this.props.renderers })
	        ),
	        _react2.default.createElement('div', { style: styles.gradient }),
	        _react2.default.createElement(
	          'div',
	          {
	            style: styles.container,
	            ref: function ref(container) {
	              return _this2.container = container;
	            },
	            onMouseDown: this.handleMouseDown,
	            onTouchMove: this.handleChange,
	            onTouchStart: this.handleChange
	          },
	          _react2.default.createElement(
	            'div',
	            { style: styles.pointer },
	            this.props.pointer ? _react2.default.createElement(this.props.pointer, this.props) : _react2.default.createElement('div', { style: styles.slider })
	          )
	        )
	      );
	    }
	  }]);

	  return Alpha;
	}(_react.PureComponent || _react.Component);

	exports.default = Alpha;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	var calculateChange = exports.calculateChange = function calculateChange(e, skip, props, container) {
	  e.preventDefault();
	  var containerWidth = container.clientWidth;
	  var containerHeight = container.clientHeight;
	  var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;
	  var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;
	  var left = x - (container.getBoundingClientRect().left + window.pageXOffset);
	  var top = y - (container.getBoundingClientRect().top + window.pageYOffset);

	  if (props.direction === 'vertical') {
	    var a = void 0;
	    if (top < 0) {
	      a = 0;
	    } else if (top > containerHeight) {
	      a = 1;
	    } else {
	      a = Math.round(top * 100 / containerHeight) / 100;
	    }

	    if (props.hsl.a !== a) {
	      return {
	        h: props.hsl.h,
	        s: props.hsl.s,
	        l: props.hsl.l,
	        a: a,
	        source: 'rgb'
	      };
	    }
	  } else {
	    var _a = void 0;
	    if (left < 0) {
	      _a = 0;
	    } else if (left > containerWidth) {
	      _a = 1;
	    } else {
	      _a = Math.round(left * 100 / containerWidth) / 100;
	    }

	    if (props.a !== _a) {
	      return {
	        h: props.hsl.h,
	        s: props.hsl.s,
	        l: props.hsl.l,
	        a: _a,
	        source: 'rgb'
	      };
	    }
	  }
	  return null;
	};

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Checkboard = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _checkboard = __webpack_require__(511);

	var checkboard = _interopRequireWildcard(_checkboard);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

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

	var Checkboard = exports.Checkboard = function Checkboard(_ref) {
	  var white = _ref.white,
	      grey = _ref.grey,
	      size = _ref.size,
	      renderers = _ref.renderers,
	      borderRadius = _ref.borderRadius,
	      boxShadow = _ref.boxShadow;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      grid: {
	        borderRadius: borderRadius,
	        boxShadow: boxShadow,
	        absolute: '0px 0px 0px 0px',
	        background: 'url(' + checkboard.get(white, grey, size, renderers.canvas) + ') center left'
	      }
	    }
	  });

	  return _react2.default.createElement('div', { style: styles.grid });
	};

	Checkboard.defaultProps = {
	  size: 8,
	  white: 'transparent',
	  grey: 'rgba(0,0,0,.08)',
	  renderers: {}
	};

	exports.default = Checkboard;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	var checkboardCache = {};

	var render = exports.render = function render(c1, c2, size, serverCanvas) {
	  if (typeof document === 'undefined' && !serverCanvas) {
	    return null;
	  }
	  var canvas = serverCanvas ? new serverCanvas() : document.createElement('canvas');
	  canvas.width = size * 2;
	  canvas.height = size * 2;
	  var ctx = canvas.getContext('2d');
	  if (!ctx) {
	    return null;
	  } // If no context can be found, return early.
	  ctx.fillStyle = c1;
	  ctx.fillRect(0, 0, canvas.width, canvas.height);
	  ctx.fillStyle = c2;
	  ctx.fillRect(0, 0, size, size);
	  ctx.translate(size, size);
	  ctx.fillRect(0, 0, size, size);
	  return canvas.toDataURL();
	};

	var get = exports.get = function get(c1, c2, size, serverCanvas) {
	  var key = c1 + '-' + c2 + '-' + size + (serverCanvas ? '-server' : '');
	  var checkboard = render(c1, c2, size, serverCanvas);

	  if (checkboardCache[key]) {
	    return checkboardCache[key];
	  }
	  checkboardCache[key] = checkboard;
	  return checkboard;
	};

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.EditableInput = undefined;

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

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

	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 EditableInput = exports.EditableInput = function (_ref) {
	  _inherits(EditableInput, _ref);

	  function EditableInput(props) {
	    _classCallCheck(this, EditableInput);

	    var _this = _possibleConstructorReturn(this, (EditableInput.__proto__ || Object.getPrototypeOf(EditableInput)).call(this));

	    _this.handleBlur = function () {
	      if (_this.state.blurValue) {
	        _this.setState({ value: _this.state.blurValue, blurValue: null });
	      }
	    };

	    _this.handleChange = function (e) {
	      if (_this.props.label) {
	        _this.props.onChange && _this.props.onChange(_defineProperty({}, _this.props.label, e.target.value), e);
	      } else {
	        _this.props.onChange && _this.props.onChange(e.target.value, e);
	      }

	      _this.setState({ value: e.target.value });
	    };

	    _this.handleKeyDown = function (e) {
	      // In case `e.target.value` is a percentage remove the `%` character
	      // and update accordingly with a percentage
	      // https://github.com/casesandberg/react-color/issues/383
	      var stringValue = String(e.target.value);
	      var isPercentage = stringValue.indexOf('%') > -1;
	      var number = Number(stringValue.replace(/%/g, ''));
	      if (!isNaN(number)) {
	        var amount = _this.props.arrowOffset || 1;

	        // Up
	        if (e.keyCode === 38) {
	          if (_this.props.label !== null) {
	            _this.props.onChange && _this.props.onChange(_defineProperty({}, _this.props.label, number + amount), e);
	          } else {
	            _this.props.onChange && _this.props.onChange(number + amount, e);
	          }

	          if (isPercentage) {
	            _this.setState({ value: number + amount + '%' });
	          } else {
	            _this.setState({ value: number + amount });
	          }
	        }

	        // Down
	        if (e.keyCode === 40) {
	          if (_this.props.label !== null) {
	            _this.props.onChange && _this.props.onChange(_defineProperty({}, _this.props.label, number - amount), e);
	          } else {
	            _this.props.onChange && _this.props.onChange(number - amount, e);
	          }

	          if (isPercentage) {
	            _this.setState({ value: number - amount + '%' });
	          } else {
	            _this.setState({ value: number - amount });
	          }
	        }
	      }
	    };

	    _this.handleDrag = function (e) {
	      if (_this.props.dragLabel) {
	        var newValue = Math.round(_this.props.value + e.movementX);
	        if (newValue >= 0 && newValue <= _this.props.dragMax) {
	          _this.props.onChange && _this.props.onChange(_defineProperty({}, _this.props.label, newValue), e);
	        }
	      }
	    };

	    _this.handleMouseDown = function (e) {
	      if (_this.props.dragLabel) {
	        e.preventDefault();
	        _this.handleDrag(e);
	        window.addEventListener('mousemove', _this.handleDrag);
	        window.addEventListener('mouseup', _this.handleMouseUp);
	      }
	    };

	    _this.handleMouseUp = function () {
	      _this.unbindEventListeners();
	    };

	    _this.unbindEventListeners = function () {
	      window.removeEventListener('mousemove', _this.handleDrag);
	      window.removeEventListener('mouseup', _this.handleMouseUp);
	    };

	    _this.state = {
	      value: String(props.value).toUpperCase(),
	      blurValue: String(props.value).toUpperCase()
	    };
	    return _this;
	  }

	  _createClass(EditableInput, [{
	    key: 'componentWillReceiveProps',
	    value: function componentWillReceiveProps(nextProps) {
	      var input = this.input;
	      if (nextProps.value !== this.state.value) {
	        if (input === document.activeElement) {
	          this.setState({ blurValue: String(nextProps.value).toUpperCase() });
	        } else {
	          this.setState({ value: String(nextProps.value).toUpperCase(), blurValue: !this.state.blurValue && String(nextProps.value).toUpperCase() });
	        }
	      }
	    }
	  }, {
	    key: 'componentWillUnmount',
	    value: function componentWillUnmount() {
	      this.unbindEventListeners();
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      var _this2 = this;

	      var styles = (0, _reactcss2.default)({
	        'default': {
	          wrap: {
	            position: 'relative'
	          }
	        },
	        'user-override': {
	          wrap: this.props.style && this.props.style.wrap ? this.props.style.wrap : {},
	          input: this.props.style && this.props.style.input ? this.props.style.input : {},
	          label: this.props.style && this.props.style.label ? this.props.style.label : {}
	        },
	        'dragLabel-true': {
	          label: {
	            cursor: 'ew-resize'
	          }
	        }
	      }, {
	        'user-override': true
	      }, this.props);

	      return _react2.default.createElement(
	        'div',
	        { style: styles.wrap },
	        _react2.default.createElement('input', {
	          style: styles.input,
	          ref: function ref(input) {
	            return _this2.input = input;
	          },
	          value: this.state.value,
	          onKeyDown: this.handleKeyDown,
	          onChange: this.handleChange,
	          onBlur: this.handleBlur,
	          placeholder: this.props.placeholder,
	          spellCheck: 'false'
	        }),
	        this.props.label && !this.props.hideLabel ? _react2.default.createElement(
	          'span',
	          { style: styles.label, onMouseDown: this.handleMouseDown },
	          this.props.label
	        ) : null
	      );
	    }
	  }]);

	  return EditableInput;
	}(_react.PureComponent || _react.Component);

	exports.default = EditableInput;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Hue = undefined;

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _hue = __webpack_require__(514);

	var hue = _interopRequireWildcard(_hue);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 Hue = exports.Hue = function (_ref) {
	  _inherits(Hue, _ref);

	  function Hue() {
	    var _ref2;

	    var _temp, _this, _ret;

	    _classCallCheck(this, Hue);

	    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
	      args[_key] = arguments[_key];
	    }

	    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref2 = Hue.__proto__ || Object.getPrototypeOf(Hue)).call.apply(_ref2, [this].concat(args))), _this), _this.handleChange = function (e, skip) {
	      var change = hue.calculateChange(e, skip, _this.props, _this.container);
	      change && _this.props.onChange && _this.props.onChange(change, e);
	    }, _this.handleMouseDown = function (e) {
	      _this.handleChange(e, true);
	      window.addEventListener('mousemove', _this.handleChange);
	      window.addEventListener('mouseup', _this.handleMouseUp);
	    }, _this.handleMouseUp = function () {
	      _this.unbindEventListeners();
	    }, _temp), _possibleConstructorReturn(_this, _ret);
	  }

	  _createClass(Hue, [{
	    key: 'componentWillUnmount',
	    value: function componentWillUnmount() {
	      this.unbindEventListeners();
	    }
	  }, {
	    key: 'unbindEventListeners',
	    value: function unbindEventListeners() {
	      window.removeEventListener('mousemove', this.handleChange);
	      window.removeEventListener('mouseup', this.handleMouseUp);
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      var _this2 = this;

	      var _props$direction = this.props.direction,
	          direction = _props$direction === undefined ? 'horizontal' : _props$direction;


	      var styles = (0, _reactcss2.default)({
	        'default': {
	          hue: {
	            absolute: '0px 0px 0px 0px',
	            borderRadius: this.props.radius,
	            boxShadow: this.props.shadow
	          },
	          container: {
	            padding: '0 2px',
	            position: 'relative',
	            height: '100%',
	            borderRadius: this.props.radius
	          },
	          pointer: {
	            position: 'absolute',
	            left: this.props.hsl.h * 100 / 360 + '%'
	          },
	          slider: {
	            marginTop: '1px',
	            width: '4px',
	            borderRadius: '1px',
	            height: '8px',
	            boxShadow: '0 0 2px rgba(0, 0, 0, .6)',
	            background: '#fff',
	            transform: 'translateX(-2px)'
	          }
	        },
	        'vertical': {
	          pointer: {
	            left: '0px',
	            top: -(this.props.hsl.h * 100 / 360) + 100 + '%'
	          }
	        }
	      }, { vertical: direction === 'vertical' });

	      return _react2.default.createElement(
	        'div',
	        { style: styles.hue },
	        _react2.default.createElement(
	          'div',
	          {
	            className: 'hue-' + direction,
	            style: styles.container,
	            ref: function ref(container) {
	              return _this2.container = container;
	            },
	            onMouseDown: this.handleMouseDown,
	            onTouchMove: this.handleChange,
	            onTouchStart: this.handleChange
	          },
	          _react2.default.createElement(
	            'style',
	            null,
	            '\n            .hue-horizontal {\n              background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0\n                33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n              background: -webkit-linear-gradient(to right, #f00 0%, #ff0\n                17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n            }\n\n            .hue-vertical {\n              background: linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%,\n                #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n              background: -webkit-linear-gradient(to top, #f00 0%, #ff0 17%,\n                #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n            }\n          '
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.pointer },
	            this.props.pointer ? _react2.default.createElement(this.props.pointer, this.props) : _react2.default.createElement('div', { style: styles.slider })
	          )
	        )
	      );
	    }
	  }]);

	  return Hue;
	}(_react.PureComponent || _react.Component);

	exports.default = Hue;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	var calculateChange = exports.calculateChange = function calculateChange(e, skip, props, container) {
	  e.preventDefault();
	  var containerWidth = container.clientWidth;
	  var containerHeight = container.clientHeight;
	  var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;
	  var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;
	  var left = x - (container.getBoundingClientRect().left + window.pageXOffset);
	  var top = y - (container.getBoundingClientRect().top + window.pageYOffset);

	  if (props.direction === 'vertical') {
	    var h = void 0;
	    if (top < 0) {
	      h = 359;
	    } else if (top > containerHeight) {
	      h = 0;
	    } else {
	      var percent = -(top * 100 / containerHeight) + 100;
	      h = 360 * percent / 100;
	    }

	    if (props.hsl.h !== h) {
	      return {
	        h: h,
	        s: props.hsl.s,
	        l: props.hsl.l,
	        a: props.hsl.a,
	        source: 'rgb'
	      };
	    }
	  } else {
	    var _h = void 0;
	    if (left < 0) {
	      _h = 0;
	    } else if (left > containerWidth) {
	      _h = 359;
	    } else {
	      var _percent = left * 100 / containerWidth;
	      _h = 360 * _percent / 100;
	    }

	    if (props.hsl.h !== _h) {
	      return {
	        h: _h,
	        s: props.hsl.s,
	        l: props.hsl.l,
	        a: props.hsl.a,
	        source: 'rgb'
	      };
	    }
	  }
	  return null;
	};

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Raised = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var Raised = exports.Raised = function Raised(_ref) {
	  var zDepth = _ref.zDepth,
	      radius = _ref.radius,
	      background = _ref.background,
	      children = _ref.children;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      wrap: {
	        position: 'relative',
	        display: 'inline-block'
	      },
	      content: {
	        position: 'relative'
	      },
	      bg: {
	        absolute: '0px 0px 0px 0px',
	        boxShadow: '0 ' + zDepth + 'px ' + zDepth * 4 + 'px rgba(0,0,0,.24)',
	        borderRadius: radius,
	        background: background
	      }
	    },
	    'zDepth-0': {
	      bg: {
	        boxShadow: 'none'
	      }
	    },

	    'zDepth-1': {
	      bg: {
	        boxShadow: '0 2px 10px rgba(0,0,0,.12), 0 2px 5px rgba(0,0,0,.16)'
	      }
	    },
	    'zDepth-2': {
	      bg: {
	        boxShadow: '0 6px 20px rgba(0,0,0,.19), 0 8px 17px rgba(0,0,0,.2)'
	      }
	    },
	    'zDepth-3': {
	      bg: {
	        boxShadow: '0 17px 50px rgba(0,0,0,.19), 0 12px 15px rgba(0,0,0,.24)'
	      }
	    },
	    'zDepth-4': {
	      bg: {
	        boxShadow: '0 25px 55px rgba(0,0,0,.21), 0 16px 28px rgba(0,0,0,.22)'
	      }
	    },
	    'zDepth-5': {
	      bg: {
	        boxShadow: '0 40px 77px rgba(0,0,0,.22), 0 27px 24px rgba(0,0,0,.2)'
	      }
	    },
	    'square': {
	      bg: {
	        borderRadius: '0'
	      }
	    },
	    'circle': {
	      bg: {
	        borderRadius: '50%'
	      }
	    }
	  }, { 'zDepth-1': zDepth === 1 });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.wrap },
	    _react2.default.createElement('div', { style: styles.bg }),
	    _react2.default.createElement(
	      'div',
	      { style: styles.content },
	      children
	    )
	  );
	};

	Raised.propTypes = {
	  background: _propTypes2.default.string,
	  zDepth: _propTypes2.default.oneOf([0, 1, 2, 3, 4, 5]),
	  radius: _propTypes2.default.number
	};

	Raised.defaultProps = {
	  background: '#fff',
	  zDepth: 1,
	  radius: 2
	};

	exports.default = Raised;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Saturation = undefined;

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _throttle = __webpack_require__(517);

	var _throttle2 = _interopRequireDefault(_throttle);

	var _saturation = __webpack_require__(521);

	var saturation = _interopRequireWildcard(_saturation);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 Saturation = exports.Saturation = function (_ref) {
	  _inherits(Saturation, _ref);

	  function Saturation(props) {
	    _classCallCheck(this, Saturation);

	    var _this = _possibleConstructorReturn(this, (Saturation.__proto__ || Object.getPrototypeOf(Saturation)).call(this, props));

	    _this.handleChange = function (e, skip) {
	      _this.props.onChange && _this.throttle(_this.props.onChange, saturation.calculateChange(e, skip, _this.props, _this.container), e);
	    };

	    _this.handleMouseDown = function (e) {
	      _this.handleChange(e, true);
	      window.addEventListener('mousemove', _this.handleChange);
	      window.addEventListener('mouseup', _this.handleMouseUp);
	    };

	    _this.handleMouseUp = function () {
	      _this.unbindEventListeners();
	    };

	    _this.throttle = (0, _throttle2.default)(function (fn, data, e) {
	      fn(data, e);
	    }, 50);
	    return _this;
	  }

	  _createClass(Saturation, [{
	    key: 'componentWillUnmount',
	    value: function componentWillUnmount() {
	      this.unbindEventListeners();
	    }
	  }, {
	    key: 'unbindEventListeners',
	    value: function unbindEventListeners() {
	      window.removeEventListener('mousemove', this.handleChange);
	      window.removeEventListener('mouseup', this.handleMouseUp);
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      var _this2 = this;

	      var _ref2 = this.props.style || {},
	          color = _ref2.color,
	          white = _ref2.white,
	          black = _ref2.black,
	          pointer = _ref2.pointer,
	          circle = _ref2.circle;

	      var styles = (0, _reactcss2.default)({
	        'default': {
	          color: {
	            absolute: '0px 0px 0px 0px',
	            background: 'hsl(' + this.props.hsl.h + ',100%, 50%)',
	            borderRadius: this.props.radius
	          },
	          white: {
	            absolute: '0px 0px 0px 0px',
	            borderRadius: this.props.radius
	          },
	          black: {
	            absolute: '0px 0px 0px 0px',
	            boxShadow: this.props.shadow,
	            borderRadius: this.props.radius
	          },
	          pointer: {
	            position: 'absolute',
	            top: -(this.props.hsv.v * 100) + 100 + '%',
	            left: this.props.hsv.s * 100 + '%',
	            cursor: 'default'
	          },
	          circle: {
	            width: '4px',
	            height: '4px',
	            boxShadow: '0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3),\n            0 0 1px 2px rgba(0,0,0,.4)',
	            borderRadius: '50%',
	            cursor: 'hand',
	            transform: 'translate(-2px, -2px)'
	          }
	        },
	        'custom': {
	          color: color,
	          white: white,
	          black: black,
	          pointer: pointer,
	          circle: circle
	        }
	      }, { 'custom': !!this.props.style });

	      return _react2.default.createElement(
	        'div',
	        {
	          style: styles.color,
	          ref: function ref(container) {
	            return _this2.container = container;
	          },
	          onMouseDown: this.handleMouseDown,
	          onTouchMove: this.handleChange,
	          onTouchStart: this.handleChange
	        },
	        _react2.default.createElement(
	          'style',
	          null,
	          '\n          .saturation-white {\n            background: -webkit-linear-gradient(to right, #fff, rgba(255,255,255,0));\n            background: linear-gradient(to right, #fff, rgba(255,255,255,0));\n          }\n          .saturation-black {\n            background: -webkit-linear-gradient(to top, #000, rgba(0,0,0,0));\n            background: linear-gradient(to top, #000, rgba(0,0,0,0));\n          }\n        '
	        ),
	        _react2.default.createElement(
	          'div',
	          { style: styles.white, className: 'saturation-white' },
	          _react2.default.createElement('div', { style: styles.black, className: 'saturation-black' }),
	          _react2.default.createElement(
	            'div',
	            { style: styles.pointer },
	            this.props.pointer ? _react2.default.createElement(this.props.pointer, this.props) : _react2.default.createElement('div', { style: styles.circle })
	          )
	        )
	      );
	    }
	  }]);

	  return Saturation;
	}(_react.PureComponent || _react.Component);

	exports.default = Saturation;

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

	var debounce = __webpack_require__(518),
	    isObject = __webpack_require__(377);

	/** Error message constants. */
	var FUNC_ERROR_TEXT = 'Expected a function';

	/**
	 * Creates a throttled function that only invokes `func` at most once per
	 * every `wait` milliseconds. The throttled function comes with a `cancel`
	 * method to cancel delayed `func` invocations and a `flush` method to
	 * immediately invoke them. Provide `options` to indicate whether `func`
	 * should be invoked on the leading and/or trailing edge of the `wait`
	 * timeout. The `func` is invoked with the last arguments provided to the
	 * throttled function. Subsequent calls to the throttled function return the
	 * result of the last `func` invocation.
	 *
	 * **Note:** If `leading` and `trailing` options are `true`, `func` is
	 * invoked on the trailing edge of the timeout only if the throttled function
	 * is invoked more than once during the `wait` timeout.
	 *
	 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
	 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
	 *
	 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
	 * for details over the differences between `_.throttle` and `_.debounce`.
	 *
	 * @static
	 * @memberOf _
	 * @since 0.1.0
	 * @category Function
	 * @param {Function} func The function to throttle.
	 * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
	 * @param {Object} [options={}] The options object.
	 * @param {boolean} [options.leading=true]
	 *  Specify invoking on the leading edge of the timeout.
	 * @param {boolean} [options.trailing=true]
	 *  Specify invoking on the trailing edge of the timeout.
	 * @returns {Function} Returns the new throttled function.
	 * @example
	 *
	 * // Avoid excessively updating the position while scrolling.
	 * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
	 *
	 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
	 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
	 * jQuery(element).on('click', throttled);
	 *
	 * // Cancel the trailing throttled invocation.
	 * jQuery(window).on('popstate', throttled.cancel);
	 */
	function throttle(func, wait, options) {
	  var leading = true,
	      trailing = true;

	  if (typeof func != 'function') {
	    throw new TypeError(FUNC_ERROR_TEXT);
	  }
	  if (isObject(options)) {
	    leading = 'leading' in options ? !!options.leading : leading;
	    trailing = 'trailing' in options ? !!options.trailing : trailing;
	  }
	  return debounce(func, wait, {
	    'leading': leading,
	    'maxWait': wait,
	    'trailing': trailing
	  });
	}

	module.exports = throttle;


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

	var isObject = __webpack_require__(377),
	    now = __webpack_require__(519),
	    toNumber = __webpack_require__(520);

	/** Error message constants. */
	var FUNC_ERROR_TEXT = 'Expected a function';

	/* Built-in method references for those with the same name as other `lodash` methods. */
	var nativeMax = Math.max,
	    nativeMin = Math.min;

	/**
	 * Creates a debounced function that delays invoking `func` until after `wait`
	 * milliseconds have elapsed since the last time the debounced function was
	 * invoked. The debounced function comes with a `cancel` method to cancel
	 * delayed `func` invocations and a `flush` method to immediately invoke them.
	 * Provide `options` to indicate whether `func` should be invoked on the
	 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
	 * with the last arguments provided to the debounced function. Subsequent
	 * calls to the debounced function return the result of the last `func`
	 * invocation.
	 *
	 * **Note:** If `leading` and `trailing` options are `true`, `func` is
	 * invoked on the trailing edge of the timeout only if the debounced function
	 * is invoked more than once during the `wait` timeout.
	 *
	 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
	 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
	 *
	 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
	 * for details over the differences between `_.debounce` and `_.throttle`.
	 *
	 * @static
	 * @memberOf _
	 * @since 0.1.0
	 * @category Function
	 * @param {Function} func The function to debounce.
	 * @param {number} [wait=0] The number of milliseconds to delay.
	 * @param {Object} [options={}] The options object.
	 * @param {boolean} [options.leading=false]
	 *  Specify invoking on the leading edge of the timeout.
	 * @param {number} [options.maxWait]
	 *  The maximum time `func` is allowed to be delayed before it's invoked.
	 * @param {boolean} [options.trailing=true]
	 *  Specify invoking on the trailing edge of the timeout.
	 * @returns {Function} Returns the new debounced function.
	 * @example
	 *
	 * // Avoid costly calculations while the window size is in flux.
	 * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
	 *
	 * // Invoke `sendMail` when clicked, debouncing subsequent calls.
	 * jQuery(element).on('click', _.debounce(sendMail, 300, {
	 *   'leading': true,
	 *   'trailing': false
	 * }));
	 *
	 * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
	 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
	 * var source = new EventSource('/stream');
	 * jQuery(source).on('message', debounced);
	 *
	 * // Cancel the trailing debounced invocation.
	 * jQuery(window).on('popstate', debounced.cancel);
	 */
	function debounce(func, wait, options) {
	  var lastArgs,
	      lastThis,
	      maxWait,
	      result,
	      timerId,
	      lastCallTime,
	      lastInvokeTime = 0,
	      leading = false,
	      maxing = false,
	      trailing = true;

	  if (typeof func != 'function') {
	    throw new TypeError(FUNC_ERROR_TEXT);
	  }
	  wait = toNumber(wait) || 0;
	  if (isObject(options)) {
	    leading = !!options.leading;
	    maxing = 'maxWait' in options;
	    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
	    trailing = 'trailing' in options ? !!options.trailing : trailing;
	  }

	  function invokeFunc(time) {
	    var args = lastArgs,
	        thisArg = lastThis;

	    lastArgs = lastThis = undefined;
	    lastInvokeTime = time;
	    result = func.apply(thisArg, args);
	    return result;
	  }

	  function leadingEdge(time) {
	    // Reset any `maxWait` timer.
	    lastInvokeTime = time;
	    // Start the timer for the trailing edge.
	    timerId = setTimeout(timerExpired, wait);
	    // Invoke the leading edge.
	    return leading ? invokeFunc(time) : result;
	  }

	  function remainingWait(time) {
	    var timeSinceLastCall = time - lastCallTime,
	        timeSinceLastInvoke = time - lastInvokeTime,
	        timeWaiting = wait - timeSinceLastCall;

	    return maxing
	      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
	      : timeWaiting;
	  }

	  function shouldInvoke(time) {
	    var timeSinceLastCall = time - lastCallTime,
	        timeSinceLastInvoke = time - lastInvokeTime;

	    // Either this is the first call, activity has stopped and we're at the
	    // trailing edge, the system time has gone backwards and we're treating
	    // it as the trailing edge, or we've hit the `maxWait` limit.
	    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
	      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
	  }

	  function timerExpired() {
	    var time = now();
	    if (shouldInvoke(time)) {
	      return trailingEdge(time);
	    }
	    // Restart the timer.
	    timerId = setTimeout(timerExpired, remainingWait(time));
	  }

	  function trailingEdge(time) {
	    timerId = undefined;

	    // Only invoke if we have `lastArgs` which means `func` has been
	    // debounced at least once.
	    if (trailing && lastArgs) {
	      return invokeFunc(time);
	    }
	    lastArgs = lastThis = undefined;
	    return result;
	  }

	  function cancel() {
	    if (timerId !== undefined) {
	      clearTimeout(timerId);
	    }
	    lastInvokeTime = 0;
	    lastArgs = lastCallTime = lastThis = timerId = undefined;
	  }

	  function flush() {
	    return timerId === undefined ? result : trailingEdge(now());
	  }

	  function debounced() {
	    var time = now(),
	        isInvoking = shouldInvoke(time);

	    lastArgs = arguments;
	    lastThis = this;
	    lastCallTime = time;

	    if (isInvoking) {
	      if (timerId === undefined) {
	        return leadingEdge(lastCallTime);
	      }
	      if (maxing) {
	        // Handle invocations in a tight loop.
	        timerId = setTimeout(timerExpired, wait);
	        return invokeFunc(lastCallTime);
	      }
	    }
	    if (timerId === undefined) {
	      timerId = setTimeout(timerExpired, wait);
	    }
	    return result;
	  }
	  debounced.cancel = cancel;
	  debounced.flush = flush;
	  return debounced;
	}

	module.exports = debounce;


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

	var root = __webpack_require__(348);

	/**
	 * Gets the timestamp of the number of milliseconds that have elapsed since
	 * the Unix epoch (1 January 1970 00:00:00 UTC).
	 *
	 * @static
	 * @memberOf _
	 * @since 2.4.0
	 * @category Date
	 * @returns {number} Returns the timestamp.
	 * @example
	 *
	 * _.defer(function(stamp) {
	 *   console.log(_.now() - stamp);
	 * }, _.now());
	 * // => Logs the number of milliseconds it took for the deferred invocation.
	 */
	var now = function() {
	  return root.Date.now();
	};

	module.exports = now;


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

	var isObject = __webpack_require__(377),
	    isSymbol = __webpack_require__(455);

	/** Used as references for various `Number` constants. */
	var NAN = 0 / 0;

	/** Used to match leading and trailing whitespace. */
	var reTrim = /^\s+|\s+$/g;

	/** Used to detect bad signed hexadecimal string values. */
	var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

	/** Used to detect binary string values. */
	var reIsBinary = /^0b[01]+$/i;

	/** Used to detect octal string values. */
	var reIsOctal = /^0o[0-7]+$/i;

	/** Built-in method references without a dependency on `root`. */
	var freeParseInt = parseInt;

	/**
	 * Converts `value` to a number.
	 *
	 * @static
	 * @memberOf _
	 * @since 4.0.0
	 * @category Lang
	 * @param {*} value The value to process.
	 * @returns {number} Returns the number.
	 * @example
	 *
	 * _.toNumber(3.2);
	 * // => 3.2
	 *
	 * _.toNumber(Number.MIN_VALUE);
	 * // => 5e-324
	 *
	 * _.toNumber(Infinity);
	 * // => Infinity
	 *
	 * _.toNumber('3.2');
	 * // => 3.2
	 */
	function toNumber(value) {
	  if (typeof value == 'number') {
	    return value;
	  }
	  if (isSymbol(value)) {
	    return NAN;
	  }
	  if (isObject(value)) {
	    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
	    value = isObject(other) ? (other + '') : other;
	  }
	  if (typeof value != 'string') {
	    return value === 0 ? value : +value;
	  }
	  value = value.replace(reTrim, '');
	  var isBinary = reIsBinary.test(value);
	  return (isBinary || reIsOctal.test(value))
	    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
	    : (reIsBadHex.test(value) ? NAN : +value);
	}

	module.exports = toNumber;


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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	var calculateChange = exports.calculateChange = function calculateChange(e, skip, props, container) {
	  e.preventDefault();

	  var _container$getBoundin = container.getBoundingClientRect(),
	      containerWidth = _container$getBoundin.width,
	      containerHeight = _container$getBoundin.height;

	  var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;
	  var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;
	  var left = x - (container.getBoundingClientRect().left + window.pageXOffset);
	  var top = y - (container.getBoundingClientRect().top + window.pageYOffset);

	  if (left < 0) {
	    left = 0;
	  } else if (left > containerWidth) {
	    left = containerWidth;
	  } else if (top < 0) {
	    top = 0;
	  } else if (top > containerHeight) {
	    top = containerHeight;
	  }

	  var saturation = left * 100 / containerWidth;
	  var bright = -(top * 100 / containerHeight) + 100;

	  return {
	    h: props.hsl.h,
	    s: saturation,
	    v: bright,
	    a: props.hsl.a,
	    source: 'rgb'
	  };
	};

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.ColorWrap = undefined;

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _debounce = __webpack_require__(518);

	var _debounce2 = _interopRequireDefault(_debounce);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 ColorWrap = exports.ColorWrap = function ColorWrap(Picker) {
	  var ColorPicker = function (_ref) {
	    _inherits(ColorPicker, _ref);

	    function ColorPicker(props) {
	      _classCallCheck(this, ColorPicker);

	      var _this = _possibleConstructorReturn(this, (ColorPicker.__proto__ || Object.getPrototypeOf(ColorPicker)).call(this));

	      _this.handleChange = function (data, event) {
	        var isValidColor = _color2.default.simpleCheckForValidColor(data);
	        if (isValidColor) {
	          var colors = _color2.default.toState(data, data.h || _this.state.oldHue);
	          _this.setState(colors);
	          _this.props.onChangeComplete && _this.debounce(_this.props.onChangeComplete, colors, event);
	          _this.props.onChange && _this.props.onChange(colors, event);
	        }
	      };

	      _this.handleSwatchHover = function (data, event) {
	        var isValidColor = _color2.default.simpleCheckForValidColor(data);
	        if (isValidColor) {
	          var colors = _color2.default.toState(data, data.h || _this.state.oldHue);
	          _this.setState(colors);
	          _this.props.onSwatchHover && _this.props.onSwatchHover(colors, event);
	        }
	      };

	      _this.state = _extends({}, _color2.default.toState(props.color, 0));

	      _this.debounce = (0, _debounce2.default)(function (fn, data, event) {
	        fn(data, event);
	      }, 100);
	      return _this;
	    }

	    _createClass(ColorPicker, [{
	      key: 'componentWillReceiveProps',
	      value: function componentWillReceiveProps(nextProps) {
	        this.setState(_extends({}, _color2.default.toState(nextProps.color, this.state.oldHue)));
	      }
	    }, {
	      key: 'render',
	      value: function render() {
	        var optionalEvents = {};
	        if (this.props.onSwatchHover) {
	          optionalEvents.onSwatchHover = this.handleSwatchHover;
	        }

	        return _react2.default.createElement(Picker, _extends({}, this.props, this.state, {
	          onChange: this.handleChange
	        }, optionalEvents));
	      }
	    }]);

	    return ColorPicker;
	  }(_react.PureComponent || _react.Component);

	  ColorPicker.propTypes = _extends({}, Picker.propTypes);

	  ColorPicker.defaultProps = _extends({}, Picker.defaultProps, {
	    color: {
	      h: 250,
	      s: 0.50,
	      l: 0.20,
	      a: 1
	    }
	  });

	  return ColorPicker;
	};

	exports.default = ColorWrap;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.red = undefined;

	var _each = __webpack_require__(524);

	var _each2 = _interopRequireDefault(_each);

	var _tinycolor = __webpack_require__(526);

	var _tinycolor2 = _interopRequireDefault(_tinycolor);

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

	exports.default = {
	  simpleCheckForValidColor: function simpleCheckForValidColor(data) {
	    var keysToCheck = ['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'];
	    var checked = 0;
	    var passed = 0;
	    (0, _each2.default)(keysToCheck, function (letter) {
	      if (data[letter]) {
	        checked += 1;
	        if (!isNaN(data[letter])) {
	          passed += 1;
	        }
	        if (letter === 's' || letter === 'l') {
	          var percentPatt = /^\d+%$/;
	          if (percentPatt.test(data[letter])) {
	            passed += 1;
	          }
	        }
	      }
	    });
	    return checked === passed ? data : false;
	  },
	  toState: function toState(data, oldHue) {
	    var color = data.hex ? (0, _tinycolor2.default)(data.hex) : (0, _tinycolor2.default)(data);
	    var hsl = color.toHsl();
	    var hsv = color.toHsv();
	    var rgb = color.toRgb();
	    var hex = color.toHex();
	    if (hsl.s === 0) {
	      hsl.h = oldHue || 0;
	      hsv.h = oldHue || 0;
	    }
	    var transparent = hex === '000000' && rgb.a === 0;

	    return {
	      hsl: hsl,
	      hex: transparent ? 'transparent' : '#' + hex,
	      rgb: rgb,
	      hsv: hsv,
	      oldHue: data.h || oldHue || hsl.h,
	      source: data.source
	    };
	  },
	  isValidHex: function isValidHex(hex) {
	    // disable hex4 and hex8
	    var lh = String(hex).charAt(0) === '#' ? 1 : 0;
	    return hex.length !== 4 + lh && hex.length < 7 + lh && (0, _tinycolor2.default)(hex).isValid();
	  },
	  getContrastingColor: function getContrastingColor(data) {
	    if (!data) {
	      return '#fff';
	    }
	    var col = this.toState(data);
	    if (col.hex === 'transparent') {
	      return 'rgba(0,0,0,0.4)';
	    }
	    var yiq = (col.rgb.r * 299 + col.rgb.g * 587 + col.rgb.b * 114) / 1000;
	    return yiq >= 128 ? '#000' : '#fff';
	  }
	};
	var red = exports.red = {
	  hsl: { a: 1, h: 0, l: 0.5, s: 1 },
	  hex: '#ff0000',
	  rgb: { r: 255, g: 0, b: 0, a: 1 },
	  hsv: { h: 0, s: 1, v: 1, a: 1 }
	};

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

	module.exports = __webpack_require__(525);


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

	var arrayEach = __webpack_require__(474),
	    baseEach = __webpack_require__(469),
	    castFunction = __webpack_require__(378),
	    isArray = __webpack_require__(352);

	/**
	 * Iterates over elements of `collection` and invokes `iteratee` for each element.
	 * The iteratee is invoked with three arguments: (value, index|key, collection).
	 * Iteratee functions may exit iteration early by explicitly returning `false`.
	 *
	 * **Note:** As with other "Collections" methods, objects with a "length"
	 * property are iterated like arrays. To avoid this behavior use `_.forIn`
	 * or `_.forOwn` for object iteration.
	 *
	 * @static
	 * @memberOf _
	 * @since 0.1.0
	 * @alias each
	 * @category Collection
	 * @param {Array|Object} collection The collection to iterate over.
	 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
	 * @returns {Array|Object} Returns `collection`.
	 * @see _.forEachRight
	 * @example
	 *
	 * _.forEach([1, 2], function(value) {
	 *   console.log(value);
	 * });
	 * // => Logs `1` then `2`.
	 *
	 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
	 *   console.log(key);
	 * });
	 * // => Logs 'a' then 'b' (iteration order is not guaranteed).
	 */
	function forEach(collection, iteratee) {
	  var func = isArray(collection) ? arrayEach : baseEach;
	  return func(collection, castFunction(iteratee));
	}

	module.exports = forEach;


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

	var __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1
	// https://github.com/bgrins/TinyColor
	// Brian Grinstead, MIT License

	(function(Math) {

	var trimLeft = /^\s+/,
	    trimRight = /\s+$/,
	    tinyCounter = 0,
	    mathRound = Math.round,
	    mathMin = Math.min,
	    mathMax = Math.max,
	    mathRandom = Math.random;

	function tinycolor (color, opts) {

	    color = (color) ? color : '';
	    opts = opts || { };

	    // If input is already a tinycolor, return itself
	    if (color instanceof tinycolor) {
	       return color;
	    }
	    // If we are called as a function, call using new instead
	    if (!(this instanceof tinycolor)) {
	        return new tinycolor(color, opts);
	    }

	    var rgb = inputToRGB(color);
	    this._originalInput = color,
	    this._r = rgb.r,
	    this._g = rgb.g,
	    this._b = rgb.b,
	    this._a = rgb.a,
	    this._roundA = mathRound(100*this._a) / 100,
	    this._format = opts.format || rgb.format;
	    this._gradientType = opts.gradientType;

	    // Don't let the range of [0,255] come back in [0,1].
	    // Potentially lose a little bit of precision here, but will fix issues where
	    // .5 gets interpreted as half of the total, instead of half of 1
	    // If it was supposed to be 128, this was already taken care of by `inputToRgb`
	    if (this._r < 1) { this._r = mathRound(this._r); }
	    if (this._g < 1) { this._g = mathRound(this._g); }
	    if (this._b < 1) { this._b = mathRound(this._b); }

	    this._ok = rgb.ok;
	    this._tc_id = tinyCounter++;
	}

	tinycolor.prototype = {
	    isDark: function() {
	        return this.getBrightness() < 128;
	    },
	    isLight: function() {
	        return !this.isDark();
	    },
	    isValid: function() {
	        return this._ok;
	    },
	    getOriginalInput: function() {
	      return this._originalInput;
	    },
	    getFormat: function() {
	        return this._format;
	    },
	    getAlpha: function() {
	        return this._a;
	    },
	    getBrightness: function() {
	        //http://www.w3.org/TR/AERT#color-contrast
	        var rgb = this.toRgb();
	        return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
	    },
	    getLuminance: function() {
	        //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
	        var rgb = this.toRgb();
	        var RsRGB, GsRGB, BsRGB, R, G, B;
	        RsRGB = rgb.r/255;
	        GsRGB = rgb.g/255;
	        BsRGB = rgb.b/255;

	        if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}
	        if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}
	        if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}
	        return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);
	    },
	    setAlpha: function(value) {
	        this._a = boundAlpha(value);
	        this._roundA = mathRound(100*this._a) / 100;
	        return this;
	    },
	    toHsv: function() {
	        var hsv = rgbToHsv(this._r, this._g, this._b);
	        return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };
	    },
	    toHsvString: function() {
	        var hsv = rgbToHsv(this._r, this._g, this._b);
	        var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
	        return (this._a == 1) ?
	          "hsv("  + h + ", " + s + "%, " + v + "%)" :
	          "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")";
	    },
	    toHsl: function() {
	        var hsl = rgbToHsl(this._r, this._g, this._b);
	        return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };
	    },
	    toHslString: function() {
	        var hsl = rgbToHsl(this._r, this._g, this._b);
	        var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
	        return (this._a == 1) ?
	          "hsl("  + h + ", " + s + "%, " + l + "%)" :
	          "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")";
	    },
	    toHex: function(allow3Char) {
	        return rgbToHex(this._r, this._g, this._b, allow3Char);
	    },
	    toHexString: function(allow3Char) {
	        return '#' + this.toHex(allow3Char);
	    },
	    toHex8: function(allow4Char) {
	        return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);
	    },
	    toHex8String: function(allow4Char) {
	        return '#' + this.toHex8(allow4Char);
	    },
	    toRgb: function() {
	        return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };
	    },
	    toRgbString: function() {
	        return (this._a == 1) ?
	          "rgb("  + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" :
	          "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")";
	    },
	    toPercentageRgb: function() {
	        return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a };
	    },
	    toPercentageRgbString: function() {
	        return (this._a == 1) ?
	          "rgb("  + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" :
	          "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
	    },
	    toName: function() {
	        if (this._a === 0) {
	            return "transparent";
	        }

	        if (this._a < 1) {
	            return false;
	        }

	        return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
	    },
	    toFilter: function(secondColor) {
	        var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);
	        var secondHex8String = hex8String;
	        var gradientType = this._gradientType ? "GradientType = 1, " : "";

	        if (secondColor) {
	            var s = tinycolor(secondColor);
	            secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);
	        }

	        return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
	    },
	    toString: function(format) {
	        var formatSet = !!format;
	        format = format || this._format;

	        var formattedString = false;
	        var hasAlpha = this._a < 1 && this._a >= 0;
	        var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name");

	        if (needsAlphaFormat) {
	            // Special case for "transparent", all other non-alpha formats
	            // will return rgba when there is transparency.
	            if (format === "name" && this._a === 0) {
	                return this.toName();
	            }
	            return this.toRgbString();
	        }
	        if (format === "rgb") {
	            formattedString = this.toRgbString();
	        }
	        if (format === "prgb") {
	            formattedString = this.toPercentageRgbString();
	        }
	        if (format === "hex" || format === "hex6") {
	            formattedString = this.toHexString();
	        }
	        if (format === "hex3") {
	            formattedString = this.toHexString(true);
	        }
	        if (format === "hex4") {
	            formattedString = this.toHex8String(true);
	        }
	        if (format === "hex8") {
	            formattedString = this.toHex8String();
	        }
	        if (format === "name") {
	            formattedString = this.toName();
	        }
	        if (format === "hsl") {
	            formattedString = this.toHslString();
	        }
	        if (format === "hsv") {
	            formattedString = this.toHsvString();
	        }

	        return formattedString || this.toHexString();
	    },
	    clone: function() {
	        return tinycolor(this.toString());
	    },

	    _applyModification: function(fn, args) {
	        var color = fn.apply(null, [this].concat([].slice.call(args)));
	        this._r = color._r;
	        this._g = color._g;
	        this._b = color._b;
	        this.setAlpha(color._a);
	        return this;
	    },
	    lighten: function() {
	        return this._applyModification(lighten, arguments);
	    },
	    brighten: function() {
	        return this._applyModification(brighten, arguments);
	    },
	    darken: function() {
	        return this._applyModification(darken, arguments);
	    },
	    desaturate: function() {
	        return this._applyModification(desaturate, arguments);
	    },
	    saturate: function() {
	        return this._applyModification(saturate, arguments);
	    },
	    greyscale: function() {
	        return this._applyModification(greyscale, arguments);
	    },
	    spin: function() {
	        return this._applyModification(spin, arguments);
	    },

	    _applyCombination: function(fn, args) {
	        return fn.apply(null, [this].concat([].slice.call(args)));
	    },
	    analogous: function() {
	        return this._applyCombination(analogous, arguments);
	    },
	    complement: function() {
	        return this._applyCombination(complement, arguments);
	    },
	    monochromatic: function() {
	        return this._applyCombination(monochromatic, arguments);
	    },
	    splitcomplement: function() {
	        return this._applyCombination(splitcomplement, arguments);
	    },
	    triad: function() {
	        return this._applyCombination(triad, arguments);
	    },
	    tetrad: function() {
	        return this._applyCombination(tetrad, arguments);
	    }
	};

	// If input is an object, force 1 into "1.0" to handle ratios properly
	// String input requires "1.0" as input, so 1 will be treated as 1
	tinycolor.fromRatio = function(color, opts) {
	    if (typeof color == "object") {
	        var newColor = {};
	        for (var i in color) {
	            if (color.hasOwnProperty(i)) {
	                if (i === "a") {
	                    newColor[i] = color[i];
	                }
	                else {
	                    newColor[i] = convertToPercentage(color[i]);
	                }
	            }
	        }
	        color = newColor;
	    }

	    return tinycolor(color, opts);
	};

	// Given a string or object, convert that input to RGB
	// Possible string inputs:
	//
	//     "red"
	//     "#f00" or "f00"
	//     "#ff0000" or "ff0000"
	//     "#ff000000" or "ff000000"
	//     "rgb 255 0 0" or "rgb (255, 0, 0)"
	//     "rgb 1.0 0 0" or "rgb (1, 0, 0)"
	//     "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
	//     "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
	//     "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
	//     "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
	//     "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
	//
	function inputToRGB(color) {

	    var rgb = { r: 0, g: 0, b: 0 };
	    var a = 1;
	    var s = null;
	    var v = null;
	    var l = null;
	    var ok = false;
	    var format = false;

	    if (typeof color == "string") {
	        color = stringInputToObject(color);
	    }

	    if (typeof color == "object") {
	        if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
	            rgb = rgbToRgb(color.r, color.g, color.b);
	            ok = true;
	            format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
	        }
	        else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
	            s = convertToPercentage(color.s);
	            v = convertToPercentage(color.v);
	            rgb = hsvToRgb(color.h, s, v);
	            ok = true;
	            format = "hsv";
	        }
	        else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
	            s = convertToPercentage(color.s);
	            l = convertToPercentage(color.l);
	            rgb = hslToRgb(color.h, s, l);
	            ok = true;
	            format = "hsl";
	        }

	        if (color.hasOwnProperty("a")) {
	            a = color.a;
	        }
	    }

	    a = boundAlpha(a);

	    return {
	        ok: ok,
	        format: color.format || format,
	        r: mathMin(255, mathMax(rgb.r, 0)),
	        g: mathMin(255, mathMax(rgb.g, 0)),
	        b: mathMin(255, mathMax(rgb.b, 0)),
	        a: a
	    };
	}


	// Conversion Functions
	// --------------------

	// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
	// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>

	// `rgbToRgb`
	// Handle bounds / percentage checking to conform to CSS color spec
	// <http://www.w3.org/TR/css3-color/>
	// *Assumes:* r, g, b in [0, 255] or [0, 1]
	// *Returns:* { r, g, b } in [0, 255]
	function rgbToRgb(r, g, b){
	    return {
	        r: bound01(r, 255) * 255,
	        g: bound01(g, 255) * 255,
	        b: bound01(b, 255) * 255
	    };
	}

	// `rgbToHsl`
	// Converts an RGB color value to HSL.
	// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
	// *Returns:* { h, s, l } in [0,1]
	function rgbToHsl(r, g, b) {

	    r = bound01(r, 255);
	    g = bound01(g, 255);
	    b = bound01(b, 255);

	    var max = mathMax(r, g, b), min = mathMin(r, g, b);
	    var h, s, l = (max + min) / 2;

	    if(max == min) {
	        h = s = 0; // achromatic
	    }
	    else {
	        var d = max - min;
	        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
	        switch(max) {
	            case r: h = (g - b) / d + (g < b ? 6 : 0); break;
	            case g: h = (b - r) / d + 2; break;
	            case b: h = (r - g) / d + 4; break;
	        }

	        h /= 6;
	    }

	    return { h: h, s: s, l: l };
	}

	// `hslToRgb`
	// Converts an HSL color value to RGB.
	// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
	// *Returns:* { r, g, b } in the set [0, 255]
	function hslToRgb(h, s, l) {
	    var r, g, b;

	    h = bound01(h, 360);
	    s = bound01(s, 100);
	    l = bound01(l, 100);

	    function hue2rgb(p, q, t) {
	        if(t < 0) t += 1;
	        if(t > 1) t -= 1;
	        if(t < 1/6) return p + (q - p) * 6 * t;
	        if(t < 1/2) return q;
	        if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
	        return p;
	    }

	    if(s === 0) {
	        r = g = b = l; // achromatic
	    }
	    else {
	        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
	        var p = 2 * l - q;
	        r = hue2rgb(p, q, h + 1/3);
	        g = hue2rgb(p, q, h);
	        b = hue2rgb(p, q, h - 1/3);
	    }

	    return { r: r * 255, g: g * 255, b: b * 255 };
	}

	// `rgbToHsv`
	// Converts an RGB color value to HSV
	// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
	// *Returns:* { h, s, v } in [0,1]
	function rgbToHsv(r, g, b) {

	    r = bound01(r, 255);
	    g = bound01(g, 255);
	    b = bound01(b, 255);

	    var max = mathMax(r, g, b), min = mathMin(r, g, b);
	    var h, s, v = max;

	    var d = max - min;
	    s = max === 0 ? 0 : d / max;

	    if(max == min) {
	        h = 0; // achromatic
	    }
	    else {
	        switch(max) {
	            case r: h = (g - b) / d + (g < b ? 6 : 0); break;
	            case g: h = (b - r) / d + 2; break;
	            case b: h = (r - g) / d + 4; break;
	        }
	        h /= 6;
	    }
	    return { h: h, s: s, v: v };
	}

	// `hsvToRgb`
	// Converts an HSV color value to RGB.
	// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
	// *Returns:* { r, g, b } in the set [0, 255]
	 function hsvToRgb(h, s, v) {

	    h = bound01(h, 360) * 6;
	    s = bound01(s, 100);
	    v = bound01(v, 100);

	    var i = Math.floor(h),
	        f = h - i,
	        p = v * (1 - s),
	        q = v * (1 - f * s),
	        t = v * (1 - (1 - f) * s),
	        mod = i % 6,
	        r = [v, q, p, p, t, v][mod],
	        g = [t, v, v, q, p, p][mod],
	        b = [p, p, t, v, v, q][mod];

	    return { r: r * 255, g: g * 255, b: b * 255 };
	}

	// `rgbToHex`
	// Converts an RGB color to hex
	// Assumes r, g, and b are contained in the set [0, 255]
	// Returns a 3 or 6 character hex
	function rgbToHex(r, g, b, allow3Char) {

	    var hex = [
	        pad2(mathRound(r).toString(16)),
	        pad2(mathRound(g).toString(16)),
	        pad2(mathRound(b).toString(16))
	    ];

	    // Return a 3 character hex if possible
	    if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
	        return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
	    }

	    return hex.join("");
	}

	// `rgbaToHex`
	// Converts an RGBA color plus alpha transparency to hex
	// Assumes r, g, b are contained in the set [0, 255] and
	// a in [0, 1]. Returns a 4 or 8 character rgba hex
	function rgbaToHex(r, g, b, a, allow4Char) {

	    var hex = [
	        pad2(mathRound(r).toString(16)),
	        pad2(mathRound(g).toString(16)),
	        pad2(mathRound(b).toString(16)),
	        pad2(convertDecimalToHex(a))
	    ];

	    // Return a 4 character hex if possible
	    if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {
	        return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
	    }

	    return hex.join("");
	}

	// `rgbaToArgbHex`
	// Converts an RGBA color to an ARGB Hex8 string
	// Rarely used, but required for "toFilter()"
	function rgbaToArgbHex(r, g, b, a) {

	    var hex = [
	        pad2(convertDecimalToHex(a)),
	        pad2(mathRound(r).toString(16)),
	        pad2(mathRound(g).toString(16)),
	        pad2(mathRound(b).toString(16))
	    ];

	    return hex.join("");
	}

	// `equals`
	// Can be called with any tinycolor input
	tinycolor.equals = function (color1, color2) {
	    if (!color1 || !color2) { return false; }
	    return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
	};

	tinycolor.random = function() {
	    return tinycolor.fromRatio({
	        r: mathRandom(),
	        g: mathRandom(),
	        b: mathRandom()
	    });
	};


	// Modification Functions
	// ----------------------
	// Thanks to less.js for some of the basics here
	// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>

	function desaturate(color, amount) {
	    amount = (amount === 0) ? 0 : (amount || 10);
	    var hsl = tinycolor(color).toHsl();
	    hsl.s -= amount / 100;
	    hsl.s = clamp01(hsl.s);
	    return tinycolor(hsl);
	}

	function saturate(color, amount) {
	    amount = (amount === 0) ? 0 : (amount || 10);
	    var hsl = tinycolor(color).toHsl();
	    hsl.s += amount / 100;
	    hsl.s = clamp01(hsl.s);
	    return tinycolor(hsl);
	}

	function greyscale(color) {
	    return tinycolor(color).desaturate(100);
	}

	function lighten (color, amount) {
	    amount = (amount === 0) ? 0 : (amount || 10);
	    var hsl = tinycolor(color).toHsl();
	    hsl.l += amount / 100;
	    hsl.l = clamp01(hsl.l);
	    return tinycolor(hsl);
	}

	function brighten(color, amount) {
	    amount = (amount === 0) ? 0 : (amount || 10);
	    var rgb = tinycolor(color).toRgb();
	    rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));
	    rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));
	    rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));
	    return tinycolor(rgb);
	}

	function darken (color, amount) {
	    amount = (amount === 0) ? 0 : (amount || 10);
	    var hsl = tinycolor(color).toHsl();
	    hsl.l -= amount / 100;
	    hsl.l = clamp01(hsl.l);
	    return tinycolor(hsl);
	}

	// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
	// Values outside of this range will be wrapped into this range.
	function spin(color, amount) {
	    var hsl = tinycolor(color).toHsl();
	    var hue = (hsl.h + amount) % 360;
	    hsl.h = hue < 0 ? 360 + hue : hue;
	    return tinycolor(hsl);
	}

	// Combination Functions
	// ---------------------
	// Thanks to jQuery xColor for some of the ideas behind these
	// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>

	function complement(color) {
	    var hsl = tinycolor(color).toHsl();
	    hsl.h = (hsl.h + 180) % 360;
	    return tinycolor(hsl);
	}

	function triad(color) {
	    var hsl = tinycolor(color).toHsl();
	    var h = hsl.h;
	    return [
	        tinycolor(color),
	        tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
	        tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
	    ];
	}

	function tetrad(color) {
	    var hsl = tinycolor(color).toHsl();
	    var h = hsl.h;
	    return [
	        tinycolor(color),
	        tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
	        tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
	        tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
	    ];
	}

	function splitcomplement(color) {
	    var hsl = tinycolor(color).toHsl();
	    var h = hsl.h;
	    return [
	        tinycolor(color),
	        tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),
	        tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})
	    ];
	}

	function analogous(color, results, slices) {
	    results = results || 6;
	    slices = slices || 30;

	    var hsl = tinycolor(color).toHsl();
	    var part = 360 / slices;
	    var ret = [tinycolor(color)];

	    for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
	        hsl.h = (hsl.h + part) % 360;
	        ret.push(tinycolor(hsl));
	    }
	    return ret;
	}

	function monochromatic(color, results) {
	    results = results || 6;
	    var hsv = tinycolor(color).toHsv();
	    var h = hsv.h, s = hsv.s, v = hsv.v;
	    var ret = [];
	    var modification = 1 / results;

	    while (results--) {
	        ret.push(tinycolor({ h: h, s: s, v: v}));
	        v = (v + modification) % 1;
	    }

	    return ret;
	}

	// Utility Functions
	// ---------------------

	tinycolor.mix = function(color1, color2, amount) {
	    amount = (amount === 0) ? 0 : (amount || 50);

	    var rgb1 = tinycolor(color1).toRgb();
	    var rgb2 = tinycolor(color2).toRgb();

	    var p = amount / 100;

	    var rgba = {
	        r: ((rgb2.r - rgb1.r) * p) + rgb1.r,
	        g: ((rgb2.g - rgb1.g) * p) + rgb1.g,
	        b: ((rgb2.b - rgb1.b) * p) + rgb1.b,
	        a: ((rgb2.a - rgb1.a) * p) + rgb1.a
	    };

	    return tinycolor(rgba);
	};


	// Readability Functions
	// ---------------------
	// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)

	// `contrast`
	// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)
	tinycolor.readability = function(color1, color2) {
	    var c1 = tinycolor(color1);
	    var c2 = tinycolor(color2);
	    return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05);
	};

	// `isReadable`
	// Ensure that foreground and background color combinations meet WCAG2 guidelines.
	// The third argument is an optional Object.
	//      the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';
	//      the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.
	// If the entire object is absent, isReadable defaults to {level:"AA",size:"small"}.

	// *Example*
	//    tinycolor.isReadable("#000", "#111") => false
	//    tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false
	tinycolor.isReadable = function(color1, color2, wcag2) {
	    var readability = tinycolor.readability(color1, color2);
	    var wcag2Parms, out;

	    out = false;

	    wcag2Parms = validateWCAG2Parms(wcag2);
	    switch (wcag2Parms.level + wcag2Parms.size) {
	        case "AAsmall":
	        case "AAAlarge":
	            out = readability >= 4.5;
	            break;
	        case "AAlarge":
	            out = readability >= 3;
	            break;
	        case "AAAsmall":
	            out = readability >= 7;
	            break;
	    }
	    return out;

	};

	// `mostReadable`
	// Given a base color and a list of possible foreground or background
	// colors for that base, returns the most readable color.
	// Optionally returns Black or White if the most readable color is unreadable.
	// *Example*
	//    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255"
	//    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString();  // "#ffffff"
	//    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3"
	//    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff"
	tinycolor.mostReadable = function(baseColor, colorList, args) {
	    var bestColor = null;
	    var bestScore = 0;
	    var readability;
	    var includeFallbackColors, level, size ;
	    args = args || {};
	    includeFallbackColors = args.includeFallbackColors ;
	    level = args.level;
	    size = args.size;

	    for (var i= 0; i < colorList.length ; i++) {
	        readability = tinycolor.readability(baseColor, colorList[i]);
	        if (readability > bestScore) {
	            bestScore = readability;
	            bestColor = tinycolor(colorList[i]);
	        }
	    }

	    if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) {
	        return bestColor;
	    }
	    else {
	        args.includeFallbackColors=false;
	        return tinycolor.mostReadable(baseColor,["#fff", "#000"],args);
	    }
	};


	// Big List of Colors
	// ------------------
	// <http://www.w3.org/TR/css3-color/#svg-color>
	var names = tinycolor.names = {
	    aliceblue: "f0f8ff",
	    antiquewhite: "faebd7",
	    aqua: "0ff",
	    aquamarine: "7fffd4",
	    azure: "f0ffff",
	    beige: "f5f5dc",
	    bisque: "ffe4c4",
	    black: "000",
	    blanchedalmond: "ffebcd",
	    blue: "00f",
	    blueviolet: "8a2be2",
	    brown: "a52a2a",
	    burlywood: "deb887",
	    burntsienna: "ea7e5d",
	    cadetblue: "5f9ea0",
	    chartreuse: "7fff00",
	    chocolate: "d2691e",
	    coral: "ff7f50",
	    cornflowerblue: "6495ed",
	    cornsilk: "fff8dc",
	    crimson: "dc143c",
	    cyan: "0ff",
	    darkblue: "00008b",
	    darkcyan: "008b8b",
	    darkgoldenrod: "b8860b",
	    darkgray: "a9a9a9",
	    darkgreen: "006400",
	    darkgrey: "a9a9a9",
	    darkkhaki: "bdb76b",
	    darkmagenta: "8b008b",
	    darkolivegreen: "556b2f",
	    darkorange: "ff8c00",
	    darkorchid: "9932cc",
	    darkred: "8b0000",
	    darksalmon: "e9967a",
	    darkseagreen: "8fbc8f",
	    darkslateblue: "483d8b",
	    darkslategray: "2f4f4f",
	    darkslategrey: "2f4f4f",
	    darkturquoise: "00ced1",
	    darkviolet: "9400d3",
	    deeppink: "ff1493",
	    deepskyblue: "00bfff",
	    dimgray: "696969",
	    dimgrey: "696969",
	    dodgerblue: "1e90ff",
	    firebrick: "b22222",
	    floralwhite: "fffaf0",
	    forestgreen: "228b22",
	    fuchsia: "f0f",
	    gainsboro: "dcdcdc",
	    ghostwhite: "f8f8ff",
	    gold: "ffd700",
	    goldenrod: "daa520",
	    gray: "808080",
	    green: "008000",
	    greenyellow: "adff2f",
	    grey: "808080",
	    honeydew: "f0fff0",
	    hotpink: "ff69b4",
	    indianred: "cd5c5c",
	    indigo: "4b0082",
	    ivory: "fffff0",
	    khaki: "f0e68c",
	    lavender: "e6e6fa",
	    lavenderblush: "fff0f5",
	    lawngreen: "7cfc00",
	    lemonchiffon: "fffacd",
	    lightblue: "add8e6",
	    lightcoral: "f08080",
	    lightcyan: "e0ffff",
	    lightgoldenrodyellow: "fafad2",
	    lightgray: "d3d3d3",
	    lightgreen: "90ee90",
	    lightgrey: "d3d3d3",
	    lightpink: "ffb6c1",
	    lightsalmon: "ffa07a",
	    lightseagreen: "20b2aa",
	    lightskyblue: "87cefa",
	    lightslategray: "789",
	    lightslategrey: "789",
	    lightsteelblue: "b0c4de",
	    lightyellow: "ffffe0",
	    lime: "0f0",
	    limegreen: "32cd32",
	    linen: "faf0e6",
	    magenta: "f0f",
	    maroon: "800000",
	    mediumaquamarine: "66cdaa",
	    mediumblue: "0000cd",
	    mediumorchid: "ba55d3",
	    mediumpurple: "9370db",
	    mediumseagreen: "3cb371",
	    mediumslateblue: "7b68ee",
	    mediumspringgreen: "00fa9a",
	    mediumturquoise: "48d1cc",
	    mediumvioletred: "c71585",
	    midnightblue: "191970",
	    mintcream: "f5fffa",
	    mistyrose: "ffe4e1",
	    moccasin: "ffe4b5",
	    navajowhite: "ffdead",
	    navy: "000080",
	    oldlace: "fdf5e6",
	    olive: "808000",
	    olivedrab: "6b8e23",
	    orange: "ffa500",
	    orangered: "ff4500",
	    orchid: "da70d6",
	    palegoldenrod: "eee8aa",
	    palegreen: "98fb98",
	    paleturquoise: "afeeee",
	    palevioletred: "db7093",
	    papayawhip: "ffefd5",
	    peachpuff: "ffdab9",
	    peru: "cd853f",
	    pink: "ffc0cb",
	    plum: "dda0dd",
	    powderblue: "b0e0e6",
	    purple: "800080",
	    rebeccapurple: "663399",
	    red: "f00",
	    rosybrown: "bc8f8f",
	    royalblue: "4169e1",
	    saddlebrown: "8b4513",
	    salmon: "fa8072",
	    sandybrown: "f4a460",
	    seagreen: "2e8b57",
	    seashell: "fff5ee",
	    sienna: "a0522d",
	    silver: "c0c0c0",
	    skyblue: "87ceeb",
	    slateblue: "6a5acd",
	    slategray: "708090",
	    slategrey: "708090",
	    snow: "fffafa",
	    springgreen: "00ff7f",
	    steelblue: "4682b4",
	    tan: "d2b48c",
	    teal: "008080",
	    thistle: "d8bfd8",
	    tomato: "ff6347",
	    turquoise: "40e0d0",
	    violet: "ee82ee",
	    wheat: "f5deb3",
	    white: "fff",
	    whitesmoke: "f5f5f5",
	    yellow: "ff0",
	    yellowgreen: "9acd32"
	};

	// Make it easy to access colors via `hexNames[hex]`
	var hexNames = tinycolor.hexNames = flip(names);


	// Utilities
	// ---------

	// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
	function flip(o) {
	    var flipped = { };
	    for (var i in o) {
	        if (o.hasOwnProperty(i)) {
	            flipped[o[i]] = i;
	        }
	    }
	    return flipped;
	}

	// Return a valid alpha value [0,1] with all invalid values being set to 1
	function boundAlpha(a) {
	    a = parseFloat(a);

	    if (isNaN(a) || a < 0 || a > 1) {
	        a = 1;
	    }

	    return a;
	}

	// Take input from [0, n] and return it as [0, 1]
	function bound01(n, max) {
	    if (isOnePointZero(n)) { n = "100%"; }

	    var processPercent = isPercentage(n);
	    n = mathMin(max, mathMax(0, parseFloat(n)));

	    // Automatically convert percentage into number
	    if (processPercent) {
	        n = parseInt(n * max, 10) / 100;
	    }

	    // Handle floating point rounding errors
	    if ((Math.abs(n - max) < 0.000001)) {
	        return 1;
	    }

	    // Convert into [0, 1] range if it isn't already
	    return (n % max) / parseFloat(max);
	}

	// Force a number between 0 and 1
	function clamp01(val) {
	    return mathMin(1, mathMax(0, val));
	}

	// Parse a base-16 hex value into a base-10 integer
	function parseIntFromHex(val) {
	    return parseInt(val, 16);
	}

	// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
	// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
	function isOnePointZero(n) {
	    return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
	}

	// Check to see if string passed in is a percentage
	function isPercentage(n) {
	    return typeof n === "string" && n.indexOf('%') != -1;
	}

	// Force a hex value to have 2 characters
	function pad2(c) {
	    return c.length == 1 ? '0' + c : '' + c;
	}

	// Replace a decimal with it's percentage value
	function convertToPercentage(n) {
	    if (n <= 1) {
	        n = (n * 100) + "%";
	    }

	    return n;
	}

	// Converts a decimal to a hex value
	function convertDecimalToHex(d) {
	    return Math.round(parseFloat(d) * 255).toString(16);
	}
	// Converts a hex value to a decimal
	function convertHexToDecimal(h) {
	    return (parseIntFromHex(h) / 255);
	}

	var matchers = (function() {

	    // <http://www.w3.org/TR/css3-values/#integers>
	    var CSS_INTEGER = "[-\\+]?\\d+%?";

	    // <http://www.w3.org/TR/css3-values/#number-value>
	    var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";

	    // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.
	    var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";

	    // Actual matching.
	    // Parentheses and commas are optional, but not required.
	    // Whitespace can take the place of commas or opening paren
	    var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
	    var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";

	    return {
	        CSS_UNIT: new RegExp(CSS_UNIT),
	        rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
	        rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
	        hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
	        hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
	        hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
	        hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
	        hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
	        hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
	        hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
	        hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
	    };
	})();

	// `isValidCSSUnit`
	// Take in a single string / number and check to see if it looks like a CSS unit
	// (see `matchers` above for definition).
	function isValidCSSUnit(color) {
	    return !!matchers.CSS_UNIT.exec(color);
	}

	// `stringInputToObject`
	// Permissive string parsing.  Take in a number of formats, and output an object
	// based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
	function stringInputToObject(color) {

	    color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();
	    var named = false;
	    if (names[color]) {
	        color = names[color];
	        named = true;
	    }
	    else if (color == 'transparent') {
	        return { r: 0, g: 0, b: 0, a: 0, format: "name" };
	    }

	    // Try to match string input using regular expressions.
	    // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
	    // Just return an object and let the conversion functions handle that.
	    // This way the result will be the same whether the tinycolor is initialized with string or object.
	    var match;
	    if ((match = matchers.rgb.exec(color))) {
	        return { r: match[1], g: match[2], b: match[3] };
	    }
	    if ((match = matchers.rgba.exec(color))) {
	        return { r: match[1], g: match[2], b: match[3], a: match[4] };
	    }
	    if ((match = matchers.hsl.exec(color))) {
	        return { h: match[1], s: match[2], l: match[3] };
	    }
	    if ((match = matchers.hsla.exec(color))) {
	        return { h: match[1], s: match[2], l: match[3], a: match[4] };
	    }
	    if ((match = matchers.hsv.exec(color))) {
	        return { h: match[1], s: match[2], v: match[3] };
	    }
	    if ((match = matchers.hsva.exec(color))) {
	        return { h: match[1], s: match[2], v: match[3], a: match[4] };
	    }
	    if ((match = matchers.hex8.exec(color))) {
	        return {
	            r: parseIntFromHex(match[1]),
	            g: parseIntFromHex(match[2]),
	            b: parseIntFromHex(match[3]),
	            a: convertHexToDecimal(match[4]),
	            format: named ? "name" : "hex8"
	        };
	    }
	    if ((match = matchers.hex6.exec(color))) {
	        return {
	            r: parseIntFromHex(match[1]),
	            g: parseIntFromHex(match[2]),
	            b: parseIntFromHex(match[3]),
	            format: named ? "name" : "hex"
	        };
	    }
	    if ((match = matchers.hex4.exec(color))) {
	        return {
	            r: parseIntFromHex(match[1] + '' + match[1]),
	            g: parseIntFromHex(match[2] + '' + match[2]),
	            b: parseIntFromHex(match[3] + '' + match[3]),
	            a: convertHexToDecimal(match[4] + '' + match[4]),
	            format: named ? "name" : "hex8"
	        };
	    }
	    if ((match = matchers.hex3.exec(color))) {
	        return {
	            r: parseIntFromHex(match[1] + '' + match[1]),
	            g: parseIntFromHex(match[2] + '' + match[2]),
	            b: parseIntFromHex(match[3] + '' + match[3]),
	            format: named ? "name" : "hex"
	        };
	    }

	    return false;
	}

	function validateWCAG2Parms(parms) {
	    // return valid WCAG2 parms for isReadable.
	    // If input parms are invalid, return {"level":"AA", "size":"small"}
	    var level, size;
	    parms = parms || {"level":"AA", "size":"small"};
	    level = (parms.level || "AA").toUpperCase();
	    size = (parms.size || "small").toLowerCase();
	    if (level !== "AA" && level !== "AAA") {
	        level = "AA";
	    }
	    if (size !== "small" && size !== "large") {
	        size = "small";
	    }
	    return {"level":level, "size":size};
	}

	// Node: Export function
	if (typeof module !== "undefined" && module.exports) {
	    module.exports = tinycolor;
	}
	// AMD/requirejs: Define the module
	else if (true) {
	    !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {return tinycolor;}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	}
	// Browser: Expose to window
	else {
	    window.tinycolor = tinycolor;
	}

	})(Math);


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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Swatch = undefined;

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _interaction = __webpack_require__(528);

	var _ = __webpack_require__(507);

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

	var ENTER = 13;

	var Swatch = exports.Swatch = function Swatch(_ref) {
	  var color = _ref.color,
	      style = _ref.style,
	      _ref$onClick = _ref.onClick,
	      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,
	      onHover = _ref.onHover,
	      _ref$title = _ref.title,
	      title = _ref$title === undefined ? color : _ref$title,
	      children = _ref.children,
	      focus = _ref.focus,
	      _ref$focusStyle = _ref.focusStyle,
	      focusStyle = _ref$focusStyle === undefined ? {} : _ref$focusStyle;

	  var transparent = color === 'transparent';
	  var styles = (0, _reactcss2.default)({
	    default: {
	      swatch: _extends({
	        background: color,
	        height: '100%',
	        width: '100%',
	        cursor: 'pointer',
	        position: 'relative',
	        outline: 'none'
	      }, style, focus ? focusStyle : {})
	    }
	  });

	  var handleClick = function handleClick(e) {
	    return onClick(color, e);
	  };
	  var handleKeyDown = function handleKeyDown(e) {
	    return e.keyCode === ENTER && onClick(color, e);
	  };
	  var handleHover = function handleHover(e) {
	    return onHover(color, e);
	  };

	  var optionalEvents = {};
	  if (onHover) {
	    optionalEvents.onMouseOver = handleHover;
	  }

	  return _react2.default.createElement(
	    'div',
	    _extends({
	      style: styles.swatch,
	      onClick: handleClick,
	      title: title,
	      tabIndex: 0,
	      onKeyDown: handleKeyDown
	    }, optionalEvents),
	    children,
	    transparent && _react2.default.createElement(_.Checkboard, {
	      borderRadius: styles.swatch.borderRadius,
	      boxShadow: 'inset 0 0 0 1px rgba(0,0,0,0.1)'
	    })
	  );
	};

	exports.default = (0, _interaction.handleFocus)(Swatch);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.handleFocus = undefined;

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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; } /* eslint-disable no-invalid-this */


	var handleFocus = exports.handleFocus = function handleFocus(Component) {
	  var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';
	  return function (_React$Component) {
	    _inherits(Focus, _React$Component);

	    function Focus() {
	      var _ref;

	      var _temp, _this, _ret;

	      _classCallCheck(this, Focus);

	      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
	        args[_key] = arguments[_key];
	      }

	      return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Focus.__proto__ || Object.getPrototypeOf(Focus)).call.apply(_ref, [this].concat(args))), _this), _this.state = { focus: false }, _this.handleFocus = function () {
	        return _this.setState({ focus: true });
	      }, _this.handleBlur = function () {
	        return _this.setState({ focus: false });
	      }, _temp), _possibleConstructorReturn(_this, _ret);
	    }

	    _createClass(Focus, [{
	      key: 'render',
	      value: function render() {
	        return _react2.default.createElement(
	          Span,
	          { onFocus: this.handleFocus, onBlur: this.handleBlur },
	          _react2.default.createElement(Component, _extends({}, this.props, this.state))
	        );
	      }
	    }]);

	    return Focus;
	  }(_react2.default.Component);
	};

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.AlphaPointer = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var AlphaPointer = exports.AlphaPointer = function AlphaPointer(_ref) {
	  var direction = _ref.direction;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        width: '18px',
	        height: '18px',
	        borderRadius: '50%',
	        transform: 'translate(-9px, -1px)',
	        backgroundColor: 'rgb(248, 248, 248)',
	        boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)'
	      }
	    },
	    'vertical': {
	      picker: {
	        transform: 'translate(-3px, -9px)'
	      }
	    }
	  }, { vertical: direction === 'vertical' });

	  return _react2.default.createElement('div', { style: styles.picker });
	};

	exports.default = AlphaPointer;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Block = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _common = __webpack_require__(507);

	var _BlockSwatches = __webpack_require__(531);

	var _BlockSwatches2 = _interopRequireDefault(_BlockSwatches);

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

	var Block = exports.Block = function Block(_ref) {
	  var onChange = _ref.onChange,
	      onSwatchHover = _ref.onSwatchHover,
	      hex = _ref.hex,
	      colors = _ref.colors,
	      width = _ref.width,
	      triangle = _ref.triangle,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var transparent = hex === 'transparent';
	  var handleChange = function handleChange(hexCode, e) {
	    _color2.default.isValidHex(hexCode) && onChange({
	      hex: hexCode,
	      source: 'hex'
	    }, e);
	  };

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      card: {
	        width: width,
	        background: '#fff',
	        boxShadow: '0 1px rgba(0,0,0,.1)',
	        borderRadius: '6px',
	        position: 'relative'
	      },
	      head: {
	        height: '110px',
	        background: hex,
	        borderRadius: '6px 6px 0 0',
	        display: 'flex',
	        alignItems: 'center',
	        justifyContent: 'center',
	        position: 'relative'
	      },
	      body: {
	        padding: '10px'
	      },
	      label: {
	        fontSize: '18px',
	        color: _color2.default.getContrastingColor(hex),
	        position: 'relative'
	      },
	      triangle: {
	        width: '0px',
	        height: '0px',
	        borderStyle: 'solid',
	        borderWidth: '0 10px 10px 10px',
	        borderColor: 'transparent transparent ' + hex + ' transparent',
	        position: 'absolute',
	        top: '-10px',
	        left: '50%',
	        marginLeft: '-10px'
	      },
	      input: {
	        width: '100%',
	        fontSize: '12px',
	        color: '#666',
	        border: '0px',
	        outline: 'none',
	        height: '22px',
	        boxShadow: 'inset 0 0 0 1px #ddd',
	        borderRadius: '4px',
	        padding: '0 7px',
	        boxSizing: 'border-box'
	      }
	    },
	    'hide-triangle': {
	      triangle: {
	        display: 'none'
	      }
	    }
	  }, { 'hide-triangle': triangle === 'hide' });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.card, className: 'block-picker ' + className },
	    _react2.default.createElement('div', { style: styles.triangle }),
	    _react2.default.createElement(
	      'div',
	      { style: styles.head },
	      transparent && _react2.default.createElement(_common.Checkboard, { borderRadius: '6px 6px 0 0' }),
	      _react2.default.createElement(
	        'div',
	        { style: styles.label },
	        hex
	      )
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.body },
	      _react2.default.createElement(_BlockSwatches2.default, { colors: colors, onClick: handleChange, onSwatchHover: onSwatchHover }),
	      _react2.default.createElement(_common.EditableInput, {
	        style: { input: styles.input },
	        value: hex,
	        onChange: handleChange
	      })
	    )
	  );
	};

	Block.propTypes = {
	  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),
	  colors: _propTypes2.default.arrayOf(_propTypes2.default.string),
	  triangle: _propTypes2.default.oneOf(['top', 'hide'])
	};

	Block.defaultProps = {
	  width: 170,
	  colors: ['#D9E3F0', '#F47373', '#697689', '#37D67A', '#2CCCE4', '#555555', '#dce775', '#ff8a65', '#ba68c8'],
	  triangle: 'top'
	};

	exports.default = (0, _common.ColorWrap)(Block);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.BlockSwatches = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _map = __webpack_require__(382);

	var _map2 = _interopRequireDefault(_map);

	var _common = __webpack_require__(507);

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

	var BlockSwatches = exports.BlockSwatches = function BlockSwatches(_ref) {
	  var colors = _ref.colors,
	      onClick = _ref.onClick,
	      onSwatchHover = _ref.onSwatchHover;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      swatches: {
	        marginRight: '-10px'
	      },
	      swatch: {
	        width: '22px',
	        height: '22px',
	        float: 'left',
	        marginRight: '10px',
	        marginBottom: '10px',
	        borderRadius: '4px'
	      },
	      clear: {
	        clear: 'both'
	      }
	    }
	  });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.swatches },
	    (0, _map2.default)(colors, function (c) {
	      return _react2.default.createElement(_common.Swatch, {
	        key: c,
	        color: c,
	        style: styles.swatch,
	        onClick: onClick,
	        onHover: onSwatchHover,
	        focusStyle: {
	          boxShadow: '0 0 4px ' + c
	        }
	      });
	    }),
	    _react2.default.createElement('div', { style: styles.clear })
	  );
	};

	exports.default = BlockSwatches;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Circle = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _map = __webpack_require__(382);

	var _map2 = _interopRequireDefault(_map);

	var _materialColors = __webpack_require__(533);

	var material = _interopRequireWildcard(_materialColors);

	var _common = __webpack_require__(507);

	var _CircleSwatch = __webpack_require__(534);

	var _CircleSwatch2 = _interopRequireDefault(_CircleSwatch);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

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

	var Circle = exports.Circle = function Circle(_ref) {
	  var width = _ref.width,
	      onChange = _ref.onChange,
	      onSwatchHover = _ref.onSwatchHover,
	      colors = _ref.colors,
	      hex = _ref.hex,
	      circleSize = _ref.circleSize,
	      circleSpacing = _ref.circleSpacing,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      card: {
	        width: width,
	        display: 'flex',
	        flexWrap: 'wrap',
	        marginRight: -circleSpacing,
	        marginBottom: -circleSpacing
	      }
	    }
	  });

	  var handleChange = function handleChange(hexCode, e) {
	    return onChange({ hex: hexCode, source: 'hex' }, e);
	  };

	  return _react2.default.createElement(
	    'div',
	    { style: styles.card, className: 'circle-picker ' + className },
	    (0, _map2.default)(colors, function (c) {
	      return _react2.default.createElement(_CircleSwatch2.default, {
	        key: c,
	        color: c,
	        onClick: handleChange,
	        onSwatchHover: onSwatchHover,
	        active: hex === c.toLowerCase(),
	        circleSize: circleSize,
	        circleSpacing: circleSpacing
	      });
	    })
	  );
	};

	Circle.propTypes = {
	  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),
	  circleSize: _propTypes2.default.number,
	  circleSpacing: _propTypes2.default.number
	};

	Circle.defaultProps = {
	  width: 252,
	  circleSize: 28,
	  circleSpacing: 14,
	  colors: [material.red['500'], material.pink['500'], material.purple['500'], material.deepPurple['500'], material.indigo['500'], material.blue['500'], material.lightBlue['500'], material.cyan['500'], material.teal['500'], material.green['500'], material.lightGreen['500'], material.lime['500'], material.yellow['500'], material.amber['500'], material.orange['500'], material.deepOrange['500'], material.brown['500'], material.blueGrey['500']]
	};

	exports.default = (0, _common.ColorWrap)(Circle);

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

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(root, factory) {
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports === 'object') {
	    module.exports = factory();
	  } else {
	    root.materialColors = factory();
	  }
	})(this, function() {
	  return {"red":{"50":"#ffebee","100":"#ffcdd2","200":"#ef9a9a","300":"#e57373","400":"#ef5350","500":"#f44336","600":"#e53935","700":"#d32f2f","800":"#c62828","900":"#b71c1c","a100":"#ff8a80","a200":"#ff5252","a400":"#ff1744","a700":"#d50000"},"pink":{"50":"#fce4ec","100":"#f8bbd0","200":"#f48fb1","300":"#f06292","400":"#ec407a","500":"#e91e63","600":"#d81b60","700":"#c2185b","800":"#ad1457","900":"#880e4f","a100":"#ff80ab","a200":"#ff4081","a400":"#f50057","a700":"#c51162"},"purple":{"50":"#f3e5f5","100":"#e1bee7","200":"#ce93d8","300":"#ba68c8","400":"#ab47bc","500":"#9c27b0","600":"#8e24aa","700":"#7b1fa2","800":"#6a1b9a","900":"#4a148c","a100":"#ea80fc","a200":"#e040fb","a400":"#d500f9","a700":"#aa00ff"},"deepPurple":{"50":"#ede7f6","100":"#d1c4e9","200":"#b39ddb","300":"#9575cd","400":"#7e57c2","500":"#673ab7","600":"#5e35b1","700":"#512da8","800":"#4527a0","900":"#311b92","a100":"#b388ff","a200":"#7c4dff","a400":"#651fff","a700":"#6200ea"},"indigo":{"50":"#e8eaf6","100":"#c5cae9","200":"#9fa8da","300":"#7986cb","400":"#5c6bc0","500":"#3f51b5","600":"#3949ab","700":"#303f9f","800":"#283593","900":"#1a237e","a100":"#8c9eff","a200":"#536dfe","a400":"#3d5afe","a700":"#304ffe"},"blue":{"50":"#e3f2fd","100":"#bbdefb","200":"#90caf9","300":"#64b5f6","400":"#42a5f5","500":"#2196f3","600":"#1e88e5","700":"#1976d2","800":"#1565c0","900":"#0d47a1","a100":"#82b1ff","a200":"#448aff","a400":"#2979ff","a700":"#2962ff"},"lightBlue":{"50":"#e1f5fe","100":"#b3e5fc","200":"#81d4fa","300":"#4fc3f7","400":"#29b6f6","500":"#03a9f4","600":"#039be5","700":"#0288d1","800":"#0277bd","900":"#01579b","a100":"#80d8ff","a200":"#40c4ff","a400":"#00b0ff","a700":"#0091ea"},"cyan":{"50":"#e0f7fa","100":"#b2ebf2","200":"#80deea","300":"#4dd0e1","400":"#26c6da","500":"#00bcd4","600":"#00acc1","700":"#0097a7","800":"#00838f","900":"#006064","a100":"#84ffff","a200":"#18ffff","a400":"#00e5ff","a700":"#00b8d4"},"teal":{"50":"#e0f2f1","100":"#b2dfdb","200":"#80cbc4","300":"#4db6ac","400":"#26a69a","500":"#009688","600":"#00897b","700":"#00796b","800":"#00695c","900":"#004d40","a100":"#a7ffeb","a200":"#64ffda","a400":"#1de9b6","a700":"#00bfa5"},"green":{"50":"#e8f5e9","100":"#c8e6c9","200":"#a5d6a7","300":"#81c784","400":"#66bb6a","500":"#4caf50","600":"#43a047","700":"#388e3c","800":"#2e7d32","900":"#1b5e20","a100":"#b9f6ca","a200":"#69f0ae","a400":"#00e676","a700":"#00c853"},"lightGreen":{"50":"#f1f8e9","100":"#dcedc8","200":"#c5e1a5","300":"#aed581","400":"#9ccc65","500":"#8bc34a","600":"#7cb342","700":"#689f38","800":"#558b2f","900":"#33691e","a100":"#ccff90","a200":"#b2ff59","a400":"#76ff03","a700":"#64dd17"},"lime":{"50":"#f9fbe7","100":"#f0f4c3","200":"#e6ee9c","300":"#dce775","400":"#d4e157","500":"#cddc39","600":"#c0ca33","700":"#afb42b","800":"#9e9d24","900":"#827717","a100":"#f4ff81","a200":"#eeff41","a400":"#c6ff00","a700":"#aeea00"},"yellow":{"50":"#fffde7","100":"#fff9c4","200":"#fff59d","300":"#fff176","400":"#ffee58","500":"#ffeb3b","600":"#fdd835","700":"#fbc02d","800":"#f9a825","900":"#f57f17","a100":"#ffff8d","a200":"#ffff00","a400":"#ffea00","a700":"#ffd600"},"amber":{"50":"#fff8e1","100":"#ffecb3","200":"#ffe082","300":"#ffd54f","400":"#ffca28","500":"#ffc107","600":"#ffb300","700":"#ffa000","800":"#ff8f00","900":"#ff6f00","a100":"#ffe57f","a200":"#ffd740","a400":"#ffc400","a700":"#ffab00"},"orange":{"50":"#fff3e0","100":"#ffe0b2","200":"#ffcc80","300":"#ffb74d","400":"#ffa726","500":"#ff9800","600":"#fb8c00","700":"#f57c00","800":"#ef6c00","900":"#e65100","a100":"#ffd180","a200":"#ffab40","a400":"#ff9100","a700":"#ff6d00"},"deepOrange":{"50":"#fbe9e7","100":"#ffccbc","200":"#ffab91","300":"#ff8a65","400":"#ff7043","500":"#ff5722","600":"#f4511e","700":"#e64a19","800":"#d84315","900":"#bf360c","a100":"#ff9e80","a200":"#ff6e40","a400":"#ff3d00","a700":"#dd2c00"},"brown":{"50":"#efebe9","100":"#d7ccc8","200":"#bcaaa4","300":"#a1887f","400":"#8d6e63","500":"#795548","600":"#6d4c41","700":"#5d4037","800":"#4e342e","900":"#3e2723"},"grey":{"50":"#fafafa","100":"#f5f5f5","200":"#eeeeee","300":"#e0e0e0","400":"#bdbdbd","500":"#9e9e9e","600":"#757575","700":"#616161","800":"#424242","900":"#212121"},"blueGrey":{"50":"#eceff1","100":"#cfd8dc","200":"#b0bec5","300":"#90a4ae","400":"#78909c","500":"#607d8b","600":"#546e7a","700":"#455a64","800":"#37474f","900":"#263238"},"darkText":{"primary":"rgba(0, 0, 0, 0.87)","secondary":"rgba(0, 0, 0, 0.54)","disabled":"rgba(0, 0, 0, 0.38)","dividers":"rgba(0, 0, 0, 0.12)"},"lightText":{"primary":"rgba(255, 255, 255, 1)","secondary":"rgba(255, 255, 255, 0.7)","disabled":"rgba(255, 255, 255, 0.5)","dividers":"rgba(255, 255, 255, 0.12)"},"darkIcons":{"active":"rgba(0, 0, 0, 0.54)","inactive":"rgba(0, 0, 0, 0.38)"},"lightIcons":{"active":"rgba(255, 255, 255, 1)","inactive":"rgba(255, 255, 255, 0.5)"},"white":"#ffffff","black":"#000000"};
	});


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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.CircleSwatch = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

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

	var CircleSwatch = exports.CircleSwatch = function CircleSwatch(_ref) {
	  var color = _ref.color,
	      onClick = _ref.onClick,
	      onSwatchHover = _ref.onSwatchHover,
	      hover = _ref.hover,
	      active = _ref.active,
	      circleSize = _ref.circleSize,
	      circleSpacing = _ref.circleSpacing;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      swatch: {
	        width: circleSize,
	        height: circleSize,
	        marginRight: circleSpacing,
	        marginBottom: circleSpacing,
	        transform: 'scale(1)',
	        transition: '100ms transform ease'
	      },
	      Swatch: {
	        borderRadius: '50%',
	        background: 'transparent',
	        boxShadow: 'inset 0 0 0 ' + circleSize / 2 + 'px ' + color,
	        transition: '100ms box-shadow ease'
	      }
	    },
	    'hover': {
	      swatch: {
	        transform: 'scale(1.2)'
	      }
	    },
	    'active': {
	      Swatch: {
	        boxShadow: 'inset 0 0 0 3px ' + color
	      }
	    }
	  }, { hover: hover, active: active });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.swatch },
	    _react2.default.createElement(_common.Swatch, {
	      style: styles.Swatch,
	      color: color,
	      onClick: onClick,
	      onHover: onSwatchHover,
	      focusStyle: { boxShadow: styles.Swatch.boxShadow + ', 0 0 5px ' + color }
	    })
	  );
	};

	CircleSwatch.defaultProps = {
	  circleSize: 28,
	  circleSpacing: 14
	};

	exports.default = (0, _reactcss.handleHover)(CircleSwatch);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Chrome = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

	var _ChromeFields = __webpack_require__(536);

	var _ChromeFields2 = _interopRequireDefault(_ChromeFields);

	var _ChromePointer = __webpack_require__(537);

	var _ChromePointer2 = _interopRequireDefault(_ChromePointer);

	var _ChromePointerCircle = __webpack_require__(538);

	var _ChromePointerCircle2 = _interopRequireDefault(_ChromePointerCircle);

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

	var Chrome = exports.Chrome = function Chrome(_ref) {
	  var onChange = _ref.onChange,
	      disableAlpha = _ref.disableAlpha,
	      rgb = _ref.rgb,
	      hsl = _ref.hsl,
	      hsv = _ref.hsv,
	      hex = _ref.hex,
	      renderers = _ref.renderers,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        background: '#fff',
	        borderRadius: '2px',
	        boxShadow: '0 0 2px rgba(0,0,0,.3), 0 4px 8px rgba(0,0,0,.3)',
	        boxSizing: 'initial',
	        width: '225px',
	        fontFamily: 'Menlo'
	      },
	      saturation: {
	        width: '100%',
	        paddingBottom: '55%',
	        position: 'relative',
	        borderRadius: '2px 2px 0 0',
	        overflow: 'hidden'
	      },
	      Saturation: {
	        radius: '2px 2px 0 0'
	      },
	      body: {
	        padding: '16px 16px 12px'
	      },
	      controls: {
	        display: 'flex'
	      },
	      color: {
	        width: '32px'
	      },
	      swatch: {
	        marginTop: '6px',
	        width: '16px',
	        height: '16px',
	        borderRadius: '8px',
	        position: 'relative',
	        overflow: 'hidden'
	      },
	      active: {
	        absolute: '0px 0px 0px 0px',
	        borderRadius: '8px',
	        boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.1)',
	        background: 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + rgb.a + ')',
	        zIndex: '2'
	      },
	      toggles: {
	        flex: '1'
	      },
	      hue: {
	        height: '10px',
	        position: 'relative',
	        marginBottom: '8px'
	      },
	      Hue: {
	        radius: '2px'
	      },
	      alpha: {
	        height: '10px',
	        position: 'relative'
	      },
	      Alpha: {
	        radius: '2px'
	      }
	    },
	    'disableAlpha': {
	      color: {
	        width: '22px'
	      },
	      alpha: {
	        display: 'none'
	      },
	      hue: {
	        marginBottom: '0px'
	      },
	      swatch: {
	        width: '10px',
	        height: '10px',
	        marginTop: '0px'
	      }
	    }
	  }, { disableAlpha: disableAlpha });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.picker, className: 'chrome-picker ' + className },
	    _react2.default.createElement(
	      'div',
	      { style: styles.saturation },
	      _react2.default.createElement(_common.Saturation, {
	        style: styles.Saturation,
	        hsl: hsl,
	        hsv: hsv,
	        pointer: _ChromePointerCircle2.default,
	        onChange: onChange
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.body },
	      _react2.default.createElement(
	        'div',
	        { style: styles.controls, className: 'flexbox-fix' },
	        _react2.default.createElement(
	          'div',
	          { style: styles.color },
	          _react2.default.createElement(
	            'div',
	            { style: styles.swatch },
	            _react2.default.createElement('div', { style: styles.active }),
	            _react2.default.createElement(_common.Checkboard, { renderers: renderers })
	          )
	        ),
	        _react2.default.createElement(
	          'div',
	          { style: styles.toggles },
	          _react2.default.createElement(
	            'div',
	            { style: styles.hue },
	            _react2.default.createElement(_common.Hue, {
	              style: styles.Hue,
	              hsl: hsl,
	              pointer: _ChromePointer2.default,
	              onChange: onChange
	            })
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.alpha },
	            _react2.default.createElement(_common.Alpha, {
	              style: styles.Alpha,
	              rgb: rgb,
	              hsl: hsl,
	              pointer: _ChromePointer2.default,
	              renderers: renderers,
	              onChange: onChange
	            })
	          )
	        )
	      ),
	      _react2.default.createElement(_ChromeFields2.default, {
	        rgb: rgb,
	        hsl: hsl,
	        hex: hex,
	        onChange: onChange,
	        disableAlpha: disableAlpha
	      })
	    )
	  );
	};

	Chrome.propTypes = {
	  disableAlpha: _propTypes2.default.bool
	};

	Chrome.defaultProps = {
	  disableAlpha: false
	};

	exports.default = (0, _common.ColorWrap)(Chrome);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.ChromeFields = undefined;

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _common = __webpack_require__(507);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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; } /* eslint-disable react/no-did-mount-set-state, no-param-reassign */

	var ChromeFields = exports.ChromeFields = function (_React$Component) {
	  _inherits(ChromeFields, _React$Component);

	  function ChromeFields() {
	    var _ref;

	    var _temp, _this, _ret;

	    _classCallCheck(this, ChromeFields);

	    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
	      args[_key] = arguments[_key];
	    }

	    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ChromeFields.__proto__ || Object.getPrototypeOf(ChromeFields)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
	      view: ''
	    }, _this.toggleViews = function () {
	      if (_this.state.view === 'hex') {
	        _this.setState({ view: 'rgb' });
	      } else if (_this.state.view === 'rgb') {
	        _this.setState({ view: 'hsl' });
	      } else if (_this.state.view === 'hsl') {
	        if (_this.props.hsl.a === 1) {
	          _this.setState({ view: 'hex' });
	        } else {
	          _this.setState({ view: 'rgb' });
	        }
	      }
	    }, _this.handleChange = function (data, e) {
	      if (data.hex) {
	        _color2.default.isValidHex(data.hex) && _this.props.onChange({
	          hex: data.hex,
	          source: 'hex'
	        }, e);
	      } else if (data.r || data.g || data.b) {
	        _this.props.onChange({
	          r: data.r || _this.props.rgb.r,
	          g: data.g || _this.props.rgb.g,
	          b: data.b || _this.props.rgb.b,
	          source: 'rgb'
	        }, e);
	      } else if (data.a) {
	        if (data.a < 0) {
	          data.a = 0;
	        } else if (data.a > 1) {
	          data.a = 1;
	        }

	        _this.props.onChange({
	          h: _this.props.hsl.h,
	          s: _this.props.hsl.s,
	          l: _this.props.hsl.l,
	          a: Math.round(data.a * 100) / 100,
	          source: 'rgb'
	        }, e);
	      } else if (data.h || data.s || data.l) {
	        _this.props.onChange({
	          h: data.h || _this.props.hsl.h,
	          s: Number(data.s && data.s || _this.props.hsl.s),
	          l: Number(data.l && data.l || _this.props.hsl.l),
	          source: 'hsl'
	        }, e);
	      }
	    }, _this.showHighlight = function (e) {
	      e.target.style.background = '#eee';
	    }, _this.hideHighlight = function (e) {
	      e.target.style.background = 'transparent';
	    }, _temp), _possibleConstructorReturn(_this, _ret);
	  }

	  _createClass(ChromeFields, [{
	    key: 'componentDidMount',
	    value: function componentDidMount() {
	      if (this.props.hsl.a === 1 && this.state.view !== 'hex') {
	        this.setState({ view: 'hex' });
	      } else if (this.state.view !== 'rgb' && this.state.view !== 'hsl') {
	        this.setState({ view: 'rgb' });
	      }
	    }
	  }, {
	    key: 'componentWillReceiveProps',
	    value: function componentWillReceiveProps(nextProps) {
	      if (nextProps.hsl.a !== 1 && this.state.view === 'hex') {
	        this.setState({ view: 'rgb' });
	      }
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      var _this2 = this;

	      var styles = (0, _reactcss2.default)({
	        'default': {
	          wrap: {
	            paddingTop: '16px',
	            display: 'flex'
	          },
	          fields: {
	            flex: '1',
	            display: 'flex',
	            marginLeft: '-6px'
	          },
	          field: {
	            paddingLeft: '6px',
	            width: '100%'
	          },
	          alpha: {
	            paddingLeft: '6px',
	            width: '100%'
	          },
	          toggle: {
	            width: '32px',
	            textAlign: 'right',
	            position: 'relative'
	          },
	          icon: {
	            marginRight: '-4px',
	            marginTop: '12px',
	            cursor: 'pointer',
	            position: 'relative'
	          },
	          iconHighlight: {
	            position: 'absolute',
	            width: '24px',
	            height: '28px',
	            background: '#eee',
	            borderRadius: '4px',
	            top: '10px',
	            left: '12px',
	            display: 'none'
	          },
	          input: {
	            fontSize: '11px',
	            color: '#333',
	            width: '100%',
	            borderRadius: '2px',
	            border: 'none',
	            boxShadow: 'inset 0 0 0 1px #dadada',
	            height: '21px',
	            textAlign: 'center'
	          },
	          label: {
	            textTransform: 'uppercase',
	            fontSize: '11px',
	            lineHeight: '11px',
	            color: '#969696',
	            textAlign: 'center',
	            display: 'block',
	            marginTop: '12px'
	          },
	          svg: {
	            width: '24px',
	            height: '24px',
	            border: '1px transparent solid',
	            borderRadius: '5px'
	          }
	        },
	        'disableAlpha': {
	          alpha: {
	            display: 'none'
	          }
	        }
	      }, this.props, this.state);

	      var fields = void 0;
	      if (this.state.view === 'hex') {
	        fields = _react2.default.createElement(
	          'div',
	          { style: styles.fields, className: 'flexbox-fix' },
	          _react2.default.createElement(
	            'div',
	            { style: styles.field },
	            _react2.default.createElement(_common.EditableInput, {
	              style: { input: styles.input, label: styles.label },
	              label: 'hex', value: this.props.hex,
	              onChange: this.handleChange
	            })
	          )
	        );
	      } else if (this.state.view === 'rgb') {
	        fields = _react2.default.createElement(
	          'div',
	          { style: styles.fields, className: 'flexbox-fix' },
	          _react2.default.createElement(
	            'div',
	            { style: styles.field },
	            _react2.default.createElement(_common.EditableInput, {
	              style: { input: styles.input, label: styles.label },
	              label: 'r',
	              value: this.props.rgb.r,
	              onChange: this.handleChange
	            })
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.field },
	            _react2.default.createElement(_common.EditableInput, {
	              style: { input: styles.input, label: styles.label },
	              label: 'g',
	              value: this.props.rgb.g,
	              onChange: this.handleChange
	            })
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.field },
	            _react2.default.createElement(_common.EditableInput, {
	              style: { input: styles.input, label: styles.label },
	              label: 'b',
	              value: this.props.rgb.b,
	              onChange: this.handleChange
	            })
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.alpha },
	            _react2.default.createElement(_common.EditableInput, {
	              style: { input: styles.input, label: styles.label },
	              label: 'a',
	              value: this.props.rgb.a,
	              arrowOffset: 0.01,
	              onChange: this.handleChange
	            })
	          )
	        );
	      } else if (this.state.view === 'hsl') {
	        fields = _react2.default.createElement(
	          'div',
	          { style: styles.fields, className: 'flexbox-fix' },
	          _react2.default.createElement(
	            'div',
	            { style: styles.field },
	            _react2.default.createElement(_common.EditableInput, {
	              style: { input: styles.input, label: styles.label },
	              label: 'h',
	              value: Math.round(this.props.hsl.h),
	              onChange: this.handleChange
	            })
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.field },
	            _react2.default.createElement(_common.EditableInput, {
	              style: { input: styles.input, label: styles.label },
	              label: 's',
	              value: Math.round(this.props.hsl.s * 100) + '%',
	              onChange: this.handleChange
	            })
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.field },
	            _react2.default.createElement(_common.EditableInput, {
	              style: { input: styles.input, label: styles.label },
	              label: 'l',
	              value: Math.round(this.props.hsl.l * 100) + '%',
	              onChange: this.handleChange
	            })
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.alpha },
	            _react2.default.createElement(_common.EditableInput, {
	              style: { input: styles.input, label: styles.label },
	              label: 'a',
	              value: this.props.hsl.a,
	              arrowOffset: 0.01,
	              onChange: this.handleChange
	            })
	          )
	        );
	      }

	      return _react2.default.createElement(
	        'div',
	        { style: styles.wrap, className: 'flexbox-fix' },
	        fields,
	        _react2.default.createElement(
	          'div',
	          { style: styles.toggle },
	          _react2.default.createElement(
	            'div',
	            { style: styles.icon, onClick: this.toggleViews, ref: function ref(icon) {
	                return _this2.icon = icon;
	              } },
	            _react2.default.createElement(
	              'svg',
	              {
	                style: styles.svg,
	                viewBox: '0 0 24 24',
	                onMouseOver: this.showHighlight,
	                onMouseEnter: this.showHighlight,
	                onMouseOut: this.hideHighlight
	              },
	              _react2.default.createElement('path', {
	                ref: function ref(iconUp) {
	                  return _this2.iconUp = iconUp;
	                },
	                fill: '#333',
	                d: 'M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z'
	              }),
	              _react2.default.createElement('path', {
	                ref: function ref(iconDown) {
	                  return _this2.iconDown = iconDown;
	                },
	                fill: '#333',
	                d: 'M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15Z'
	              })
	            )
	          )
	        )
	      );
	    }
	  }]);

	  return ChromeFields;
	}(_react2.default.Component);

	exports.default = ChromeFields;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.ChromePointer = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var ChromePointer = exports.ChromePointer = function ChromePointer() {
	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        width: '12px',
	        height: '12px',
	        borderRadius: '6px',
	        transform: 'translate(-6px, -1px)',
	        backgroundColor: 'rgb(248, 248, 248)',
	        boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)'
	      }
	    }
	  });

	  return _react2.default.createElement('div', { style: styles.picker });
	};

	exports.default = ChromePointer;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.ChromePointerCircle = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var ChromePointerCircle = exports.ChromePointerCircle = function ChromePointerCircle() {
	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        width: '12px',
	        height: '12px',
	        borderRadius: '6px',
	        boxShadow: 'inset 0 0 0 1px #fff',
	        transform: 'translate(-6px, -6px)'
	      }
	    }
	  });

	  return _react2.default.createElement('div', { style: styles.picker });
	};

	exports.default = ChromePointerCircle;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Compact = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _map = __webpack_require__(382);

	var _map2 = _interopRequireDefault(_map);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _common = __webpack_require__(507);

	var _CompactColor = __webpack_require__(540);

	var _CompactColor2 = _interopRequireDefault(_CompactColor);

	var _CompactFields = __webpack_require__(541);

	var _CompactFields2 = _interopRequireDefault(_CompactFields);

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

	var Compact = exports.Compact = function Compact(_ref) {
	  var onChange = _ref.onChange,
	      onSwatchHover = _ref.onSwatchHover,
	      colors = _ref.colors,
	      hex = _ref.hex,
	      rgb = _ref.rgb,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      Compact: {
	        background: '#f6f6f6',
	        radius: '4px'
	      },
	      compact: {
	        paddingTop: '5px',
	        paddingLeft: '5px',
	        boxSizing: 'initial',
	        width: '240px'
	      },
	      clear: {
	        clear: 'both'
	      }
	    }
	  });

	  var handleChange = function handleChange(data, e) {
	    if (data.hex) {
	      _color2.default.isValidHex(data.hex) && onChange({
	        hex: data.hex,
	        source: 'hex'
	      }, e);
	    } else {
	      onChange(data, e);
	    }
	  };

	  return _react2.default.createElement(
	    _common.Raised,
	    { style: styles.Compact },
	    _react2.default.createElement(
	      'div',
	      { style: styles.compact, className: 'compact-picker ' + className },
	      _react2.default.createElement(
	        'div',
	        null,
	        (0, _map2.default)(colors, function (c) {
	          return _react2.default.createElement(_CompactColor2.default, {
	            key: c,
	            color: c,
	            active: c.toLowerCase() === hex,
	            onClick: handleChange,
	            onSwatchHover: onSwatchHover
	          });
	        }),
	        _react2.default.createElement('div', { style: styles.clear })
	      ),
	      _react2.default.createElement(_CompactFields2.default, { hex: hex, rgb: rgb, onChange: handleChange })
	    )
	  );
	};

	Compact.propTypes = {
	  colors: _propTypes2.default.arrayOf(_propTypes2.default.string)
	};

	Compact.defaultProps = {
	  colors: ['#4D4D4D', '#999999', '#FFFFFF', '#F44E3B', '#FE9200', '#FCDC00', '#DBDF00', '#A4DD00', '#68CCCA', '#73D8FF', '#AEA1FF', '#FDA1FF', '#333333', '#808080', '#cccccc', '#D33115', '#E27300', '#FCC400', '#B0BC00', '#68BC00', '#16A5A5', '#009CE0', '#7B64FF', '#FA28FF', '#000000', '#666666', '#B3B3B3', '#9F0500', '#C45100', '#FB9E00', '#808900', '#194D33', '#0C797D', '#0062B1', '#653294', '#AB149E']
	};

	exports.default = (0, _common.ColorWrap)(Compact);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.CompactColor = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _common = __webpack_require__(507);

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

	var CompactColor = exports.CompactColor = function CompactColor(_ref) {
	  var color = _ref.color,
	      _ref$onClick = _ref.onClick,
	      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,
	      onSwatchHover = _ref.onSwatchHover,
	      active = _ref.active;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      color: {
	        background: color,
	        width: '15px',
	        height: '15px',
	        float: 'left',
	        marginRight: '5px',
	        marginBottom: '5px',
	        position: 'relative',
	        cursor: 'pointer'
	      },
	      dot: {
	        absolute: '5px 5px 5px 5px',
	        background: _color2.default.getContrastingColor(color),
	        borderRadius: '50%',
	        opacity: '0'
	      }
	    },
	    'active': {
	      dot: {
	        opacity: '1'
	      }
	    },
	    'color-#FFFFFF': {
	      color: {
	        boxShadow: 'inset 0 0 0 1px #ddd'
	      },
	      dot: {
	        background: '#000'
	      }
	    },
	    'transparent': {
	      dot: {
	        background: '#000'
	      }
	    }
	  }, { active: active, 'color-#FFFFFF': color === '#FFFFFF', 'transparent': color === 'transparent' });

	  return _react2.default.createElement(
	    _common.Swatch,
	    {
	      style: styles.color,
	      color: color,
	      onClick: onClick,
	      onHover: onSwatchHover,
	      focusStyle: { boxShadow: '0 0 4px ' + color }
	    },
	    _react2.default.createElement('div', { style: styles.dot })
	  );
	};

	exports.default = CompactColor;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.CompactFields = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

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

	var CompactFields = exports.CompactFields = function CompactFields(_ref) {
	  var hex = _ref.hex,
	      rgb = _ref.rgb,
	      onChange = _ref.onChange;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      fields: {
	        display: 'flex',
	        paddingBottom: '6px',
	        paddingRight: '5px',
	        position: 'relative'
	      },
	      active: {
	        position: 'absolute',
	        top: '6px',
	        left: '5px',
	        height: '9px',
	        width: '9px',
	        background: hex
	      },
	      HEXwrap: {
	        flex: '6',
	        position: 'relative'
	      },
	      HEXinput: {
	        width: '80%',
	        padding: '0px',
	        paddingLeft: '20%',
	        border: 'none',
	        outline: 'none',
	        background: 'none',
	        fontSize: '12px',
	        color: '#333',
	        height: '16px'
	      },
	      HEXlabel: {
	        display: 'none'
	      },
	      RGBwrap: {
	        flex: '3',
	        position: 'relative'
	      },
	      RGBinput: {
	        width: '70%',
	        padding: '0px',
	        paddingLeft: '30%',
	        border: 'none',
	        outline: 'none',
	        background: 'none',
	        fontSize: '12px',
	        color: '#333',
	        height: '16px'
	      },
	      RGBlabel: {
	        position: 'absolute',
	        top: '3px',
	        left: '0px',
	        lineHeight: '16px',
	        textTransform: 'uppercase',
	        fontSize: '12px',
	        color: '#999'
	      }
	    }
	  });

	  var handleChange = function handleChange(data, e) {
	    if (data.r || data.g || data.b) {
	      onChange({
	        r: data.r || rgb.r,
	        g: data.g || rgb.g,
	        b: data.b || rgb.b,
	        source: 'rgb'
	      }, e);
	    } else {
	      onChange({
	        hex: data.hex,
	        source: 'hex'
	      }, e);
	    }
	  };

	  return _react2.default.createElement(
	    'div',
	    { style: styles.fields, className: 'flexbox-fix' },
	    _react2.default.createElement('div', { style: styles.active }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.HEXwrap, input: styles.HEXinput, label: styles.HEXlabel },
	      label: 'hex',
	      value: hex,
	      onChange: handleChange
	    }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	      label: 'r',
	      value: rgb.r,
	      onChange: handleChange
	    }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	      label: 'g',
	      value: rgb.g,
	      onChange: handleChange
	    }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	      label: 'b',
	      value: rgb.b,
	      onChange: handleChange
	    })
	  );
	};

	exports.default = CompactFields;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Github = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _map = __webpack_require__(382);

	var _map2 = _interopRequireDefault(_map);

	var _common = __webpack_require__(507);

	var _GithubSwatch = __webpack_require__(543);

	var _GithubSwatch2 = _interopRequireDefault(_GithubSwatch);

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

	var Github = exports.Github = function Github(_ref) {
	  var width = _ref.width,
	      colors = _ref.colors,
	      onChange = _ref.onChange,
	      onSwatchHover = _ref.onSwatchHover,
	      triangle = _ref.triangle,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      card: {
	        width: width,
	        background: '#fff',
	        border: '1px solid rgba(0,0,0,0.2)',
	        boxShadow: '0 3px 12px rgba(0,0,0,0.15)',
	        borderRadius: '4px',
	        position: 'relative',
	        padding: '5px',
	        display: 'flex',
	        flexWrap: 'wrap'
	      },
	      triangle: {
	        position: 'absolute',
	        border: '7px solid transparent',
	        borderBottomColor: '#fff'
	      },
	      triangleShadow: {
	        position: 'absolute',
	        border: '8px solid transparent',
	        borderBottomColor: 'rgba(0,0,0,0.15)'
	      }
	    },
	    'hide-triangle': {
	      triangle: {
	        display: 'none'
	      },
	      triangleShadow: {
	        display: 'none'
	      }
	    },
	    'top-left-triangle': {
	      triangle: {
	        top: '-14px',
	        left: '10px'
	      },
	      triangleShadow: {
	        top: '-16px',
	        left: '9px'
	      }
	    },
	    'top-right-triangle': {
	      triangle: {
	        top: '-14px',
	        right: '10px'
	      },
	      triangleShadow: {
	        top: '-16px',
	        right: '9px'
	      }
	    },
	    'bottom-left-triangle': {
	      triangle: {
	        top: '35px',
	        left: '10px',
	        transform: 'rotate(180deg)'
	      },
	      triangleShadow: {
	        top: '37px',
	        left: '9px',
	        transform: 'rotate(180deg)'
	      }
	    },
	    'bottom-right-triangle': {
	      triangle: {
	        top: '35px',
	        right: '10px',
	        transform: 'rotate(180deg)'
	      },
	      triangleShadow: {
	        top: '37px',
	        right: '9px',
	        transform: 'rotate(180deg)'
	      }
	    }
	  }, {
	    'hide-triangle': triangle === 'hide',
	    'top-left-triangle': triangle === 'top-left',
	    'top-right-triangle': triangle === 'top-right',
	    'bottom-left-triangle': triangle == 'bottom-left',
	    'bottom-right-triangle': triangle === 'bottom-right'
	  });

	  var handleChange = function handleChange(hex, e) {
	    return onChange({ hex: hex, source: 'hex' }, e);
	  };

	  return _react2.default.createElement(
	    'div',
	    { style: styles.card, className: 'github-picker ' + className },
	    _react2.default.createElement('div', { style: styles.triangleShadow }),
	    _react2.default.createElement('div', { style: styles.triangle }),
	    (0, _map2.default)(colors, function (c) {
	      return _react2.default.createElement(_GithubSwatch2.default, {
	        color: c,
	        key: c,
	        onClick: handleChange,
	        onSwatchHover: onSwatchHover
	      });
	    })
	  );
	};

	Github.propTypes = {
	  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),
	  colors: _propTypes2.default.arrayOf(_propTypes2.default.string),
	  triangle: _propTypes2.default.oneOf(['hide', 'top-left', 'top-right', 'bottom-left', 'bottom-right'])
	};

	Github.defaultProps = {
	  width: 200,
	  colors: ['#B80000', '#DB3E00', '#FCCB00', '#008B02', '#006B76', '#1273DE', '#004DCF', '#5300EB', '#EB9694', '#FAD0C3', '#FEF3BD', '#C1E1C5', '#BEDADC', '#C4DEF6', '#BED3F3', '#D4C4FB'],
	  triangle: 'top-left'
	};

	exports.default = (0, _common.ColorWrap)(Github);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.GithubSwatch = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

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

	var GithubSwatch = exports.GithubSwatch = function GithubSwatch(_ref) {
	  var hover = _ref.hover,
	      color = _ref.color,
	      onClick = _ref.onClick,
	      onSwatchHover = _ref.onSwatchHover;

	  var hoverSwatch = {
	    position: 'relative',
	    zIndex: '2',
	    outline: '2px solid #fff',
	    boxShadow: '0 0 5px 2px rgba(0,0,0,0.25)'
	  };

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      swatch: {
	        width: '25px',
	        height: '25px',
	        fontSize: '0'
	      }
	    },
	    'hover': {
	      swatch: hoverSwatch
	    }
	  }, { hover: hover });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.swatch },
	    _react2.default.createElement(_common.Swatch, {
	      color: color,
	      onClick: onClick,
	      onHover: onSwatchHover,
	      focusStyle: hoverSwatch
	    })
	  );
	};

	exports.default = (0, _reactcss.handleHover)(GithubSwatch);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.HuePicker = undefined;

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

	var _HuePointer = __webpack_require__(545);

	var _HuePointer2 = _interopRequireDefault(_HuePointer);

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

	var HuePicker = exports.HuePicker = function HuePicker(_ref) {
	  var width = _ref.width,
	      height = _ref.height,
	      onChange = _ref.onChange,
	      hsl = _ref.hsl,
	      direction = _ref.direction,
	      pointer = _ref.pointer,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        position: 'relative',
	        width: width,
	        height: height
	      },
	      hue: {
	        radius: '2px'
	      }
	    }
	  });

	  // Overwrite to provide pure hue color
	  var handleChange = function handleChange(data) {
	    return onChange({ a: 1, h: data.h, l: 0.5, s: 1 });
	  };

	  return _react2.default.createElement(
	    'div',
	    { style: styles.picker, className: 'hue-picker ' + className },
	    _react2.default.createElement(_common.Hue, _extends({}, styles.hue, {
	      hsl: hsl,
	      pointer: pointer,
	      onChange: handleChange,
	      direction: direction
	    }))
	  );
	};

	HuePicker.defaultProps = {
	  width: '316px',
	  height: '16px',
	  direction: 'horizontal',
	  pointer: _HuePointer2.default
	};

	exports.default = (0, _common.ColorWrap)(HuePicker);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.SliderPointer = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var SliderPointer = exports.SliderPointer = function SliderPointer(_ref) {
	  var direction = _ref.direction;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        width: '18px',
	        height: '18px',
	        borderRadius: '50%',
	        transform: 'translate(-9px, -1px)',
	        backgroundColor: 'rgb(248, 248, 248)',
	        boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)'
	      }
	    },
	    'vertical': {
	      picker: {
	        transform: 'translate(-3px, -9px)'
	      }
	    }
	  }, { vertical: direction === 'vertical' });

	  return _react2.default.createElement('div', { style: styles.picker });
	};

	exports.default = SliderPointer;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Material = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _common = __webpack_require__(507);

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

	var Material = exports.Material = function Material(_ref) {
	  var onChange = _ref.onChange,
	      hex = _ref.hex,
	      rgb = _ref.rgb,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      material: {
	        width: '98px',
	        height: '98px',
	        padding: '16px',
	        fontFamily: 'Roboto'
	      },
	      HEXwrap: {
	        position: 'relative'
	      },
	      HEXinput: {
	        width: '100%',
	        marginTop: '12px',
	        fontSize: '15px',
	        color: '#333',
	        padding: '0px',
	        border: '0px',
	        borderBottom: '2px solid ' + hex,
	        outline: 'none',
	        height: '30px'
	      },
	      HEXlabel: {
	        position: 'absolute',
	        top: '0px',
	        left: '0px',
	        fontSize: '11px',
	        color: '#999999',
	        textTransform: 'capitalize'
	      },
	      Hex: {
	        style: {}
	      },
	      RGBwrap: {
	        position: 'relative'
	      },
	      RGBinput: {
	        width: '100%',
	        marginTop: '12px',
	        fontSize: '15px',
	        color: '#333',
	        padding: '0px',
	        border: '0px',
	        borderBottom: '1px solid #eee',
	        outline: 'none',
	        height: '30px'
	      },
	      RGBlabel: {
	        position: 'absolute',
	        top: '0px',
	        left: '0px',
	        fontSize: '11px',
	        color: '#999999',
	        textTransform: 'capitalize'
	      },
	      split: {
	        display: 'flex',
	        marginRight: '-10px',
	        paddingTop: '11px'
	      },
	      third: {
	        flex: '1',
	        paddingRight: '10px'
	      }
	    }
	  });

	  var handleChange = function handleChange(data, e) {
	    if (data.hex) {
	      _color2.default.isValidHex(data.hex) && onChange({
	        hex: data.hex,
	        source: 'hex'
	      }, e);
	    } else if (data.r || data.g || data.b) {
	      onChange({
	        r: data.r || rgb.r,
	        g: data.g || rgb.g,
	        b: data.b || rgb.b,
	        source: 'rgb'
	      }, e);
	    }
	  };

	  return _react2.default.createElement(
	    _common.Raised,
	    null,
	    _react2.default.createElement(
	      'div',
	      { style: styles.material, className: 'material-picker ' + className },
	      _react2.default.createElement(_common.EditableInput, {
	        style: { wrap: styles.HEXwrap, input: styles.HEXinput, label: styles.HEXlabel },
	        label: 'hex',
	        value: hex,
	        onChange: handleChange
	      }),
	      _react2.default.createElement(
	        'div',
	        { style: styles.split, className: 'flexbox-fix' },
	        _react2.default.createElement(
	          'div',
	          { style: styles.third },
	          _react2.default.createElement(_common.EditableInput, {
	            style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	            label: 'r', value: rgb.r,
	            onChange: handleChange
	          })
	        ),
	        _react2.default.createElement(
	          'div',
	          { style: styles.third },
	          _react2.default.createElement(_common.EditableInput, {
	            style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	            label: 'g',
	            value: rgb.g,
	            onChange: handleChange
	          })
	        ),
	        _react2.default.createElement(
	          'div',
	          { style: styles.third },
	          _react2.default.createElement(_common.EditableInput, {
	            style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	            label: 'b',
	            value: rgb.b,
	            onChange: handleChange
	          })
	        )
	      )
	    )
	  );
	};

	exports.default = (0, _common.ColorWrap)(Material);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Photoshop = undefined;

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

	var _PhotoshopFields = __webpack_require__(548);

	var _PhotoshopFields2 = _interopRequireDefault(_PhotoshopFields);

	var _PhotoshopPointerCircle = __webpack_require__(549);

	var _PhotoshopPointerCircle2 = _interopRequireDefault(_PhotoshopPointerCircle);

	var _PhotoshopPointer = __webpack_require__(550);

	var _PhotoshopPointer2 = _interopRequireDefault(_PhotoshopPointer);

	var _PhotoshopButton = __webpack_require__(551);

	var _PhotoshopButton2 = _interopRequireDefault(_PhotoshopButton);

	var _PhotoshopPreviews = __webpack_require__(552);

	var _PhotoshopPreviews2 = _interopRequireDefault(_PhotoshopPreviews);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 Photoshop = exports.Photoshop = function (_React$Component) {
	  _inherits(Photoshop, _React$Component);

	  function Photoshop(props) {
	    _classCallCheck(this, Photoshop);

	    var _this = _possibleConstructorReturn(this, (Photoshop.__proto__ || Object.getPrototypeOf(Photoshop)).call(this));

	    _this.state = {
	      currentColor: props.hex
	    };
	    return _this;
	  }

	  _createClass(Photoshop, [{
	    key: 'render',
	    value: function render() {
	      var _props$className = this.props.className,
	          className = _props$className === undefined ? '' : _props$className;

	      var styles = (0, _reactcss2.default)({
	        'default': {
	          picker: {
	            background: '#DCDCDC',
	            borderRadius: '4px',
	            boxShadow: '0 0 0 1px rgba(0,0,0,.25), 0 8px 16px rgba(0,0,0,.15)',
	            boxSizing: 'initial',
	            width: '513px'
	          },
	          head: {
	            backgroundImage: 'linear-gradient(-180deg, #F0F0F0 0%, #D4D4D4 100%)',
	            borderBottom: '1px solid #B1B1B1',
	            boxShadow: 'inset 0 1px 0 0 rgba(255,255,255,.2), inset 0 -1px 0 0 rgba(0,0,0,.02)',
	            height: '23px',
	            lineHeight: '24px',
	            borderRadius: '4px 4px 0 0',
	            fontSize: '13px',
	            color: '#4D4D4D',
	            textAlign: 'center'
	          },
	          body: {
	            padding: '15px 15px 0',
	            display: 'flex'
	          },
	          saturation: {
	            width: '256px',
	            height: '256px',
	            position: 'relative',
	            border: '2px solid #B3B3B3',
	            borderBottom: '2px solid #F0F0F0',
	            overflow: 'hidden'
	          },
	          hue: {
	            position: 'relative',
	            height: '256px',
	            width: '19px',
	            marginLeft: '10px',
	            border: '2px solid #B3B3B3',
	            borderBottom: '2px solid #F0F0F0'
	          },
	          controls: {
	            width: '180px',
	            marginLeft: '10px'
	          },
	          top: {
	            display: 'flex'
	          },
	          previews: {
	            width: '60px'
	          },
	          actions: {
	            flex: '1',
	            marginLeft: '20px'
	          }
	        }
	      });

	      return _react2.default.createElement(
	        'div',
	        { style: styles.picker, className: 'photoshop-picker ' + className },
	        _react2.default.createElement(
	          'div',
	          { style: styles.head },
	          this.props.header
	        ),
	        _react2.default.createElement(
	          'div',
	          { style: styles.body, className: 'flexbox-fix' },
	          _react2.default.createElement(
	            'div',
	            { style: styles.saturation },
	            _react2.default.createElement(_common.Saturation, {
	              hsl: this.props.hsl,
	              hsv: this.props.hsv,
	              pointer: _PhotoshopPointerCircle2.default,
	              onChange: this.props.onChange
	            })
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.hue },
	            _react2.default.createElement(_common.Hue, {
	              direction: 'vertical',
	              hsl: this.props.hsl,
	              pointer: _PhotoshopPointer2.default,
	              onChange: this.props.onChange
	            })
	          ),
	          _react2.default.createElement(
	            'div',
	            { style: styles.controls },
	            _react2.default.createElement(
	              'div',
	              { style: styles.top, className: 'flexbox-fix' },
	              _react2.default.createElement(
	                'div',
	                { style: styles.previews },
	                _react2.default.createElement(_PhotoshopPreviews2.default, {
	                  rgb: this.props.rgb,
	                  currentColor: this.state.currentColor
	                })
	              ),
	              _react2.default.createElement(
	                'div',
	                { style: styles.actions },
	                _react2.default.createElement(_PhotoshopButton2.default, { label: 'OK', onClick: this.props.onAccept, active: true }),
	                _react2.default.createElement(_PhotoshopButton2.default, { label: 'Cancel', onClick: this.props.onCancel }),
	                _react2.default.createElement(_PhotoshopFields2.default, {
	                  onChange: this.props.onChange,
	                  rgb: this.props.rgb,
	                  hsv: this.props.hsv,
	                  hex: this.props.hex
	                })
	              )
	            )
	          )
	        )
	      );
	    }
	  }]);

	  return Photoshop;
	}(_react2.default.Component);

	Photoshop.propTypes = {
	  header: _propTypes2.default.string
	};

	Photoshop.defaultProps = {
	  header: 'Color Picker'
	};

	exports.default = (0, _common.ColorWrap)(Photoshop);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.PhotoshopPicker = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _common = __webpack_require__(507);

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

	var PhotoshopPicker = exports.PhotoshopPicker = function PhotoshopPicker(_ref) {
	  var onChange = _ref.onChange,
	      rgb = _ref.rgb,
	      hsv = _ref.hsv,
	      hex = _ref.hex;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      fields: {
	        paddingTop: '5px',
	        paddingBottom: '9px',
	        width: '80px',
	        position: 'relative'
	      },
	      divider: {
	        height: '5px'
	      },
	      RGBwrap: {
	        position: 'relative'
	      },
	      RGBinput: {
	        marginLeft: '40%',
	        width: '40%',
	        height: '18px',
	        border: '1px solid #888888',
	        boxShadow: 'inset 0 1px 1px rgba(0,0,0,.1), 0 1px 0 0 #ECECEC',
	        marginBottom: '5px',
	        fontSize: '13px',
	        paddingLeft: '3px',
	        marginRight: '10px'
	      },
	      RGBlabel: {
	        left: '0px',
	        width: '34px',
	        textTransform: 'uppercase',
	        fontSize: '13px',
	        height: '18px',
	        lineHeight: '22px',
	        position: 'absolute'
	      },
	      HEXwrap: {
	        position: 'relative'
	      },
	      HEXinput: {
	        marginLeft: '20%',
	        width: '80%',
	        height: '18px',
	        border: '1px solid #888888',
	        boxShadow: 'inset 0 1px 1px rgba(0,0,0,.1), 0 1px 0 0 #ECECEC',
	        marginBottom: '6px',
	        fontSize: '13px',
	        paddingLeft: '3px'
	      },
	      HEXlabel: {
	        position: 'absolute',
	        top: '0px',
	        left: '0px',
	        width: '14px',
	        textTransform: 'uppercase',
	        fontSize: '13px',
	        height: '18px',
	        lineHeight: '22px'
	      },
	      fieldSymbols: {
	        position: 'absolute',
	        top: '5px',
	        right: '-7px',
	        fontSize: '13px'
	      },
	      symbol: {
	        height: '20px',
	        lineHeight: '22px',
	        paddingBottom: '7px'
	      }
	    }
	  });

	  var handleChange = function handleChange(data, e) {
	    if (data['#']) {
	      _color2.default.isValidHex(data['#']) && onChange({
	        hex: data['#'],
	        source: 'hex'
	      }, e);
	    } else if (data.r || data.g || data.b) {
	      onChange({
	        r: data.r || rgb.r,
	        g: data.g || rgb.g,
	        b: data.b || rgb.b,
	        source: 'rgb'
	      }, e);
	    } else if (data.h || data.s || data.v) {
	      onChange({
	        h: data.h || hsv.h,
	        s: data.s || hsv.s,
	        v: data.v || hsv.v,
	        source: 'hsv'
	      }, e);
	    }
	  };

	  return _react2.default.createElement(
	    'div',
	    { style: styles.fields },
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	      label: 'h',
	      value: Math.round(hsv.h),
	      onChange: handleChange
	    }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	      label: 's',
	      value: Math.round(hsv.s * 100),
	      onChange: handleChange
	    }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	      label: 'v',
	      value: Math.round(hsv.v * 100),
	      onChange: handleChange
	    }),
	    _react2.default.createElement('div', { style: styles.divider }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	      label: 'r',
	      value: rgb.r,
	      onChange: handleChange
	    }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	      label: 'g',
	      value: rgb.g,
	      onChange: handleChange
	    }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },
	      label: 'b',
	      value: rgb.b,
	      onChange: handleChange
	    }),
	    _react2.default.createElement('div', { style: styles.divider }),
	    _react2.default.createElement(_common.EditableInput, {
	      style: { wrap: styles.HEXwrap, input: styles.HEXinput, label: styles.HEXlabel },
	      label: '#',
	      value: hex.replace('#', ''),
	      onChange: handleChange
	    }),
	    _react2.default.createElement(
	      'div',
	      { style: styles.fieldSymbols },
	      _react2.default.createElement(
	        'div',
	        { style: styles.symbol },
	        '\xB0'
	      ),
	      _react2.default.createElement(
	        'div',
	        { style: styles.symbol },
	        '%'
	      ),
	      _react2.default.createElement(
	        'div',
	        { style: styles.symbol },
	        '%'
	      )
	    )
	  );
	};

	exports.default = PhotoshopPicker;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.PhotoshopPointerCircle = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var PhotoshopPointerCircle = exports.PhotoshopPointerCircle = function PhotoshopPointerCircle(_ref) {
	  var hsl = _ref.hsl;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        width: '12px',
	        height: '12px',
	        borderRadius: '6px',
	        boxShadow: 'inset 0 0 0 1px #fff',
	        transform: 'translate(-6px, -6px)'
	      }
	    },
	    'black-outline': {
	      picker: {
	        boxShadow: 'inset 0 0 0 1px #000'
	      }
	    }
	  }, { 'black-outline': hsl.l > 0.5 });

	  return _react2.default.createElement('div', { style: styles.picker });
	};

	exports.default = PhotoshopPointerCircle;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.PhotoshopPointerCircle = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var PhotoshopPointerCircle = exports.PhotoshopPointerCircle = function PhotoshopPointerCircle() {
	  var styles = (0, _reactcss2.default)({
	    'default': {
	      triangle: {
	        width: 0,
	        height: 0,
	        borderStyle: 'solid',
	        borderWidth: '4px 0 4px 6px',
	        borderColor: 'transparent transparent transparent #fff',
	        position: 'absolute',
	        top: '1px',
	        left: '1px'
	      },
	      triangleBorder: {
	        width: 0,
	        height: 0,
	        borderStyle: 'solid',
	        borderWidth: '5px 0 5px 8px',
	        borderColor: 'transparent transparent transparent #555'
	      },

	      left: {
	        Extend: 'triangleBorder',
	        transform: 'translate(-13px, -4px)'
	      },
	      leftInside: {
	        Extend: 'triangle',
	        transform: 'translate(-8px, -5px)'
	      },

	      right: {
	        Extend: 'triangleBorder',
	        transform: 'translate(20px, -14px) rotate(180deg)'
	      },
	      rightInside: {
	        Extend: 'triangle',
	        transform: 'translate(-8px, -5px)'
	      }
	    }
	  });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.pointer },
	    _react2.default.createElement(
	      'div',
	      { style: styles.left },
	      _react2.default.createElement('div', { style: styles.leftInside })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.right },
	      _react2.default.createElement('div', { style: styles.rightInside })
	    )
	  );
	};

	exports.default = PhotoshopPointerCircle;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.PhotoshopBotton = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var PhotoshopBotton = exports.PhotoshopBotton = function PhotoshopBotton(_ref) {
	  var onClick = _ref.onClick,
	      label = _ref.label,
	      children = _ref.children,
	      active = _ref.active;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      button: {
	        backgroundImage: 'linear-gradient(-180deg, #FFFFFF 0%, #E6E6E6 100%)',
	        border: '1px solid #878787',
	        borderRadius: '2px',
	        height: '20px',
	        boxShadow: '0 1px 0 0 #EAEAEA',
	        fontSize: '14px',
	        color: '#000',
	        lineHeight: '20px',
	        textAlign: 'center',
	        marginBottom: '10px',
	        cursor: 'pointer'
	      }
	    },
	    'active': {
	      button: {
	        boxShadow: '0 0 0 1px #878787'
	      }
	    }
	  }, { active: active });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.button, onClick: onClick },
	    label || children
	  );
	};

	exports.default = PhotoshopBotton;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.PhotoshopPreviews = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var PhotoshopPreviews = exports.PhotoshopPreviews = function PhotoshopPreviews(_ref) {
	  var rgb = _ref.rgb,
	      currentColor = _ref.currentColor;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      swatches: {
	        border: '1px solid #B3B3B3',
	        borderBottom: '1px solid #F0F0F0',
	        marginBottom: '2px',
	        marginTop: '1px'
	      },
	      new: {
	        height: '34px',
	        background: 'rgb(' + rgb.r + ',' + rgb.g + ', ' + rgb.b + ')',
	        boxShadow: 'inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 1px 0 #000'
	      },
	      current: {
	        height: '34px',
	        background: currentColor,
	        boxShadow: 'inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 -1px 0 #000'
	      },
	      label: {
	        fontSize: '14px',
	        color: '#000',
	        textAlign: 'center'
	      }
	    }
	  });

	  return _react2.default.createElement(
	    'div',
	    null,
	    _react2.default.createElement(
	      'div',
	      { style: styles.label },
	      'new'
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.swatches },
	      _react2.default.createElement('div', { style: styles.new }),
	      _react2.default.createElement('div', { style: styles.current })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.label },
	      'current'
	    )
	  );
	};

	exports.default = PhotoshopPreviews;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Sketch = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

	var _SketchFields = __webpack_require__(554);

	var _SketchFields2 = _interopRequireDefault(_SketchFields);

	var _SketchPresetColors = __webpack_require__(555);

	var _SketchPresetColors2 = _interopRequireDefault(_SketchPresetColors);

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

	var Sketch = exports.Sketch = function Sketch(_ref) {
	  var width = _ref.width,
	      rgb = _ref.rgb,
	      hex = _ref.hex,
	      hsv = _ref.hsv,
	      hsl = _ref.hsl,
	      onChange = _ref.onChange,
	      onSwatchHover = _ref.onSwatchHover,
	      disableAlpha = _ref.disableAlpha,
	      presetColors = _ref.presetColors,
	      renderers = _ref.renderers,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        width: width,
	        padding: '10px 10px 0',
	        boxSizing: 'initial',
	        background: '#fff',
	        borderRadius: '4px',
	        boxShadow: '0 0 0 1px rgba(0,0,0,.15), 0 8px 16px rgba(0,0,0,.15)'
	      },
	      saturation: {
	        width: '100%',
	        paddingBottom: '75%',
	        position: 'relative',
	        overflow: 'hidden'
	      },
	      Saturation: {
	        radius: '3px',
	        shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'
	      },
	      controls: {
	        display: 'flex'
	      },
	      sliders: {
	        padding: '4px 0',
	        flex: '1'
	      },
	      color: {
	        width: '24px',
	        height: '24px',
	        position: 'relative',
	        marginTop: '4px',
	        marginLeft: '4px',
	        borderRadius: '3px'
	      },
	      activeColor: {
	        absolute: '0px 0px 0px 0px',
	        borderRadius: '2px',
	        background: 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + rgb.a + ')',
	        boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'
	      },
	      hue: {
	        position: 'relative',
	        height: '10px',
	        overflow: 'hidden'
	      },
	      Hue: {
	        radius: '2px',
	        shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'
	      },

	      alpha: {
	        position: 'relative',
	        height: '10px',
	        marginTop: '4px',
	        overflow: 'hidden'
	      },
	      Alpha: {
	        radius: '2px',
	        shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'
	      }
	    },
	    'disableAlpha': {
	      color: {
	        height: '10px'
	      },
	      hue: {
	        height: '10px'
	      },
	      alpha: {
	        display: 'none'
	      }
	    }
	  }, { disableAlpha: disableAlpha });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.picker, className: 'sketch-picker ' + className },
	    _react2.default.createElement(
	      'div',
	      { style: styles.saturation },
	      _react2.default.createElement(_common.Saturation, {
	        style: styles.Saturation,
	        hsl: hsl,
	        hsv: hsv,
	        onChange: onChange
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.controls, className: 'flexbox-fix' },
	      _react2.default.createElement(
	        'div',
	        { style: styles.sliders },
	        _react2.default.createElement(
	          'div',
	          { style: styles.hue },
	          _react2.default.createElement(_common.Hue, {
	            style: styles.Hue,
	            hsl: hsl,
	            onChange: onChange
	          })
	        ),
	        _react2.default.createElement(
	          'div',
	          { style: styles.alpha },
	          _react2.default.createElement(_common.Alpha, {
	            style: styles.Alpha,
	            rgb: rgb,
	            hsl: hsl,
	            renderers: renderers,
	            onChange: onChange
	          })
	        )
	      ),
	      _react2.default.createElement(
	        'div',
	        { style: styles.color },
	        _react2.default.createElement(_common.Checkboard, null),
	        _react2.default.createElement('div', { style: styles.activeColor })
	      )
	    ),
	    _react2.default.createElement(_SketchFields2.default, {
	      rgb: rgb,
	      hsl: hsl,
	      hex: hex,
	      onChange: onChange,
	      disableAlpha: disableAlpha
	    }),
	    _react2.default.createElement(_SketchPresetColors2.default, {
	      colors: presetColors,
	      onClick: onChange,
	      onSwatchHover: onSwatchHover
	    })
	  );
	};

	Sketch.propTypes = {
	  disableAlpha: _propTypes2.default.bool,
	  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number])
	};

	Sketch.defaultProps = {
	  disableAlpha: false,
	  width: 200,
	  presetColors: ['#D0021B', '#F5A623', '#F8E71C', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF']
	};

	exports.default = (0, _common.ColorWrap)(Sketch);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.SketchFields = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _common = __webpack_require__(507);

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

	/* eslint-disable no-param-reassign */

	var SketchFields = exports.SketchFields = function SketchFields(_ref) {
	  var onChange = _ref.onChange,
	      rgb = _ref.rgb,
	      hsl = _ref.hsl,
	      hex = _ref.hex,
	      disableAlpha = _ref.disableAlpha;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      fields: {
	        display: 'flex',
	        paddingTop: '4px'
	      },
	      single: {
	        flex: '1',
	        paddingLeft: '6px'
	      },
	      alpha: {
	        flex: '1',
	        paddingLeft: '6px'
	      },
	      double: {
	        flex: '2'
	      },
	      input: {
	        width: '80%',
	        padding: '4px 10% 3px',
	        border: 'none',
	        boxShadow: 'inset 0 0 0 1px #ccc',
	        fontSize: '11px'
	      },
	      label: {
	        display: 'block',
	        textAlign: 'center',
	        fontSize: '11px',
	        color: '#222',
	        paddingTop: '3px',
	        paddingBottom: '4px',
	        textTransform: 'capitalize'
	      }
	    },
	    'disableAlpha': {
	      alpha: {
	        display: 'none'
	      }
	    }
	  }, { disableAlpha: disableAlpha });

	  var handleChange = function handleChange(data, e) {
	    if (data.hex) {
	      _color2.default.isValidHex(data.hex) && onChange({
	        hex: data.hex,
	        source: 'hex'
	      }, e);
	    } else if (data.r || data.g || data.b) {
	      onChange({
	        r: data.r || rgb.r,
	        g: data.g || rgb.g,
	        b: data.b || rgb.b,
	        a: rgb.a,
	        source: 'rgb'
	      }, e);
	    } else if (data.a) {
	      if (data.a < 0) {
	        data.a = 0;
	      } else if (data.a > 100) {
	        data.a = 100;
	      }

	      data.a /= 100;
	      onChange({
	        h: hsl.h,
	        s: hsl.s,
	        l: hsl.l,
	        a: data.a,
	        source: 'rgb'
	      }, e);
	    }
	  };

	  return _react2.default.createElement(
	    'div',
	    { style: styles.fields, className: 'flexbox-fix' },
	    _react2.default.createElement(
	      'div',
	      { style: styles.double },
	      _react2.default.createElement(_common.EditableInput, {
	        style: { input: styles.input, label: styles.label },
	        label: 'hex',
	        value: hex.replace('#', ''),
	        onChange: handleChange
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.single },
	      _react2.default.createElement(_common.EditableInput, {
	        style: { input: styles.input, label: styles.label },
	        label: 'r',
	        value: rgb.r,
	        onChange: handleChange,
	        dragLabel: 'true',
	        dragMax: '255'
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.single },
	      _react2.default.createElement(_common.EditableInput, {
	        style: { input: styles.input, label: styles.label },
	        label: 'g',
	        value: rgb.g,
	        onChange: handleChange,
	        dragLabel: 'true',
	        dragMax: '255'
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.single },
	      _react2.default.createElement(_common.EditableInput, {
	        style: { input: styles.input, label: styles.label },
	        label: 'b',
	        value: rgb.b,
	        onChange: handleChange,
	        dragLabel: 'true',
	        dragMax: '255'
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.alpha },
	      _react2.default.createElement(_common.EditableInput, {
	        style: { input: styles.input, label: styles.label },
	        label: 'a',
	        value: Math.round(rgb.a * 100),
	        onChange: handleChange,
	        dragLabel: 'true',
	        dragMax: '100'
	      })
	    )
	  );
	};

	exports.default = SketchFields;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.SketchPresetColors = undefined;

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

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

	var SketchPresetColors = exports.SketchPresetColors = function SketchPresetColors(_ref) {
	  var colors = _ref.colors,
	      _ref$onClick = _ref.onClick,
	      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,
	      onSwatchHover = _ref.onSwatchHover;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      colors: {
	        margin: '0 -10px',
	        padding: '10px 0 0 10px',
	        borderTop: '1px solid #eee',
	        display: 'flex',
	        flexWrap: 'wrap',
	        position: 'relative'
	      },
	      swatchWrap: {
	        width: '16px',
	        height: '16px',
	        margin: '0 10px 10px 0'
	      },
	      swatch: {
	        borderRadius: '3px',
	        boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15)'
	      }
	    },
	    'no-presets': {
	      colors: {
	        display: 'none'
	      }
	    }
	  }, {
	    'no-presets': !colors || !colors.length
	  });

	  var handleClick = function handleClick(hex, e) {
	    onClick({
	      hex: hex,
	      source: 'hex'
	    }, e);
	  };

	  return _react2.default.createElement(
	    'div',
	    { style: styles.colors, className: 'flexbox-fix' },
	    colors.map(function (colorObjOrString) {
	      var c = typeof colorObjOrString === 'string' ? { color: colorObjOrString } : colorObjOrString;
	      var key = '' + c.color + (c.title || '');
	      return _react2.default.createElement(
	        'div',
	        { key: key, style: styles.swatchWrap },
	        _react2.default.createElement(_common.Swatch, _extends({}, c, {
	          style: styles.swatch,
	          onClick: handleClick,
	          onHover: onSwatchHover,
	          focusStyle: {
	            boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15), 0 0 4px ' + c.color
	          }
	        }))
	      );
	    })
	  );
	};

	SketchPresetColors.propTypes = {
	  colors: _propTypes2.default.arrayOf(_propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({
	    color: _propTypes2.default.string,
	    title: _propTypes2.default.string
	  })])).isRequired
	};

	exports.default = SketchPresetColors;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Slider = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _common = __webpack_require__(507);

	var _SliderSwatches = __webpack_require__(557);

	var _SliderSwatches2 = _interopRequireDefault(_SliderSwatches);

	var _SliderPointer = __webpack_require__(559);

	var _SliderPointer2 = _interopRequireDefault(_SliderPointer);

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

	var Slider = exports.Slider = function Slider(_ref) {
	  var hsl = _ref.hsl,
	      onChange = _ref.onChange,
	      pointer = _ref.pointer,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      hue: {
	        height: '12px',
	        position: 'relative'
	      },
	      Hue: {
	        radius: '2px'
	      }
	    }
	  });

	  return _react2.default.createElement(
	    'div',
	    { className: 'slider-picker ' + className },
	    _react2.default.createElement(
	      'div',
	      { style: styles.hue },
	      _react2.default.createElement(_common.Hue, {
	        style: styles.Hue,
	        hsl: hsl,
	        pointer: pointer,
	        onChange: onChange
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.swatches },
	      _react2.default.createElement(_SliderSwatches2.default, { hsl: hsl, onClick: onChange })
	    )
	  );
	};

	Slider.defaultProps = {
	  pointer: _SliderPointer2.default
	};

	exports.default = (0, _common.ColorWrap)(Slider);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.SliderSwatches = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _SliderSwatch = __webpack_require__(558);

	var _SliderSwatch2 = _interopRequireDefault(_SliderSwatch);

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

	var SliderSwatches = exports.SliderSwatches = function SliderSwatches(_ref) {
	  var onClick = _ref.onClick,
	      hsl = _ref.hsl;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      swatches: {
	        marginTop: '20px'
	      },
	      swatch: {
	        boxSizing: 'border-box',
	        width: '20%',
	        paddingRight: '1px',
	        float: 'left'
	      },
	      clear: {
	        clear: 'both'
	      }
	    }
	  });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.swatches },
	    _react2.default.createElement(
	      'div',
	      { style: styles.swatch },
	      _react2.default.createElement(_SliderSwatch2.default, {
	        hsl: hsl,
	        offset: '.80',
	        active: Math.round(hsl.l * 100) / 100 === 0.80 && Math.round(hsl.s * 100) / 100 === 0.50,
	        onClick: onClick,
	        first: true
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.swatch },
	      _react2.default.createElement(_SliderSwatch2.default, {
	        hsl: hsl,
	        offset: '.65',
	        active: Math.round(hsl.l * 100) / 100 === 0.65 && Math.round(hsl.s * 100) / 100 === 0.50,
	        onClick: onClick
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.swatch },
	      _react2.default.createElement(_SliderSwatch2.default, {
	        hsl: hsl,
	        offset: '.50',
	        active: Math.round(hsl.l * 100) / 100 === 0.50 && Math.round(hsl.s * 100) / 100 === 0.50,
	        onClick: onClick
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.swatch },
	      _react2.default.createElement(_SliderSwatch2.default, {
	        hsl: hsl,
	        offset: '.35',
	        active: Math.round(hsl.l * 100) / 100 === 0.35 && Math.round(hsl.s * 100) / 100 === 0.50,
	        onClick: onClick
	      })
	    ),
	    _react2.default.createElement(
	      'div',
	      { style: styles.swatch },
	      _react2.default.createElement(_SliderSwatch2.default, {
	        hsl: hsl,
	        offset: '.20',
	        active: Math.round(hsl.l * 100) / 100 === 0.20 && Math.round(hsl.s * 100) / 100 === 0.50,
	        onClick: onClick,
	        last: true
	      })
	    ),
	    _react2.default.createElement('div', { style: styles.clear })
	  );
	};

	exports.default = SliderSwatches;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.SliderSwatch = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var SliderSwatch = exports.SliderSwatch = function SliderSwatch(_ref) {
	  var hsl = _ref.hsl,
	      offset = _ref.offset,
	      _ref$onClick = _ref.onClick,
	      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,
	      active = _ref.active,
	      first = _ref.first,
	      last = _ref.last;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      swatch: {
	        height: '12px',
	        background: 'hsl(' + hsl.h + ', 50%, ' + offset * 100 + '%)',
	        cursor: 'pointer'
	      }
	    },
	    'first': {
	      swatch: {
	        borderRadius: '2px 0 0 2px'
	      }
	    },
	    'last': {
	      swatch: {
	        borderRadius: '0 2px 2px 0'
	      }
	    },
	    'active': {
	      swatch: {
	        transform: 'scaleY(1.8)',
	        borderRadius: '3.6px/2px'
	      }
	    }
	  }, { active: active, first: first, last: last });

	  var handleClick = function handleClick(e) {
	    return onClick({
	      h: hsl.h,
	      s: 0.5,
	      l: offset,
	      source: 'hsl'
	    }, e);
	  };

	  return _react2.default.createElement('div', { style: styles.swatch, onClick: handleClick });
	};

	exports.default = SliderSwatch;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.SliderPointer = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

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

	var SliderPointer = exports.SliderPointer = function SliderPointer() {
	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        width: '14px',
	        height: '14px',
	        borderRadius: '6px',
	        transform: 'translate(-7px, -1px)',
	        backgroundColor: 'rgb(248, 248, 248)',
	        boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)'
	      }
	    }
	  });

	  return _react2.default.createElement('div', { style: styles.picker });
	};

	exports.default = SliderPointer;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Swatches = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _map = __webpack_require__(382);

	var _map2 = _interopRequireDefault(_map);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _materialColors = __webpack_require__(533);

	var material = _interopRequireWildcard(_materialColors);

	var _common = __webpack_require__(507);

	var _SwatchesGroup = __webpack_require__(561);

	var _SwatchesGroup2 = _interopRequireDefault(_SwatchesGroup);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

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

	var Swatches = exports.Swatches = function Swatches(_ref) {
	  var width = _ref.width,
	      height = _ref.height,
	      onChange = _ref.onChange,
	      onSwatchHover = _ref.onSwatchHover,
	      colors = _ref.colors,
	      hex = _ref.hex,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      picker: {
	        width: width,
	        height: height
	      },
	      overflow: {
	        height: height,
	        overflowY: 'scroll'
	      },
	      body: {
	        padding: '16px 0 6px 16px'
	      },
	      clear: {
	        clear: 'both'
	      }
	    }
	  });

	  var handleChange = function handleChange(data, e) {
	    _color2.default.isValidHex(data) && onChange({
	      hex: data,
	      source: 'hex'
	    }, e);
	  };

	  return _react2.default.createElement(
	    'div',
	    { style: styles.picker, className: 'swatches-picker ' + className },
	    _react2.default.createElement(
	      _common.Raised,
	      null,
	      _react2.default.createElement(
	        'div',
	        { style: styles.overflow },
	        _react2.default.createElement(
	          'div',
	          { style: styles.body },
	          (0, _map2.default)(colors, function (group) {
	            return _react2.default.createElement(_SwatchesGroup2.default, {
	              key: group.toString(),
	              group: group,
	              active: hex,
	              onClick: handleChange,
	              onSwatchHover: onSwatchHover
	            });
	          }),
	          _react2.default.createElement('div', { style: styles.clear })
	        )
	      )
	    )
	  );
	};

	Swatches.propTypes = {
	  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),
	  height: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),
	  colors: _propTypes2.default.arrayOf(_propTypes2.default.arrayOf(_propTypes2.default.string))

	  /* eslint-disable max-len */
	};Swatches.defaultProps = {
	  width: 320,
	  height: 240,
	  colors: [[material.red['900'], material.red['700'], material.red['500'], material.red['300'], material.red['100']], [material.pink['900'], material.pink['700'], material.pink['500'], material.pink['300'], material.pink['100']], [material.purple['900'], material.purple['700'], material.purple['500'], material.purple['300'], material.purple['100']], [material.deepPurple['900'], material.deepPurple['700'], material.deepPurple['500'], material.deepPurple['300'], material.deepPurple['100']], [material.indigo['900'], material.indigo['700'], material.indigo['500'], material.indigo['300'], material.indigo['100']], [material.blue['900'], material.blue['700'], material.blue['500'], material.blue['300'], material.blue['100']], [material.lightBlue['900'], material.lightBlue['700'], material.lightBlue['500'], material.lightBlue['300'], material.lightBlue['100']], [material.cyan['900'], material.cyan['700'], material.cyan['500'], material.cyan['300'], material.cyan['100']], [material.teal['900'], material.teal['700'], material.teal['500'], material.teal['300'], material.teal['100']], ['#194D33', material.green['700'], material.green['500'], material.green['300'], material.green['100']], [material.lightGreen['900'], material.lightGreen['700'], material.lightGreen['500'], material.lightGreen['300'], material.lightGreen['100']], [material.lime['900'], material.lime['700'], material.lime['500'], material.lime['300'], material.lime['100']], [material.yellow['900'], material.yellow['700'], material.yellow['500'], material.yellow['300'], material.yellow['100']], [material.amber['900'], material.amber['700'], material.amber['500'], material.amber['300'], material.amber['100']], [material.orange['900'], material.orange['700'], material.orange['500'], material.orange['300'], material.orange['100']], [material.deepOrange['900'], material.deepOrange['700'], material.deepOrange['500'], material.deepOrange['300'], material.deepOrange['100']], [material.brown['900'], material.brown['700'], material.brown['500'], material.brown['300'], material.brown['100']], [material.blueGrey['900'], material.blueGrey['700'], material.blueGrey['500'], material.blueGrey['300'], material.blueGrey['100']], ['#000000', '#525252', '#969696', '#D9D9D9', '#FFFFFF']]
	};

	exports.default = (0, _common.ColorWrap)(Swatches);

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.SwatchesGroup = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _map = __webpack_require__(382);

	var _map2 = _interopRequireDefault(_map);

	var _SwatchesColor = __webpack_require__(562);

	var _SwatchesColor2 = _interopRequireDefault(_SwatchesColor);

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

	var SwatchesGroup = exports.SwatchesGroup = function SwatchesGroup(_ref) {
	  var onClick = _ref.onClick,
	      onSwatchHover = _ref.onSwatchHover,
	      group = _ref.group,
	      active = _ref.active;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      group: {
	        paddingBottom: '10px',
	        width: '40px',
	        float: 'left',
	        marginRight: '10px'
	      }
	    }
	  });

	  return _react2.default.createElement(
	    'div',
	    { style: styles.group },
	    (0, _map2.default)(group, function (color, i) {
	      return _react2.default.createElement(_SwatchesColor2.default, {
	        key: color,
	        color: color,
	        active: color.toLowerCase() === active,
	        first: i === 0,
	        last: i === group.length - 1,
	        onClick: onClick,
	        onSwatchHover: onSwatchHover
	      });
	    })
	  );
	};

	exports.default = SwatchesGroup;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.SwatchesColor = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _common = __webpack_require__(507);

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

	var SwatchesColor = exports.SwatchesColor = function SwatchesColor(_ref) {
	  var color = _ref.color,
	      _ref$onClick = _ref.onClick,
	      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,
	      onSwatchHover = _ref.onSwatchHover,
	      first = _ref.first,
	      last = _ref.last,
	      active = _ref.active;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      color: {
	        width: '40px',
	        height: '24px',
	        cursor: 'pointer',
	        background: color,
	        marginBottom: '1px'
	      },
	      check: {
	        fill: _color2.default.getContrastingColor(color),
	        marginLeft: '8px',
	        display: 'none'
	      }
	    },
	    'first': {
	      color: {
	        overflow: 'hidden',
	        borderRadius: '2px 2px 0 0'
	      }
	    },
	    'last': {
	      color: {
	        overflow: 'hidden',
	        borderRadius: '0 0 2px 2px'
	      }
	    },
	    'active': {
	      check: {
	        display: 'block'
	      }
	    },
	    'color-#FFFFFF': {
	      color: {
	        boxShadow: 'inset 0 0 0 1px #ddd'
	      },
	      check: {
	        fill: '#333'
	      }
	    },
	    'transparent': {
	      check: {
	        fill: '#333'
	      }
	    }
	  }, {
	    first: first,
	    last: last,
	    active: active,
	    'color-#FFFFFF': color === '#FFFFFF',
	    'transparent': color === 'transparent'
	  });

	  return _react2.default.createElement(
	    _common.Swatch,
	    {
	      color: color,
	      style: styles.color,
	      onClick: onClick,
	      onHover: onSwatchHover,
	      focusStyle: { boxShadow: '0 0 4px ' + color }
	    },
	    _react2.default.createElement(
	      'div',
	      { style: styles.check },
	      _react2.default.createElement(
	        'svg',
	        { style: { width: '24px', height: '24px' }, viewBox: '0 0 24 24' },
	        _react2.default.createElement('path', { d: 'M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z' })
	      )
	    )
	  );
	};

	exports.default = SwatchesColor;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.Twitter = undefined;

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _reactcss = __webpack_require__(343);

	var _reactcss2 = _interopRequireDefault(_reactcss);

	var _map = __webpack_require__(382);

	var _map2 = _interopRequireDefault(_map);

	var _color = __webpack_require__(523);

	var _color2 = _interopRequireDefault(_color);

	var _common = __webpack_require__(507);

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

	var Twitter = exports.Twitter = function Twitter(_ref) {
	  var onChange = _ref.onChange,
	      onSwatchHover = _ref.onSwatchHover,
	      hex = _ref.hex,
	      colors = _ref.colors,
	      width = _ref.width,
	      triangle = _ref.triangle,
	      _ref$className = _ref.className,
	      className = _ref$className === undefined ? '' : _ref$className;

	  var styles = (0, _reactcss2.default)({
	    'default': {
	      card: {
	        width: width,
	        background: '#fff',
	        border: '0 solid rgba(0,0,0,0.25)',
	        boxShadow: '0 1px 4px rgba(0,0,0,0.25)',
	        borderRadius: '4px',
	        position: 'relative'
	      },
	      body: {
	        padding: '15px 9px 9px 15px'
	      },
	      label: {
	        fontSize: '18px',
	        color: '#fff'
	      },
	      triangle: {
	        width: '0px',
	        height: '0px',
	        borderStyle: 'solid',
	        borderWidth: '0 9px 10px 9px',
	        borderColor: 'transparent transparent #fff transparent',
	        position: 'absolute'
	      },
	      triangleShadow: {
	        width: '0px',
	        height: '0px',
	        borderStyle: 'solid',
	        borderWidth: '0 9px 10px 9px',
	        borderColor: 'transparent transparent rgba(0,0,0,.1) transparent',
	        position: 'absolute'
	      },
	      hash: {
	        background: '#F0F0F0',
	        height: '30px',
	        width: '30px',
	        borderRadius: '4px 0 0 4px',
	        float: 'left',
	        color: '#98A1A4',
	        display: 'flex',
	        alignItems: 'center',
	        justifyContent: 'center'
	      },
	      input: {
	        width: '100px',
	        fontSize: '14px',
	        color: '#666',
	        border: '0px',
	        outline: 'none',
	        height: '28px',
	        boxShadow: 'inset 0 0 0 1px #F0F0F0',
	        boxSizing: 'content-box',
	        borderRadius: '0 4px 4px 0',
	        float: 'left',
	        paddingLeft: '8px'
	      },
	      swatch: {
	        width: '30px',
	        height: '30px',
	        float: 'left',
	        borderRadius: '4px',
	        margin: '0 6px 6px 0'
	      },
	      clear: {
	        clear: 'both'
	      }
	    },
	    'hide-triangle': {
	      triangle: {
	        display: 'none'
	      },
	      triangleShadow: {
	        display: 'none'
	      }
	    },
	    'top-left-triangle': {
	      triangle: {
	        top: '-10px',
	        left: '12px'
	      },
	      triangleShadow: {
	        top: '-11px',
	        left: '12px'
	      }
	    },
	    'top-right-triangle': {
	      triangle: {
	        top: '-10px',
	        right: '12px'
	      },
	      triangleShadow: {
	        top: '-11px',
	        right: '12px'
	      }
	    }
	  }, {
	    'hide-triangle': triangle === 'hide',
	    'top-left-triangle': triangle === 'top-left',
	    'top-right-triangle': triangle === 'top-right'
	  });

	  var handleChange = function handleChange(hexcode, e) {
	    _color2.default.isValidHex(hexcode) && onChange({
	      hex: hexcode,
	      source: 'hex'
	    }, e);
	  };

	  return _react2.default.createElement(
	    'div',
	    { style: styles.card, className: 'twitter-picker ' + className },
	    _react2.default.createElement('div', { style: styles.triangleShadow }),
	    _react2.default.createElement('div', { style: styles.triangle }),
	    _react2.default.createElement(
	      'div',
	      { style: styles.body },
	      (0, _map2.default)(colors, function (c, i) {
	        return _react2.default.createElement(_common.Swatch, {
	          key: i,
	          color: c,
	          hex: c,
	          style: styles.swatch,
	          onClick: handleChange,
	          onHover: onSwatchHover,
	          focusStyle: {
	            boxShadow: '0 0 4px ' + c
	          }
	        });
	      }),
	      _react2.default.createElement(
	        'div',
	        { style: styles.hash },
	        '#'
	      ),
	      _react2.default.createElement(_common.EditableInput, {
	        style: { input: styles.input },
	        value: hex.replace('#', ''),
	        onChange: handleChange
	      }),
	      _react2.default.createElement('div', { style: styles.clear })
	    )
	  );
	};

	Twitter.propTypes = {
	  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),
	  triangle: _propTypes2.default.oneOf(['hide', 'top-left', 'top-right']),
	  colors: _propTypes2.default.arrayOf(_propTypes2.default.string)
	};

	Twitter.defaultProps = {
	  width: 276,
	  colors: ['#FF6900', '#FCB900', '#7BDCB5', '#00D084', '#8ED1FC', '#0693E3', '#ABB8C3', '#EB144C', '#F78DA7', '#9900EF'],
	  triangle: 'top-left'
	};

	exports.default = (0, _common.ColorWrap)(Twitter);

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

	'use strict';

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

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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; }

	/**
	 * RadioItems is a component that encapsulates several radio item inputs.
	 * The values and labels of the RadioItems is specified in the `options`
	 * property and the seleced item is specified with the `value` property.
	 * Each radio item is rendered as an input with a surrounding label.
	 */

	var RadioItems = function (_Component) {
	    _inherits(RadioItems, _Component);

	    function RadioItems(props) {
	        _classCallCheck(this, RadioItems);

	        var _this = _possibleConstructorReturn(this, (RadioItems.__proto__ || Object.getPrototypeOf(RadioItems)).call(this, props));

	        _this.state = { value: props.value };
	        return _this;
	    }

	    _createClass(RadioItems, [{
	        key: 'componentWillReceiveProps',
	        value: function componentWillReceiveProps(newProps) {
	            this.setState({ value: newProps.value });
	        }
	    }, {
	        key: 'render',
	        value: function render() {
	            var _this2 = this;

	            var _props = this.props,
	                fireEvent = _props.fireEvent,
	                id = _props.id,
	                className = _props.className,
	                style = _props.style,
	                inputClassName = _props.inputClassName,
	                inputStyle = _props.inputStyle,
	                labelClassName = _props.labelClassName,
	                labelStyle = _props.labelStyle,
	                options = _props.options,
	                setProps = _props.setProps;
	            var value = this.state.value;


	            var ids = {};
	            if (id) {
	                ids = { id: id, key: id };
	            }
	            return _react2.default.createElement(
	                'div',
	                _extends({}, ids, { className: className, style: style }),
	                options.map(function (option) {
	                    return _react2.default.createElement(
	                        'label',
	                        { style: labelStyle, className: labelClassName, key: option.value },
	                        _react2.default.createElement('input', {
	                            checked: option.value === value,
	                            className: inputClassName,
	                            disabled: Boolean(option.disabled),
	                            style: inputStyle,
	                            type: 'radio',
	                            onChange: function onChange() {
	                                _this2.setState({ value: option.value });
	                                if (setProps) setProps({ value: option.value });
	                                if (fireEvent) fireEvent({ event: 'change' });
	                            }
	                        }),
	                        option.label
	                    );
	                })
	            );
	        }
	    }]);

	    return RadioItems;
	}(_react.Component);

	exports.default = RadioItems;


	RadioItems.propTypes = {
	    id: _propTypes2.default.string,

	    /**
	     * An array of options
	     */
	    options: _propTypes2.default.arrayOf(_propTypes2.default.shape({
	        /**
	         * The radio item's label
	         */
	        label: _propTypes2.default.string,

	        /**
	         * The value of the radio item. This value
	         * corresponds to the items specified in the
	         * `values` property.
	         */
	        value: _propTypes2.default.string,

	        /**
	         * If true, this radio item is disabled and can't be clicked on.
	         */
	        disabled: _propTypes2.default.bool
	    })),

	    /**
	     * The currently selected value
	     */
	    value: _propTypes2.default.string,

	    /**
	     * The style of the container (div)
	     */
	    style: _propTypes2.default.object,

	    /**
	     * The class of the container (div)
	     */
	    className: _propTypes2.default.string,

	    /**
	     * The style of the <input> radio element
	     */
	    inputStyle: _propTypes2.default.object,

	    /**
	     * The class of the <input> radio element
	     */
	    inputClassName: _propTypes2.default.string,

	    /**
	     * The style of the <label> that wraps the radio input
	     *  and the option's label
	     */
	    labelStyle: _propTypes2.default.object,

	    /**
	     * The class of the <label> that wraps the radio input
	     *  and the option's label
	     */
	    labelClassName: _propTypes2.default.string,

	    /**
	     * Dash-assigned callback that gets fired when the radio item gets selected.
	     */
	    fireEvent: _propTypes2.default.func,

	    /**
	     * Dash-assigned callback that gets fired when the value changes.
	     */
	    setProps: _propTypes2.default.func,

	    dashEvents: _propTypes2.default.oneOf(['change'])
	};

	RadioItems.defaultProps = {
	    inputStyle: {},
	    inputClassName: '',
	    labelStyle: {},
	    labelClassName: '',
	    options: []
	};

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.EditorWithPopout = undefined;

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactSelect = __webpack_require__(566);

	var _reactSelect2 = _interopRequireDefault(_reactSelect);

	var _constants = __webpack_require__(582);

	var _ramda = __webpack_require__(3);

	var R = _interopRequireWildcard(_ramda);

	var _chromaJs = __webpack_require__(335);

	var _chromaJs2 = _interopRequireDefault(_chromaJs);

	var _reactToggle = __webpack_require__(583);

	var _reactToggle2 = _interopRequireDefault(_reactToggle);

	var _reactPopout = __webpack_require__(587);

	var _reactPopout2 = _interopRequireDefault(_reactPopout);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

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

	function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

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

	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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; }

	function ColorRoll(props) {
	    var colors = props.colors,
	        updateColor = props.updateColor;

	    return _react2.default.createElement(
	        'div',
	        { className: 'ColorRoll' },
	        colors.map(function (color) {
	            return _react2.default.createElement('div', {
	                className: 'ColorRoll--slice',
	                style: {
	                    'backgroundColor': color,
	                    'height': 'calc(100% / ' + colors.length + ')'
	                },
	                onClick: function onClick() {
	                    return updateColor(color);
	                }
	            });
	        })
	    );
	}

	var ColorTab = function (_Component) {
	    _inherits(ColorTab, _Component);

	    function ColorTab() {
	        _classCallCheck(this, ColorTab);

	        var _this = _possibleConstructorReturn(this, (ColorTab.__proto__ || Object.getPrototypeOf(ColorTab)).call(this));

	        _this.state = { hovered: false };
	        return _this;
	    }

	    _createClass(ColorTab, [{
	        key: 'render',
	        value: function render() {
	            var _this2 = this;

	            var _props = this.props,
	                color = _props.color,
	                name = _props.name,
	                updateColor = _props.updateColor,
	                suggestedColors = _props.suggestedColors,
	                onFocus = _props.onFocus,
	                onUnfocus = _props.onUnfocus;
	            var hovered = this.state.hovered;

	            var panelStyle = { 'backgroundColor': color };
	            if (hovered) {
	                panelStyle.borderBottomLeftRadius = 0;
	                panelStyle.borderBottomRightRadius = 0;
	            }
	            return _react2.default.createElement(
	                'div',
	                {
	                    className: 'ColorTab'
	                },
	                _react2.default.createElement(
	                    'div',
	                    { className: 'ColorTab--label ColorTab--title' },
	                    name
	                ),
	                _react2.default.createElement(
	                    'div',
	                    {
	                        className: 'ColorTab--panel',
	                        style: panelStyle,
	                        onMouseEnter: function onMouseEnter() {
	                            console.warn('onMouseEnter');
	                            _this2.setState({ hovered: true });
	                            if (!hovered) onFocus();
	                        },
	                        onMouseLeave: function onMouseLeave() {
	                            console.warn('onMouseLeave');
	                            _this2.setState({ hovered: false });
	                            onUnfocus();
	                        }
	                    },
	                    _react2.default.createElement(
	                        'div',
	                        {
	                            className: 'ColorTab--editor ' + (hovered ? "" : "hidden")
	                        },
	                        _react2.default.createElement(ColorRoll, {
	                            colors: suggestedColors || [],
	                            updateColor: updateColor
	                        })
	                    )
	                ),
	                _react2.default.createElement(
	                    'div',
	                    {
	                        className: 'ColorTab--label ColorTab--footer'
	                    },
	                    _react2.default.createElement('input', {
	                        className: 'ColorTab--input',
	                        type: 'text',
	                        value: color,
	                        onChange: function onChange(e) {
	                            return updateColor(e.target.value);
	                        }
	                    })
	                )
	            );
	        }
	    }]);

	    return ColorTab;
	}(_react.Component);

	ColorTab.defaultProps = {
	    onFocus: function onFocus() {},
	    onUnfocus: function onUnfocus() {}
	};

	function PageColorSettings(props) {
	    var colors = props.colors,
	        _updateColor2 = props.updateColor;


	    var suggestedColors = {
	        'background': ['rgb(255, 255, 255)', 'rgb(30, 30, 30)', '#FDF3E7' // cream
	        ],
	        'border': ['lightgrey', 'white', '#6D7993'],
	        'text': ['rgb(30, 30, 30)', 'white', '#6D7993', '#062F4F'],
	        'accent': [
	        /*
	         * taken from http://clrs.cc/ and
	         * https://www.canva.com/learn/website-color-schemes/
	         */
	        '#001f3f', // Navy
	        '#0074D9', // Blue
	        '#7FDBFF', // Aqua
	        '#39CCCC', // TEAL
	        '#3D9970', // OLIVE
	        '#2ECC40', // GREEN
	        '#01FF70', // LIME
	        '#FFDC00', // YELLOW
	        '#FF851B', // ORANGE
	        '#FF3B3F', // WATERMELON
	        '#85144b', // MAROON
	        '#813772', // POSY
	        '#A239CA', // FUCHSIA
	        '#B10DC9']
	    };

	    return _react2.default.createElement(
	        'div',
	        null,
	        ['background', 'border', 'text', 'accent'].map(function (color) {
	            return _react2.default.createElement(ColorTab, {
	                name: color,
	                color: colors[color],
	                updateColor: function updateColor(newColor) {
	                    return _updateColor2(_defineProperty({}, color, newColor));
	                },
	                suggestedColors: suggestedColors[color]
	            });
	        })
	    );
	}

	var TraceColorWay = function (_Component2) {
	    _inherits(TraceColorWay, _Component2);

	    function TraceColorWay() {
	        _classCallCheck(this, TraceColorWay);

	        var _this3 = _possibleConstructorReturn(this, (TraceColorWay.__proto__ || Object.getPrototypeOf(TraceColorWay)).call(this));

	        _this3.state = {};
	        _this3.setSuggestions = _this3.setSuggestions.bind(_this3);
	        return _this3;
	    }

	    _createClass(TraceColorWay, [{
	        key: 'setSuggestions',
	        value: function setSuggestions(c, i) {
	            console.warn('setSuggestions');
	            this.setState(_defineProperty({}, i, [(0, _chromaJs2.default)(c).brighten(2).css(), (0, _chromaJs2.default)(c).brighten(1).css(), (0, _chromaJs2.default)(c).brighten(0.5).css(), c, (0, _chromaJs2.default)(c).darken(0.5).css(), (0, _chromaJs2.default)(c).darken(1).css(), (0, _chromaJs2.default)(c).darken(2).css()]));
	        }
	    }, {
	        key: 'render',
	        value: function render() {
	            var _this4 = this;

	            var _props2 = this.props,
	                colors = _props2.colors,
	                _updateColor3 = _props2.updateColor;

	            return _react2.default.createElement(
	                'div',
	                null,
	                colors.map(function (c, i) {
	                    return _react2.default.createElement(ColorTab, {
	                        name: 'trace ' + (i + 1),
	                        color: c,
	                        updateColor: function updateColor(newColor) {
	                            return _updateColor3((0, _ramda.update)(i, newColor, colors));
	                        },
	                        onFocus: function onFocus() {
	                            return _this4.setSuggestions(c, i);
	                        },
	                        onUnfocus: function onUnfocus() {
	                            return _this4.setSuggestions(c, i);
	                        },
	                        suggestedColors: _this4.state[i]
	                    });
	                })
	            );
	        }
	    }]);

	    return TraceColorWay;
	}(_react.Component);

	function takeN(list, N) {
	    var interval = Math.floor(list.length / N);
	    return (0, _ramda.take)(N)(list.filter(function (e, i) {
	        return i % interval === 0;
	    }));
	}

	function ColorWayPicker(props) {
	    var _onChange = props.onChange,
	        options = props.options,
	        value = props.value;

	    function optionRenderer(option) {
	        var value = option.value;

	        return _react2.default.createElement(
	            'div',
	            { className: 'ColorWayPicker--option cf' },
	            JSON.parse(value).map(function (color) {
	                return _react2.default.createElement('div', {
	                    className: 'ColorWayPicker--option-item',
	                    style: {
	                        'backgroundColor': color
	                    }
	                });
	            })
	        );
	    }
	    return _react2.default.createElement(_reactSelect2.default, {
	        options: options,
	        value: JSON.stringify(value),
	        clearable: false,
	        optionRenderer: optionRenderer,
	        valueRenderer: optionRenderer,
	        placeholder: '',
	        onChange: function onChange(option) {
	            _onChange(JSON.parse(option.value));
	        },
	        closeOnSelect: false
	    });
	}

	var App = function (_Component3) {
	    _inherits(App, _Component3);

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

	        var _this5 = _possibleConstructorReturn(this, (App.__proto__ || Object.getPrototypeOf(App)).call(this));

	        _this5.state = {
	            traces: takeN(_constants.COLORWAYS.categorical, 5),
	            background: 'white',
	            border: 'lightgrey',
	            text: '#2a3f5f',
	            accent: '#119DFF'
	        };
	        return _this5;
	    }

	    _createClass(App, [{
	        key: 'render',
	        value: function render() {
	            var _this6 = this;

	            var _state = this.state,
	                traces = _state.traces,
	                background = _state.background,
	                border = _state.border,
	                text = _state.text,
	                accent = _state.accent;

	            return _react2.default.createElement(
	                'div',
	                { className: 'app' },
	                _react2.default.createElement(Editor, {
	                    traces: traces,
	                    background: background,
	                    border: border,
	                    text: text,
	                    accent: accent,
	                    updateProps: function updateProps(newProps) {
	                        return _this6.setState(newProps);
	                    }
	                })
	            );
	        }
	    }]);

	    return App;
	}(_react.Component);

	var Editor = function (_Component4) {
	    _inherits(Editor, _Component4);

	    function Editor() {
	        _classCallCheck(this, Editor);

	        var _this7 = _possibleConstructorReturn(this, (Editor.__proto__ || Object.getPrototypeOf(Editor)).call(this));

	        _this7.state = {
	            colorways: (0, _ramda.keys)(_constants.COLORWAYS).map(function (k) {
	                return JSON.stringify(takeN(_constants.COLORWAYS[k], 5));
	            }),
	            themes: [{
	                background: 'white',
	                border: 'lightgrey',
	                text: '#2a3f5f',
	                accent: '#119DFF'
	            }, {
	                background: 'rgb(40, 44, 52)',
	                border: 'rgb(59, 64, 72)',
	                text: 'rgb(171, 178, 191)',
	                accent: 'rgb(86, 175, 239)'
	            }],
	            syncWithAccent: true
	        };

	        _this7.updateTheme = _this7.updateTheme.bind(_this7);
	        _this7.generateCode = _this7.generateCode.bind(_this7);
	        return _this7;
	    }

	    _createClass(Editor, [{
	        key: 'componentWillReceiveProps',
	        value: function componentWillReceiveProps(nextProps) {
	            var traces = nextProps.traces;
	            var colorways = this.state.colorways;

	            // update options

	            var tracesKey = JSON.stringify(traces);
	            if (!(0, _ramda.contains)(tracesKey, colorways)) {
	                this.setState({ colorways: (0, _ramda.prepend)(tracesKey, colorways) });
	            }
	        }
	    }, {
	        key: 'updateTheme',
	        value: function updateTheme(colors) {
	            var updateProps = this.props.updateProps;
	            var syncWithAccent = this.state.syncWithAccent;

	            if (syncWithAccent && (0, _ramda.has)('accent', colors)) {
	                var c = colors.accent;
	                colors.traces = [c, (0, _chromaJs2.default)(c).brighten(0.7).css(), (0, _chromaJs2.default)(c).brighten(1.4).css(), (0, _chromaJs2.default)(c).brighten(2.1).css()];
	            }
	            updateProps(colors);
	        }
	    }, {
	        key: 'generateCode',
	        value: function generateCode() {
	            var serialized = R.replace(/false/g, 'False', R.replace(/true/g, 'True', JSON.stringify(R.omit(['updateProps'], this.props), null, 4)));

	            return ['theme = ' + serialized, '', 'app.layout = dash_themes.ApplyTheme(', '    app.layout,', '    show_editor=True,', '    theme=theme', ')'].join('\n');
	        }
	    }, {
	        key: 'render',
	        value: function render() {
	            var _this8 = this;

	            var _props3 = this.props,
	                traces = _props3.traces,
	                background = _props3.background,
	                border = _props3.border,
	                text = _props3.text,
	                accent = _props3.accent,
	                updateProps = _props3.updateProps;
	            var _state2 = this.state,
	                colorways = _state2.colorways,
	                syncWithAccent = _state2.syncWithAccent,
	                themes = _state2.themes;

	            var pageColors = { background: background, border: border, text: text, accent: accent };
	            return _react2.default.createElement(
	                'div',
	                null,
	                _react2.default.createElement(
	                    'div',
	                    { style: { 'padding': 30 } },
	                    _react2.default.createElement(
	                        'div',
	                        { className: 'Settings', style: { 'width': (0, _ramda.keys)(pageColors).length * 150 } },
	                        _react2.default.createElement(
	                            'div',
	                            { className: 'cf Settings--title-container' },
	                            _react2.default.createElement(
	                                'div',
	                                { className: 'Settings--title' },
	                                'Page Colors'
	                            ),
	                            _react2.default.createElement(
	                                'div',
	                                { className: 'ColorWayPicker--container' },
	                                _react2.default.createElement(ColorWayPicker, {
	                                    value: (0, _ramda.values)(pageColors),
	                                    options: themes.map(function (c) {
	                                        var orderedValues = (0, _ramda.props)(['background', 'border', 'text', 'accent'], c);
	                                        var stringified = JSON.stringify(orderedValues);
	                                        return {
	                                            label: stringified,
	                                            value: stringified
	                                        };
	                                    }),
	                                    onChange: function onChange(value) {
	                                        _this8.updateTheme({
	                                            background: value[0],
	                                            border: value[1],
	                                            text: value[2],
	                                            accent: value[3]
	                                        });
	                                    }
	                                })
	                            )
	                        ),
	                        _react2.default.createElement(PageColorSettings, {
	                            colors: pageColors,
	                            updateColor: this.updateTheme
	                        })
	                    ),
	                    _react2.default.createElement(
	                        'div',
	                        { className: 'Settings', style: { 'width': traces.length * 150 } },
	                        _react2.default.createElement(
	                            'div',
	                            { className: 'cf Settings--title-container' },
	                            _react2.default.createElement(
	                                'div',
	                                { className: 'Settings--title' },
	                                'Graph Colors'
	                            ),
	                            _react2.default.createElement(
	                                'div',
	                                { className: 'ColorWayPicker--container' },
	                                _react2.default.createElement(ColorWayPicker, {
	                                    value: traces,
	                                    options: colorways.map(function (c) {
	                                        return { label: c, value: c };
	                                    }),
	                                    onChange: function onChange(value) {
	                                        return updateProps({ traces: value });
	                                    }
	                                })
	                            )
	                        ),
	                        _react2.default.createElement(TraceColorWay, {
	                            colors: traces,
	                            updateColor: function updateColor(newColors) {
	                                return updateProps({ traces: newColors });
	                            }
	                        }),
	                        _react2.default.createElement(
	                            'div',
	                            null,
	                            _react2.default.createElement(
	                                'button',
	                                { onClick: function onClick() {
	                                        updateProps({ traces: (0, _ramda.reverse)(traces) });
	                                    } },
	                                'Reverse'
	                            )
	                        ),
	                        _react2.default.createElement(
	                            'div',
	                            { className: 'accent-toggle' },
	                            _react2.default.createElement(
	                                'div',
	                                { style: { 'display': 'inline-block' } },
	                                _react2.default.createElement(_reactToggle2.default, {
	                                    checked: syncWithAccent,
	                                    onChange: function onChange() {
	                                        return _this8.setState({
	                                            syncWithAccent: !syncWithAccent
	                                        });
	                                    }

	                                })
	                            ),
	                            _react2.default.createElement(
	                                'span',
	                                null,
	                                'Generate from accent color'
	                            )
	                        )
	                    ),
	                    _react2.default.createElement(
	                        'div',
	                        { className: 'Settings' },
	                        _react2.default.createElement(
	                            'div',
	                            { className: 'cf Settings--title-container' },
	                            _react2.default.createElement(
	                                'div',
	                                { className: 'Settings--title' },
	                                'Python Code'
	                            )
	                        ),
	                        _react2.default.createElement(
	                            'pre',
	                            { style: {
	                                    'borderLeft': 'thin lightgrey solid',
	                                    'paddingLeft': 10
	                                } },
	                            this.generateCode()
	                        )
	                    )
	                )
	            );
	        }
	    }]);

	    return Editor;
	}(_react.Component);

	function copyStyles(sourceDoc, targetDoc) {
	    var filter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

	    Array.from(sourceDoc.styleSheets).forEach(function (styleSheet) {
	        if (filter && (0, _ramda.type)(styleSheet.href) === 'String' && !(0, _ramda.any)((0, _ramda.flip)(_ramda.contains)(styleSheet.href), filter)) {
	            return;
	        }
	        console.warn(styleSheet.href);
	        if (styleSheet.cssRules) {
	            // for <style> elements
	            var newStyleEl = sourceDoc.createElement('style');

	            Array.from(styleSheet.cssRules).forEach(function (cssRule) {
	                // write the text of each rule into the body of the style element
	                newStyleEl.appendChild(sourceDoc.createTextNode(cssRule.cssText));
	            });

	            targetDoc.head.appendChild(newStyleEl);
	        } else if (styleSheet.href) {
	            // for <link> elements loading CSS from a URL
	            var newLinkEl = sourceDoc.createElement('link');

	            newLinkEl.rel = 'stylesheet';
	            newLinkEl.href = styleSheet.href;
	            targetDoc.head.appendChild(newLinkEl);
	        }
	    });
	}

	function EditorWithPopout(props) {
	    return _react2.default.createElement(
	        'div',
	        { className: 'Editor' },
	        _react2.default.createElement(
	            _reactPopout2.default,
	            {
	                title: 'Dash Theme Editor',
	                options: {
	                    width: 1000,
	                    height: 800,
	                    toolbar: 0,
	                    location: 0,
	                    titlebar: 0,
	                    left: 400
	                }
	            },
	            function (popoutWindow) {
	                copyStyles(window.document, popoutWindow.document, ['/editor.css', '/react-select', '/react-virtualized']);
	                return _react2.default.createElement(Editor, props);
	            }
	        )
	    );
	}

	exports.default = Editor;
	exports.EditorWithPopout = EditorWithPopout;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
		value: true
	});
	exports.defaultFilterOptions = exports.defaultClearRenderer = exports.defaultArrowRenderer = exports.defaultMenuRenderer = exports.Option = exports.Value = exports.Creatable = exports.AsyncCreatable = exports.Async = undefined;

	var _Select = __webpack_require__(567);

	var _Select2 = _interopRequireDefault(_Select);

	var _Async = __webpack_require__(579);

	var _Async2 = _interopRequireDefault(_Async);

	var _AsyncCreatable = __webpack_require__(580);

	var _AsyncCreatable2 = _interopRequireDefault(_AsyncCreatable);

	var _Creatable = __webpack_require__(581);

	var _Creatable2 = _interopRequireDefault(_Creatable);

	var _Value = __webpack_require__(578);

	var _Value2 = _interopRequireDefault(_Value);

	var _Option = __webpack_require__(576);

	var _Option2 = _interopRequireDefault(_Option);

	var _defaultMenuRenderer = __webpack_require__(575);

	var _defaultMenuRenderer2 = _interopRequireDefault(_defaultMenuRenderer);

	var _defaultArrowRenderer = __webpack_require__(570);

	var _defaultArrowRenderer2 = _interopRequireDefault(_defaultArrowRenderer);

	var _defaultClearRenderer = __webpack_require__(571);

	var _defaultClearRenderer2 = _interopRequireDefault(_defaultClearRenderer);

	var _defaultFilterOptions = __webpack_require__(572);

	var _defaultFilterOptions2 = _interopRequireDefault(_defaultFilterOptions);

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

	_Select2.default.Async = _Async2.default;
	_Select2.default.AsyncCreatable = _AsyncCreatable2.default;
	_Select2.default.Creatable = _Creatable2.default;
	_Select2.default.Value = _Value2.default;
	_Select2.default.Option = _Option2.default;

	exports.default = _Select2.default;
	exports.Async = _Async2.default;
	exports.AsyncCreatable = _AsyncCreatable2.default;
	exports.Creatable = _Creatable2.default;
	exports.Value = _Value2.default;
	exports.Option = _Option2.default;
	exports.defaultMenuRenderer = _defaultMenuRenderer2.default;
	exports.defaultArrowRenderer = _defaultArrowRenderer2.default;
	exports.defaultClearRenderer = _defaultClearRenderer2.default;
	exports.defaultFilterOptions = _defaultFilterOptions2.default;

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

	'use strict';

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

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	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 _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /*!
	                                                                                                                                                                                                                                                                                Copyright (c) 2018 Jed Watson.
	                                                                                                                                                                                                                                                                                Licensed under the MIT License (MIT), see
	                                                                                                                                                                                                                                                                                http://jedwatson.github.io/react-select
	                                                                                                                                                                                                                                                                              */


	var _reactInputAutosize = __webpack_require__(568);

	var _reactInputAutosize2 = _interopRequireDefault(_reactInputAutosize);

	var _classnames = __webpack_require__(569);

	var _classnames2 = _interopRequireDefault(_classnames);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _reactDom = __webpack_require__(338);

	var _defaultArrowRenderer = __webpack_require__(570);

	var _defaultArrowRenderer2 = _interopRequireDefault(_defaultArrowRenderer);

	var _defaultClearRenderer = __webpack_require__(571);

	var _defaultClearRenderer2 = _interopRequireDefault(_defaultClearRenderer);

	var _defaultFilterOptions = __webpack_require__(572);

	var _defaultFilterOptions2 = _interopRequireDefault(_defaultFilterOptions);

	var _defaultMenuRenderer = __webpack_require__(575);

	var _defaultMenuRenderer2 = _interopRequireDefault(_defaultMenuRenderer);

	var _Option = __webpack_require__(576);

	var _Option2 = _interopRequireDefault(_Option);

	var _Value = __webpack_require__(578);

	var _Value2 = _interopRequireDefault(_Value);

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

	function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }

	function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

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

	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 stringifyValue = function stringifyValue(value) {
		return typeof value === 'string' ? value : value !== null && JSON.stringify(value) || '';
	};

	var stringOrNode = _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.node]);
	var stringOrNumber = _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]);

	var instanceId = 1;

	var shouldShowValue = function shouldShowValue(state, props) {
		var inputValue = state.inputValue,
		    isPseudoFocused = state.isPseudoFocused,
		    isFocused = state.isFocused;
		var onSelectResetsInput = props.onSelectResetsInput;


		if (!inputValue) return true;

		if (!onSelectResetsInput) {
			return !(!isFocused && isPseudoFocused || isFocused && !isPseudoFocused);
		}

		return false;
	};

	var shouldShowPlaceholder = function shouldShowPlaceholder(state, props, isOpen) {
		var inputValue = state.inputValue,
		    isPseudoFocused = state.isPseudoFocused,
		    isFocused = state.isFocused;
		var onSelectResetsInput = props.onSelectResetsInput;


		return !inputValue || !onSelectResetsInput && !isOpen && !isPseudoFocused && !isFocused;
	};

	/**
	 * Retrieve a value from the given options and valueKey
	 * @param {String|Number|Array} value	- the selected value(s)
	 * @param {Object}		 props	- the Select component's props (or nextProps)
	 */
	var expandValue = function expandValue(value, props) {
		var valueType = typeof value === 'undefined' ? 'undefined' : _typeof(value);
		if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value;
		var options = props.options,
		    valueKey = props.valueKey;

		if (!options) return;
		for (var i = 0; i < options.length; i++) {
			if (String(options[i][valueKey]) === String(value)) return options[i];
		}
	};

	var handleRequired = function handleRequired(value, multi) {
		if (!value) return true;
		return multi ? value.length === 0 : Object.keys(value).length === 0;
	};

	var Select = function (_React$Component) {
		_inherits(Select, _React$Component);

		function Select(props) {
			_classCallCheck(this, Select);

			var _this = _possibleConstructorReturn(this, (Select.__proto__ || Object.getPrototypeOf(Select)).call(this, props));

			['clearValue', 'focusOption', 'getOptionLabel', 'handleInputBlur', 'handleInputChange', 'handleInputFocus', 'handleInputValueChange', 'handleKeyDown', 'handleMenuScroll', 'handleMouseDown', 'handleMouseDownOnArrow', 'handleMouseDownOnMenu', 'handleTouchEnd', 'handleTouchEndClearValue', 'handleTouchMove', 'handleTouchOutside', 'handleTouchStart', 'handleValueClick', 'onOptionRef', 'removeValue', 'selectValue'].forEach(function (fn) {
				return _this[fn] = _this[fn].bind(_this);
			});

			_this.state = {
				inputValue: '',
				isFocused: false,
				isOpen: false,
				isPseudoFocused: false,
				required: false
			};
			return _this;
		}

		_createClass(Select, [{
			key: 'componentWillMount',
			value: function componentWillMount() {
				this._instancePrefix = 'react-select-' + (this.props.instanceId || ++instanceId) + '-';
				var valueArray = this.getValueArray(this.props.value);

				if (this.props.required) {
					this.setState({
						required: handleRequired(valueArray[0], this.props.multi)
					});
				}
			}
		}, {
			key: 'componentDidMount',
			value: function componentDidMount() {
				if (typeof this.props.autofocus !== 'undefined' && typeof console !== 'undefined') {
					console.warn('Warning: The autofocus prop has changed to autoFocus, support will be removed after react-select@1.0');
				}
				if (this.props.autoFocus || this.props.autofocus) {
					this.focus();
				}
			}
		}, {
			key: 'componentWillReceiveProps',
			value: function componentWillReceiveProps(nextProps) {
				var valueArray = this.getValueArray(nextProps.value, nextProps);

				if (nextProps.required) {
					this.setState({
						required: handleRequired(valueArray[0], nextProps.multi)
					});
				} else if (this.props.required) {
					// Used to be required but it's not any more
					this.setState({ required: false });
				}

				if (this.state.inputValue && this.props.value !== nextProps.value && nextProps.onSelectResetsInput) {
					this.setState({ inputValue: this.handleInputValueChange('') });
				}
			}
		}, {
			key: 'componentDidUpdate',
			value: function componentDidUpdate(prevProps, prevState) {
				// focus to the selected option
				if (this.menu && this.focused && this.state.isOpen && !this.hasScrolledToOption) {
					var focusedOptionNode = (0, _reactDom.findDOMNode)(this.focused);
					var menuNode = (0, _reactDom.findDOMNode)(this.menu);

					var scrollTop = menuNode.scrollTop;
					var scrollBottom = scrollTop + menuNode.offsetHeight;
					var optionTop = focusedOptionNode.offsetTop;
					var optionBottom = optionTop + focusedOptionNode.offsetHeight;

					if (scrollTop > optionTop || scrollBottom < optionBottom) {
						menuNode.scrollTop = focusedOptionNode.offsetTop;
					}

					// We still set hasScrolledToOption to true even if we didn't
					// actually need to scroll, as we've still confirmed that the
					// option is in view.
					this.hasScrolledToOption = true;
				} else if (!this.state.isOpen) {
					this.hasScrolledToOption = false;
				}

				if (this._scrollToFocusedOptionOnUpdate && this.focused && this.menu) {
					this._scrollToFocusedOptionOnUpdate = false;
					var focusedDOM = (0, _reactDom.findDOMNode)(this.focused);
					var menuDOM = (0, _reactDom.findDOMNode)(this.menu);
					var focusedRect = focusedDOM.getBoundingClientRect();
					var menuRect = menuDOM.getBoundingClientRect();
					if (focusedRect.bottom > menuRect.bottom) {
						menuDOM.scrollTop = focusedDOM.offsetTop + focusedDOM.clientHeight - menuDOM.offsetHeight;
					} else if (focusedRect.top < menuRect.top) {
						menuDOM.scrollTop = focusedDOM.offsetTop;
					}
				}
				if (this.props.scrollMenuIntoView && this.menuContainer) {
					var menuContainerRect = this.menuContainer.getBoundingClientRect();
					if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) {
						window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight);
					}
				}
				if (prevProps.disabled !== this.props.disabled) {
					this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state
					this.closeMenu();
				}
				if (prevState.isOpen !== this.state.isOpen) {
					this.toggleTouchOutsideEvent(this.state.isOpen);
					var handler = this.state.isOpen ? this.props.onOpen : this.props.onClose;
					handler && handler();
				}
			}
		}, {
			key: 'componentWillUnmount',
			value: function componentWillUnmount() {
				this.toggleTouchOutsideEvent(false);
			}
		}, {
			key: 'toggleTouchOutsideEvent',
			value: function toggleTouchOutsideEvent(enabled) {
				if (enabled) {
					if (!document.addEventListener && document.attachEvent) {
						document.attachEvent('ontouchstart', this.handleTouchOutside);
					} else {
						document.addEventListener('touchstart', this.handleTouchOutside);
					}
				} else {
					if (!document.removeEventListener && document.detachEvent) {
						document.detachEvent('ontouchstart', this.handleTouchOutside);
					} else {
						document.removeEventListener('touchstart', this.handleTouchOutside);
					}
				}
			}
		}, {
			key: 'handleTouchOutside',
			value: function handleTouchOutside(event) {
				// handle touch outside on ios to dismiss menu
				if (this.wrapper && !this.wrapper.contains(event.target)) {
					this.closeMenu();
				}
			}
		}, {
			key: 'focus',
			value: function focus() {
				if (!this.input) return;
				this.input.focus();
			}
		}, {
			key: 'blurInput',
			value: function blurInput() {
				if (!this.input) return;
				this.input.blur();
			}
		}, {
			key: 'handleTouchMove',
			value: function handleTouchMove() {
				// Set a flag that the view is being dragged
				this.dragging = true;
			}
		}, {
			key: 'handleTouchStart',
			value: function handleTouchStart() {
				// Set a flag that the view is not being dragged
				this.dragging = false;
			}
		}, {
			key: 'handleTouchEnd',
			value: function handleTouchEnd(event) {
				// Check if the view is being dragged, In this case
				// we don't want to fire the click event (because the user only wants to scroll)
				if (this.dragging) return;

				// Fire the mouse events
				this.handleMouseDown(event);
			}
		}, {
			key: 'handleTouchEndClearValue',
			value: function handleTouchEndClearValue(event) {
				// Check if the view is being dragged, In this case
				// we don't want to fire the click event (because the user only wants to scroll)
				if (this.dragging) return;

				// Clear the value
				this.clearValue(event);
			}
		}, {
			key: 'handleMouseDown',
			value: function handleMouseDown(event) {
				// if the event was triggered by a mousedown and not the primary
				// button, or if the component is disabled, ignore it.
				if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
					return;
				}

				if (event.target.tagName === 'INPUT') {
					if (!this.state.isFocused) {
						this._openAfterFocus = this.props.openOnClick;
						this.focus();
					} else if (!this.state.isOpen) {
						this.setState({
							isOpen: true,
							isPseudoFocused: false
						});
					}

					return;
				}

				// prevent default event handlers
				event.preventDefault();

				// for the non-searchable select, toggle the menu
				if (!this.props.searchable) {
					// This code means that if a select is searchable, onClick the options menu will not appear, only on subsequent click will it open.
					this.focus();
					return this.setState({
						isOpen: !this.state.isOpen
					});
				}

				if (this.state.isFocused) {
					// On iOS, we can get into a state where we think the input is focused but it isn't really,
					// since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event.
					// Call focus() again here to be safe.
					this.focus();

					var input = this.input;
					var toOpen = true;

					if (typeof input.getInput === 'function') {
						// Get the actual DOM input if the ref is an <AutosizeInput /> component
						input = input.getInput();
					}

					// clears the value so that the cursor will be at the end of input when the component re-renders
					input.value = '';

					if (this._focusAfterClear) {
						toOpen = false;
						this._focusAfterClear = false;
					}

					// if the input is focused, ensure the menu is open
					this.setState({
						isOpen: toOpen,
						isPseudoFocused: false,
						focusedOption: null
					});
				} else {
					// otherwise, focus the input and open the menu
					this._openAfterFocus = this.props.openOnClick;
					this.focus();
					this.setState({ focusedOption: null });
				}
			}
		}, {
			key: 'handleMouseDownOnArrow',
			value: function handleMouseDownOnArrow(event) {
				// if the event was triggered by a mousedown and not the primary
				// button, or if the component is disabled, ignore it.
				if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
					return;
				}

				if (this.state.isOpen) {
					// prevent default event handlers
					event.stopPropagation();
					event.preventDefault();
					// close the menu
					this.closeMenu();
				} else {
					// If the menu isn't open, let the event bubble to the main handleMouseDown
					this.setState({
						isOpen: true
					});
				}
			}
		}, {
			key: 'handleMouseDownOnMenu',
			value: function handleMouseDownOnMenu(event) {
				// if the event was triggered by a mousedown and not the primary
				// button, or if the component is disabled, ignore it.
				if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
					return;
				}

				event.stopPropagation();
				event.preventDefault();

				this._openAfterFocus = true;
				this.focus();
			}
		}, {
			key: 'closeMenu',
			value: function closeMenu() {
				if (this.props.onCloseResetsInput) {
					this.setState({
						inputValue: this.handleInputValueChange(''),
						isOpen: false,
						isPseudoFocused: this.state.isFocused && !this.props.multi
					});
				} else {
					this.setState({
						isOpen: false,
						isPseudoFocused: this.state.isFocused && !this.props.multi
					});
				}
				this.hasScrolledToOption = false;
			}
		}, {
			key: 'handleInputFocus',
			value: function handleInputFocus(event) {
				if (this.props.disabled) return;

				var toOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus;
				toOpen = this._focusAfterClear ? false : toOpen; //if focus happens after clear values, don't open dropdown yet.

				if (this.props.onFocus) {
					this.props.onFocus(event);
				}

				this.setState({
					isFocused: true,
					isOpen: !!toOpen
				});

				this._focusAfterClear = false;
				this._openAfterFocus = false;
			}
		}, {
			key: 'handleInputBlur',
			value: function handleInputBlur(event) {
				// The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts.
				if (this.menu && (this.menu === document.activeElement || this.menu.contains(document.activeElement))) {
					this.focus();
					return;
				}

				if (this.props.onBlur) {
					this.props.onBlur(event);
				}
				var onBlurredState = {
					isFocused: false,
					isOpen: false,
					isPseudoFocused: false
				};
				if (this.props.onBlurResetsInput) {
					onBlurredState.inputValue = this.handleInputValueChange('');
				}
				this.setState(onBlurredState);
			}
		}, {
			key: 'handleInputChange',
			value: function handleInputChange(event) {
				var newInputValue = event.target.value;

				if (this.state.inputValue !== event.target.value) {
					newInputValue = this.handleInputValueChange(newInputValue);
				}

				this.setState({
					inputValue: newInputValue,
					isOpen: true,
					isPseudoFocused: false
				});
			}
		}, {
			key: 'setInputValue',
			value: function setInputValue(newValue) {
				if (this.props.onInputChange) {
					var nextState = this.props.onInputChange(newValue);
					if (nextState != null && (typeof nextState === 'undefined' ? 'undefined' : _typeof(nextState)) !== 'object') {
						newValue = '' + nextState;
					}
				}
				this.setState({
					inputValue: newValue
				});
			}
		}, {
			key: 'handleInputValueChange',
			value: function handleInputValueChange(newValue) {
				if (this.props.onInputChange) {
					var nextState = this.props.onInputChange(newValue);
					// Note: != used deliberately here to catch undefined and null
					if (nextState != null && (typeof nextState === 'undefined' ? 'undefined' : _typeof(nextState)) !== 'object') {
						newValue = '' + nextState;
					}
				}
				return newValue;
			}
		}, {
			key: 'handleKeyDown',
			value: function handleKeyDown(event) {
				if (this.props.disabled) return;

				if (typeof this.props.onInputKeyDown === 'function') {
					this.props.onInputKeyDown(event);
					if (event.defaultPrevented) {
						return;
					}
				}

				switch (event.keyCode) {
					case 8:
						// backspace
						if (!this.state.inputValue && this.props.backspaceRemoves) {
							event.preventDefault();
							this.popValue();
						}
						break;
					case 9:
						// tab
						if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) {
							break;
						}
						event.preventDefault();
						this.selectFocusedOption();
						break;
					case 13:
						// enter
						event.preventDefault();
						event.stopPropagation();
						if (this.state.isOpen) {
							this.selectFocusedOption();
						} else {
							this.focusNextOption();
						}
						break;
					case 27:
						// escape
						event.preventDefault();
						if (this.state.isOpen) {
							this.closeMenu();
							event.stopPropagation();
						} else if (this.props.clearable && this.props.escapeClearsValue) {
							this.clearValue(event);
							event.stopPropagation();
						}
						break;
					case 32:
						// space
						if (this.props.searchable) {
							break;
						}
						event.preventDefault();
						if (!this.state.isOpen) {
							this.focusNextOption();
							break;
						}
						event.stopPropagation();
						this.selectFocusedOption();
						break;
					case 38:
						// up
						event.preventDefault();
						this.focusPreviousOption();
						break;
					case 40:
						// down
						event.preventDefault();
						this.focusNextOption();
						break;
					case 33:
						// page up
						event.preventDefault();
						this.focusPageUpOption();
						break;
					case 34:
						// page down
						event.preventDefault();
						this.focusPageDownOption();
						break;
					case 35:
						// end key
						if (event.shiftKey) {
							break;
						}
						event.preventDefault();
						this.focusEndOption();
						break;
					case 36:
						// home key
						if (event.shiftKey) {
							break;
						}
						event.preventDefault();
						this.focusStartOption();
						break;
					case 46:
						// delete
						if (!this.state.inputValue && this.props.deleteRemoves) {
							event.preventDefault();
							this.popValue();
						}
						break;
				}
			}
		}, {
			key: 'handleValueClick',
			value: function handleValueClick(option, event) {
				if (!this.props.onValueClick) return;
				this.props.onValueClick(option, event);
			}
		}, {
			key: 'handleMenuScroll',
			value: function handleMenuScroll(event) {
				if (!this.props.onMenuScrollToBottom) return;
				var target = event.target;

				if (target.scrollHeight > target.offsetHeight && target.scrollHeight - target.offsetHeight - target.scrollTop <= 0) {
					this.props.onMenuScrollToBottom();
				}
			}
		}, {
			key: 'getOptionLabel',
			value: function getOptionLabel(op) {
				return op[this.props.labelKey];
			}

			/**
	   * Turns a value into an array from the given options
	   * @param {String|Number|Array} value		- the value of the select input
	   * @param {Object}		nextProps	- optionally specify the nextProps so the returned array uses the latest configuration
	   * @returns	{Array}	the value of the select represented in an array
	   */

		}, {
			key: 'getValueArray',
			value: function getValueArray(value) {
				var nextProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;

				/** support optionally passing in the `nextProps` so `componentWillReceiveProps` updates will function as expected */
				var props = (typeof nextProps === 'undefined' ? 'undefined' : _typeof(nextProps)) === 'object' ? nextProps : this.props;
				if (props.multi) {
					if (typeof value === 'string') {
						value = value.split(props.delimiter);
					}
					if (!Array.isArray(value)) {
						if (value === null || value === undefined) return [];
						value = [value];
					}
					return value.map(function (value) {
						return expandValue(value, props);
					}).filter(function (i) {
						return i;
					});
				}
				var expandedValue = expandValue(value, props);
				return expandedValue ? [expandedValue] : [];
			}
		}, {
			key: 'setValue',
			value: function setValue(value) {
				var _this2 = this;

				if (this.props.autoBlur) {
					this.blurInput();
				}
				if (this.props.required) {
					var required = handleRequired(value, this.props.multi);
					this.setState({ required: required });
				}
				if (this.props.simpleValue && value) {
					value = this.props.multi ? value.map(function (i) {
						return i[_this2.props.valueKey];
					}).join(this.props.delimiter) : value[this.props.valueKey];
				}
				if (this.props.onChange) {
					this.props.onChange(value);
				}
			}
		}, {
			key: 'selectValue',
			value: function selectValue(value) {
				var _this3 = this;

				// NOTE: we actually add/set the value in a callback to make sure the
				// input value is empty to avoid styling issues in Chrome
				if (this.props.closeOnSelect) {
					this.hasScrolledToOption = false;
				}
				var updatedValue = this.props.onSelectResetsInput ? '' : this.state.inputValue;
				if (this.props.multi) {
					this.setState({
						focusedIndex: null,
						inputValue: this.handleInputValueChange(updatedValue),
						isOpen: !this.props.closeOnSelect
					}, function () {
						var valueArray = _this3.getValueArray(_this3.props.value);
						if (valueArray.some(function (i) {
							return i[_this3.props.valueKey] === value[_this3.props.valueKey];
						})) {
							_this3.removeValue(value);
						} else {
							_this3.addValue(value);
						}
					});
				} else {
					this.setState({
						inputValue: this.handleInputValueChange(updatedValue),
						isOpen: !this.props.closeOnSelect,
						isPseudoFocused: this.state.isFocused
					}, function () {
						_this3.setValue(value);
					});
				}
			}
		}, {
			key: 'addValue',
			value: function addValue(value) {
				var valueArray = this.getValueArray(this.props.value);
				var visibleOptions = this._visibleOptions.filter(function (val) {
					return !val.disabled;
				});
				var lastValueIndex = visibleOptions.indexOf(value);
				this.setValue(valueArray.concat(value));
				if (visibleOptions.length - 1 === lastValueIndex) {
					// the last option was selected; focus the second-last one
					this.focusOption(visibleOptions[lastValueIndex - 1]);
				} else if (visibleOptions.length > lastValueIndex) {
					// focus the option below the selected one
					this.focusOption(visibleOptions[lastValueIndex + 1]);
				}
			}
		}, {
			key: 'popValue',
			value: function popValue() {
				var valueArray = this.getValueArray(this.props.value);
				if (!valueArray.length) return;
				if (valueArray[valueArray.length - 1].clearableValue === false) return;
				this.setValue(this.props.multi ? valueArray.slice(0, valueArray.length - 1) : null);
			}
		}, {
			key: 'removeValue',
			value: function removeValue(value) {
				var _this4 = this;

				var valueArray = this.getValueArray(this.props.value);
				this.setValue(valueArray.filter(function (i) {
					return i[_this4.props.valueKey] !== value[_this4.props.valueKey];
				}));
				this.focus();
			}
		}, {
			key: 'clearValue',
			value: function clearValue(event) {
				// if the event was triggered by a mousedown and not the primary
				// button, ignore it.
				if (event && event.type === 'mousedown' && event.button !== 0) {
					return;
				}

				event.preventDefault();

				this.setValue(this.getResetValue());
				this.setState({
					inputValue: this.handleInputValueChange(''),
					isOpen: false
				}, this.focus);

				this._focusAfterClear = true;
			}
		}, {
			key: 'getResetValue',
			value: function getResetValue() {
				if (this.props.resetValue !== undefined) {
					return this.props.resetValue;
				} else if (this.props.multi) {
					return [];
				} else {
					return null;
				}
			}
		}, {
			key: 'focusOption',
			value: function focusOption(option) {
				this.setState({
					focusedOption: option
				});
			}
		}, {
			key: 'focusNextOption',
			value: function focusNextOption() {
				this.focusAdjacentOption('next');
			}
		}, {
			key: 'focusPreviousOption',
			value: function focusPreviousOption() {
				this.focusAdjacentOption('previous');
			}
		}, {
			key: 'focusPageUpOption',
			value: function focusPageUpOption() {
				this.focusAdjacentOption('page_up');
			}
		}, {
			key: 'focusPageDownOption',
			value: function focusPageDownOption() {
				this.focusAdjacentOption('page_down');
			}
		}, {
			key: 'focusStartOption',
			value: function focusStartOption() {
				this.focusAdjacentOption('start');
			}
		}, {
			key: 'focusEndOption',
			value: function focusEndOption() {
				this.focusAdjacentOption('end');
			}
		}, {
			key: 'focusAdjacentOption',
			value: function focusAdjacentOption(dir) {
				var options = this._visibleOptions.map(function (option, index) {
					return { option: option, index: index };
				}).filter(function (option) {
					return !option.option.disabled;
				});
				this._scrollToFocusedOptionOnUpdate = true;
				if (!this.state.isOpen) {
					var newState = {
						focusedOption: this._focusedOption || (options.length ? options[dir === 'next' ? 0 : options.length - 1].option : null),
						isOpen: true
					};
					if (this.props.onSelectResetsInput) {
						newState.inputValue = '';
					}
					this.setState(newState);
					return;
				}
				if (!options.length) return;
				var focusedIndex = -1;
				for (var i = 0; i < options.length; i++) {
					if (this._focusedOption === options[i].option) {
						focusedIndex = i;
						break;
					}
				}
				if (dir === 'next' && focusedIndex !== -1) {
					focusedIndex = (focusedIndex + 1) % options.length;
				} else if (dir === 'previous') {
					if (focusedIndex > 0) {
						focusedIndex = focusedIndex - 1;
					} else {
						focusedIndex = options.length - 1;
					}
				} else if (dir === 'start') {
					focusedIndex = 0;
				} else if (dir === 'end') {
					focusedIndex = options.length - 1;
				} else if (dir === 'page_up') {
					var potentialIndex = focusedIndex - this.props.pageSize;
					if (potentialIndex < 0) {
						focusedIndex = 0;
					} else {
						focusedIndex = potentialIndex;
					}
				} else if (dir === 'page_down') {
					var _potentialIndex = focusedIndex + this.props.pageSize;
					if (_potentialIndex > options.length - 1) {
						focusedIndex = options.length - 1;
					} else {
						focusedIndex = _potentialIndex;
					}
				}

				if (focusedIndex === -1) {
					focusedIndex = 0;
				}

				this.setState({
					focusedIndex: options[focusedIndex].index,
					focusedOption: options[focusedIndex].option
				});
			}
		}, {
			key: 'getFocusedOption',
			value: function getFocusedOption() {
				return this._focusedOption;
			}
		}, {
			key: 'selectFocusedOption',
			value: function selectFocusedOption() {
				if (this._focusedOption) {
					return this.selectValue(this._focusedOption);
				}
			}
		}, {
			key: 'renderLoading',
			value: function renderLoading() {
				if (!this.props.isLoading) return;
				return _react2.default.createElement(
					'span',
					{ className: 'Select-loading-zone', 'aria-hidden': 'true' },
					_react2.default.createElement('span', { className: 'Select-loading' })
				);
			}
		}, {
			key: 'renderValue',
			value: function renderValue(valueArray, isOpen) {
				var _this5 = this;

				var renderLabel = this.props.valueRenderer || this.getOptionLabel;
				var ValueComponent = this.props.valueComponent;
				if (!valueArray.length) {
					var showPlaceholder = shouldShowPlaceholder(this.state, this.props, isOpen);
					return showPlaceholder ? _react2.default.createElement(
						'div',
						{ className: 'Select-placeholder' },
						this.props.placeholder
					) : null;
				}
				var onClick = this.props.onValueClick ? this.handleValueClick : null;
				if (this.props.multi) {
					return valueArray.map(function (value, i) {
						return _react2.default.createElement(
							ValueComponent,
							{
								disabled: _this5.props.disabled || value.clearableValue === false,
								id: _this5._instancePrefix + '-value-' + i,
								instancePrefix: _this5._instancePrefix,
								key: 'value-' + i + '-' + value[_this5.props.valueKey],
								onClick: onClick,
								onRemove: _this5.removeValue,
								placeholder: _this5.props.placeholder,
								value: value
							},
							renderLabel(value, i),
							_react2.default.createElement(
								'span',
								{ className: 'Select-aria-only' },
								'\xA0'
							)
						);
					});
				} else if (shouldShowValue(this.state, this.props)) {
					if (isOpen) onClick = null;
					return _react2.default.createElement(
						ValueComponent,
						{
							disabled: this.props.disabled,
							id: this._instancePrefix + '-value-item',
							instancePrefix: this._instancePrefix,
							onClick: onClick,
							placeholder: this.props.placeholder,
							value: valueArray[0]
						},
						renderLabel(valueArray[0])
					);
				}
			}
		}, {
			key: 'renderInput',
			value: function renderInput(valueArray, focusedOptionIndex) {
				var _classNames,
				    _this6 = this;

				var className = (0, _classnames2.default)('Select-input', this.props.inputProps.className);
				var isOpen = this.state.isOpen;

				var ariaOwns = (0, _classnames2.default)((_classNames = {}, _defineProperty(_classNames, this._instancePrefix + '-list', isOpen), _defineProperty(_classNames, this._instancePrefix + '-backspace-remove-message', this.props.multi && !this.props.disabled && this.state.isFocused && !this.state.inputValue), _classNames));

				var value = this.state.inputValue;
				if (value && !this.props.onSelectResetsInput && !this.state.isFocused) {
					// it hides input value when it is not focused and was not reset on select
					value = '';
				}

				var inputProps = _extends({}, this.props.inputProps, {
					'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value',
					'aria-describedby': this.props['aria-describedby'],
					'aria-expanded': '' + isOpen,
					'aria-haspopup': '' + isOpen,
					'aria-label': this.props['aria-label'],
					'aria-labelledby': this.props['aria-labelledby'],
					'aria-owns': ariaOwns,
					className: className,
					onBlur: this.handleInputBlur,
					onChange: this.handleInputChange,
					onFocus: this.handleInputFocus,
					ref: function ref(_ref) {
						return _this6.input = _ref;
					},
					role: 'combobox',
					required: this.state.required,
					tabIndex: this.props.tabIndex,
					value: value
				});

				if (this.props.inputRenderer) {
					return this.props.inputRenderer(inputProps);
				}

				if (this.props.disabled || !this.props.searchable) {
					var divProps = _objectWithoutProperties(this.props.inputProps, []);

					var _ariaOwns = (0, _classnames2.default)(_defineProperty({}, this._instancePrefix + '-list', isOpen));
					return _react2.default.createElement('div', _extends({}, divProps, {
						'aria-expanded': isOpen,
						'aria-owns': _ariaOwns,
						'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value',
						'aria-disabled': '' + this.props.disabled,
						'aria-label': this.props['aria-label'],
						'aria-labelledby': this.props['aria-labelledby'],
						className: className,
						onBlur: this.handleInputBlur,
						onFocus: this.handleInputFocus,
						ref: function ref(_ref2) {
							return _this6.input = _ref2;
						},
						role: 'combobox',
						style: { border: 0, width: 1, display: 'inline-block' },
						tabIndex: this.props.tabIndex || 0
					}));
				}

				if (this.props.autosize) {
					return _react2.default.createElement(_reactInputAutosize2.default, _extends({ id: this.props.id }, inputProps, { minWidth: '5' }));
				}
				return _react2.default.createElement(
					'div',
					{ className: className, key: 'input-wrap', style: { display: 'inline-block' } },
					_react2.default.createElement('input', _extends({ id: this.props.id }, inputProps))
				);
			}
		}, {
			key: 'renderClear',
			value: function renderClear() {
				var valueArray = this.getValueArray(this.props.value);
				if (!this.props.clearable || !valueArray.length || this.props.disabled || this.props.isLoading) return;
				var ariaLabel = this.props.multi ? this.props.clearAllText : this.props.clearValueText;
				var clear = this.props.clearRenderer();

				return _react2.default.createElement(
					'span',
					{
						'aria-label': ariaLabel,
						className: 'Select-clear-zone',
						onMouseDown: this.clearValue,
						onTouchEnd: this.handleTouchEndClearValue,
						onTouchMove: this.handleTouchMove,
						onTouchStart: this.handleTouchStart,
						title: ariaLabel
					},
					clear
				);
			}
		}, {
			key: 'renderArrow',
			value: function renderArrow() {
				if (!this.props.arrowRenderer) return;

				var onMouseDown = this.handleMouseDownOnArrow;
				var isOpen = this.state.isOpen;
				var arrow = this.props.arrowRenderer({ onMouseDown: onMouseDown, isOpen: isOpen });

				if (!arrow) {
					return null;
				}

				return _react2.default.createElement(
					'span',
					{
						className: 'Select-arrow-zone',
						onMouseDown: onMouseDown
					},
					arrow
				);
			}
		}, {
			key: 'filterOptions',
			value: function filterOptions(excludeOptions) {
				var filterValue = this.state.inputValue;
				var options = this.props.options || [];
				if (this.props.filterOptions) {
					// Maintain backwards compatibility with boolean attribute
					var filterOptions = typeof this.props.filterOptions === 'function' ? this.props.filterOptions : _defaultFilterOptions2.default;

					return filterOptions(options, filterValue, excludeOptions, {
						filterOption: this.props.filterOption,
						ignoreAccents: this.props.ignoreAccents,
						ignoreCase: this.props.ignoreCase,
						labelKey: this.props.labelKey,
						matchPos: this.props.matchPos,
						matchProp: this.props.matchProp,
						trimFilter: this.props.trimFilter,
						valueKey: this.props.valueKey
					});
				} else {
					return options;
				}
			}
		}, {
			key: 'onOptionRef',
			value: function onOptionRef(ref, isFocused) {
				if (isFocused) {
					this.focused = ref;
				}
			}
		}, {
			key: 'renderMenu',
			value: function renderMenu(options, valueArray, focusedOption) {
				if (options && options.length) {
					return this.props.menuRenderer({
						focusedOption: focusedOption,
						focusOption: this.focusOption,
						inputValue: this.state.inputValue,
						instancePrefix: this._instancePrefix,
						labelKey: this.props.labelKey,
						onFocus: this.focusOption,
						onOptionRef: this.onOptionRef,
						onSelect: this.selectValue,
						optionClassName: this.props.optionClassName,
						optionComponent: this.props.optionComponent,
						optionRenderer: this.props.optionRenderer || this.getOptionLabel,
						options: options,
						removeValue: this.removeValue,
						selectValue: this.selectValue,
						valueArray: valueArray,
						valueKey: this.props.valueKey
					});
				} else if (this.props.noResultsText) {
					return _react2.default.createElement(
						'div',
						{ className: 'Select-noresults' },
						this.props.noResultsText
					);
				} else {
					return null;
				}
			}
		}, {
			key: 'renderHiddenField',
			value: function renderHiddenField(valueArray) {
				var _this7 = this;

				if (!this.props.name) return;
				if (this.props.joinValues) {
					var value = valueArray.map(function (i) {
						return stringifyValue(i[_this7.props.valueKey]);
					}).join(this.props.delimiter);
					return _react2.default.createElement('input', {
						disabled: this.props.disabled,
						name: this.props.name,
						ref: function ref(_ref3) {
							return _this7.value = _ref3;
						},
						type: 'hidden',
						value: value
					});
				}
				return valueArray.map(function (item, index) {
					return _react2.default.createElement('input', {
						disabled: _this7.props.disabled,
						key: 'hidden.' + index,
						name: _this7.props.name,
						ref: 'value' + index,
						type: 'hidden',
						value: stringifyValue(item[_this7.props.valueKey])
					});
				});
			}
		}, {
			key: 'getFocusableOptionIndex',
			value: function getFocusableOptionIndex(selectedOption) {
				var options = this._visibleOptions;
				if (!options.length) return null;

				var valueKey = this.props.valueKey;
				var focusedOption = this.state.focusedOption || selectedOption;
				if (focusedOption && !focusedOption.disabled) {
					var focusedOptionIndex = -1;
					options.some(function (option, index) {
						var isOptionEqual = option[valueKey] === focusedOption[valueKey];
						if (isOptionEqual) {
							focusedOptionIndex = index;
						}
						return isOptionEqual;
					});
					if (focusedOptionIndex !== -1) {
						return focusedOptionIndex;
					}
				}

				for (var i = 0; i < options.length; i++) {
					if (!options[i].disabled) return i;
				}
				return null;
			}
		}, {
			key: 'renderOuter',
			value: function renderOuter(options, valueArray, focusedOption) {
				var _this8 = this;

				var menu = this.renderMenu(options, valueArray, focusedOption);
				if (!menu) {
					return null;
				}

				return _react2.default.createElement(
					'div',
					{ ref: function ref(_ref5) {
							return _this8.menuContainer = _ref5;
						}, className: 'Select-menu-outer', style: this.props.menuContainerStyle },
					_react2.default.createElement(
						'div',
						{
							className: 'Select-menu',
							id: this._instancePrefix + '-list',
							onMouseDown: this.handleMouseDownOnMenu,
							onScroll: this.handleMenuScroll,
							ref: function ref(_ref4) {
								return _this8.menu = _ref4;
							},
							role: 'listbox',
							style: this.props.menuStyle,
							tabIndex: -1
						},
						menu
					)
				);
			}
		}, {
			key: 'render',
			value: function render() {
				var _this9 = this;

				var valueArray = this.getValueArray(this.props.value);
				var options = this._visibleOptions = this.filterOptions(this.props.multi && this.props.removeSelected ? valueArray : null);
				var isOpen = this.state.isOpen;
				if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false;
				var focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]);

				var focusedOption = null;
				if (focusedOptionIndex !== null) {
					focusedOption = this._focusedOption = options[focusedOptionIndex];
				} else {
					focusedOption = this._focusedOption = null;
				}
				var className = (0, _classnames2.default)('Select', this.props.className, {
					'has-value': valueArray.length,
					'is-clearable': this.props.clearable,
					'is-disabled': this.props.disabled,
					'is-focused': this.state.isFocused,
					'is-loading': this.props.isLoading,
					'is-open': isOpen,
					'is-pseudo-focused': this.state.isPseudoFocused,
					'is-searchable': this.props.searchable,
					'Select--multi': this.props.multi,
					'Select--rtl': this.props.rtl,
					'Select--single': !this.props.multi
				});

				var removeMessage = null;
				if (this.props.multi && !this.props.disabled && valueArray.length && !this.state.inputValue && this.state.isFocused && this.props.backspaceRemoves) {
					removeMessage = _react2.default.createElement(
						'span',
						{ id: this._instancePrefix + '-backspace-remove-message', className: 'Select-aria-only', 'aria-live': 'assertive' },
						this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey])
					);
				}

				return _react2.default.createElement(
					'div',
					{ ref: function ref(_ref7) {
							return _this9.wrapper = _ref7;
						},
						className: className,
						style: this.props.wrapperStyle },
					this.renderHiddenField(valueArray),
					_react2.default.createElement(
						'div',
						{ ref: function ref(_ref6) {
								return _this9.control = _ref6;
							},
							className: 'Select-control',
							onKeyDown: this.handleKeyDown,
							onMouseDown: this.handleMouseDown,
							onTouchEnd: this.handleTouchEnd,
							onTouchMove: this.handleTouchMove,
							onTouchStart: this.handleTouchStart,
							style: this.props.style
						},
						_react2.default.createElement(
							'span',
							{ className: 'Select-multi-value-wrapper', id: this._instancePrefix + '-value' },
							this.renderValue(valueArray, isOpen),
							this.renderInput(valueArray, focusedOptionIndex)
						),
						removeMessage,
						this.renderLoading(),
						this.renderClear(),
						this.renderArrow()
					),
					isOpen ? this.renderOuter(options, valueArray, focusedOption) : null
				);
			}
		}]);

		return Select;
	}(_react2.default.Component);

	Select.propTypes = {
		'aria-describedby': _propTypes2.default.string, // html id(s) of element(s) that should be used to describe this input (for assistive tech)
		'aria-label': _propTypes2.default.string, // aria label (for assistive tech)
		'aria-labelledby': _propTypes2.default.string, // html id of an element that should be used as the label (for assistive tech)
		arrowRenderer: _propTypes2.default.func, // create the drop-down caret element
		autoBlur: _propTypes2.default.bool, // automatically blur the component when an option is selected
		autoFocus: _propTypes2.default.bool, // autofocus the component on mount
		autofocus: _propTypes2.default.bool, // deprecated; use autoFocus instead
		autosize: _propTypes2.default.bool, // whether to enable autosizing or not
		backspaceRemoves: _propTypes2.default.bool, // whether backspace removes an item if there is no text input
		backspaceToRemoveMessage: _propTypes2.default.string, // message to use for screenreaders to press backspace to remove the current item - {label} is replaced with the item label
		className: _propTypes2.default.string, // className for the outer element
		clearAllText: stringOrNode, // title for the "clear" control when multi: true
		clearRenderer: _propTypes2.default.func, // create clearable x element
		clearValueText: stringOrNode, // title for the "clear" control
		clearable: _propTypes2.default.bool, // should it be possible to reset value
		closeOnSelect: _propTypes2.default.bool, // whether to close the menu when a value is selected
		deleteRemoves: _propTypes2.default.bool, // whether delete removes an item if there is no text input
		delimiter: _propTypes2.default.string, // delimiter to use to join multiple values for the hidden field value
		disabled: _propTypes2.default.bool, // whether the Select is disabled or not
		escapeClearsValue: _propTypes2.default.bool, // whether escape clears the value when the menu is closed
		filterOption: _propTypes2.default.func, // method to filter a single option (option, filterString)
		filterOptions: _propTypes2.default.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values])
		id: _propTypes2.default.string, // html id to set on the input element for accessibility or tests
		ignoreAccents: _propTypes2.default.bool, // whether to strip diacritics when filtering
		ignoreCase: _propTypes2.default.bool, // whether to perform case-insensitive filtering
		inputProps: _propTypes2.default.object, // custom attributes for the Input
		inputRenderer: _propTypes2.default.func, // returns a custom input component
		instanceId: _propTypes2.default.string, // set the components instanceId
		isLoading: _propTypes2.default.bool, // whether the Select is loading externally or not (such as options being loaded)
		joinValues: _propTypes2.default.bool, // joins multiple values into a single form field with the delimiter (legacy mode)
		labelKey: _propTypes2.default.string, // path of the label value in option objects
		matchPos: _propTypes2.default.string, // (any|start) match the start or entire string when filtering
		matchProp: _propTypes2.default.string, // (any|label|value) which option property to filter on
		menuBuffer: _propTypes2.default.number, // optional buffer (in px) between the bottom of the viewport and the bottom of the menu
		menuContainerStyle: _propTypes2.default.object, // optional style to apply to the menu container
		menuRenderer: _propTypes2.default.func, // renders a custom menu with options
		menuStyle: _propTypes2.default.object, // optional style to apply to the menu
		multi: _propTypes2.default.bool, // multi-value input
		name: _propTypes2.default.string, // generates a hidden <input /> tag with this field name for html forms
		noResultsText: stringOrNode, // placeholder displayed when there are no matching search results
		onBlur: _propTypes2.default.func, // onBlur handler: function (event) {}
		onBlurResetsInput: _propTypes2.default.bool, // whether input is cleared on blur
		onChange: _propTypes2.default.func, // onChange handler: function (newValue) {}
		onClose: _propTypes2.default.func, // fires when the menu is closed
		onCloseResetsInput: _propTypes2.default.bool, // whether input is cleared when menu is closed through the arrow
		onFocus: _propTypes2.default.func, // onFocus handler: function (event) {}
		onInputChange: _propTypes2.default.func, // onInputChange handler: function (inputValue) {}
		onInputKeyDown: _propTypes2.default.func, // input keyDown handler: function (event) {}
		onMenuScrollToBottom: _propTypes2.default.func, // fires when the menu is scrolled to the bottom; can be used to paginate options
		onOpen: _propTypes2.default.func, // fires when the menu is opened
		onSelectResetsInput: _propTypes2.default.bool, // whether input is cleared on select (works only for multiselect)
		onValueClick: _propTypes2.default.func, // onClick handler for value labels: function (value, event) {}
		openOnClick: _propTypes2.default.bool, // boolean to control opening the menu when the control is clicked
		openOnFocus: _propTypes2.default.bool, // always open options menu on focus
		optionClassName: _propTypes2.default.string, // additional class(es) to apply to the <Option /> elements
		optionComponent: _propTypes2.default.func, // option component to render in dropdown
		optionRenderer: _propTypes2.default.func, // optionRenderer: function (option) {}
		options: _propTypes2.default.array, // array of options
		pageSize: _propTypes2.default.number, // number of entries to page when using page up/down keys
		placeholder: stringOrNode, // field placeholder, displayed when there's no value
		removeSelected: _propTypes2.default.bool, // whether the selected option is removed from the dropdown on multi selects
		required: _propTypes2.default.bool, // applies HTML5 required attribute when needed
		resetValue: _propTypes2.default.any, // value to use when you clear the control
		rtl: _propTypes2.default.bool, // set to true in order to use react-select in right-to-left direction
		scrollMenuIntoView: _propTypes2.default.bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged
		searchable: _propTypes2.default.bool, // whether to enable searching feature or not
		simpleValue: _propTypes2.default.bool, // pass the value to onChange as a simple value (legacy pre 1.0 mode), defaults to false
		style: _propTypes2.default.object, // optional style to apply to the control
		tabIndex: stringOrNumber, // optional tab index of the control
		tabSelectsValue: _propTypes2.default.bool, // whether to treat tabbing out while focused to be value selection
		trimFilter: _propTypes2.default.bool, // whether to trim whitespace around filter value
		value: _propTypes2.default.any, // initial field value
		valueComponent: _propTypes2.default.func, // value component to render
		valueKey: _propTypes2.default.string, // path of the label value in option objects
		valueRenderer: _propTypes2.default.func, // valueRenderer: function (option) {}
		wrapperStyle: _propTypes2.default.object // optional style to apply to the component wrapper
	};

	Select.defaultProps = {
		arrowRenderer: _defaultArrowRenderer2.default,
		autosize: true,
		backspaceRemoves: true,
		backspaceToRemoveMessage: 'Press backspace to remove {label}',
		clearable: true,
		clearAllText: 'Clear all',
		clearRenderer: _defaultClearRenderer2.default,
		clearValueText: 'Clear value',
		closeOnSelect: true,
		deleteRemoves: true,
		delimiter: ',',
		disabled: false,
		escapeClearsValue: true,
		filterOptions: _defaultFilterOptions2.default,
		ignoreAccents: true,
		ignoreCase: true,
		inputProps: {},
		isLoading: false,
		joinValues: false,
		labelKey: 'label',
		matchPos: 'any',
		matchProp: 'any',
		menuBuffer: 0,
		menuRenderer: _defaultMenuRenderer2.default,
		multi: false,
		noResultsText: 'No results found',
		onBlurResetsInput: true,
		onCloseResetsInput: true,
		onSelectResetsInput: true,
		openOnClick: true,
		optionComponent: _Option2.default,
		pageSize: 5,
		placeholder: 'Select...',
		removeSelected: true,
		required: false,
		rtl: false,
		scrollMenuIntoView: true,
		searchable: true,
		simpleValue: false,
		tabSelectsValue: true,
		trimFilter: true,
		valueComponent: _Value2.default,
		valueKey: 'value'
	};

	exports.default = Select;

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

	'use strict';

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

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

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

	function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }

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

	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 sizerStyle = {
		position: 'absolute',
		top: 0,
		left: 0,
		visibility: 'hidden',
		height: 0,
		overflow: 'scroll',
		whiteSpace: 'pre'
	};

	var INPUT_PROPS_BLACKLIST = ['extraWidth', 'injectStyles', 'inputClassName', 'inputRef', 'inputStyle', 'minWidth', 'onAutosize', 'placeholderIsMinWidth'];

	var cleanInputProps = function cleanInputProps(inputProps) {
		INPUT_PROPS_BLACKLIST.forEach(function (field) {
			return delete inputProps[field];
		});
		return inputProps;
	};

	var copyStyles = function copyStyles(styles, node) {
		node.style.fontSize = styles.fontSize;
		node.style.fontFamily = styles.fontFamily;
		node.style.fontWeight = styles.fontWeight;
		node.style.fontStyle = styles.fontStyle;
		node.style.letterSpacing = styles.letterSpacing;
		node.style.textTransform = styles.textTransform;
	};

	var isIE = typeof window !== 'undefined' && window.navigator ? /MSIE |Trident\/|Edge\//.test(window.navigator.userAgent) : false;

	var generateId = function generateId() {
		// we only need an auto-generated ID for stylesheet injection, which is only
		// used for IE. so if the browser is not IE, this should return undefined.
		return isIE ? '_' + Math.random().toString(36).substr(2, 12) : undefined;
	};

	var AutosizeInput = function (_Component) {
		_inherits(AutosizeInput, _Component);

		function AutosizeInput(props) {
			_classCallCheck(this, AutosizeInput);

			var _this = _possibleConstructorReturn(this, (AutosizeInput.__proto__ || Object.getPrototypeOf(AutosizeInput)).call(this, props));

			_this.inputRef = function (el) {
				_this.input = el;
				if (typeof _this.props.inputRef === 'function') {
					_this.props.inputRef(el);
				}
			};

			_this.placeHolderSizerRef = function (el) {
				_this.placeHolderSizer = el;
			};

			_this.sizerRef = function (el) {
				_this.sizer = el;
			};

			_this.state = {
				inputWidth: props.minWidth,
				inputId: props.id || generateId()
			};
			return _this;
		}

		_createClass(AutosizeInput, [{
			key: 'componentDidMount',
			value: function componentDidMount() {
				this.mounted = true;
				this.copyInputStyles();
				this.updateInputWidth();
			}
		}, {
			key: 'componentWillReceiveProps',
			value: function componentWillReceiveProps(nextProps) {
				var id = nextProps.id;

				if (id !== this.props.id) {
					this.setState({ inputId: id || generateId() });
				}
			}
		}, {
			key: 'componentDidUpdate',
			value: function componentDidUpdate(prevProps, prevState) {
				if (prevState.inputWidth !== this.state.inputWidth) {
					if (typeof this.props.onAutosize === 'function') {
						this.props.onAutosize(this.state.inputWidth);
					}
				}
				this.updateInputWidth();
			}
		}, {
			key: 'componentWillUnmount',
			value: function componentWillUnmount() {
				this.mounted = false;
			}
		}, {
			key: 'copyInputStyles',
			value: function copyInputStyles() {
				if (!this.mounted || !window.getComputedStyle) {
					return;
				}
				var inputStyles = this.input && window.getComputedStyle(this.input);
				if (!inputStyles) {
					return;
				}
				copyStyles(inputStyles, this.sizer);
				if (this.placeHolderSizer) {
					copyStyles(inputStyles, this.placeHolderSizer);
				}
			}
		}, {
			key: 'updateInputWidth',
			value: function updateInputWidth() {
				if (!this.mounted || !this.sizer || typeof this.sizer.scrollWidth === 'undefined') {
					return;
				}
				var newInputWidth = void 0;
				if (this.props.placeholder && (!this.props.value || this.props.value && this.props.placeholderIsMinWidth)) {
					newInputWidth = Math.max(this.sizer.scrollWidth, this.placeHolderSizer.scrollWidth) + 2;
				} else {
					newInputWidth = this.sizer.scrollWidth + 2;
				}
				// add extraWidth to the detected width. for number types, this defaults to 16 to allow for the stepper UI
				var extraWidth = this.props.type === 'number' && this.props.extraWidth === undefined ? 16 : parseInt(this.props.extraWidth) || 0;
				newInputWidth += extraWidth;
				if (newInputWidth < this.props.minWidth) {
					newInputWidth = this.props.minWidth;
				}
				if (newInputWidth !== this.state.inputWidth) {
					this.setState({
						inputWidth: newInputWidth
					});
				}
			}
		}, {
			key: 'getInput',
			value: function getInput() {
				return this.input;
			}
		}, {
			key: 'focus',
			value: function focus() {
				this.input.focus();
			}
		}, {
			key: 'blur',
			value: function blur() {
				this.input.blur();
			}
		}, {
			key: 'select',
			value: function select() {
				this.input.select();
			}
		}, {
			key: 'renderStyles',
			value: function renderStyles() {
				// this method injects styles to hide IE's clear indicator, which messes
				// with input size detection. the stylesheet is only injected when the
				// browser is IE, and can also be disabled by the `injectStyles` prop.
				var injectStyles = this.props.injectStyles;

				return isIE && injectStyles ? _react2.default.createElement('style', { dangerouslySetInnerHTML: {
						__html: 'input#' + this.state.inputId + '::-ms-clear {display: none;}'
					} }) : null;
			}
		}, {
			key: 'render',
			value: function render() {
				var sizerValue = [this.props.defaultValue, this.props.value, ''].reduce(function (previousValue, currentValue) {
					if (previousValue !== null && previousValue !== undefined) {
						return previousValue;
					}
					return currentValue;
				});

				var wrapperStyle = _extends({}, this.props.style);
				if (!wrapperStyle.display) wrapperStyle.display = 'inline-block';

				var inputStyle = _extends({
					boxSizing: 'content-box',
					width: this.state.inputWidth + 'px'
				}, this.props.inputStyle);

				var inputProps = _objectWithoutProperties(this.props, []);

				cleanInputProps(inputProps);
				inputProps.className = this.props.inputClassName;
				inputProps.id = this.state.inputId;
				inputProps.style = inputStyle;

				return _react2.default.createElement(
					'div',
					{ className: this.props.className, style: wrapperStyle },
					this.renderStyles(),
					_react2.default.createElement('input', _extends({}, inputProps, { ref: this.inputRef })),
					_react2.default.createElement(
						'div',
						{ ref: this.sizerRef, style: sizerStyle },
						sizerValue
					),
					this.props.placeholder ? _react2.default.createElement(
						'div',
						{ ref: this.placeHolderSizerRef, style: sizerStyle },
						this.props.placeholder
					) : null
				);
			}
		}]);

		return AutosizeInput;
	}(_react.Component);

	AutosizeInput.propTypes = {
		className: _propTypes2.default.string, // className for the outer element
		defaultValue: _propTypes2.default.any, // default field value
		extraWidth: _propTypes2.default.oneOfType([// additional width for input element
		_propTypes2.default.number, _propTypes2.default.string]),
		id: _propTypes2.default.string, // id to use for the input, can be set for consistent snapshots
		injectStyles: _propTypes2.default.bool, // inject the custom stylesheet to hide clear UI, defaults to true
		inputClassName: _propTypes2.default.string, // className for the input element
		inputRef: _propTypes2.default.func, // ref callback for the input element
		inputStyle: _propTypes2.default.object, // css styles for the input element
		minWidth: _propTypes2.default.oneOfType([// minimum width for input element
		_propTypes2.default.number, _propTypes2.default.string]),
		onAutosize: _propTypes2.default.func, // onAutosize handler: function(newWidth) {}
		onChange: _propTypes2.default.func, // onChange handler: function(event) {}
		placeholder: _propTypes2.default.string, // placeholder text
		placeholderIsMinWidth: _propTypes2.default.bool, // don't collapse size to less than the placeholder
		style: _propTypes2.default.object, // css styles for the outer element
		value: _propTypes2.default.any // field value
	};
	AutosizeInput.defaultProps = {
		minWidth: 1,
		injectStyles: true
	};

	exports.default = AutosizeInput;

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

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	  Copyright (c) 2016 Jed Watson.
	  Licensed under the MIT License (MIT), see
	  http://jedwatson.github.io/classnames
	*/
	/* global define */

	(function () {
		'use strict';

		var hasOwn = {}.hasOwnProperty;

		function classNames () {
			var classes = [];

			for (var i = 0; i < arguments.length; i++) {
				var arg = arguments[i];
				if (!arg) continue;

				var argType = typeof arg;

				if (argType === 'string' || argType === 'number') {
					classes.push(arg);
				} else if (Array.isArray(arg)) {
					classes.push(classNames.apply(null, arg));
				} else if (argType === 'object') {
					for (var key in arg) {
						if (hasOwn.call(arg, key) && arg[key]) {
							classes.push(key);
						}
					}
				}
			}

			return classes.join(' ');
		}

		if (typeof module !== 'undefined' && module.exports) {
			module.exports = classNames;
		} else if (true) {
			// register as 'classnames', consistent with npm package name
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {
				return classNames;
			}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
			window.classNames = classNames;
		}
	}());


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

	'use strict';

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

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

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

	var arrowRenderer = function arrowRenderer(_ref) {
		var onMouseDown = _ref.onMouseDown;

		return _react2.default.createElement('span', {
			className: 'Select-arrow',
			onMouseDown: onMouseDown
		});
	};

	arrowRenderer.propTypes = {
		onMouseDown: _propTypes2.default.func
	};

	exports.default = arrowRenderer;

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

	'use strict';

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

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

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

	var clearRenderer = function clearRenderer() {
		return _react2.default.createElement('span', {
			className: 'Select-clear',
			dangerouslySetInnerHTML: { __html: '&times;' }
		});
	};

	exports.default = clearRenderer;

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

	'use strict';

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

	var _stripDiacritics = __webpack_require__(573);

	var _stripDiacritics2 = _interopRequireDefault(_stripDiacritics);

	var _trim = __webpack_require__(574);

	var _trim2 = _interopRequireDefault(_trim);

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

	var isValid = function isValid(value) {
		return typeof value !== 'undefined' && value !== null && value !== '';
	};

	var filterOptions = function filterOptions(options, filterValue, excludeOptions, props) {
		if (props.ignoreAccents) {
			filterValue = (0, _stripDiacritics2.default)(filterValue);
		}

		if (props.ignoreCase) {
			filterValue = filterValue.toLowerCase();
		}

		if (props.trimFilter) {
			filterValue = (0, _trim2.default)(filterValue);
		}

		if (excludeOptions) excludeOptions = excludeOptions.map(function (i) {
			return i[props.valueKey];
		});

		return options.filter(function (option) {
			if (excludeOptions && excludeOptions.indexOf(option[props.valueKey]) > -1) return false;
			if (props.filterOption) return props.filterOption.call(undefined, option, filterValue);
			if (!filterValue) return true;

			var value = option[props.valueKey];
			var label = option[props.labelKey];
			var hasValue = isValid(value);
			var hasLabel = isValid(label);

			if (!hasValue && !hasLabel) {
				return false;
			}

			var valueTest = hasValue ? String(value) : null;
			var labelTest = hasLabel ? String(label) : null;

			if (props.ignoreAccents) {
				if (valueTest && props.matchProp !== 'label') valueTest = (0, _stripDiacritics2.default)(valueTest);
				if (labelTest && props.matchProp !== 'value') labelTest = (0, _stripDiacritics2.default)(labelTest);
			}

			if (props.ignoreCase) {
				if (valueTest && props.matchProp !== 'label') valueTest = valueTest.toLowerCase();
				if (labelTest && props.matchProp !== 'value') labelTest = labelTest.toLowerCase();
			}

			return props.matchPos === 'start' ? valueTest && props.matchProp !== 'label' && valueTest.substr(0, filterValue.length) === filterValue || labelTest && props.matchProp !== 'value' && labelTest.substr(0, filterValue.length) === filterValue : valueTest && props.matchProp !== 'label' && valueTest.indexOf(filterValue) >= 0 || labelTest && props.matchProp !== 'value' && labelTest.indexOf(filterValue) >= 0;
		});
	};

	exports.default = filterOptions;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
		value: true
	});
	var map = [{ 'base': 'A', 'letters': /[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g }, { 'base': 'AA', 'letters': /[\uA732]/g }, { 'base': 'AE', 'letters': /[\u00C6\u01FC\u01E2]/g }, { 'base': 'AO', 'letters': /[\uA734]/g }, { 'base': 'AU', 'letters': /[\uA736]/g }, { 'base': 'AV', 'letters': /[\uA738\uA73A]/g }, { 'base': 'AY', 'letters': /[\uA73C]/g }, { 'base': 'B', 'letters': /[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g }, { 'base': 'C', 'letters': /[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g }, { 'base': 'D', 'letters': /[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g }, { 'base': 'DZ', 'letters': /[\u01F1\u01C4]/g }, { 'base': 'Dz', 'letters': /[\u01F2\u01C5]/g }, { 'base': 'E', 'letters': /[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g }, { 'base': 'F', 'letters': /[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g }, { 'base': 'G', 'letters': /[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g }, { 'base': 'H', 'letters': /[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g }, { 'base': 'I', 'letters': /[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g }, { 'base': 'J', 'letters': /[\u004A\u24BF\uFF2A\u0134\u0248]/g }, { 'base': 'K', 'letters': /[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g }, { 'base': 'L', 'letters': /[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g }, { 'base': 'LJ', 'letters': /[\u01C7]/g }, { 'base': 'Lj', 'letters': /[\u01C8]/g }, { 'base': 'M', 'letters': /[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g }, { 'base': 'N', 'letters': /[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g }, { 'base': 'NJ', 'letters': /[\u01CA]/g }, { 'base': 'Nj', 'letters': /[\u01CB]/g }, { 'base': 'O', 'letters': /[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g }, { 'base': 'OI', 'letters': /[\u01A2]/g }, { 'base': 'OO', 'letters': /[\uA74E]/g }, { 'base': 'OU', 'letters': /[\u0222]/g }, { 'base': 'P', 'letters': /[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g }, { 'base': 'Q', 'letters': /[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g }, { 'base': 'R', 'letters': /[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g }, { 'base': 'S', 'letters': /[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g }, { 'base': 'T', 'letters': /[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g }, { 'base': 'TZ', 'letters': /[\uA728]/g }, { 'base': 'U', 'letters': /[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g }, { 'base': 'V', 'letters': /[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g }, { 'base': 'VY', 'letters': /[\uA760]/g }, { 'base': 'W', 'letters': /[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g }, { 'base': 'X', 'letters': /[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g }, { 'base': 'Y', 'letters': /[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g }, { 'base': 'Z', 'letters': /[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g }, { 'base': 'a', 'letters': /[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g }, { 'base': 'aa', 'letters': /[\uA733]/g }, { 'base': 'ae', 'letters': /[\u00E6\u01FD\u01E3]/g }, { 'base': 'ao', 'letters': /[\uA735]/g }, { 'base': 'au', 'letters': /[\uA737]/g }, { 'base': 'av', 'letters': /[\uA739\uA73B]/g }, { 'base': 'ay', 'letters': /[\uA73D]/g }, { 'base': 'b', 'letters': /[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g }, { 'base': 'c', 'letters': /[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g }, { 'base': 'd', 'letters': /[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g }, { 'base': 'dz', 'letters': /[\u01F3\u01C6]/g }, { 'base': 'e', 'letters': /[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g }, { 'base': 'f', 'letters': /[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g }, { 'base': 'g', 'letters': /[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g }, { 'base': 'h', 'letters': /[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g }, { 'base': 'hv', 'letters': /[\u0195]/g }, { 'base': 'i', 'letters': /[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g }, { 'base': 'j', 'letters': /[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g }, { 'base': 'k', 'letters': /[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g }, { 'base': 'l', 'letters': /[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g }, { 'base': 'lj', 'letters': /[\u01C9]/g }, { 'base': 'm', 'letters': /[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g }, { 'base': 'n', 'letters': /[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g }, { 'base': 'nj', 'letters': /[\u01CC]/g }, { 'base': 'o', 'letters': /[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g }, { 'base': 'oi', 'letters': /[\u01A3]/g }, { 'base': 'ou', 'letters': /[\u0223]/g }, { 'base': 'oo', 'letters': /[\uA74F]/g }, { 'base': 'p', 'letters': /[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g }, { 'base': 'q', 'letters': /[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g }, { 'base': 'r', 'letters': /[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g }, { 'base': 's', 'letters': /[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g }, { 'base': 't', 'letters': /[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g }, { 'base': 'tz', 'letters': /[\uA729]/g }, { 'base': 'u', 'letters': /[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g }, { 'base': 'v', 'letters': /[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g }, { 'base': 'vy', 'letters': /[\uA761]/g }, { 'base': 'w', 'letters': /[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g }, { 'base': 'x', 'letters': /[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g }, { 'base': 'y', 'letters': /[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g }, { 'base': 'z', 'letters': /[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g }];

	var stripDiacritics = function stripDiacritics(str) {
		for (var i = 0; i < map.length; i++) {
			str = str.replace(map[i].letters, map[i].base);
		}
		return str;
	};

	exports.default = stripDiacritics;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	var trim = function trim(str) {
	  return str.replace(/^\s+|\s+$/g, '');
	};

	exports.default = trim;

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

	'use strict';

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

	var _classnames = __webpack_require__(569);

	var _classnames2 = _interopRequireDefault(_classnames);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

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

	var menuRenderer = function menuRenderer(_ref) {
		var focusedOption = _ref.focusedOption,
		    focusOption = _ref.focusOption,
		    inputValue = _ref.inputValue,
		    instancePrefix = _ref.instancePrefix,
		    onFocus = _ref.onFocus,
		    onOptionRef = _ref.onOptionRef,
		    onSelect = _ref.onSelect,
		    optionClassName = _ref.optionClassName,
		    optionComponent = _ref.optionComponent,
		    optionRenderer = _ref.optionRenderer,
		    options = _ref.options,
		    removeValue = _ref.removeValue,
		    selectValue = _ref.selectValue,
		    valueArray = _ref.valueArray,
		    valueKey = _ref.valueKey;

		var Option = optionComponent;

		return options.map(function (option, i) {
			var isSelected = valueArray && valueArray.some(function (x) {
				return x[valueKey] === option[valueKey];
			});
			var isFocused = option === focusedOption;
			var optionClass = (0, _classnames2.default)(optionClassName, {
				'Select-option': true,
				'is-selected': isSelected,
				'is-focused': isFocused,
				'is-disabled': option.disabled
			});

			return _react2.default.createElement(
				Option,
				{
					className: optionClass,
					focusOption: focusOption,
					inputValue: inputValue,
					instancePrefix: instancePrefix,
					isDisabled: option.disabled,
					isFocused: isFocused,
					isSelected: isSelected,
					key: 'option-' + i + '-' + option[valueKey],
					onFocus: onFocus,
					onSelect: onSelect,
					option: option,
					optionIndex: i,
					ref: function ref(_ref2) {
						onOptionRef(_ref2, isFocused);
					},
					removeValue: removeValue,
					selectValue: selectValue
				},
				optionRenderer(option, i, inputValue)
			);
		});
	};

	menuRenderer.propTypes = {
		focusOption: _propTypes2.default.func,
		focusedOption: _propTypes2.default.object,
		inputValue: _propTypes2.default.string,
		instancePrefix: _propTypes2.default.string,
		onFocus: _propTypes2.default.func,
		onOptionRef: _propTypes2.default.func,
		onSelect: _propTypes2.default.func,
		optionClassName: _propTypes2.default.string,
		optionComponent: _propTypes2.default.func,
		optionRenderer: _propTypes2.default.func,
		options: _propTypes2.default.array,
		removeValue: _propTypes2.default.func,
		selectValue: _propTypes2.default.func,
		valueArray: _propTypes2.default.array,
		valueKey: _propTypes2.default.string
	};

	exports.default = menuRenderer;

/***/ }),
/* 576 */
/***/ (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 _classnames = __webpack_require__(569);

	var _classnames2 = _interopRequireDefault(_classnames);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _blockEvent = __webpack_require__(577);

	var _blockEvent2 = _interopRequireDefault(_blockEvent);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 Option = function (_React$Component) {
		_inherits(Option, _React$Component);

		function Option(props) {
			_classCallCheck(this, Option);

			var _this = _possibleConstructorReturn(this, (Option.__proto__ || Object.getPrototypeOf(Option)).call(this, props));

			_this.handleMouseDown = _this.handleMouseDown.bind(_this);
			_this.handleMouseEnter = _this.handleMouseEnter.bind(_this);
			_this.handleMouseMove = _this.handleMouseMove.bind(_this);
			_this.handleTouchStart = _this.handleTouchStart.bind(_this);
			_this.handleTouchEnd = _this.handleTouchEnd.bind(_this);
			_this.handleTouchMove = _this.handleTouchMove.bind(_this);
			_this.onFocus = _this.onFocus.bind(_this);
			return _this;
		}

		_createClass(Option, [{
			key: 'handleMouseDown',
			value: function handleMouseDown(event) {
				event.preventDefault();
				event.stopPropagation();
				this.props.onSelect(this.props.option, event);
			}
		}, {
			key: 'handleMouseEnter',
			value: function handleMouseEnter(event) {
				this.onFocus(event);
			}
		}, {
			key: 'handleMouseMove',
			value: function handleMouseMove(event) {
				this.onFocus(event);
			}
		}, {
			key: 'handleTouchEnd',
			value: function handleTouchEnd(event) {
				// Check if the view is being dragged, In this case
				// we don't want to fire the click event (because the user only wants to scroll)
				if (this.dragging) return;

				this.handleMouseDown(event);
			}
		}, {
			key: 'handleTouchMove',
			value: function handleTouchMove() {
				// Set a flag that the view is being dragged
				this.dragging = true;
			}
		}, {
			key: 'handleTouchStart',
			value: function handleTouchStart() {
				// Set a flag that the view is not being dragged
				this.dragging = false;
			}
		}, {
			key: 'onFocus',
			value: function onFocus(event) {
				if (!this.props.isFocused) {
					this.props.onFocus(this.props.option, event);
				}
			}
		}, {
			key: 'render',
			value: function render() {
				var _props = this.props,
				    option = _props.option,
				    instancePrefix = _props.instancePrefix,
				    optionIndex = _props.optionIndex;

				var className = (0, _classnames2.default)(this.props.className, option.className);

				return option.disabled ? _react2.default.createElement(
					'div',
					{ className: className,
						onMouseDown: _blockEvent2.default,
						onClick: _blockEvent2.default },
					this.props.children
				) : _react2.default.createElement(
					'div',
					{ className: className,
						style: option.style,
						role: 'option',
						'aria-label': option.label,
						onMouseDown: this.handleMouseDown,
						onMouseEnter: this.handleMouseEnter,
						onMouseMove: this.handleMouseMove,
						onTouchStart: this.handleTouchStart,
						onTouchMove: this.handleTouchMove,
						onTouchEnd: this.handleTouchEnd,
						id: instancePrefix + '-option-' + optionIndex,
						title: option.title },
					this.props.children
				);
			}
		}]);

		return Option;
	}(_react2.default.Component);

	Option.propTypes = {
		children: _propTypes2.default.node,
		className: _propTypes2.default.string, // className (based on mouse position)
		instancePrefix: _propTypes2.default.string.isRequired, // unique prefix for the ids (used for aria)
		isDisabled: _propTypes2.default.bool, // the option is disabled
		isFocused: _propTypes2.default.bool, // the option is focused
		isSelected: _propTypes2.default.bool, // the option is selected
		onFocus: _propTypes2.default.func, // method to handle mouseEnter on option element
		onSelect: _propTypes2.default.func, // method to handle click on option element
		onUnfocus: _propTypes2.default.func, // method to handle mouseLeave on option element
		option: _propTypes2.default.object.isRequired, // object that is base for that option
		optionIndex: _propTypes2.default.number // index of the option, used to generate unique ids for aria
	};

	exports.default = Option;

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

	'use strict';

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

	exports.default = function (event) {
		event.preventDefault();
		event.stopPropagation();
		if (event.target.tagName !== 'A' || !('href' in event.target)) {
			return;
		}
		if (event.target.target) {
			window.open(event.target.href, event.target.target);
		} else {
			window.location.href = event.target.href;
		}
	};

/***/ }),
/* 578 */
/***/ (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 _classnames = __webpack_require__(569);

	var _classnames2 = _interopRequireDefault(_classnames);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 Value = function (_React$Component) {
		_inherits(Value, _React$Component);

		function Value(props) {
			_classCallCheck(this, Value);

			var _this = _possibleConstructorReturn(this, (Value.__proto__ || Object.getPrototypeOf(Value)).call(this, props));

			_this.handleMouseDown = _this.handleMouseDown.bind(_this);
			_this.onRemove = _this.onRemove.bind(_this);
			_this.handleTouchEndRemove = _this.handleTouchEndRemove.bind(_this);
			_this.handleTouchMove = _this.handleTouchMove.bind(_this);
			_this.handleTouchStart = _this.handleTouchStart.bind(_this);
			return _this;
		}

		_createClass(Value, [{
			key: 'handleMouseDown',
			value: function handleMouseDown(event) {
				if (event.type === 'mousedown' && event.button !== 0) {
					return;
				}
				if (this.props.onClick) {
					event.stopPropagation();
					this.props.onClick(this.props.value, event);
					return;
				}
				if (this.props.value.href) {
					event.stopPropagation();
				}
			}
		}, {
			key: 'onRemove',
			value: function onRemove(event) {
				event.preventDefault();
				event.stopPropagation();
				this.props.onRemove(this.props.value);
			}
		}, {
			key: 'handleTouchEndRemove',
			value: function handleTouchEndRemove(event) {
				// Check if the view is being dragged, In this case
				// we don't want to fire the click event (because the user only wants to scroll)
				if (this.dragging) return;

				// Fire the mouse events
				this.onRemove(event);
			}
		}, {
			key: 'handleTouchMove',
			value: function handleTouchMove() {
				// Set a flag that the view is being dragged
				this.dragging = true;
			}
		}, {
			key: 'handleTouchStart',
			value: function handleTouchStart() {
				// Set a flag that the view is not being dragged
				this.dragging = false;
			}
		}, {
			key: 'renderRemoveIcon',
			value: function renderRemoveIcon() {
				if (this.props.disabled || !this.props.onRemove) return;
				return _react2.default.createElement(
					'span',
					{ className: 'Select-value-icon',
						'aria-hidden': 'true',
						onMouseDown: this.onRemove,
						onTouchEnd: this.handleTouchEndRemove,
						onTouchStart: this.handleTouchStart,
						onTouchMove: this.handleTouchMove },
					'\xD7'
				);
			}
		}, {
			key: 'renderLabel',
			value: function renderLabel() {
				var className = 'Select-value-label';
				return this.props.onClick || this.props.value.href ? _react2.default.createElement(
					'a',
					{ className: className, href: this.props.value.href, target: this.props.value.target, onMouseDown: this.handleMouseDown, onTouchEnd: this.handleMouseDown },
					this.props.children
				) : _react2.default.createElement(
					'span',
					{ className: className, role: 'option', 'aria-selected': 'true', id: this.props.id },
					this.props.children
				);
			}
		}, {
			key: 'render',
			value: function render() {
				return _react2.default.createElement(
					'div',
					{ className: (0, _classnames2.default)('Select-value', this.props.value.className),
						style: this.props.value.style,
						title: this.props.value.title
					},
					this.renderRemoveIcon(),
					this.renderLabel()
				);
			}
		}]);

		return Value;
	}(_react2.default.Component);

	Value.propTypes = {
		children: _propTypes2.default.node,
		disabled: _propTypes2.default.bool, // disabled prop passed to ReactSelect
		id: _propTypes2.default.string, // Unique id for the value - used for aria
		onClick: _propTypes2.default.func, // method to handle click on value label
		onRemove: _propTypes2.default.func, // method to handle removal of the value
		value: _propTypes2.default.object.isRequired // the option object for this value
	};

	exports.default = Value;

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

	'use strict';

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

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

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

	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 _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _Select = __webpack_require__(567);

	var _Select2 = _interopRequireDefault(_Select);

	var _stripDiacritics = __webpack_require__(573);

	var _stripDiacritics2 = _interopRequireDefault(_stripDiacritics);

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 propTypes = {
		autoload: _propTypes2.default.bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true
		cache: _propTypes2.default.any, // object to use to cache results; set to null/false to disable caching
		children: _propTypes2.default.func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element
		ignoreAccents: _propTypes2.default.bool, // strip diacritics when filtering; defaults to true
		ignoreCase: _propTypes2.default.bool, // perform case-insensitive filtering; defaults to true
		loadOptions: _propTypes2.default.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise
		loadingPlaceholder: _propTypes2.default.oneOfType([// replaces the placeholder while options are loading
		_propTypes2.default.string, _propTypes2.default.node]),
		multi: _propTypes2.default.bool, // multi-value input
		noResultsText: _propTypes2.default.oneOfType([// field noResultsText, displayed when no options come back from the server
		_propTypes2.default.string, _propTypes2.default.node]),
		onChange: _propTypes2.default.func, // onChange handler: function (newValue) {}
		onInputChange: _propTypes2.default.func, // optional for keeping track of what is being typed
		options: _propTypes2.default.array.isRequired, // array of options
		placeholder: _propTypes2.default.oneOfType([// field placeholder, displayed when there's no value (shared with Select)
		_propTypes2.default.string, _propTypes2.default.node]),
		searchPromptText: _propTypes2.default.oneOfType([// label to prompt for search input
		_propTypes2.default.string, _propTypes2.default.node]),
		value: _propTypes2.default.any // initial field value
	};

	var defaultCache = {};

	var defaultChildren = function defaultChildren(props) {
		return _react2.default.createElement(_Select2.default, props);
	};

	var defaultProps = {
		autoload: true,
		cache: defaultCache,
		children: defaultChildren,
		ignoreAccents: true,
		ignoreCase: true,
		loadingPlaceholder: 'Loading...',
		options: [],
		searchPromptText: 'Type to search'
	};

	var Async = function (_Component) {
		_inherits(Async, _Component);

		function Async(props, context) {
			_classCallCheck(this, Async);

			var _this = _possibleConstructorReturn(this, (Async.__proto__ || Object.getPrototypeOf(Async)).call(this, props, context));

			_this._cache = props.cache === defaultCache ? {} : props.cache;

			_this.state = {
				inputValue: '',
				isLoading: false,
				options: props.options
			};

			_this.onInputChange = _this.onInputChange.bind(_this);
			return _this;
		}

		_createClass(Async, [{
			key: 'componentDidMount',
			value: function componentDidMount() {
				var autoload = this.props.autoload;


				if (autoload) {
					this.loadOptions('');
				}
			}
		}, {
			key: 'componentWillReceiveProps',
			value: function componentWillReceiveProps(nextProps) {
				if (nextProps.options !== this.props.options) {
					this.setState({
						options: nextProps.options
					});
				}
			}
		}, {
			key: 'componentWillUnmount',
			value: function componentWillUnmount() {
				this._callback = null;
			}
		}, {
			key: 'loadOptions',
			value: function loadOptions(inputValue) {
				var _this2 = this;

				var loadOptions = this.props.loadOptions;

				var cache = this._cache;

				if (cache && Object.prototype.hasOwnProperty.call(cache, inputValue)) {
					this._callback = null;

					this.setState({
						isLoading: false,
						options: cache[inputValue]
					});

					return;
				}

				var callback = function callback(error, data) {
					var options = data && data.options || [];

					if (cache) {
						cache[inputValue] = options;
					}

					if (callback === _this2._callback) {
						_this2._callback = null;

						_this2.setState({
							isLoading: false,
							options: options
						});
					}
				};

				// Ignore all but the most recent request
				this._callback = callback;

				var promise = loadOptions(inputValue, callback);
				if (promise) {
					promise.then(function (data) {
						return callback(null, data);
					}, function (error) {
						return callback(error);
					});
				}

				if (this._callback && !this.state.isLoading) {
					this.setState({
						isLoading: true
					});
				}
			}
		}, {
			key: 'onInputChange',
			value: function onInputChange(inputValue) {
				var _props = this.props,
				    ignoreAccents = _props.ignoreAccents,
				    ignoreCase = _props.ignoreCase,
				    onInputChange = _props.onInputChange;

				var newInputValue = inputValue;

				if (onInputChange) {
					var value = onInputChange(newInputValue);
					// Note: != used deliberately here to catch undefined and null
					if (value != null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object') {
						newInputValue = '' + value;
					}
				}

				var transformedInputValue = newInputValue;

				if (ignoreAccents) {
					transformedInputValue = (0, _stripDiacritics2.default)(transformedInputValue);
				}

				if (ignoreCase) {
					transformedInputValue = transformedInputValue.toLowerCase();
				}

				this.setState({ inputValue: newInputValue });
				this.loadOptions(transformedInputValue);

				// Return new input value, but without applying toLowerCase() to avoid modifying the user's view case of the input while typing.
				return newInputValue;
			}
		}, {
			key: 'noResultsText',
			value: function noResultsText() {
				var _props2 = this.props,
				    loadingPlaceholder = _props2.loadingPlaceholder,
				    noResultsText = _props2.noResultsText,
				    searchPromptText = _props2.searchPromptText;
				var _state = this.state,
				    inputValue = _state.inputValue,
				    isLoading = _state.isLoading;


				if (isLoading) {
					return loadingPlaceholder;
				}
				if (inputValue && noResultsText) {
					return noResultsText;
				}
				return searchPromptText;
			}
		}, {
			key: 'focus',
			value: function focus() {
				this.select.focus();
			}
		}, {
			key: 'render',
			value: function render() {
				var _this3 = this;

				var _props3 = this.props,
				    children = _props3.children,
				    loadingPlaceholder = _props3.loadingPlaceholder,
				    placeholder = _props3.placeholder;
				var _state2 = this.state,
				    isLoading = _state2.isLoading,
				    options = _state2.options;


				var props = {
					noResultsText: this.noResultsText(),
					placeholder: isLoading ? loadingPlaceholder : placeholder,
					options: isLoading && loadingPlaceholder ? [] : options,
					ref: function ref(_ref) {
						return _this3.select = _ref;
					}
				};

				return children(_extends({}, this.props, props, {
					isLoading: isLoading,
					onInputChange: this.onInputChange
				}));
			}
		}]);

		return Async;
	}(_react.Component);

	exports.default = Async;


	Async.propTypes = propTypes;
	Async.defaultProps = defaultProps;

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

	'use strict';

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

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	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 _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _Async = __webpack_require__(579);

	var _Async2 = _interopRequireDefault(_Async);

	var _Creatable = __webpack_require__(581);

	var _Creatable2 = _interopRequireDefault(_Creatable);

	var _Select = __webpack_require__(567);

	var _Select2 = _interopRequireDefault(_Select);

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

	function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }

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

	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 AsyncCreatableSelect = function (_React$Component) {
		_inherits(AsyncCreatableSelect, _React$Component);

		function AsyncCreatableSelect() {
			_classCallCheck(this, AsyncCreatableSelect);

			return _possibleConstructorReturn(this, (AsyncCreatableSelect.__proto__ || Object.getPrototypeOf(AsyncCreatableSelect)).apply(this, arguments));
		}

		_createClass(AsyncCreatableSelect, [{
			key: 'focus',
			value: function focus() {
				this.select.focus();
			}
		}, {
			key: 'render',
			value: function render() {
				var _this2 = this;

				return _react2.default.createElement(
					_Async2.default,
					this.props,
					function (_ref) {
						var ref = _ref.ref,
						    asyncProps = _objectWithoutProperties(_ref, ['ref']);

						var asyncRef = ref;
						return _react2.default.createElement(
							_Creatable2.default,
							asyncProps,
							function (_ref2) {
								var ref = _ref2.ref,
								    creatableProps = _objectWithoutProperties(_ref2, ['ref']);

								var creatableRef = ref;
								return _this2.props.children(_extends({}, creatableProps, {
									ref: function ref(select) {
										creatableRef(select);
										asyncRef(select);
										_this2.select = select;
									}
								}));
							}
						);
					}
				);
			}
		}]);

		return AsyncCreatableSelect;
	}(_react2.default.Component);

	var defaultChildren = function defaultChildren(props) {
		return _react2.default.createElement(_Select2.default, props);
	};

	AsyncCreatableSelect.propTypes = {
		children: _propTypes2.default.func.isRequired // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element
	};

	AsyncCreatableSelect.defaultProps = {
		children: defaultChildren
	};

	exports.default = AsyncCreatableSelect;

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

	'use strict';

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

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	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 _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _defaultFilterOptions = __webpack_require__(572);

	var _defaultFilterOptions2 = _interopRequireDefault(_defaultFilterOptions);

	var _defaultMenuRenderer = __webpack_require__(575);

	var _defaultMenuRenderer2 = _interopRequireDefault(_defaultMenuRenderer);

	var _Select = __webpack_require__(567);

	var _Select2 = _interopRequireDefault(_Select);

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

	function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }

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

	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 CreatableSelect = function (_React$Component) {
		_inherits(CreatableSelect, _React$Component);

		function CreatableSelect(props, context) {
			_classCallCheck(this, CreatableSelect);

			var _this = _possibleConstructorReturn(this, (CreatableSelect.__proto__ || Object.getPrototypeOf(CreatableSelect)).call(this, props, context));

			_this.filterOptions = _this.filterOptions.bind(_this);
			_this.menuRenderer = _this.menuRenderer.bind(_this);
			_this.onInputKeyDown = _this.onInputKeyDown.bind(_this);
			_this.onInputChange = _this.onInputChange.bind(_this);
			_this.onOptionSelect = _this.onOptionSelect.bind(_this);
			return _this;
		}

		_createClass(CreatableSelect, [{
			key: 'createNewOption',
			value: function createNewOption() {
				var _props = this.props,
				    isValidNewOption = _props.isValidNewOption,
				    newOptionCreator = _props.newOptionCreator,
				    onNewOptionClick = _props.onNewOptionClick,
				    _props$options = _props.options,
				    options = _props$options === undefined ? [] : _props$options;


				if (isValidNewOption({ label: this.inputValue })) {
					var option = newOptionCreator({ label: this.inputValue, labelKey: this.labelKey, valueKey: this.valueKey });
					var _isOptionUnique = this.isOptionUnique({ option: option, options: options });

					// Don't add the same option twice.
					if (_isOptionUnique) {
						if (onNewOptionClick) {
							onNewOptionClick(option);
						} else {
							options.unshift(option);

							this.select.selectValue(option);
						}
					}
				}
			}
		}, {
			key: 'filterOptions',
			value: function filterOptions() {
				var _props2 = this.props,
				    filterOptions = _props2.filterOptions,
				    isValidNewOption = _props2.isValidNewOption,
				    promptTextCreator = _props2.promptTextCreator;

				// TRICKY Check currently selected options as well.
				// Don't display a create-prompt for a value that's selected.
				// This covers async edge-cases where a newly-created Option isn't yet in the async-loaded array.

				var excludeOptions = (arguments.length <= 2 ? undefined : arguments[2]) || [];

				var filteredOptions = filterOptions.apply(undefined, arguments) || [];

				if (isValidNewOption({ label: this.inputValue })) {
					var _newOptionCreator = this.props.newOptionCreator;


					var option = _newOptionCreator({
						label: this.inputValue,
						labelKey: this.labelKey,
						valueKey: this.valueKey
					});

					// TRICKY Compare to all options (not just filtered options) in case option has already been selected).
					// For multi-selects, this would remove it from the filtered list.
					var _isOptionUnique2 = this.isOptionUnique({
						option: option,
						options: excludeOptions.concat(filteredOptions)
					});

					if (_isOptionUnique2) {
						var prompt = promptTextCreator(this.inputValue);

						this._createPlaceholderOption = _newOptionCreator({
							label: prompt,
							labelKey: this.labelKey,
							valueKey: this.valueKey
						});

						filteredOptions.unshift(this._createPlaceholderOption);
					}
				}

				return filteredOptions;
			}
		}, {
			key: 'isOptionUnique',
			value: function isOptionUnique(_ref) {
				var option = _ref.option,
				    options = _ref.options;
				var isOptionUnique = this.props.isOptionUnique;


				options = options || this.props.options;

				return isOptionUnique({
					labelKey: this.labelKey,
					option: option,
					options: options,
					valueKey: this.valueKey
				});
			}
		}, {
			key: 'menuRenderer',
			value: function menuRenderer(params) {
				var menuRenderer = this.props.menuRenderer;


				return menuRenderer(_extends({}, params, {
					onSelect: this.onOptionSelect,
					selectValue: this.onOptionSelect
				}));
			}
		}, {
			key: 'onInputChange',
			value: function onInputChange(input) {
				var onInputChange = this.props.onInputChange;

				// This value may be needed in between Select mounts (when this.select is null)

				this.inputValue = input;

				if (onInputChange) {
					this.inputValue = onInputChange(input);
				}

				return this.inputValue;
			}
		}, {
			key: 'onInputKeyDown',
			value: function onInputKeyDown(event) {
				var _props3 = this.props,
				    shouldKeyDownEventCreateNewOption = _props3.shouldKeyDownEventCreateNewOption,
				    onInputKeyDown = _props3.onInputKeyDown;

				var focusedOption = this.select.getFocusedOption();

				if (focusedOption && focusedOption === this._createPlaceholderOption && shouldKeyDownEventCreateNewOption({ keyCode: event.keyCode })) {
					this.createNewOption();

					// Prevent decorated Select from doing anything additional with this keyDown event
					event.preventDefault();
				} else if (onInputKeyDown) {
					onInputKeyDown(event);
				}
			}
		}, {
			key: 'onOptionSelect',
			value: function onOptionSelect(option) {
				if (option === this._createPlaceholderOption) {
					this.createNewOption();
				} else {
					this.select.selectValue(option);
				}
			}
		}, {
			key: 'focus',
			value: function focus() {
				this.select.focus();
			}
		}, {
			key: 'render',
			value: function render() {
				var _this2 = this;

				var _props4 = this.props,
				    refProp = _props4.ref,
				    restProps = _objectWithoutProperties(_props4, ['ref']);

				var children = this.props.children;

				// We can't use destructuring default values to set the children,
				// because it won't apply work if `children` is null. A falsy check is
				// more reliable in real world use-cases.

				if (!children) {
					children = defaultChildren;
				}

				var props = _extends({}, restProps, {
					allowCreate: true,
					filterOptions: this.filterOptions,
					menuRenderer: this.menuRenderer,
					onInputChange: this.onInputChange,
					onInputKeyDown: this.onInputKeyDown,
					ref: function ref(_ref2) {
						_this2.select = _ref2;

						// These values may be needed in between Select mounts (when this.select is null)
						if (_ref2) {
							_this2.labelKey = _ref2.props.labelKey;
							_this2.valueKey = _ref2.props.valueKey;
						}
						if (refProp) {
							refProp(_ref2);
						}
					}
				});

				return children(props);
			}
		}]);

		return CreatableSelect;
	}(_react2.default.Component);

	var defaultChildren = function defaultChildren(props) {
		return _react2.default.createElement(_Select2.default, props);
	};

	var isOptionUnique = function isOptionUnique(_ref3) {
		var option = _ref3.option,
		    options = _ref3.options,
		    labelKey = _ref3.labelKey,
		    valueKey = _ref3.valueKey;

		if (!options || !options.length) {
			return true;
		}

		return options.filter(function (existingOption) {
			return existingOption[labelKey] === option[labelKey] || existingOption[valueKey] === option[valueKey];
		}).length === 0;
	};

	var isValidNewOption = function isValidNewOption(_ref4) {
		var label = _ref4.label;
		return !!label;
	};

	var newOptionCreator = function newOptionCreator(_ref5) {
		var label = _ref5.label,
		    labelKey = _ref5.labelKey,
		    valueKey = _ref5.valueKey;

		var option = {};
		option[valueKey] = label;
		option[labelKey] = label;
		option.className = 'Select-create-option-placeholder';

		return option;
	};

	var promptTextCreator = function promptTextCreator(label) {
		return 'Create option "' + label + '"';
	};

	var shouldKeyDownEventCreateNewOption = function shouldKeyDownEventCreateNewOption(_ref6) {
		var keyCode = _ref6.keyCode;

		switch (keyCode) {
			case 9: // TAB
			case 13: // ENTER
			case 188:
				// COMMA
				return true;
			default:
				return false;
		}
	};

	// Default prop methods
	CreatableSelect.isOptionUnique = isOptionUnique;
	CreatableSelect.isValidNewOption = isValidNewOption;
	CreatableSelect.newOptionCreator = newOptionCreator;
	CreatableSelect.promptTextCreator = promptTextCreator;
	CreatableSelect.shouldKeyDownEventCreateNewOption = shouldKeyDownEventCreateNewOption;

	CreatableSelect.defaultProps = {
		filterOptions: _defaultFilterOptions2.default,
		isOptionUnique: isOptionUnique,
		isValidNewOption: isValidNewOption,
		menuRenderer: _defaultMenuRenderer2.default,
		newOptionCreator: newOptionCreator,
		promptTextCreator: promptTextCreator,
		shouldKeyDownEventCreateNewOption: shouldKeyDownEventCreateNewOption
	};

	CreatableSelect.propTypes = {
		// Child function responsible for creating the inner Select component
		// This component can be used to compose HOCs (eg Creatable and Async)
		// (props: Object): PropTypes.element
		children: _propTypes2.default.func,

		// See Select.propTypes.filterOptions
		filterOptions: _propTypes2.default.any,

		// Searches for any matching option within the set of options.
		// This function prevents duplicate options from being created.
		// ({ option: Object, options: Array, labelKey: string, valueKey: string }): boolean
		isOptionUnique: _propTypes2.default.func,

		// Determines if the current input text represents a valid option.
		// ({ label: string }): boolean
		isValidNewOption: _propTypes2.default.func,

		// See Select.propTypes.menuRenderer
		menuRenderer: _propTypes2.default.any,

		// Factory to create new option.
		// ({ label: string, labelKey: string, valueKey: string }): Object
		newOptionCreator: _propTypes2.default.func,

		// input change handler: function (inputValue) {}
		onInputChange: _propTypes2.default.func,

		// input keyDown handler: function (event) {}
		onInputKeyDown: _propTypes2.default.func,

		// new option click handler: function (option) {}
		onNewOptionClick: _propTypes2.default.func,

		// See Select.propTypes.options
		options: _propTypes2.default.array,

		// Creates prompt/placeholder option text.
		// (filterText: string): string
		promptTextCreator: _propTypes2.default.func,

		ref: _propTypes2.default.func,

		// Decides if a keyDown event (eg its `keyCode`) should result in the creation of a new option.
		shouldKeyDownEventCreateNewOption: _propTypes2.default.func
	};

	exports.default = CreatableSelect;

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

	'use strict';

	Object.defineProperty(exports, "__esModule", {
	        value: true
	});
	var COLORWAYS = exports.COLORWAYS = {
	        categorical: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99'],

	        turbid: ["rgb(232, 245, 171)", "rgb(220, 219, 137)", "rgb(209, 193, 107)", "rgb(199, 168, 83)", "rgb(186, 143, 66)", "rgb(170, 121, 60)", "rgb(151, 103, 58)", "rgb(129, 87, 56)", "rgb(104, 72, 53)", "rgb(80, 59, 46)", "rgb(57, 45, 37)", "rgb(34, 30, 27)"],

	        thermal: ["rgb(3, 35, 51)", "rgb(13, 48, 100)", "rgb(53, 50, 155)", "rgb(93, 62, 153)", "rgb(126, 77, 143)", "rgb(158, 89, 135)", "rgb(193, 100, 121)", "rgb(225, 113, 97)", "rgb(246, 139, 69)", "rgb(251, 173, 60)", "rgb(246, 211, 70)", "rgb(231, 250, 90)"],

	        haline: ["rgb(41, 24, 107)", "rgb(42, 35, 160)", "rgb(15, 71, 153)", "rgb(18, 95, 142)", "rgb(38, 116, 137)", "rgb(53, 136, 136)", "rgb(65, 157, 133)", "rgb(81, 178, 124)", "rgb(111, 198, 107)", "rgb(160, 214, 91)", "rgb(212, 225, 112)", "rgb(253, 238, 153)"],

	        solar: ["rgb(51, 19, 23)", "rgb(79, 28, 33)", "rgb(108, 36, 36)", "rgb(135, 47, 32)", "rgb(157, 66, 25)", "rgb(174, 88, 20)", "rgb(188, 111, 19)", "rgb(199, 137, 22)", "rgb(209, 164, 32)", "rgb(217, 192, 44)", "rgb(222, 222, 59)", "rgb(224, 253, 74)"],

	        ice: ["rgb(3, 5, 18)", "rgb(25, 25, 51)", "rgb(44, 42, 87)", "rgb(58, 60, 125)", "rgb(62, 83, 160)", "rgb(62, 109, 178)", "rgb(72, 134, 187)", "rgb(89, 159, 196)", "rgb(114, 184, 205)", "rgb(149, 207, 216)", "rgb(192, 229, 232)", "rgb(234, 252, 253)"],

	        gray: ["rgb(0, 0, 0)", "rgb(16, 16, 16)", "rgb(38, 38, 38)", "rgb(59, 59, 59)", "rgb(81, 80, 80)", "rgb(102, 101, 101)", "rgb(124, 123, 122)", "rgb(146, 146, 145)", "rgb(171, 171, 170)", "rgb(197, 197, 195)", "rgb(224, 224, 223)", "rgb(254, 254, 253)"],

	        oxy: ["rgb(63, 5, 5)", "rgb(101, 6, 13)", "rgb(138, 17, 9)", "rgb(96, 95, 95)", "rgb(119, 118, 118)", "rgb(142, 141, 141)", "rgb(166, 166, 165)", "rgb(193, 192, 191)", "rgb(222, 222, 220)", "rgb(239, 248, 90)", "rgb(230, 210, 41)", "rgb(220, 174, 25)"],

	        deep: ["rgb(253, 253, 204)", "rgb(206, 236, 179)", "rgb(156, 219, 165)", "rgb(111, 201, 163)", "rgb(86, 177, 163)", "rgb(76, 153, 160)", "rgb(68, 130, 155)", "rgb(62, 108, 150)", "rgb(62, 82, 143)", "rgb(64, 60, 115)", "rgb(54, 43, 77)", "rgb(39, 26, 44)"],

	        dense: ["rgb(230, 240, 240)", "rgb(191, 221, 229)", "rgb(156, 201, 226)", "rgb(129, 180, 227)", "rgb(115, 154, 228)", "rgb(117, 127, 221)", "rgb(120, 100, 202)", "rgb(119, 74, 175)", "rgb(113, 50, 141)", "rgb(100, 31, 104)", "rgb(80, 20, 66)", "rgb(54, 14, 36)"],

	        algae: ["rgb(214, 249, 207)", "rgb(186, 228, 174)", "rgb(156, 209, 143)", "rgb(124, 191, 115)", "rgb(85, 174, 91)", "rgb(37, 157, 81)", "rgb(7, 138, 78)", "rgb(13, 117, 71)", "rgb(23, 95, 61)", "rgb(25, 75, 49)", "rgb(23, 55, 35)", "rgb(17, 36, 20)"],

	        matter: ["rgb(253, 237, 176)", "rgb(250, 205, 145)", "rgb(246, 173, 119)", "rgb(240, 142, 98)", "rgb(231, 109, 84)", "rgb(216, 80, 83)", "rgb(195, 56, 90)", "rgb(168, 40, 96)", "rgb(138, 29, 99)", "rgb(107, 24, 93)", "rgb(76, 21, 80)", "rgb(47, 15, 61)"],

	        speed: ["rgb(254, 252, 205)", "rgb(239, 225, 156)", "rgb(221, 201, 106)", "rgb(194, 182, 59)", "rgb(157, 167, 21)", "rgb(116, 153, 5)", "rgb(75, 138, 20)", "rgb(35, 121, 36)", "rgb(11, 100, 44)", "rgb(18, 78, 43)", "rgb(25, 56, 34)", "rgb(23, 35, 18)"],

	        amp: ["rgb(241, 236, 236)", "rgb(230, 209, 203)", "rgb(221, 182, 170)", "rgb(213, 156, 137)", "rgb(205, 129, 103)", "rgb(196, 102, 73)", "rgb(186, 74, 47)", "rgb(172, 44, 36)", "rgb(149, 19, 39)", "rgb(120, 14, 40)", "rgb(89, 13, 31)", "rgb(60, 9, 17)"],

	        tempo: ["rgb(254, 245, 244)", "rgb(222, 224, 210)", "rgb(189, 206, 181)", "rgb(153, 189, 156)", "rgb(110, 173, 138)", "rgb(65, 157, 129)", "rgb(25, 137, 125)", "rgb(18, 116, 117)", "rgb(25, 94, 106)", "rgb(28, 72, 93)", "rgb(25, 51, 80)", "rgb(20, 29, 67)"],

	        phase: ["rgb(167, 119, 12)", "rgb(197, 96, 51)", "rgb(217, 67, 96)", "rgb(221, 38, 163)", "rgb(196, 59, 224)", "rgb(153, 97, 244)", "rgb(95, 127, 228)", "rgb(40, 144, 183)", "rgb(15, 151, 136)", "rgb(39, 153, 79)", "rgb(119, 141, 17)", "rgb(167, 119, 12)"],

	        balance: ["rgb(23, 28, 66)", "rgb(41, 58, 143)", "rgb(11, 102, 189)", "rgb(69, 144, 185)", "rgb(142, 181, 194)", "rgb(210, 216, 219)", "rgb(230, 210, 204)", "rgb(213, 157, 137)", "rgb(196, 101, 72)", "rgb(172, 43, 36)", "rgb(120, 14, 40)", "rgb(60, 9, 17)"],

	        delta: ["rgb(16, 31, 63)", "rgb(38, 62, 144)", "rgb(30, 110, 161)", "rgb(60, 154, 171)", "rgb(140, 193, 186)", "rgb(217, 229, 218)", "rgb(239, 226, 156)", "rgb(195, 182, 59)", "rgb(115, 152, 5)", "rgb(34, 120, 36)", "rgb(18, 78, 43)", "rgb(23, 35, 18)"],

	        curl: ["rgb(20, 29, 67)", "rgb(28, 72, 93)", "rgb(18, 115, 117)", "rgb(63, 156, 129)", "rgb(153, 189, 156)", "rgb(223, 225, 211)", "rgb(241, 218, 206)", "rgb(224, 160, 137)", "rgb(203, 101, 99)", "rgb(164, 54, 96)", "rgb(111, 23, 91)", "rgb(51, 13, 53)"]
	};

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

	'use strict';

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

	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

	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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _classnames = __webpack_require__(569);

	var _classnames2 = _interopRequireDefault(_classnames);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _check = __webpack_require__(584);

	var _check2 = _interopRequireDefault(_check);

	var _x = __webpack_require__(585);

	var _x2 = _interopRequireDefault(_x);

	var _util = __webpack_require__(586);

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

	function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }

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

	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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 Toggle = function (_PureComponent) {
	  _inherits(Toggle, _PureComponent);

	  function Toggle(props) {
	    _classCallCheck(this, Toggle);

	    var _this = _possibleConstructorReturn(this, (Toggle.__proto__ || Object.getPrototypeOf(Toggle)).call(this, props));

	    _this.handleClick = _this.handleClick.bind(_this);
	    _this.handleTouchStart = _this.handleTouchStart.bind(_this);
	    _this.handleTouchMove = _this.handleTouchMove.bind(_this);
	    _this.handleTouchEnd = _this.handleTouchEnd.bind(_this);
	    _this.handleFocus = _this.handleFocus.bind(_this);
	    _this.handleBlur = _this.handleBlur.bind(_this);
	    _this.previouslyChecked = !!(props.checked || props.defaultChecked);
	    _this.state = {
	      checked: !!(props.checked || props.defaultChecked),
	      hasFocus: false
	    };
	    return _this;
	  }

	  _createClass(Toggle, [{
	    key: 'componentWillReceiveProps',
	    value: function componentWillReceiveProps(nextProps) {
	      if ('checked' in nextProps) {
	        this.setState({ checked: !!nextProps.checked });
	      }
	    }
	  }, {
	    key: 'handleClick',
	    value: function handleClick(event) {
	      var checkbox = this.input;
	      if (event.target !== checkbox && !this.moved) {
	        this.previouslyChecked = checkbox.checked;
	        event.preventDefault();
	        checkbox.focus();
	        checkbox.click();
	        return;
	      }

	      var checked = this.props.hasOwnProperty('checked') ? this.props.checked : checkbox.checked;

	      this.setState({ checked: checked });
	    }
	  }, {
	    key: 'handleTouchStart',
	    value: function handleTouchStart(event) {
	      this.startX = (0, _util.pointerCoord)(event).x;
	      this.activated = true;
	    }
	  }, {
	    key: 'handleTouchMove',
	    value: function handleTouchMove(event) {
	      if (!this.activated) return;
	      this.moved = true;

	      if (this.startX) {
	        var currentX = (0, _util.pointerCoord)(event).x;
	        if (this.state.checked && currentX + 15 < this.startX) {
	          this.setState({ checked: false });
	          this.startX = currentX;
	          this.activated = true;
	        } else if (currentX - 15 > this.startX) {
	          this.setState({ checked: true });
	          this.startX = currentX;
	          this.activated = currentX < this.startX + 5;
	        }
	      }
	    }
	  }, {
	    key: 'handleTouchEnd',
	    value: function handleTouchEnd(event) {
	      if (!this.moved) return;
	      var checkbox = this.input;
	      event.preventDefault();

	      if (this.startX) {
	        var endX = (0, _util.pointerCoord)(event).x;
	        if (this.previouslyChecked === true && this.startX + 4 > endX) {
	          if (this.previouslyChecked !== this.state.checked) {
	            this.setState({ checked: false });
	            this.previouslyChecked = this.state.checked;
	            checkbox.click();
	          }
	        } else if (this.startX - 4 < endX) {
	          if (this.previouslyChecked !== this.state.checked) {
	            this.setState({ checked: true });
	            this.previouslyChecked = this.state.checked;
	            checkbox.click();
	          }
	        }

	        this.activated = false;
	        this.startX = null;
	        this.moved = false;
	      }
	    }
	  }, {
	    key: 'handleFocus',
	    value: function handleFocus(event) {
	      var onFocus = this.props.onFocus;


	      if (onFocus) {
	        onFocus(event);
	      }

	      this.setState({ hasFocus: true });
	    }
	  }, {
	    key: 'handleBlur',
	    value: function handleBlur(event) {
	      var onBlur = this.props.onBlur;


	      if (onBlur) {
	        onBlur(event);
	      }

	      this.setState({ hasFocus: false });
	    }
	  }, {
	    key: 'getIcon',
	    value: function getIcon(type) {
	      var icons = this.props.icons;

	      if (!icons) {
	        return null;
	      }
	      return icons[type] === undefined ? Toggle.defaultProps.icons[type] : icons[type];
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      var _this2 = this;

	      var _props = this.props,
	          className = _props.className,
	          _icons = _props.icons,
	          inputProps = _objectWithoutProperties(_props, ['className', 'icons']);

	      var classes = (0, _classnames2.default)('react-toggle', {
	        'react-toggle--checked': this.state.checked,
	        'react-toggle--focus': this.state.hasFocus,
	        'react-toggle--disabled': this.props.disabled
	      }, className);

	      return _react2.default.createElement(
	        'div',
	        { className: classes,
	          onClick: this.handleClick,
	          onTouchStart: this.handleTouchStart,
	          onTouchMove: this.handleTouchMove,
	          onTouchEnd: this.handleTouchEnd },
	        _react2.default.createElement(
	          'div',
	          { className: 'react-toggle-track' },
	          _react2.default.createElement(
	            'div',
	            { className: 'react-toggle-track-check' },
	            this.getIcon('checked')
	          ),
	          _react2.default.createElement(
	            'div',
	            { className: 'react-toggle-track-x' },
	            this.getIcon('unchecked')
	          )
	        ),
	        _react2.default.createElement('div', { className: 'react-toggle-thumb' }),
	        _react2.default.createElement('input', _extends({}, inputProps, {
	          ref: function ref(_ref) {
	            _this2.input = _ref;
	          },
	          onFocus: this.handleFocus,
	          onBlur: this.handleBlur,
	          className: 'react-toggle-screenreader-only',
	          type: 'checkbox' }))
	      );
	    }
	  }]);

	  return Toggle;
	}(_react.PureComponent);

	exports.default = Toggle;


	Toggle.displayName = 'Toggle';

	Toggle.defaultProps = {
	  icons: {
	    checked: _react2.default.createElement(_check2.default, null),
	    unchecked: _react2.default.createElement(_x2.default, null)
	  }
	};

	Toggle.propTypes = {
	  checked: _propTypes2.default.bool,
	  disabled: _propTypes2.default.bool,
	  defaultChecked: _propTypes2.default.bool,
	  onChange: _propTypes2.default.func,
	  onFocus: _propTypes2.default.func,
	  onBlur: _propTypes2.default.func,
	  className: _propTypes2.default.string,
	  name: _propTypes2.default.string,
	  value: _propTypes2.default.string,
	  id: _propTypes2.default.string,
	  'aria-labelledby': _propTypes2.default.string,
	  'aria-label': _propTypes2.default.string,
	  icons: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.shape({
	    checked: _propTypes2.default.node,
	    unchecked: _propTypes2.default.node
	  })])
	};

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

	'use strict';

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

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

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

	exports.default = function () {
	  return _react2.default.createElement(
	    'svg',
	    { width: '14', height: '11', viewBox: '0 0 14 11' },
	    _react2.default.createElement(
	      'title',
	      null,
	      'switch-check'
	    ),
	    _react2.default.createElement('path', { d: 'M11.264 0L5.26 6.004 2.103 2.847 0 4.95l5.26 5.26 8.108-8.107L11.264 0', fill: '#fff', fillRule: 'evenodd' })
	  );
	};

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

	'use strict';

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

	var _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

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

	exports.default = function () {
	  return _react2.default.createElement(
	    'svg',
	    { width: '10', height: '10', viewBox: '0 0 10 10' },
	    _react2.default.createElement(
	      'title',
	      null,
	      'switch-x'
	    ),
	    _react2.default.createElement('path', { d: 'M9.9 2.12L7.78 0 4.95 2.828 2.12 0 0 2.12l2.83 2.83L0 7.776 2.123 9.9 4.95 7.07 7.78 9.9 9.9 7.776 7.072 4.95 9.9 2.12', fill: '#fff', fillRule: 'evenodd' })
	  );
	};

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

	"use strict";

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.pointerCoord = pointerCoord;
	// Copyright 2015-present Drifty Co.
	// http://drifty.com/
	// from: https://github.com/driftyco/ionic/blob/master/src/util/dom.ts

	function pointerCoord(event) {
	  // get coordinates for either a mouse click
	  // or a touch depending on the given event
	  if (event) {
	    var changedTouches = event.changedTouches;
	    if (changedTouches && changedTouches.length > 0) {
	      var touch = changedTouches[0];
	      return { x: touch.clientX, y: touch.clientY };
	    }
	    var pageX = event.pageX;
	    if (pageX !== undefined) {
	      return { x: pageX, y: event.pageY };
	    }
	  }
	  return { x: 0, y: 0 };
	}

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

	!function(e,t){if(true)module.exports=t(__webpack_require__(2),__webpack_require__(338));else if("function"==typeof define&&define.amd)define(["react","react-dom"],t);else{var n="object"==typeof exports?t(require("react"),require("react-dom")):t(e.React,e.ReactDOM);for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=5)}([function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(f===setTimeout)return setTimeout(e,0);if((f===n||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function i(e){if(l===clearTimeout)return clearTimeout(e);if((l===r||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function u(){h&&d&&(h=!1,d.length?y=d.concat(y):v=-1,y.length&&a())}function a(){if(!h){var e=o(u);h=!0;for(var t=y.length;t;){for(d=y,y=[];++v<t;)d&&d[v].run();v=-1,t=y.length}d=null,h=!1,i(e)}}function c(e,t){this.fun=e,this.array=t}function s(){}var f,l,p=e.exports={};!function(){try{f="function"==typeof setTimeout?setTimeout:n}catch(e){f=n}try{l="function"==typeof clearTimeout?clearTimeout:r}catch(e){l=r}}();var d,y=[],h=!1,v=-1;p.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];y.push(new c(e,t)),1!==y.length||h||o(a)},c.prototype.run=function(){this.fun.apply(null,this.array)},p.title="browser",p.browser=!0,p.env={},p.argv=[],p.version="",p.versions={},p.on=s,p.addListener=s,p.once=s,p.off=s,p.removeListener=s,p.removeAllListeners=s,p.emit=s,p.prependListener=s,p.prependOnceListener=s,p.listeners=function(e){return[]},p.binding=function(e){throw new Error("process.binding is not supported")},p.cwd=function(){return"/"},p.chdir=function(e){throw new Error("process.chdir is not supported")},p.umask=function(){return 0}},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";(function(t){function n(e,t,n,o,i,u,a,c){if(r(t),!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var f=[n,o,i,u,a,c],l=0;s=new Error(t.replace(/%s/g,function(){return f[l++]})),s.name="Invariant Violation"}throw s.framesToPop=1,s}}var r=function(e){};"production"!==t.env.NODE_ENV&&(r=function(e){if(void 0===e)throw new Error("invariant requires an error message argument")}),e.exports=n}).call(t,n(0))},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";(function(t){var r=n(1),o=r;if("production"!==t.env.NODE_ENV){var i=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=0,i="Warning: "+e.replace(/%s/g,function(){return n[o++]});"undefined"!=typeof console&&console.error(i);try{throw new Error(i)}catch(e){}};o=function(e,t){if(void 0===t)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(0!==t.indexOf("Failed Composite propType: ")&&!e){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];i.apply(void 0,[t].concat(r))}}}e.exports=o}).call(t,n(0))},function(e,t,n){e.exports=n(6)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),c=n(7),s=r(c),f=n(8),l=r(f),p=n(9),d=r(p),y={toolbar:"no",location:"no",directories:"no",status:"no",menubar:"no",scrollbars:"yes",resizable:"yes",width:500,height:400,top:function(e,t){return(t.innerHeight-e.height)/2+t.screenY},left:function(e,t){return(t.innerWidth-e.width)/2+t.screenX}},h=function(e){function t(e){o(this,t);var n=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.mainWindowClosed=n.mainWindowClosed.bind(n),n.popoutWindowUnloading=n.popoutWindowUnloading.bind(n),n.popoutWindowLoaded=n.popoutWindowLoaded.bind(n),n.state={openedWindowComponent:null,popoutWindow:null,container:null},n}return u(t,e),a(t,[{key:"createOptions",value:function(e){var t=this,n=Object.assign({},y,this.props.options);return Object.keys(n).map(function(r){return r+"="+("function"==typeof n[r]?n[r].call(t,n,e):n[r])}).join(",")}},{key:"componentDidMount",value:function(){var e=this.props.window||window;e&&(this.openPopoutWindow(e),e.addEventListener("unload",this.mainWindowClosed))}},{key:"componentWillReceiveProps",value:function(e){e.title!==this.props.title&&this.state.popoutWindow&&(this.state.popoutWindow.document.title=e.title)}},{key:"componentDidUpdate",value:function(){this.renderToContainer(this.state.container,this.state.popoutWindow,this.props.children)}},{key:"componentWillUnmount",value:function(){this.mainWindowClosed()}},{key:"popoutWindowLoaded",value:function(e){if(!this.state.container){e=this.state.popoutWindow||e,e.document.title=this.props.title;var t=e.document.createElement("div");t.id=this.props.containerId,e.document.body.appendChild(t),this.setState({container:t}),this.renderToContainer(t,e,this.props.children)}}},{key:"openPopoutWindow",value:function(e){var t=e.open(this.props.url,this.props.name||this.props.title,this.createOptions(e));this.setState({popoutWindow:t}),t.addEventListener("load",this.popoutWindowLoaded),t.addEventListener("beforeunload",this.popoutWindowUnloading),"about:blank"===this.props.url&&"complete"===t.document.readyState&&this.popoutWindowLoaded(t)}},{key:"closeWindow",value:function(){this.mainWindowClosed()}},{key:"mainWindowClosed",value:function(){this.state.popoutWindow&&this.state.popoutWindow.close(),(this.props.window||window).removeEventListener("unload",this.mainWindowClosed)}},{key:"popoutWindowUnloading",value:function(){l.default.unmountComponentAtNode(this.state.container),this.props.onClosing&&this.props.onClosing()}},{key:"renderToContainer",value:function(e,t,n){if(e){var r=n;"function"==typeof n&&(r=n(t)),l.default.render(r,e)}}},{key:"render",value:function(){return null}}]),t}(s.default.Component);h.defaultProps={url:"about:blank",containerId:"popout-content-container"},h.propTypes={title:d.default.string.isRequired,url:d.default.string,onClosing:d.default.func,options:d.default.object,window:d.default.object,containerId:d.default.string,children:d.default.oneOfType([d.default.element,d.default.func])},t.default=h},function(t,n){t.exports=e},function(e,n){e.exports=t},function(e,t,n){(function(t){if("production"!==t.env.NODE_ENV){var r="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,o=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r};e.exports=n(10)(o,!0)}else e.exports=n(13)()}).call(t,n(0))},function(e,t,n){"use strict";(function(t){var r=n(1),o=n(2),i=n(4),u=n(11),a=n(3),c=n(12);e.exports=function(e,n){function s(e){var t=e&&(P&&e[P]||e[W]);if("function"==typeof t)return t}function f(e,t){return e===t?0!==e||1/e==1/t:e!==e&&t!==t}function l(e){this.message=e,this.stack=""}function p(e){function r(r,s,f,p,d,y,h){if(p=p||_,y=y||f,h!==a)if(n)o(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");else if("production"!==t.env.NODE_ENV&&"undefined"!=typeof console){var v=p+":"+f;!u[v]&&c<3&&(i(!1,"You are manually calling a React.PropTypes validation function for the `%s` prop on `%s`. This is deprecated and will throw in the standalone `prop-types` package. You may be seeing this warning due to a third-party PropTypes library. See https://fb.me/react-warning-dont-call-proptypes for details.",y,p),u[v]=!0,c++)}return null==s[f]?r?new l(null===s[f]?"The "+d+" `"+y+"` is marked as required in `"+p+"`, but its value is `null`.":"The "+d+" `"+y+"` is marked as required in `"+p+"`, but its value is `undefined`."):null:e(s,f,p,d,y)}if("production"!==t.env.NODE_ENV)var u={},c=0;var s=r.bind(null,!1);return s.isRequired=r.bind(null,!0),s}function d(e){function t(t,n,r,o,i,u){var a=t[n];if(j(a)!==e)return new l("Invalid "+o+" `"+i+"` of type `"+E(a)+"` supplied to `"+r+"`, expected `"+e+"`.");return null}return p(t)}function y(e){function t(t,n,r,o,i){if("function"!=typeof e)return new l("Property `"+i+"` of component `"+r+"` has invalid PropType notation inside arrayOf.");var u=t[n];if(!Array.isArray(u)){return new l("Invalid "+o+" `"+i+"` of type `"+j(u)+"` supplied to `"+r+"`, expected an array.")}for(var c=0;c<u.length;c++){var s=e(u,c,r,o,i+"["+c+"]",a);if(s instanceof Error)return s}return null}return p(t)}function h(e){function t(t,n,r,o,i){if(!(t[n]instanceof e)){var u=e.name||_;return new l("Invalid "+o+" `"+i+"` of type `"+k(t[n])+"` supplied to `"+r+"`, expected instance of `"+u+"`.")}return null}return p(t)}function v(e){function n(t,n,r,o,i){for(var u=t[n],a=0;a<e.length;a++)if(f(u,e[a]))return null;return new l("Invalid "+o+" `"+i+"` of value `"+u+"` supplied to `"+r+"`, expected one of "+JSON.stringify(e)+".")}return Array.isArray(e)?p(n):("production"!==t.env.NODE_ENV&&i(!1,"Invalid argument supplied to oneOf, expected an instance of array."),r.thatReturnsNull)}function m(e){function t(t,n,r,o,i){if("function"!=typeof e)return new l("Property `"+i+"` of component `"+r+"` has invalid PropType notation inside objectOf.");var u=t[n],c=j(u);if("object"!==c)return new l("Invalid "+o+" `"+i+"` of type `"+c+"` supplied to `"+r+"`, expected an object.");for(var s in u)if(u.hasOwnProperty(s)){var f=e(u,s,r,o,i+"."+s,a);if(f instanceof Error)return f}return null}return p(t)}function b(e){function n(t,n,r,o,i){for(var u=0;u<e.length;u++){if(null==(0,e[u])(t,n,r,o,i,a))return null}return new l("Invalid "+o+" `"+i+"` supplied to `"+r+"`.")}if(!Array.isArray(e))return"production"!==t.env.NODE_ENV&&i(!1,"Invalid argument supplied to oneOfType, expected an instance of array."),r.thatReturnsNull;for(var o=0;o<e.length;o++){var u=e[o];if("function"!=typeof u)return i(!1,"Invalid argument supplied to oneOfType. Expected an array of check functions, but received %s at index %s.",x(u),o),r.thatReturnsNull}return p(n)}function w(e){function t(t,n,r,o,i){var u=t[n],c=j(u);if("object"!==c)return new l("Invalid "+o+" `"+i+"` of type `"+c+"` supplied to `"+r+"`, expected `object`.");for(var s in e){var f=e[s];if(f){var p=f(u,s,r,o,i+"."+s,a);if(p)return p}}return null}return p(t)}function g(e){function t(t,n,r,o,i){var c=t[n],s=j(c);if("object"!==s)return new l("Invalid "+o+" `"+i+"` of type `"+s+"` supplied to `"+r+"`, expected `object`.");var f=u({},t[n],e);for(var p in f){var d=e[p];if(!d)return new l("Invalid "+o+" `"+i+"` key `"+p+"` supplied to `"+r+"`.\nBad object: "+JSON.stringify(t[n],null,"  ")+"\nValid keys: "+JSON.stringify(Object.keys(e),null,"  "));var y=d(c,p,r,o,i+"."+p,a);if(y)return y}return null}return p(t)}function O(t){switch(typeof t){case"number":case"string":case"undefined":return!0;case"boolean":return!t;case"object":if(Array.isArray(t))return t.every(O);if(null===t||e(t))return!0;var n=s(t);if(!n)return!1;var r,o=n.call(t);if(n!==t.entries){for(;!(r=o.next()).done;)if(!O(r.value))return!1}else for(;!(r=o.next()).done;){var i=r.value;if(i&&!O(i[1]))return!1}return!0;default:return!1}}function T(e,t){return"symbol"===e||("Symbol"===t["@@toStringTag"]||"function"==typeof Symbol&&t instanceof Symbol)}function j(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":T(t,e)?"symbol":t}function E(e){if(void 0===e||null===e)return""+e;var t=j(e);if("object"===t){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return t}function x(e){var t=E(e);switch(t){case"array":case"object":return"an "+t;case"boolean":case"date":case"regexp":return"a "+t;default:return t}}function k(e){return e.constructor&&e.constructor.name?e.constructor.name:_}var P="function"==typeof Symbol&&Symbol.iterator,W="@@iterator",_="<<anonymous>>",N={array:d("array"),bool:d("boolean"),func:d("function"),number:d("number"),object:d("object"),string:d("string"),symbol:d("symbol"),any:function(){return p(r.thatReturnsNull)}(),arrayOf:y,element:function(){function t(t,n,r,o,i){var u=t[n];if(!e(u)){return new l("Invalid "+o+" `"+i+"` of type `"+j(u)+"` supplied to `"+r+"`, expected a single ReactElement.")}return null}return p(t)}(),instanceOf:h,node:function(){function e(e,t,n,r,o){return O(e[t])?null:new l("Invalid "+r+" `"+o+"` supplied to `"+n+"`, expected a ReactNode.")}return p(e)}(),objectOf:m,oneOf:v,oneOfType:b,shape:w,exact:g};return l.prototype=Error.prototype,N.checkPropTypes=c,N.PropTypes=N,N}}).call(t,n(0))},function(e,t,n){"use strict";function r(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}/*
	object-assign
	(c) Sindre Sorhus
	@license MIT
	*/
	var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,u=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,a,c=r(e),s=1;s<arguments.length;s++){n=Object(arguments[s]);for(var f in n)i.call(n,f)&&(c[f]=n[f]);if(o){a=o(n);for(var l=0;l<a.length;l++)u.call(n,a[l])&&(c[a[l]]=n[a[l]])}}return c}},function(e,t,n){"use strict";(function(t){function r(e,n,r,c,s){if("production"!==t.env.NODE_ENV)for(var f in e)if(e.hasOwnProperty(f)){var l;try{o("function"==typeof e[f],"%s: %s type `%s` is invalid; it must be a function, usually from the `prop-types` package, but received `%s`.",c||"React class",r,f,typeof e[f]),l=e[f](n,f,c,r,null,u)}catch(e){l=e}if(i(!l||l instanceof Error,"%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",c||"React class",r,f,typeof l),l instanceof Error&&!(l.message in a)){a[l.message]=!0;var p=s?s():"";i(!1,"Failed %s type: %s%s",r,l.message,null!=p?p:"")}}}if("production"!==t.env.NODE_ENV)var o=n(2),i=n(4),u=n(3),a={};e.exports=r}).call(t,n(0))},function(e,t,n){"use strict";var r=n(1),o=n(2),i=n(3);e.exports=function(){function e(e,t,n,r,u,a){a!==i&&o(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return n.checkPropTypes=r,n.PropTypes=n,n}}])});

/***/ }),
/* 588 */
/***/ (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 _react = __webpack_require__(2);

	var _react2 = _interopRequireDefault(_react);

	var _propTypes = __webpack_require__(325);

	var _propTypes2 = _interopRequireDefault(_propTypes);

	var _ramda = __webpack_require__(3);

	var R = _interopRequireWildcard(_ramda);

	var _chromaJs = __webpack_require__(335);

	var _chromaJs2 = _interopRequireDefault(_chromaJs);

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

	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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

	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; }

	/* global Plotly:true */

	var filterEventData = function filterEventData(gd, eventData, event) {
	    var filteredEventData = void 0;
	    if ((0, _ramda.contains)(event, ['click', 'hover', 'selected'])) {
	        var points = [];

	        if ((0, _ramda.isNil)(eventData)) {
	            return null;
	        }

	        /*
	         * remove `data`, `layout`, `xaxis`, etc
	         * objects from the event data since they're so big
	         * and cause JSON stringify ciricular structure errors.
	         *
	         * also, pull down the `customdata` point from the data array
	         * into the event object
	         */
	        var data = gd.data;

	        for (var i = 0; i < eventData.points.length; i++) {
	            var fullPoint = eventData.points[i];
	            var pointData = (0, _ramda.filter)(function (o) {
	                return !(0, _ramda.contains)((0, _ramda.type)(o), ['Object', 'Array']);
	            }, fullPoint);
	            if ((0, _ramda.has)('curveNumber', fullPoint) && (0, _ramda.has)('pointNumber', fullPoint) && (0, _ramda.has)('customdata', data[pointData.curveNumber])) {
	                pointData['customdata'] = data[pointData.curveNumber].customdata[fullPoint.pointNumber];
	            }

	            // specific to histogram. see https://github.com/plotly/plotly.js/pull/2113/
	            if ((0, _ramda.has)('pointNumbers', fullPoint)) {
	                pointData.pointNumbers = fullPoint.pointNumbers;
	            }

	            points[i] = pointData;
	        }
	        filteredEventData = { points: points };
	    } else if (event === 'relayout') {
	        /*
	         * relayout shouldn't include any big objects
	         * it will usually just contain the ranges of the axes like
	         * "xaxis.range[0]": 0.7715822247381828,
	         * "xaxis.range[1]": 3.0095292008680063`
	         */
	        filteredEventData = eventData;
	    }
	    if ((0, _ramda.has)('range', eventData)) {
	        filteredEventData.range = eventData.range;
	    }
	    if ((0, _ramda.has)('lassoPoints', eventData)) {
	        filteredEventData.lassoPoints = eventData.lassoPoints;
	    }
	    return filteredEventData;
	};

	var PlotlyGraph = function (_Component) {
	    _inherits(PlotlyGraph, _Component);

	    function PlotlyGraph(props) {
	        _classCallCheck(this, PlotlyGraph);

	        var _this = _possibleConstructorReturn(this, (PlotlyGraph.__proto__ || Object.getPrototypeOf(PlotlyGraph)).call(this, props));

	        _this.bindEvents = _this.bindEvents.bind(_this);
	        _this.constructTheme = _this.constructTheme.bind(_this);
	        _this.mergeTheme = _this.mergeTheme.bind(_this);
	        _this.applyTheme = _this.applyTheme.bind(_this);
	        _this._hasPlotted = false;
	        return _this;
	    }

	    _createClass(PlotlyGraph, [{
	        key: 'plot',
	        value: function plot(props) {
	            var _this2 = this;

	            var id = props.id,
	                figure = props.figure,
	                animate = props.animate,
	                animation_options = props.animation_options,
	                config = props.config;
	            var apply_theme = props.apply_theme;

	            var gd = document.getElementById(id);
	            if (apply_theme) {
	                console.warn('applying theme');
	                this.mergeTheme(figure);
	            }
	            if (animate && this._hasPlotted && figure.data.length === gd.data.length) {
	                return Plotly.animate(id, figure, animation_options);
	            } else {
	                return Plotly.react(id, figure.data, figure.layout, config).then(function () {
	                    if (!_this2._hasPlotted) {
	                        _this2.bindEvents();
	                        Plotly.Plots.resize(document.getElementById(id));
	                        _this2._hasPlotted = true;
	                    }
	                });
	            }
	        }
	    }, {
	        key: 'mergeTheme',
	        value: function mergeTheme(fig) {
	            var theme = this.constructTheme();
	            fig.data.forEach(function (trace) {
	                R.keys(theme.data).forEach(function (themeKey) {
	                    trace[themeKey] = theme.data[themeKey][0];
	                });
	            });
	            R.keys(theme.layout).forEach(function (attr) {
	                var attrPath = attr.split('.');
	                fig.layout = R.set(R.lensPath(attrPath), theme.layout[attr], fig.layout);
	            });
	        }
	    }, {
	        key: 'constructTheme',
	        value: function constructTheme() {
	            var _props = this.props,
	                id = _props.id,
	                apply_theme_trace_colors = _props.apply_theme_trace_colors;

	            var gd = document.getElementById(id);
	            var theme = window.dashTheme;
	            if (!theme) {
	                console.warn('window.dashTheme is not defined');
	                return { data: {}, layout: {} };
	            }

	            var update = {
	                data: {},
	                layout: {
	                    'font.color': theme['--text'],
	                    'paper_bgcolor': theme['--background'],
	                    'plot_bgcolor': theme['--background'],
	                    'hoverlabel.font.color': theme['--text'],
	                    'hoverlabel.bgcolor': theme['--background'],
	                    'hoverlabel.bordercolor': theme['transparent'],
	                    'legend.bgcolor': (0, _chromaJs2.default)(theme['--background']).alpha(0.3)
	                }
	            };

	            if (apply_theme_trace_colors) {
	                update.layout.colorway = theme.traces;
	                update.data.colorscale = [[[0.0, theme.traces[0]], [1.0, theme.traces[1]]]];
	            }

	            // axis keys
	            R.keys(gd.layout).filter(R.contains('axis')).forEach(function (axis) {
	                update.layout[axis + '.zerolinecolor'] = theme['--border'];
	                update.layout[axis + '.gridcolor'] = theme['--border'];
	                update.layout[axis + '.zerolinecolor'] = theme['--border'];
	                update.layout[axis + '.gridcolor'] = theme['--border'];
	                update.layout[axis + '.tickcolor'] = theme['--border'];
	                update.layout[axis + '.automargin'] = true;
	            });

	            if (theme.tight) {
	                update.layout = R.merge(update.layout, {
	                    'margin.l': 30,
	                    'margin.r': 10,
	                    'margin.b': 30,
	                    'margin.t': 20,
	                    'legend.x': 1,
	                    'legend.xanchor': 'right',
	                    'legend.y': 1,
	                    'legend.yanchor': 'top',
	                    'legend.orientation': 'h'
	                });
	            }

	            return update;
	        }
	    }, {
	        key: 'applyTheme',
	        value: function applyTheme() {
	            var id = this.props.id;

	            var dashTheme = window.dashTheme;

	            var _constructTheme = this.constructTheme(),
	                data = _constructTheme.data,
	                layout = _constructTheme.layout;

	            Plotly.update(id, data, layout);
	        }
	    }, {
	        key: 'bindEvents',
	        value: function bindEvents() {
	            var _props2 = this.props,
	                id = _props2.id,
	                fireEvent = _props2.fireEvent,
	                setProps = _props2.setProps,
	                clear_on_unhover = _props2.clear_on_unhover;


	            var gd = document.getElementById(id);

	            gd.on('plotly_click', function (eventData) {
	                var clickData = filterEventData(gd, eventData, 'click');
	                if (!(0, _ramda.isNil)(clickData)) {
	                    if (setProps) setProps({ clickData: clickData });
	                    if (fireEvent) fireEvent({ event: 'click' });
	                }
	            });
	            gd.on('plotly_hover', function (eventData) {
	                var hoverData = filterEventData(gd, eventData, 'hover');
	                if (!(0, _ramda.isNil)(hoverData)) {
	                    if (setProps) setProps({ hoverData: hoverData });
	                    if (fireEvent) fireEvent({ event: 'hover' });
	                }
	            });
	            gd.on('plotly_selected', function (eventData) {
	                var selectedData = filterEventData(gd, eventData, 'selected');
	                if (!(0, _ramda.isNil)(selectedData)) {
	                    if (setProps) setProps({ selectedData: selectedData });
	                    if (fireEvent) fireEvent({ event: 'selected' });
	                }
	            });
	            gd.on('plotly_deselect', function () {
	                if (setProps) setProps({ selectedData: null });
	                if (fireEvent) fireEvent({ event: 'selected' });
	            });
	            gd.on('plotly_relayout', function (eventData) {
	                var relayoutData = filterEventData(gd, eventData, 'relayout');
	                if (!(0, _ramda.isNil)(relayoutData)) {
	                    if (setProps) setProps({ relayoutData: relayoutData });
	                    if (fireEvent) fireEvent({ event: 'relayout' });
	                }
	            });
	            gd.on('plotly_unhover', function () {
	                if (clear_on_unhover) {
	                    if (setProps) setProps({ hoverData: null });
	                    if (fireEvent) fireEvent({ event: 'unhover' });
	                }
	            });

	            window.addEventListener('dash-theme-update', this.applyTheme);
	        }
	    }, {
	        key: 'componentDidMount',
	        value: function componentDidMount() {
	            var _this3 = this;

	            this.plot(this.props).then(function () {
	                window.addEventListener('resize', function () {
	                    Plotly.Plots.resize(document.getElementById(_this3.props.id));
	                });
	            });
	        }
	    }, {
	        key: 'componentWillUnmount',
	        value: function componentWillUnmount() {
	            if (this.eventEmitter) {
	                this.eventEmitter.removeAllListeners();
	            }
	        }
	    }, {
	        key: 'shouldComponentUpdate',
	        value: function shouldComponentUpdate(nextProps) {
	            return this.props.id !== nextProps.id || JSON.stringify(this.props.style) !== JSON.stringify(nextProps.style);
	        }
	    }, {
	        key: 'componentWillReceiveProps',
	        value: function componentWillReceiveProps(nextProps) {
	            var idChanged = this.props.id !== nextProps.id;
	            if (idChanged) {
	                /*
	                 * then the dom needs to get re-rendered with a new ID.
	                 * the graph will get updated in componentDidUpdate
	                 */
	                return;
	            }

	            var figureChanged = this.props.figure !== nextProps.figure;

	            if (figureChanged) {
	                this.plot(nextProps);
	            }
	        }
	    }, {
	        key: 'componentDidUpdate',
	        value: function componentDidUpdate(prevProps) {
	            if (prevProps.id !== this.props.id) {
	                this.plot(this.props);
	            }
	        }
	    }, {
	        key: 'render',
	        value: function render() {
	            var _props3 = this.props,
	                className = _props3.className,
	                id = _props3.id,
	                style = _props3.style;


	            return _react2.default.createElement('div', {
	                key: id,
	                id: id,
	                style: style,
	                className: className
	            });
	        }
	    }]);

	    return PlotlyGraph;
	}(_react.Component);

	exports.default = PlotlyGraph;


	PlotlyGraph.propTypes = {
	    apply_theme: _propTypes2.default.bool,
	    apply_theme_trace_colors: _propTypes2.default.bool,

	    id: _propTypes2.default.string.isRequired,
	    /**
	     * Data from latest click event
	     */
	    clickData: _propTypes2.default.object,

	    /**
	     * Data from latest hover event
	     */
	    hoverData: _propTypes2.default.object,

	    /**
	     * If True, `clear_on_unhover` will clear the `hoverData` property
	     * when the user "unhovers" from a point.
	     * If False, then the `hoverData` property will be equal to the
	     * data from the last point that was hovered over.
	     */
	    clear_on_unhover: _propTypes2.default.bool,

	    /**
	     * Data from latest select event
	     */
	    selectedData: _propTypes2.default.object,

	    /**
	     * Data from latest relayout event which occurs
	     * when the user zooms or pans on the plot
	     */
	    relayoutData: _propTypes2.default.object,

	    /**
	     * Plotly `figure` object. See schema:
	     * https://plot.ly/javascript/reference
	     */
	    figure: _propTypes2.default.object,

	    /**
	     * Generic style overrides on the plot div
	     */
	    style: _propTypes2.default.object,

	    /**
	     * className of the parent div
	     */
	    className: _propTypes2.default.string,

	    /**
	     * Beta: If true, animate between updates using
	     * plotly.js's `animate` function
	     */
	    animate: _propTypes2.default.bool,

	    /**
	     * Beta: Object containing animation settings.
	     * Only applies if `animate` is `true`
	     */
	    animation_options: _propTypes2.default.object,

	    /**
	     * Plotly.js config options.
	     * See https://plot.ly/javascript/configuration-options/
	     * for more info.
	     */
	    config: _propTypes2.default.shape({
	        /**
	         * no interactivity, for export or image generation
	         */
	        staticPlot: _propTypes2.default.bool,

	        /**
	         * we can edit titles, move annotations, etc - sets all pieces of `edits`
	         * unless a separate `edits` config item overrides individual parts
	         */
	        editable: _propTypes2.default.bool,

	        /**
	         * a set of editable properties
	         */
	        edits: _propTypes2.default.shape({
	            /**
	             * annotationPosition: the main anchor of the annotation, which is the
	             * text (if no arrow) or the arrow (which drags the whole thing leaving
	             * the arrow length & direction unchanged)
	             */
	            annotationPosition: _propTypes2.default.bool,

	            /**
	             * just for annotations with arrows, change the length and direction of the arrow
	             */
	            annotationTail: _propTypes2.default.bool,

	            annotationText: _propTypes2.default.bool,

	            axisTitleText: _propTypes2.default.bool,

	            colorbarPosition: _propTypes2.default.bool,

	            colorbarTitleText: _propTypes2.default.bool,

	            legendPosition: _propTypes2.default.bool,

	            /**
	             * edit the trace name fields from the legend
	             */
	            legendText: _propTypes2.default.bool,

	            shapePosition: _propTypes2.default.bool,

	            /**
	             * the global `layout.title`
	             */
	            titleText: _propTypes2.default.bool
	        }),

	        /**
	         * DO autosize once regardless of layout.autosize
	         * (use default width or height values otherwise)
	         */
	        autosizable: _propTypes2.default.bool,

	        /**
	         * set the length of the undo/redo queue
	         */
	        queueLength: _propTypes2.default.number,

	        /**
	         * if we DO autosize, do we fill the container or the screen?
	         */
	        fillFrame: _propTypes2.default.bool,

	        /**
	         * if we DO autosize, set the frame margins in percents of plot size
	         */
	        frameMargins: _propTypes2.default.number,

	        /**
	         * mousewheel or two-finger scroll zooms the plot
	         */
	        scrollZoom: _propTypes2.default.bool,

	        /**
	         * double click interaction (false, 'reset', 'autosize' or 'reset+autosize')
	         */
	        doubleClick: _propTypes2.default.oneOf([false, 'reset', 'autosize', 'reset+autosize']),

	        /**
	         * new users see some hints about interactivity
	         */
	        showTips: _propTypes2.default.bool,

	        /**
	         * enable axis pan/zoom drag handles
	         */
	        showAxisDragHandles: _propTypes2.default.bool,

	        /**
	         * enable direct range entry at the pan/zoom drag points
	         * (drag handles must be enabled above)
	         */
	        showAxisRangeEntryBoxes: _propTypes2.default.bool,

	        /**
	         * link to open this plot in plotly
	         */
	        showLink: _propTypes2.default.bool,

	        /**
	         * if we show a link, does it contain data or just link to a plotly file?
	         */
	        sendData: _propTypes2.default.bool,

	        /**
	         * text appearing in the sendData link
	         */
	        linkText: _propTypes2.default.string,

	        /**
	         * display the mode bar (true, false, or 'hover')
	         */
	        displayModeBar: _propTypes2.default.oneOf([true, false, 'hover']),

	        /**
	         * remove mode bar button by name.
	         * All modebar button names at https://github.com/plotly/plotly.js/blob/master/src/components/modebar/buttons.js
	         * Common names include:
	         *  - sendDataToCloud
	         * - (2D): zoom2d, pan2d, select2d, lasso2d, zoomIn2d, zoomOut2d, autoScale2d, resetScale2d
	         * - (Cartesian): hoverClosestCartesian, hoverCompareCartesian
	         * - (3D): zoom3d, pan3d, orbitRotation, tableRotation, handleDrag3d, resetCameraDefault3d, resetCameraLastSave3d, hoverClosest3d
	         * - (Geo): zoomInGeo, zoomOutGeo, resetGeo, hoverClosestGeo
	         * - hoverClosestGl2d, hoverClosestPie, toggleHover, resetViews
	         */
	        modeBarButtonsToRemove: _propTypes2.default.array,

	        /**
	         * add mode bar button using config objects
	         */
	        modeBarButtonsToAdd: _propTypes2.default.array,

	        /**
	         * fully custom mode bar buttons as nested array,
	         * where the outer arrays represents button groups, and
	         * the inner arrays have buttons config objects or names of default buttons
	         */
	        modeBarButtons: _propTypes2.default.any,

	        /**
	         * add the plotly logo on the end of the mode bar
	         */
	        displaylogo: _propTypes2.default.bool,

	        /**
	         * increase the pixel ratio for Gl plot images
	         */
	        plotGlPixelRatio: _propTypes2.default.number,

	        /**
	         * URL to topojson files used in geo charts
	         */
	        topojsonURL: _propTypes2.default.string,

	        /**
	         * Mapbox access token (required to plot mapbox trace types)
	         * If using an Mapbox Atlas server, set this option to '',
	         * so that plotly.js won't attempt to authenticate to the public Mapbox server.
	         */
	        mapboxAccessToken: _propTypes2.default.any
	    }),

	    /**
	     *
	     */
	    dashEvents: _propTypes2.default.oneOf(['click', 'hover', 'selected', 'relayout', 'unhover']),

	    /**
	     * Function that updates the state tree.
	     */
	    setProps: _propTypes2.default.func,

	    /**
	     * Function that fires events
	     */
	    dashFireEvent: _propTypes2.default.func
	};

	PlotlyGraph.defaultProps = {
	    apply_theme: true,
	    apply_theme_trace_colors: true,
	    clickData: null,
	    hoverData: null,
	    selectedData: null,
	    relayoutData: null,
	    figure: { data: [], layout: {} },
	    animate: false,
	    animation_options: {
	        frame: {
	            redraw: false
	        },
	        transition: {
	            duration: 750,
	            ease: 'cubic-in-out'
	        }
	    },
	    clear_on_unhover: false,
	    config: {
	        staticPlot: false,
	        editable: false,
	        edits: {
	            annotationPosition: false,
	            annotationTail: false,
	            annotationText: false,
	            axisTitleText: false,
	            colorbarPosition: false,
	            colorbarTitleText: false,
	            legendPosition: false,
	            legendText: false,
	            shapePosition: false,
	            titleText: false
	        },
	        autosizable: false,
	        queueLength: 0,
	        fillFrame: false,
	        frameMargins: 0,
	        scrollZoom: false,
	        doubleClick: 'reset+autosize',
	        showTips: true,
	        showAxisDragHandles: true,
	        showAxisRangeEntryBoxes: true,
	        showLink: false,
	        sendData: true,
	        linkText: 'Edit chart',
	        showSources: false,
	        displayModeBar: 'hover',
	        modeBarButtonsToRemove: [],
	        modeBarButtonsToAdd: [],
	        modeBarButtons: false,
	        displaylogo: true,
	        plotGlPixelRatio: 2,
	        topojsonURL: 'https://cdn.plot.ly/',
	        mapboxAccessToken: null
	    }
	};

/***/ })
/******/ ]);