does.\n\t contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n\t }\n\t return contentKey;\n\t}\n\t\n\tmodule.exports = getTextContentAccessor;\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar ReactDOMComponentTree = __webpack_require__(5);\n\t\n\tfunction isCheckable(elem) {\n\t var type = elem.type;\n\t var nodeName = elem.nodeName;\n\t return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n\t}\n\t\n\tfunction getTracker(inst) {\n\t return inst._wrapperState.valueTracker;\n\t}\n\t\n\tfunction attachTracker(inst, tracker) {\n\t inst._wrapperState.valueTracker = tracker;\n\t}\n\t\n\tfunction detachTracker(inst) {\n\t inst._wrapperState.valueTracker = null;\n\t}\n\t\n\tfunction getValueFromNode(node) {\n\t var value;\n\t if (node) {\n\t value = isCheckable(node) ? '' + node.checked : node.value;\n\t }\n\t return value;\n\t}\n\t\n\tvar inputValueTracking = {\n\t // exposed for testing\n\t _getTrackerFromNode: function (node) {\n\t return getTracker(ReactDOMComponentTree.getInstanceFromNode(node));\n\t },\n\t\n\t\n\t track: function (inst) {\n\t if (getTracker(inst)) {\n\t return;\n\t }\n\t\n\t var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n\t var valueField = isCheckable(node) ? 'checked' : 'value';\n\t var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n\t\n\t var currentValue = '' + node[valueField];\n\t\n\t // if someone has already defined a value or Safari, then bail\n\t // and don't track value will cause over reporting of changes,\n\t // but it's better then a hard failure\n\t // (needed for certain tests that spyOn input values and Safari)\n\t if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n\t return;\n\t }\n\t\n\t Object.defineProperty(node, valueField, {\n\t enumerable: descriptor.enumerable,\n\t configurable: true,\n\t get: function () {\n\t return descriptor.get.call(this);\n\t },\n\t set: function (value) {\n\t currentValue = '' + value;\n\t descriptor.set.call(this, value);\n\t }\n\t });\n\t\n\t attachTracker(inst, {\n\t getValue: function () {\n\t return currentValue;\n\t },\n\t setValue: function (value) {\n\t currentValue = '' + value;\n\t },\n\t stopTracking: function () {\n\t detachTracker(inst);\n\t delete node[valueField];\n\t }\n\t });\n\t },\n\t\n\t updateValueIfChanged: function (inst) {\n\t if (!inst) {\n\t return false;\n\t }\n\t var tracker = getTracker(inst);\n\t\n\t if (!tracker) {\n\t inputValueTracking.track(inst);\n\t return true;\n\t }\n\t\n\t var lastValue = tracker.getValue();\n\t var nextValue = getValueFromNode(ReactDOMComponentTree.getNodeFromInstance(inst));\n\t\n\t if (nextValue !== lastValue) {\n\t tracker.setValue(nextValue);\n\t return true;\n\t }\n\t\n\t return false;\n\t },\n\t stopTracking: function (inst) {\n\t var tracker = getTracker(inst);\n\t if (tracker) {\n\t tracker.stopTracking();\n\t }\n\t }\n\t};\n\t\n\tmodule.exports = inputValueTracking;\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar _prodInvariant = __webpack_require__(2),\n\t _assign = __webpack_require__(4);\n\t\n\tvar ReactCompositeComponent = __webpack_require__(111);\n\tvar ReactEmptyComponent = __webpack_require__(57);\n\tvar ReactHostComponent = __webpack_require__(59);\n\t\n\tvar getNextDebugID = __webpack_require__(172);\n\tvar invariant = __webpack_require__(1);\n\tvar warning = __webpack_require__(3);\n\t\n\t// To avoid a cyclic dependency, we create the final class in this module\n\tvar ReactCompositeComponentWrapper = function (element) {\n\t this.construct(element);\n\t};\n\t\n\tfunction getDeclarationErrorAddendum(owner) {\n\t if (owner) {\n\t var name = owner.getName();\n\t if (name) {\n\t return ' Check the render method of `' + name + '`.';\n\t }\n\t }\n\t return '';\n\t}\n\t\n\t/**\n\t * Check if the type reference is a known internal type. I.e. not a user\n\t * provided composite type.\n\t *\n\t * @param {function} type\n\t * @return {boolean} Returns true if this is a valid internal type.\n\t */\n\tfunction isInternalComponentType(type) {\n\t return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\n\t}\n\t\n\t/**\n\t * Given a ReactNode, create an instance that will actually be mounted.\n\t *\n\t * @param {ReactNode} node\n\t * @param {boolean} shouldHaveDebugID\n\t * @return {object} A new instance of the element's constructor.\n\t * @protected\n\t */\n\tfunction instantiateReactComponent(node, shouldHaveDebugID) {\n\t var instance;\n\t\n\t if (node === null || node === false) {\n\t instance = ReactEmptyComponent.create(instantiateReactComponent);\n\t } else if (typeof node === 'object') {\n\t var element = node;\n\t var type = element.type;\n\t if (typeof type !== 'function' && typeof type !== 'string') {\n\t var info = '';\n\t if (false) {\n\t if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n\t info += ' You likely forgot to export your component from the file ' + \"it's defined in.\";\n\t }\n\t }\n\t info += getDeclarationErrorAddendum(element._owner);\n\t true ? false ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', type == null ? type : typeof type, info) : _prodInvariant('130', type == null ? type : typeof type, info) : void 0;\n\t }\n\t\n\t // Special case string values\n\t if (typeof element.type === 'string') {\n\t instance = ReactHostComponent.createInternalComponent(element);\n\t } else if (isInternalComponentType(element.type)) {\n\t // This is temporarily available for custom components that are not string\n\t // representations. I.e. ART. Once those are updated to use the string\n\t // representation, we can drop this code path.\n\t instance = new element.type(element);\n\t\n\t // We renamed this. Allow the old name for compat. :(\n\t if (!instance.getHostNode) {\n\t instance.getHostNode = instance.getNativeNode;\n\t }\n\t } else {\n\t instance = new ReactCompositeComponentWrapper(element);\n\t }\n\t } else if (typeof node === 'string' || typeof node === 'number') {\n\t instance = ReactHostComponent.createInstanceForText(node);\n\t } else {\n\t true ? false ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : _prodInvariant('131', typeof node) : void 0;\n\t }\n\t\n\t if (false) {\n\t process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getHostNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;\n\t }\n\t\n\t // These two fields are used by the DOM and ART diffing algorithms\n\t // respectively. Instead of using expandos on components, we should be\n\t // storing the state needed by the diffing algorithms elsewhere.\n\t instance._mountIndex = 0;\n\t instance._mountImage = null;\n\t\n\t if (false) {\n\t instance._debugID = shouldHaveDebugID ? getNextDebugID() : 0;\n\t }\n\t\n\t // Internal instances should fully constructed at this point, so they should\n\t // not get any new fields added to them at this point.\n\t if (false) {\n\t if (Object.preventExtensions) {\n\t Object.preventExtensions(instance);\n\t }\n\t }\n\t\n\t return instance;\n\t}\n\t\n\t_assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent, {\n\t _instantiateReactComponent: instantiateReactComponent\n\t});\n\t\n\tmodule.exports = instantiateReactComponent;\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n\t */\n\t\n\tvar supportedInputTypes = {\n\t color: true,\n\t date: true,\n\t datetime: true,\n\t 'datetime-local': true,\n\t email: true,\n\t month: true,\n\t number: true,\n\t password: true,\n\t range: true,\n\t search: true,\n\t tel: true,\n\t text: true,\n\t time: true,\n\t url: true,\n\t week: true\n\t};\n\t\n\tfunction isTextInputElement(elem) {\n\t var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\t\n\t if (nodeName === 'input') {\n\t return !!supportedInputTypes[elem.type];\n\t }\n\t\n\t if (nodeName === 'textarea') {\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tmodule.exports = isTextInputElement;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar ExecutionEnvironment = __webpack_require__(6);\n\tvar escapeTextContentForBrowser = __webpack_require__(28);\n\tvar setInnerHTML = __webpack_require__(29);\n\t\n\t/**\n\t * Set the textContent property of a node, ensuring that whitespace is preserved\n\t * even in IE8. innerText is a poor substitute for textContent and, among many\n\t * issues, inserts
instead of the literal newline chars. innerHTML behaves\n\t * as it should.\n\t *\n\t * @param {DOMElement} node\n\t * @param {string} text\n\t * @internal\n\t */\n\tvar setTextContent = function (node, text) {\n\t if (text) {\n\t var firstChild = node.firstChild;\n\t\n\t if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {\n\t firstChild.nodeValue = text;\n\t return;\n\t }\n\t }\n\t node.textContent = text;\n\t};\n\t\n\tif (ExecutionEnvironment.canUseDOM) {\n\t if (!('textContent' in document.documentElement)) {\n\t setTextContent = function (node, text) {\n\t if (node.nodeType === 3) {\n\t node.nodeValue = text;\n\t return;\n\t }\n\t setInnerHTML(node, escapeTextContentForBrowser(text));\n\t };\n\t }\n\t}\n\t\n\tmodule.exports = setTextContent;\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar _prodInvariant = __webpack_require__(2);\n\t\n\tvar ReactCurrentOwner = __webpack_require__(11);\n\tvar REACT_ELEMENT_TYPE = __webpack_require__(126);\n\t\n\tvar getIteratorFn = __webpack_require__(157);\n\tvar invariant = __webpack_require__(1);\n\tvar KeyEscapeUtils = __webpack_require__(35);\n\tvar warning = __webpack_require__(3);\n\t\n\tvar SEPARATOR = '.';\n\tvar SUBSEPARATOR = ':';\n\t\n\t/**\n\t * This is inlined from ReactElement since this file is shared between\n\t * isomorphic and renderers. We could extract this to a\n\t *\n\t */\n\t\n\t/**\n\t * TODO: Test that a single child and an array with one item have the same key\n\t * pattern.\n\t */\n\t\n\tvar didWarnAboutMaps = false;\n\t\n\t/**\n\t * Generate a key string that identifies a component within a set.\n\t *\n\t * @param {*} component A component that could contain a manual key.\n\t * @param {number} index Index that is used if a manual key is not provided.\n\t * @return {string}\n\t */\n\tfunction getComponentKey(component, index) {\n\t // Do some typechecking here since we call this blindly. We want to ensure\n\t // that we don't block potential future ES APIs.\n\t if (component && typeof component === 'object' && component.key != null) {\n\t // Explicit key\n\t return KeyEscapeUtils.escape(component.key);\n\t }\n\t // Implicit key determined by the index in the set\n\t return index.toString(36);\n\t}\n\t\n\t/**\n\t * @param {?*} children Children tree container.\n\t * @param {!string} nameSoFar Name of the key path so far.\n\t * @param {!function} callback Callback to invoke with each child found.\n\t * @param {?*} traverseContext Used to pass information throughout the traversal\n\t * process.\n\t * @return {!number} The number of children in this subtree.\n\t */\n\tfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n\t var type = typeof children;\n\t\n\t if (type === 'undefined' || type === 'boolean') {\n\t // All of the above are perceived as null.\n\t children = null;\n\t }\n\t\n\t if (children === null || type === 'string' || type === 'number' ||\n\t // The following is inlined from ReactElement. This means we can optimize\n\t // some checks. React Fiber also inlines this logic for similar purposes.\n\t type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE) {\n\t callback(traverseContext, children,\n\t // If it's the only child, treat the name as if it was wrapped in an array\n\t // so that it's consistent if the number of children grows.\n\t nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n\t return 1;\n\t }\n\t\n\t var child;\n\t var nextName;\n\t var subtreeCount = 0; // Count of children found in the current subtree.\n\t var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\t\n\t if (Array.isArray(children)) {\n\t for (var i = 0; i < children.length; i++) {\n\t child = children[i];\n\t nextName = nextNamePrefix + getComponentKey(child, i);\n\t subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n\t }\n\t } else {\n\t var iteratorFn = getIteratorFn(children);\n\t if (iteratorFn) {\n\t var iterator = iteratorFn.call(children);\n\t var step;\n\t if (iteratorFn !== children.entries) {\n\t var ii = 0;\n\t while (!(step = iterator.next()).done) {\n\t child = step.value;\n\t nextName = nextNamePrefix + getComponentKey(child, ii++);\n\t subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n\t }\n\t } else {\n\t if (false) {\n\t var mapsAsChildrenAddendum = '';\n\t if (ReactCurrentOwner.current) {\n\t var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\n\t if (mapsAsChildrenOwnerName) {\n\t mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\n\t }\n\t }\n\t process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\n\t didWarnAboutMaps = true;\n\t }\n\t // Iterator will provide entry [k,v] tuples rather than values.\n\t while (!(step = iterator.next()).done) {\n\t var entry = step.value;\n\t if (entry) {\n\t child = entry[1];\n\t nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n\t subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n\t }\n\t }\n\t }\n\t } else if (type === 'object') {\n\t var addendum = '';\n\t if (false) {\n\t addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n\t if (children._isReactElement) {\n\t addendum = \" It looks like you're using an element created by a different \" + 'version of React. Make sure to use only one copy of React.';\n\t }\n\t if (ReactCurrentOwner.current) {\n\t var name = ReactCurrentOwner.current.getName();\n\t if (name) {\n\t addendum += ' Check the render method of `' + name + '`.';\n\t }\n\t }\n\t }\n\t var childrenString = String(children);\n\t true ? false ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\n\t }\n\t }\n\t\n\t return subtreeCount;\n\t}\n\t\n\t/**\n\t * Traverses children that are typically specified as `props.children`, but\n\t * might also be specified through attributes:\n\t *\n\t * - `traverseAllChildren(this.props.children, ...)`\n\t * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n\t *\n\t * The `traverseContext` is an optional argument that is passed through the\n\t * entire traversal. It can be used to store accumulations or anything else that\n\t * the callback might find relevant.\n\t *\n\t * @param {?*} children Children tree object.\n\t * @param {!function} callback To invoke upon traversing each child.\n\t * @param {?*} traverseContext Context for traversal.\n\t * @return {!number} The number of children in this subtree.\n\t */\n\tfunction traverseAllChildren(children, callback, traverseContext) {\n\t if (children == null) {\n\t return 0;\n\t }\n\t\n\t return traverseAllChildrenImpl(children, '', callback, traverseContext);\n\t}\n\t\n\tmodule.exports = traverseAllChildren;\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar _prodInvariant = __webpack_require__(22),\n\t _assign = __webpack_require__(4);\n\t\n\tvar ReactNoopUpdateQueue = __webpack_require__(76);\n\t\n\tvar canDefineProperty = __webpack_require__(77);\n\tvar emptyObject = __webpack_require__(24);\n\tvar invariant = __webpack_require__(1);\n\tvar lowPriorityWarning = __webpack_require__(173);\n\t\n\t/**\n\t * Base class helpers for the updating state of a component.\n\t */\n\tfunction ReactComponent(props, context, updater) {\n\t this.props = props;\n\t this.context = context;\n\t this.refs = emptyObject;\n\t // We initialize the default updater but the real one gets injected by the\n\t // renderer.\n\t this.updater = updater || ReactNoopUpdateQueue;\n\t}\n\t\n\tReactComponent.prototype.isReactComponent = {};\n\t\n\t/**\n\t * Sets a subset of the state. Always use this to mutate\n\t * state. You should treat `this.state` as immutable.\n\t *\n\t * There is no guarantee that `this.state` will be immediately updated, so\n\t * accessing `this.state` after calling this method may return the old value.\n\t *\n\t * There is no guarantee that calls to `setState` will run synchronously,\n\t * as they may eventually be batched together. You can provide an optional\n\t * callback that will be executed when the call to setState is actually\n\t * completed.\n\t *\n\t * When a function is provided to setState, it will be called at some point in\n\t * the future (not synchronously). It will be called with the up to date\n\t * component arguments (state, props, context). These values can be different\n\t * from this.* because your function may be called after receiveProps but before\n\t * shouldComponentUpdate, and this new state, props, and context will not yet be\n\t * assigned to this.\n\t *\n\t * @param {object|function} partialState Next partial state or function to\n\t * produce next partial state to be merged with current state.\n\t * @param {?function} callback Called after state is updated.\n\t * @final\n\t * @protected\n\t */\n\tReactComponent.prototype.setState = function (partialState, callback) {\n\t !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? false ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;\n\t this.updater.enqueueSetState(this, partialState);\n\t if (callback) {\n\t this.updater.enqueueCallback(this, callback, 'setState');\n\t }\n\t};\n\t\n\t/**\n\t * Forces an update. This should only be invoked when it is known with\n\t * certainty that we are **not** in a DOM transaction.\n\t *\n\t * You may want to call this when you know that some deeper aspect of the\n\t * component's state has changed but `setState` was not called.\n\t *\n\t * This will not invoke `shouldComponentUpdate`, but it will invoke\n\t * `componentWillUpdate` and `componentDidUpdate`.\n\t *\n\t * @param {?function} callback Called after update is complete.\n\t * @final\n\t * @protected\n\t */\n\tReactComponent.prototype.forceUpdate = function (callback) {\n\t this.updater.enqueueForceUpdate(this);\n\t if (callback) {\n\t this.updater.enqueueCallback(this, callback, 'forceUpdate');\n\t }\n\t};\n\t\n\t/**\n\t * Deprecated APIs. These APIs used to exist on classic React classes but since\n\t * we would like to deprecate them, we're not going to move them over to this\n\t * modern base class. Instead, we define a getter that warns if it's accessed.\n\t */\n\tif (false) {\n\t var deprecatedAPIs = {\n\t isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n\t replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n\t };\n\t var defineDeprecationWarning = function (methodName, info) {\n\t if (canDefineProperty) {\n\t Object.defineProperty(ReactComponent.prototype, methodName, {\n\t get: function () {\n\t lowPriorityWarning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n\t return undefined;\n\t }\n\t });\n\t }\n\t };\n\t for (var fnName in deprecatedAPIs) {\n\t if (deprecatedAPIs.hasOwnProperty(fnName)) {\n\t defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Base class helpers for the updating state of a component.\n\t */\n\tfunction ReactPureComponent(props, context, updater) {\n\t // Duplicated from ReactComponent.\n\t this.props = props;\n\t this.context = context;\n\t this.refs = emptyObject;\n\t // We initialize the default updater but the real one gets injected by the\n\t // renderer.\n\t this.updater = updater || ReactNoopUpdateQueue;\n\t}\n\t\n\tfunction ComponentDummy() {}\n\tComponentDummy.prototype = ReactComponent.prototype;\n\tReactPureComponent.prototype = new ComponentDummy();\n\tReactPureComponent.prototype.constructor = ReactPureComponent;\n\t// Avoid an extra prototype jump for these methods.\n\t_assign(ReactPureComponent.prototype, ReactComponent.prototype);\n\tReactPureComponent.prototype.isPureReactComponent = true;\n\t\n\tmodule.exports = {\n\t Component: ReactComponent,\n\t PureComponent: ReactPureComponent\n\t};\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2016-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t\n\t'use strict';\n\t\n\tvar _prodInvariant = __webpack_require__(22);\n\t\n\tvar ReactCurrentOwner = __webpack_require__(11);\n\t\n\tvar invariant = __webpack_require__(1);\n\tvar warning = __webpack_require__(3);\n\t\n\tfunction isNative(fn) {\n\t // Based on isNative() from Lodash\n\t var funcToString = Function.prototype.toString;\n\t var hasOwnProperty = Object.prototype.hasOwnProperty;\n\t var reIsNative = RegExp('^' + funcToString\n\t // Take an example native function source for comparison\n\t .call(hasOwnProperty\n\t // Strip regex characters so we can use it for regex\n\t ).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&'\n\t // Remove hasOwnProperty from the template to make it generic\n\t ).replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n\t try {\n\t var source = funcToString.call(fn);\n\t return reIsNative.test(source);\n\t } catch (err) {\n\t return false;\n\t }\n\t}\n\t\n\tvar canUseCollections =\n\t// Array.from\n\ttypeof Array.from === 'function' &&\n\t// Map\n\ttypeof Map === 'function' && isNative(Map) &&\n\t// Map.prototype.keys\n\tMap.prototype != null && typeof Map.prototype.keys === 'function' && isNative(Map.prototype.keys) &&\n\t// Set\n\ttypeof Set === 'function' && isNative(Set) &&\n\t// Set.prototype.keys\n\tSet.prototype != null && typeof Set.prototype.keys === 'function' && isNative(Set.prototype.keys);\n\t\n\tvar setItem;\n\tvar getItem;\n\tvar removeItem;\n\tvar getItemIDs;\n\tvar addRoot;\n\tvar removeRoot;\n\tvar getRootIDs;\n\t\n\tif (canUseCollections) {\n\t var itemMap = new Map();\n\t var rootIDSet = new Set();\n\t\n\t setItem = function (id, item) {\n\t itemMap.set(id, item);\n\t };\n\t getItem = function (id) {\n\t return itemMap.get(id);\n\t };\n\t removeItem = function (id) {\n\t itemMap['delete'](id);\n\t };\n\t getItemIDs = function () {\n\t return Array.from(itemMap.keys());\n\t };\n\t\n\t addRoot = function (id) {\n\t rootIDSet.add(id);\n\t };\n\t removeRoot = function (id) {\n\t rootIDSet['delete'](id);\n\t };\n\t getRootIDs = function () {\n\t return Array.from(rootIDSet.keys());\n\t };\n\t} else {\n\t var itemByKey = {};\n\t var rootByKey = {};\n\t\n\t // Use non-numeric keys to prevent V8 performance issues:\n\t // https://github.com/facebook/react/pull/7232\n\t var getKeyFromID = function (id) {\n\t return '.' + id;\n\t };\n\t var getIDFromKey = function (key) {\n\t return parseInt(key.substr(1), 10);\n\t };\n\t\n\t setItem = function (id, item) {\n\t var key = getKeyFromID(id);\n\t itemByKey[key] = item;\n\t };\n\t getItem = function (id) {\n\t var key = getKeyFromID(id);\n\t return itemByKey[key];\n\t };\n\t removeItem = function (id) {\n\t var key = getKeyFromID(id);\n\t delete itemByKey[key];\n\t };\n\t getItemIDs = function () {\n\t return Object.keys(itemByKey).map(getIDFromKey);\n\t };\n\t\n\t addRoot = function (id) {\n\t var key = getKeyFromID(id);\n\t rootByKey[key] = true;\n\t };\n\t removeRoot = function (id) {\n\t var key = getKeyFromID(id);\n\t delete rootByKey[key];\n\t };\n\t getRootIDs = function () {\n\t return Object.keys(rootByKey).map(getIDFromKey);\n\t };\n\t}\n\t\n\tvar unmountedIDs = [];\n\t\n\tfunction purgeDeep(id) {\n\t var item = getItem(id);\n\t if (item) {\n\t var childIDs = item.childIDs;\n\t\n\t removeItem(id);\n\t childIDs.forEach(purgeDeep);\n\t }\n\t}\n\t\n\tfunction describeComponentFrame(name, source, ownerName) {\n\t return '\\n in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');\n\t}\n\t\n\tfunction getDisplayName(element) {\n\t if (element == null) {\n\t return '#empty';\n\t } else if (typeof element === 'string' || typeof element === 'number') {\n\t return '#text';\n\t } else if (typeof element.type === 'string') {\n\t return element.type;\n\t } else {\n\t return element.type.displayName || element.type.name || 'Unknown';\n\t }\n\t}\n\t\n\tfunction describeID(id) {\n\t var name = ReactComponentTreeHook.getDisplayName(id);\n\t var element = ReactComponentTreeHook.getElement(id);\n\t var ownerID = ReactComponentTreeHook.getOwnerID(id);\n\t var ownerName;\n\t if (ownerID) {\n\t ownerName = ReactComponentTreeHook.getDisplayName(ownerID);\n\t }\n\t false ? warning(element, 'ReactComponentTreeHook: Missing React element for debugID %s when ' + 'building stack', id) : void 0;\n\t return describeComponentFrame(name, element && element._source, ownerName);\n\t}\n\t\n\tvar ReactComponentTreeHook = {\n\t onSetChildren: function (id, nextChildIDs) {\n\t var item = getItem(id);\n\t !item ? false ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\n\t item.childIDs = nextChildIDs;\n\t\n\t for (var i = 0; i < nextChildIDs.length; i++) {\n\t var nextChildID = nextChildIDs[i];\n\t var nextChild = getItem(nextChildID);\n\t !nextChild ? false ? invariant(false, 'Expected hook events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('140') : void 0;\n\t !(nextChild.childIDs != null || typeof nextChild.element !== 'object' || nextChild.element == null) ? false ? invariant(false, 'Expected onSetChildren() to fire for a container child before its parent includes it in onSetChildren().') : _prodInvariant('141') : void 0;\n\t !nextChild.isMounted ? false ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;\n\t if (nextChild.parentID == null) {\n\t nextChild.parentID = id;\n\t // TODO: This shouldn't be necessary but mounting a new root during in\n\t // componentWillMount currently causes not-yet-mounted components to\n\t // be purged from our tree data so their parent id is missing.\n\t }\n\t !(nextChild.parentID === id) ? false ? invariant(false, 'Expected onBeforeMountComponent() parent and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('142', nextChildID, nextChild.parentID, id) : void 0;\n\t }\n\t },\n\t onBeforeMountComponent: function (id, element, parentID) {\n\t var item = {\n\t element: element,\n\t parentID: parentID,\n\t text: null,\n\t childIDs: [],\n\t isMounted: false,\n\t updateCount: 0\n\t };\n\t setItem(id, item);\n\t },\n\t onBeforeUpdateComponent: function (id, element) {\n\t var item = getItem(id);\n\t if (!item || !item.isMounted) {\n\t // We may end up here as a result of setState() in componentWillUnmount().\n\t // In this case, ignore the element.\n\t return;\n\t }\n\t item.element = element;\n\t },\n\t onMountComponent: function (id) {\n\t var item = getItem(id);\n\t !item ? false ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\n\t item.isMounted = true;\n\t var isRoot = item.parentID === 0;\n\t if (isRoot) {\n\t addRoot(id);\n\t }\n\t },\n\t onUpdateComponent: function (id) {\n\t var item = getItem(id);\n\t if (!item || !item.isMounted) {\n\t // We may end up here as a result of setState() in componentWillUnmount().\n\t // In this case, ignore the element.\n\t return;\n\t }\n\t item.updateCount++;\n\t },\n\t onUnmountComponent: function (id) {\n\t var item = getItem(id);\n\t if (item) {\n\t // We need to check if it exists.\n\t // `item` might not exist if it is inside an error boundary, and a sibling\n\t // error boundary child threw while mounting. Then this instance never\n\t // got a chance to mount, but it still gets an unmounting event during\n\t // the error boundary cleanup.\n\t item.isMounted = false;\n\t var isRoot = item.parentID === 0;\n\t if (isRoot) {\n\t removeRoot(id);\n\t }\n\t }\n\t unmountedIDs.push(id);\n\t },\n\t purgeUnmountedComponents: function () {\n\t if (ReactComponentTreeHook._preventPurging) {\n\t // Should only be used for testing.\n\t return;\n\t }\n\t\n\t for (var i = 0; i < unmountedIDs.length; i++) {\n\t var id = unmountedIDs[i];\n\t purgeDeep(id);\n\t }\n\t unmountedIDs.length = 0;\n\t },\n\t isMounted: function (id) {\n\t var item = getItem(id);\n\t return item ? item.isMounted : false;\n\t },\n\t getCurrentStackAddendum: function (topElement) {\n\t var info = '';\n\t if (topElement) {\n\t var name = getDisplayName(topElement);\n\t var owner = topElement._owner;\n\t info += describeComponentFrame(name, topElement._source, owner && owner.getName());\n\t }\n\t\n\t var currentOwner = ReactCurrentOwner.current;\n\t var id = currentOwner && currentOwner._debugID;\n\t\n\t info += ReactComponentTreeHook.getStackAddendumByID(id);\n\t return info;\n\t },\n\t getStackAddendumByID: function (id) {\n\t var info = '';\n\t while (id) {\n\t info += describeID(id);\n\t id = ReactComponentTreeHook.getParentID(id);\n\t }\n\t return info;\n\t },\n\t getChildIDs: function (id) {\n\t var item = getItem(id);\n\t return item ? item.childIDs : [];\n\t },\n\t getDisplayName: function (id) {\n\t var element = ReactComponentTreeHook.getElement(id);\n\t if (!element) {\n\t return null;\n\t }\n\t return getDisplayName(element);\n\t },\n\t getElement: function (id) {\n\t var item = getItem(id);\n\t return item ? item.element : null;\n\t },\n\t getOwnerID: function (id) {\n\t var element = ReactComponentTreeHook.getElement(id);\n\t if (!element || !element._owner) {\n\t return null;\n\t }\n\t return element._owner._debugID;\n\t },\n\t getParentID: function (id) {\n\t var item = getItem(id);\n\t return item ? item.parentID : null;\n\t },\n\t getSource: function (id) {\n\t var item = getItem(id);\n\t var element = item ? item.element : null;\n\t var source = element != null ? element._source : null;\n\t return source;\n\t },\n\t getText: function (id) {\n\t var element = ReactComponentTreeHook.getElement(id);\n\t if (typeof element === 'string') {\n\t return element;\n\t } else if (typeof element === 'number') {\n\t return '' + element;\n\t } else {\n\t return null;\n\t }\n\t },\n\t getUpdateCount: function (id) {\n\t var item = getItem(id);\n\t return item ? item.updateCount : 0;\n\t },\n\t\n\t\n\t getRootIDs: getRootIDs,\n\t getRegisteredIDs: getItemIDs,\n\t\n\t pushNonStandardWarningStack: function (isCreatingElement, currentSource) {\n\t if (typeof console.reactStack !== 'function') {\n\t return;\n\t }\n\t\n\t var stack = [];\n\t var currentOwner = ReactCurrentOwner.current;\n\t var id = currentOwner && currentOwner._debugID;\n\t\n\t try {\n\t if (isCreatingElement) {\n\t stack.push({\n\t name: id ? ReactComponentTreeHook.getDisplayName(id) : null,\n\t fileName: currentSource ? currentSource.fileName : null,\n\t lineNumber: currentSource ? currentSource.lineNumber : null\n\t });\n\t }\n\t\n\t while (id) {\n\t var element = ReactComponentTreeHook.getElement(id);\n\t var parentID = ReactComponentTreeHook.getParentID(id);\n\t var ownerID = ReactComponentTreeHook.getOwnerID(id);\n\t var ownerName = ownerID ? ReactComponentTreeHook.getDisplayName(ownerID) : null;\n\t var source = element && element._source;\n\t stack.push({\n\t name: ownerName,\n\t fileName: source ? source.fileName : null,\n\t lineNumber: source ? source.lineNumber : null\n\t });\n\t id = parentID;\n\t }\n\t } catch (err) {\n\t // Internal state is messed up.\n\t // Stop building the stack (it's just a nice to have).\n\t }\n\t\n\t console.reactStack(stack);\n\t },\n\t popNonStandardWarningStack: function () {\n\t if (typeof console.reactStackEnd !== 'function') {\n\t return;\n\t }\n\t console.reactStackEnd();\n\t }\n\t};\n\t\n\tmodule.exports = ReactComponentTreeHook;\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2014-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t\n\t'use strict';\n\t\n\t// The Symbol used to tag the ReactElement type. If there is no native Symbol\n\t// nor polyfill, then a plain number is used for performance.\n\t\n\tvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\t\n\tmodule.exports = REACT_ELEMENT_TYPE;\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar warning = __webpack_require__(3);\n\t\n\tfunction warnNoop(publicInstance, callerName) {\n\t if (false) {\n\t var constructor = publicInstance.constructor;\n\t process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\n\t }\n\t}\n\t\n\t/**\n\t * This is the abstract API for an update queue.\n\t */\n\tvar ReactNoopUpdateQueue = {\n\t /**\n\t * Checks whether or not this composite component is mounted.\n\t * @param {ReactClass} publicInstance The instance we want to test.\n\t * @return {boolean} True if mounted, false otherwise.\n\t * @protected\n\t * @final\n\t */\n\t isMounted: function (publicInstance) {\n\t return false;\n\t },\n\t\n\t /**\n\t * Enqueue a callback that will be executed after all the pending updates\n\t * have processed.\n\t *\n\t * @param {ReactClass} publicInstance The instance to use as `this` context.\n\t * @param {?function} callback Called after state is updated.\n\t * @internal\n\t */\n\t enqueueCallback: function (publicInstance, callback) {},\n\t\n\t /**\n\t * Forces an update. This should only be invoked when it is known with\n\t * certainty that we are **not** in a DOM transaction.\n\t *\n\t * You may want to call this when you know that some deeper aspect of the\n\t * component's state has changed but `setState` was not called.\n\t *\n\t * This will not invoke `shouldComponentUpdate`, but it will invoke\n\t * `componentWillUpdate` and `componentDidUpdate`.\n\t *\n\t * @param {ReactClass} publicInstance The instance that should rerender.\n\t * @internal\n\t */\n\t enqueueForceUpdate: function (publicInstance) {\n\t warnNoop(publicInstance, 'forceUpdate');\n\t },\n\t\n\t /**\n\t * Replaces all of the state. Always use this or `setState` to mutate state.\n\t * You should treat `this.state` as immutable.\n\t *\n\t * There is no guarantee that `this.state` will be immediately updated, so\n\t * accessing `this.state` after calling this method may return the old value.\n\t *\n\t * @param {ReactClass} publicInstance The instance that should rerender.\n\t * @param {object} completeState Next state.\n\t * @internal\n\t */\n\t enqueueReplaceState: function (publicInstance, completeState) {\n\t warnNoop(publicInstance, 'replaceState');\n\t },\n\t\n\t /**\n\t * Sets a subset of the state. This only exists because _pendingState is\n\t * internal. This provides a merging strategy that is not available to deep\n\t * properties which is confusing. TODO: Expose pendingState or don't use it\n\t * during the merge.\n\t *\n\t * @param {ReactClass} publicInstance The instance that should rerender.\n\t * @param {object} partialState Next partial state to be merged with state.\n\t * @internal\n\t */\n\t enqueueSetState: function (publicInstance, partialState) {\n\t warnNoop(publicInstance, 'setState');\n\t }\n\t};\n\t\n\tmodule.exports = ReactNoopUpdateQueue;\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t\n\t'use strict';\n\t\n\tvar canDefineProperty = false;\n\tif (false) {\n\t try {\n\t // $FlowFixMe https://github.com/facebook/flow/issues/285\n\t Object.defineProperty({}, 'x', { get: function () {} });\n\t canDefineProperty = true;\n\t } catch (x) {\n\t // IE will fail on defineProperty\n\t }\n\t}\n\t\n\tmodule.exports = canDefineProperty;\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _react = __webpack_require__(23);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = _react2.default.createClass({\n\t displayName: \"Footer\",\n\t render: function render() {\n\t return _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_Footer\" },\n\t \"Copyright 2016 - 2019 \",\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: \"https://matrix.org\" },\n\t \"Matrix.org\"\n\t )\n\t );\n\t }\n\t}); /*\n\t Copyright 2016 OpenMarket Ltd\n\t \n\t Licensed under the Apache License, Version 2.0 (the \"License\");\n\t you may not use this file except in compliance with the License.\n\t You may obtain a copy of the License at\n\t \n\t http://www.apache.org/licenses/LICENSE-2.0\n\t \n\t Unless required by applicable law or agreed to in writing, software\n\t distributed under the License is distributed on an \"AS IS\" BASIS,\n\t WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t See the License for the specific language governing permissions and\n\t limitations under the License.\n\t */\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _react = __webpack_require__(23);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = _react2.default.createClass({\n\t displayName: \"Header\",\n\t render: function render() {\n\t return _react2.default.createElement(\"div\", { className: \"mxt_Header\" });\n\t }\n\t}); /*\n\t Copyright 2016 OpenMarket Ltd\n\t \n\t Licensed under the Apache License, Version 2.0 (the \"License\");\n\t you may not use this file except in compliance with the License.\n\t You may obtain a copy of the License at\n\t \n\t http://www.apache.org/licenses/LICENSE-2.0\n\t \n\t Unless required by applicable law or agreed to in writing, software\n\t distributed under the License is distributed on an \"AS IS\" BASIS,\n\t WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t See the License for the specific language governing permissions and\n\t limitations under the License.\n\t */\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _react = __webpack_require__(23);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar linkable_clients = [{\n\t name: \"Element\",\n\t logo: {\n\t width: \"48px\",\n\t src: \"img/element.svg\"\n\t },\n\t author: \"Element\",\n\t homepage: \"https://element.io\",\n\t room_url: function room_url(alias) {\n\t return \"https://app.element.io/#/room/\" + alias;\n\t },\n\t room_id_url: function room_id_url(id) {\n\t return \"https://app.element.io/#/room/\" + id;\n\t },\n\t user_url: function user_url(userId) {\n\t return \"https://app.element.io/#/user/\" + userId;\n\t },\n\t msg_url: function msg_url(msg) {\n\t return \"https://app.element.io/#/room/\" + msg;\n\t },\n\t group_url: function group_url(group) {\n\t return \"https://app.element.io/#/group/\" + group;\n\t },\n\t\n\t maturity: \"Stable\",\n\t comments: \"Fully-featured Matrix client for Web, iOS & Android\"\n\t}, {\n\t name: \"Matrix-Static\",\n\t logo: \"img/matrix-static-48px.png\",\n\t author: \"Michael Telatynski\",\n\t homepage: \"https://github.com/t3chguy/matrix-static\",\n\t room_url: function room_url(alias) {\n\t return \"https://view.matrix.org/alias/\" + alias.replace(/#/g, '%23');\n\t },\n\t room_id_url: function room_id_url(id) {\n\t return \"https://view.matrix.org/room/\" + id;\n\t },\n\t\n\t maturity: \"Stable\",\n\t comments: \"A static golang generated preview of public world readable Matrix rooms.\"\n\t}]; /*\n\t Copyright 2016 OpenMarket Ltd\n\t \n\t Licensed under the Apache License, Version 2.0 (the \"License\");\n\t you may not use this file except in compliance with the License.\n\t You may obtain a copy of the License at\n\t \n\t http://www.apache.org/licenses/LICENSE-2.0\n\t \n\t Unless required by applicable law or agreed to in writing, software\n\t distributed under the License is distributed on an \"AS IS\" BASIS,\n\t WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t See the License for the specific language governing permissions and\n\t limitations under the License.\n\t */\n\t\n\tvar unlinkable_clients = [{\n\t name: \"Weechat\",\n\t logo: \"img/weechat-48px.png\",\n\t author: \"Poljar\",\n\t homepage: \"https://github.com/poljar/weechat-matrix\",\n\t maturity: \"Late beta\",\n\t room_instructions: function room_instructions(alias) {\n\t return _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"Type \",\n\t _react2.default.createElement(\n\t \"code\",\n\t null,\n\t \"/join \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t alias\n\t )\n\t )\n\t );\n\t },\n\t user_instructions: function user_instructions(userId) {\n\t return _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"Type \",\n\t _react2.default.createElement(\n\t \"code\",\n\t null,\n\t \"/invite \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t userId\n\t )\n\t )\n\t );\n\t },\n\t\n\t comments: \"Commandline Matrix interface using Weechat\"\n\t}, {\n\t name: \"Quaternion\",\n\t logo: \"img/quaternion-48px.png\",\n\t author: \"Felix Rohrbach\",\n\t homepage: \"https://github.com/Fxrh/Quaternion\",\n\t maturity: \"Late alpha\",\n\t room_instructions: function room_instructions(alias) {\n\t return _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"Type \",\n\t _react2.default.createElement(\n\t \"code\",\n\t null,\n\t \"/join \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t alias\n\t )\n\t )\n\t );\n\t },\n\t user_instructions: function user_instructions(userId) {\n\t return _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"Type \",\n\t _react2.default.createElement(\n\t \"code\",\n\t null,\n\t \"/invite \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t userId\n\t )\n\t )\n\t );\n\t },\n\t\n\t comments: \"Qt5 and C++ cross-platform desktop Matrix client\"\n\t}, {\n\t name: \"Tensor\",\n\t logo: \"img/tensor-48px.png\",\n\t author: \"David A Roberts\",\n\t homepage: \"https://github.com/davidar/tensor\",\n\t maturity: \"Late alpha\",\n\t room_instructions: function room_instructions(alias) {\n\t return _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"Type \",\n\t _react2.default.createElement(\n\t \"code\",\n\t null,\n\t \"/join \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t alias\n\t )\n\t )\n\t );\n\t },\n\t user_instructions: function user_instructions(userId) {\n\t return _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"Type \",\n\t _react2.default.createElement(\n\t \"code\",\n\t null,\n\t \"/invite \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t userId\n\t )\n\t )\n\t );\n\t },\n\t\n\t comments: \"QML and JS cross-platform desktop Matrix client\"\n\t}, {\n\t name: \"Nheko\",\n\t logo: \"img/nheko.png\",\n\t author: \"Konstantinos Sideris\",\n\t homepage: \"https://github.com/Nheko-Reborn/nheko\",\n\t maturity: \"Beta\",\n\t room_instructions: function room_instructions(alias) {\n\t return _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"Type \",\n\t _react2.default.createElement(\n\t \"code\",\n\t null,\n\t \"/join \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t alias\n\t )\n\t )\n\t );\n\t },\n\t\n\t comments: \"Qt5 and C++ desktop client\"\n\t}, {\n\t name: \"Mclient.el\",\n\t logo: \"\",\n\t author: \"Ryan Rix\",\n\t homepage: \"http://fort.kickass.systems:10082/cgit/personal/rrix/pub/matrix.el.git/\",\n\t maturity: \"Alpha\",\n\t comments: \"Matrix client for Gnu Emacs\"\n\t}, {\n\t name: \"Fractal\",\n\t logo: \"img/org.gnome.Fractal.svg\",\n\t author: \"Daniel Garcia Moreno\",\n\t maturity: \"Alpha\",\n\t comments: \"Matrix messaging app for GNOME written in Rust\"\n\t}, {\n\t name: \"Matrix IRCd\",\n\t logo: \"img/ircd-48px.png\",\n\t author: \"matrix.org\",\n\t homepage: \"https://github.com/matrix-org/matrix-ircd\",\n\t room_instructions: function room_instructions(alias) {\n\t return _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"Type \",\n\t _react2.default.createElement(\n\t \"code\",\n\t null,\n\t \"/join \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t alias\n\t )\n\t )\n\t );\n\t },\n\t\n\t maturity: \"Alpha\",\n\t comments: \"Access any room anywhere in Matrix via good old IRC!\"\n\t}];\n\t\n\texports.default = _react2.default.createClass({\n\t displayName: \"HomePage\",\n\t getInitialState: function getInitialState() {\n\t return {\n\t error: null,\n\t entity: null,\n\t showLink: false\n\t };\n\t },\n\t onHashChange: function onHashChange() {\n\t var entity = unescape(window.location.hash.substr(2)); // strip off #/ prefix\n\t if (!entity) {\n\t this.setState({\n\t entity: null,\n\t showLink: false,\n\t error: null\n\t });\n\t return;\n\t }\n\t\n\t if (!this.isAliasValid(entity) && !this.isUserIdValid(entity) && !this.isMsglinkValid(entity) && !this.isRoomIdValid(entity) && !this.isGroupValid(entity)) {\n\t this.setState({\n\t entity: entity,\n\t error: \"Invalid room alias, user ID, message permalink or group '\" + entity + \"'\"\n\t });\n\t return;\n\t }\n\t this.setState({\n\t entity: entity,\n\t showLink: true,\n\t error: null\n\t });\n\t },\n\t componentWillMount: function componentWillMount() {\n\t if (window.location.hash) {\n\t this.onHashChange();\n\t }\n\t },\n\t componentDidMount: function componentDidMount() {\n\t window.addEventListener(\"hashchange\", this.onHashChange);\n\t },\n\t componentWillUnmount: function componentWillUnmount() {\n\t window.removeEventListener(\"hashchange\", this.onHashChange);\n\t },\n\t onSubmit: function onSubmit(ev) {\n\t ev.preventDefault();\n\t\n\t var entity = this.refs.prompt.value.trim();\n\t if (!this.isAliasValid(entity) && !this.isUserIdValid(entity) && !this.isGroupValid(entity)) {\n\t this.setState({ error: \"Invalid room alias, user ID or group\" });\n\t return;\n\t }\n\t var loc = window.location;\n\t loc.hash = \"#/\" + entity;\n\t window.location.assign(loc.href);\n\t this.setState({\n\t showLink: true,\n\t entity: entity,\n\t error: null\n\t });\n\t },\n\t\n\t\n\t // XXX: cargo-culted from matrix-react-sdk\n\t isAliasValid: function isAliasValid(alias) {\n\t // XXX: FIXME SPEC-1\n\t return alias.match(/^#([^\\/:]+?):(.+)$/) && encodeURI(alias) === alias;\n\t },\n\t isRoomIdValid: function isRoomIdValid(id) {\n\t // XXX: FIXME SPEC-1\n\t return id.match(/^!([^\\/:]+?):(.+)$/) && encodeURI(id) === id;\n\t },\n\t isUserIdValid: function isUserIdValid(userId) {\n\t // XXX: FIXME SPEC-1\n\t return userId.match(/^@([^\\/:]+?):(.+)$/) && encodeURI(userId) === userId;\n\t },\n\t isMsglinkValid: function isMsglinkValid(msglink) {\n\t // XXX: FIXME SPEC-1\n\t console.log(msglink);\n\t console.log(encodeURI(msglink));\n\t return msglink.match(/^[\\!#]([^\\/:]+?):(.+?)\\/\\$([^\\/:]+?):(.+?)$/) && encodeURI(msglink) === msglink;\n\t },\n\t isGroupValid: function isGroupValid(group) {\n\t console.log(group);\n\t console.log(encodeURI(group));\n\t return group.match(/^\\+([^\\/:]+?):(.+)$/) && encodeURI(group) === group;\n\t },\n\t render: function render() {\n\t var _this = this;\n\t\n\t var error;\n\t if (this.state.error) {\n\t error = _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_error\" },\n\t this.state.error\n\t );\n\t }\n\t\n\t var prompt;\n\t if (this.state.showLink) {\n\t var link = \"https://matrix.to/#/\" + this.state.entity;\n\t\n\t var isRoom = this.isAliasValid(this.state.entity);\n\t var isRoomId = this.isRoomIdValid(this.state.entity);\n\t var isUser = this.isUserIdValid(this.state.entity);\n\t var isMsg = this.isMsglinkValid(this.state.entity);\n\t var isGroup = this.isGroupValid(this.state.entity);\n\t\n\t var links;\n\t\n\t // name: \"Vector\",\n\t // logo: \"\",\n\t // author: \"Vector.im\",\n\t // link: \"https://vector.im\",\n\t // room_url: \"https://vector.im/beta/#/room/\",\n\t // user_url: \"https://vector.im/beta/#/user/\",\n\t // maturity: \"Late beta\",\n\t // comments: \"Fully-featured Matrix client for Web, iOS & Android\",\n\t\n\t var description;\n\t if (isRoom) {\n\t description = _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"the \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t this.state.entity\n\t ),\n\t \" room\"\n\t );\n\t } else if (isUser) {\n\t description = _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"the user \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t this.state.entity\n\t )\n\t );\n\t } else if (isMsg) {\n\t description = _react2.default.createElement(\n\t \"span\",\n\t null,\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t \"this message\"\n\t )\n\t );\n\t } else if (isGroup) {\n\t description = _react2.default.createElement(\n\t \"span\",\n\t null,\n\t \"the \",\n\t _react2.default.createElement(\n\t \"b\",\n\t null,\n\t this.state.entity\n\t ),\n\t \" group\"\n\t );\n\t }\n\t\n\t links = _react2.default.createElement(\n\t \"div\",\n\t { key: \"links\", className: \"mxt_HomePage_links\" },\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_links_intro\" },\n\t _react2.default.createElement(\n\t \"p\",\n\t null,\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: \"https://matrix.org\" },\n\t \"Matrix\"\n\t ),\n\t \" is an ecosystem for open and interoperable communication.\"\n\t ),\n\t _react2.default.createElement(\n\t \"p\",\n\t null,\n\t \"To connect to \",\n\t description,\n\t \", please select an app:\"\n\t )\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link mxt_HomePage_link_title\" },\n\t _react2.default.createElement(\"div\", { className: \"mxt_HomePage_link_logo\" }),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_name\" },\n\t \"Name\"\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_comments\" },\n\t \"Description\"\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_author\" },\n\t \"Author\"\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_maturity\" },\n\t \"Maturity\"\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_link\" },\n\t \"Access \",\n\t isMsg ? \"message\" : _react2.default.createElement(\n\t \"b\",\n\t null,\n\t this.state.entity\n\t )\n\t )\n\t ),\n\t linkable_clients.map(function (client) {\n\t var link;\n\t if (isRoom && client.room_url) {\n\t link = client.room_url(_this.state.entity);\n\t } else if (isRoomId && client.room_id_url) {\n\t link = client.room_id_url(_this.state.entity);\n\t } else if (isUser && client.user_url) {\n\t link = client.user_url(_this.state.entity);\n\t } else if (isMsg && client.msg_url) {\n\t link = client.msg_url(_this.state.entity);\n\t } else if (isGroup && client.group_url) {\n\t link = client.group_url(_this.state.entity);\n\t }\n\t if (!link) return null;\n\t\n\t var logo = void 0;\n\t if (typeof client.logo === \"string\") {\n\t logo = _react2.default.createElement(\"img\", { src: client.logo });\n\t } else {\n\t logo = _react2.default.createElement(\"img\", client.logo);\n\t }\n\t\n\t return _react2.default.createElement(\n\t \"div\",\n\t { key: client.name, className: \"mxt_HomePage_link\" },\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_logo\" },\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: link },\n\t logo\n\t )\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_name\" },\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: link },\n\t client.name\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_homepage\" },\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: client.homepage },\n\t client.homepage\n\t )\n\t )\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_comments\" },\n\t client.comments\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_author\" },\n\t client.author\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_maturity\" },\n\t client.maturity\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_link\" },\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: link },\n\t link\n\t )\n\t )\n\t );\n\t }),\n\t unlinkable_clients.map(function (client) {\n\t var instructions;\n\t if (isRoom && client.room_instructions) {\n\t instructions = client.room_instructions(_this.state.entity);\n\t } else if (isUser && client.user_instructions) {\n\t instructions = client.user_instructions(_this.state.entity);\n\t } else if (isMsg && client.msg_instructions) {\n\t instructions = client.msg_instructions(_this.state.entity);\n\t } else if (isGroup && client.group_instructions) {\n\t instructions = client.group_instructions(_this.state.entity);\n\t }\n\t if (!instructions) return null;\n\t\n\t var logo = void 0;\n\t if (typeof client.logo === \"string\") {\n\t logo = _react2.default.createElement(\"img\", { src: client.logo });\n\t } else {\n\t logo = _react2.default.createElement(\"img\", client.logo);\n\t }\n\t\n\t return _react2.default.createElement(\n\t \"div\",\n\t { key: client.name, className: \"mxt_HomePage_link\" },\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_logo\" },\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: client.homepage },\n\t logo\n\t )\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_name\" },\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: client.homepage },\n\t client.name\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_homepage\" },\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: client.homepage },\n\t client.homepage\n\t )\n\t )\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_comments\" },\n\t client.comments\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_author\" },\n\t client.author\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_maturity\" },\n\t client.maturity\n\t ),\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_link_instructions\" },\n\t instructions\n\t )\n\t );\n\t }),\n\t _react2.default.createElement(\n\t \"p\",\n\t null,\n\t \"To add clients to this list, \",\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: \"https://matrix.to/#/#matrix-dev:matrix.org\" },\n\t \"please contact us\"\n\t ),\n\t \" or simply send us a pull request \",\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: \"https://github.com/matrix-org/matrix.to\" },\n\t \"on github\"\n\t ),\n\t \"!\"\n\t )\n\t );\n\t\n\t prompt = [_react2.default.createElement(\n\t \"div\",\n\t { key: \"inputbox\", className: \"mxt_HomePage_inputBox\" },\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: link, className: \"mxt_HomePage_inputBox_link\" },\n\t link\n\t ),\n\t error\n\t ), links];\n\t } else {\n\t prompt = [_react2.default.createElement(\n\t \"div\",\n\t { key: \"inputBox\", className: \"mxt_HomePage_inputBox\" },\n\t _react2.default.createElement(\n\t \"form\",\n\t { onSubmit: this.onSubmit },\n\t _react2.default.createElement(\"input\", { autoFocus: true, className: \"mxt_HomePage_inputBox_prompt\", value: this.state.entity, ref: \"prompt\", size: \"36\", type: \"text\", placeholder: \"#room:example.com, @user:example.com or +group:example.com\" }),\n\t _react2.default.createElement(\"input\", { className: \"mxt_HomePage_inputBox_button\", type: \"submit\", value: \"Get link!\" })\n\t ),\n\t error\n\t ), _react2.default.createElement(\n\t \"div\",\n\t { key: \"cta\", className: \"mxt_HomePage_cta\" },\n\t \"Create shareable links to Matrix rooms, users or messages\",\n\t _react2.default.createElement(\"br\", null),\n\t \"without being tied to a specific app.\"\n\t )];\n\t }\n\t\n\t return _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage\" },\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: \"#\" },\n\t _react2.default.createElement(\"img\", { className: \"mxt_HomePage_logo\", src: \"img/matrix-logo.svg\", width: \"352\", height: \"150\", alt: \"[matrix]\" })\n\t ),\n\t prompt,\n\t _react2.default.createElement(\n\t \"div\",\n\t { className: \"mxt_HomePage_info\" },\n\t _react2.default.createElement(\n\t \"h3\",\n\t null,\n\t \"About\"\n\t ),\n\t _react2.default.createElement(\n\t \"p\",\n\t null,\n\t \"Matrix.to is a simple stateless URL redirecting service which lets users share links to entities in the \",\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: \"https://matrix.org\" },\n\t \"Matrix.org\"\n\t ),\n\t \" ecosystem without being tied to any specific app. This lets users choose their own favourite Matrix client to participate in conversations rather than being forced to use the same app as whoever sent the link.\"\n\t ),\n\t _react2.default.createElement(\n\t \"p\",\n\t null,\n\t \"The service preserves user privacy by not sharing any information about the links being followed with the Matrix.to server - the redirection is calculated entirely clientside using JavaScript.\"\n\t ),\n\t _react2.default.createElement(\n\t \"p\",\n\t null,\n\t \"Links are designed to be human-friendly, both for reading and constructing, and are essentially a compatibility step in the journey towards a \",\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: \"https://github.com/matrix-org/matrix-doc/issues/455\" },\n\t \"ubiquitous mx://\"\n\t ),\n\t \" URL scheme.\"\n\t ),\n\t _react2.default.createElement(\n\t \"p\",\n\t null,\n\t \"As with all of Matrix, Matrix.to is released as open source under the terms of the \",\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: \"http://www.apache.org/licenses/LICENSE-2.0\" },\n\t \"Apache License v2.0\"\n\t ),\n\t \" - get the source from \",\n\t _react2.default.createElement(\n\t \"a\",\n\t { href: \"https://github.com/matrix-org/matrix.to\" },\n\t \"Github\"\n\t ),\n\t \".\"\n\t )\n\t )\n\t );\n\t }\n\t});\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _react = __webpack_require__(23);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _Header = __webpack_require__(79);\n\t\n\tvar _Header2 = _interopRequireDefault(_Header);\n\t\n\tvar _Footer = __webpack_require__(78);\n\t\n\tvar _Footer2 = _interopRequireDefault(_Footer);\n\t\n\tvar _HomePage = __webpack_require__(80);\n\t\n\tvar _HomePage2 = _interopRequireDefault(_HomePage);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/*\n\tCopyright 2016 OpenMarket Ltd\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n\t*/\n\t\n\texports.default = _react2.default.createClass({\n\t displayName: 'Site',\n\t getInitialState: function getInitialState() {\n\t return {\n\t page: _react2.default.createElement(_HomePage2.default, null)\n\t };\n\t },\n\t render: function render() {\n\t return _react2.default.createElement(\n\t 'div',\n\t { className: 'mxt_Site' },\n\t _react2.default.createElement(_Header2.default, null),\n\t this.state.page,\n\t _react2.default.createElement(_Footer2.default, null)\n\t );\n\t }\n\t});\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar _assign = __webpack_require__(4);\n\t\n\tvar emptyObject = __webpack_require__(24);\n\tvar _invariant = __webpack_require__(1);\n\t\n\tif (false) {\n\t var warning = require('fbjs/lib/warning');\n\t}\n\t\n\tvar MIXINS_KEY = 'mixins';\n\t\n\t// Helper function to allow the creation of anonymous functions which do not\n\t// have .name set to the name of the variable being assigned to.\n\tfunction identity(fn) {\n\t return fn;\n\t}\n\t\n\tvar ReactPropTypeLocationNames;\n\tif (false) {\n\t ReactPropTypeLocationNames = {\n\t prop: 'prop',\n\t context: 'context',\n\t childContext: 'child context'\n\t };\n\t} else {\n\t ReactPropTypeLocationNames = {};\n\t}\n\t\n\tfunction factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {\n\t /**\n\t * Policies that describe methods in `ReactClassInterface`.\n\t */\n\t\n\t var injectedMixins = [];\n\t\n\t /**\n\t * Composite components are higher-level components that compose other composite\n\t * or host components.\n\t *\n\t * To create a new type of `ReactClass`, pass a specification of\n\t * your new class to `React.createClass`. The only requirement of your class\n\t * specification is that you implement a `render` method.\n\t *\n\t * var MyComponent = React.createClass({\n\t * render: function() {\n\t * return
Hello World
;\n\t * }\n\t * });\n\t *\n\t * The class specification supports a specific protocol of methods that have\n\t * special meaning (e.g. `render`). See `ReactClassInterface` for\n\t * more the comprehensive protocol. Any other properties and methods in the\n\t * class specification will be available on the prototype.\n\t *\n\t * @interface ReactClassInterface\n\t * @internal\n\t */\n\t var ReactClassInterface = {\n\t /**\n\t * An array of Mixin objects to include when defining your component.\n\t *\n\t * @type {array}\n\t * @optional\n\t */\n\t mixins: 'DEFINE_MANY',\n\t\n\t /**\n\t * An object containing properties and methods that should be defined on\n\t * the component's constructor instead of its prototype (static methods).\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t statics: 'DEFINE_MANY',\n\t\n\t /**\n\t * Definition of prop types for this component.\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t propTypes: 'DEFINE_MANY',\n\t\n\t /**\n\t * Definition of context types for this component.\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t contextTypes: 'DEFINE_MANY',\n\t\n\t /**\n\t * Definition of context types this component sets for its children.\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t childContextTypes: 'DEFINE_MANY',\n\t\n\t // ==== Definition methods ====\n\t\n\t /**\n\t * Invoked when the component is mounted. Values in the mapping will be set on\n\t * `this.props` if that prop is not specified (i.e. using an `in` check).\n\t *\n\t * This method is invoked before `getInitialState` and therefore cannot rely\n\t * on `this.state` or use `this.setState`.\n\t *\n\t * @return {object}\n\t * @optional\n\t */\n\t getDefaultProps: 'DEFINE_MANY_MERGED',\n\t\n\t /**\n\t * Invoked once before the component is mounted. The return value will be used\n\t * as the initial value of `this.state`.\n\t *\n\t * getInitialState: function() {\n\t * return {\n\t * isOn: false,\n\t * fooBaz: new BazFoo()\n\t * }\n\t * }\n\t *\n\t * @return {object}\n\t * @optional\n\t */\n\t getInitialState: 'DEFINE_MANY_MERGED',\n\t\n\t /**\n\t * @return {object}\n\t * @optional\n\t */\n\t getChildContext: 'DEFINE_MANY_MERGED',\n\t\n\t /**\n\t * Uses props from `this.props` and state from `this.state` to render the\n\t * structure of the component.\n\t *\n\t * No guarantees are made about when or how often this method is invoked, so\n\t * it must not have side effects.\n\t *\n\t * render: function() {\n\t * var name = this.props.name;\n\t * return
Hello, {name}!
;\n\t * }\n\t *\n\t * @return {ReactComponent}\n\t * @required\n\t */\n\t render: 'DEFINE_ONCE',\n\t\n\t // ==== Delegate methods ====\n\t\n\t /**\n\t * Invoked when the component is initially created and about to be mounted.\n\t * This may have side effects, but any external subscriptions or data created\n\t * by this method must be cleaned up in `componentWillUnmount`.\n\t *\n\t * @optional\n\t */\n\t componentWillMount: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked when the component has been mounted and has a DOM representation.\n\t * However, there is no guarantee that the DOM node is in the document.\n\t *\n\t * Use this as an opportunity to operate on the DOM when the component has\n\t * been mounted (initialized and rendered) for the first time.\n\t *\n\t * @param {DOMElement} rootNode DOM element representing the component.\n\t * @optional\n\t */\n\t componentDidMount: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked before the component receives new props.\n\t *\n\t * Use this as an opportunity to react to a prop transition by updating the\n\t * state using `this.setState`. Current props are accessed via `this.props`.\n\t *\n\t * componentWillReceiveProps: function(nextProps, nextContext) {\n\t * this.setState({\n\t * likesIncreasing: nextProps.likeCount > this.props.likeCount\n\t * });\n\t * }\n\t *\n\t * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n\t * transition may cause a state change, but the opposite is not true. If you\n\t * need it, you are probably looking for `componentWillUpdate`.\n\t *\n\t * @param {object} nextProps\n\t * @optional\n\t */\n\t componentWillReceiveProps: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked while deciding if the component should be updated as a result of\n\t * receiving new props, state and/or context.\n\t *\n\t * Use this as an opportunity to `return false` when you're certain that the\n\t * transition to the new props/state/context will not require a component\n\t * update.\n\t *\n\t * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n\t * return !equal(nextProps, this.props) ||\n\t * !equal(nextState, this.state) ||\n\t * !equal(nextContext, this.context);\n\t * }\n\t *\n\t * @param {object} nextProps\n\t * @param {?object} nextState\n\t * @param {?object} nextContext\n\t * @return {boolean} True if the component should update.\n\t * @optional\n\t */\n\t shouldComponentUpdate: 'DEFINE_ONCE',\n\t\n\t /**\n\t * Invoked when the component is about to update due to a transition from\n\t * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n\t * and `nextContext`.\n\t *\n\t * Use this as an opportunity to perform preparation before an update occurs.\n\t *\n\t * NOTE: You **cannot** use `this.setState()` in this method.\n\t *\n\t * @param {object} nextProps\n\t * @param {?object} nextState\n\t * @param {?object} nextContext\n\t * @param {ReactReconcileTransaction} transaction\n\t * @optional\n\t */\n\t componentWillUpdate: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked when the component's DOM representation has been updated.\n\t *\n\t * Use this as an opportunity to operate on the DOM when the component has\n\t * been updated.\n\t *\n\t * @param {object} prevProps\n\t * @param {?object} prevState\n\t * @param {?object} prevContext\n\t * @param {DOMElement} rootNode DOM element representing the component.\n\t * @optional\n\t */\n\t componentDidUpdate: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked when the component is about to be removed from its parent and have\n\t * its DOM representation destroyed.\n\t *\n\t * Use this as an opportunity to deallocate any external resources.\n\t *\n\t * NOTE: There is no `componentDidUnmount` since your component will have been\n\t * destroyed by that point.\n\t *\n\t * @optional\n\t */\n\t componentWillUnmount: 'DEFINE_MANY',\n\t\n\t /**\n\t * Replacement for (deprecated) `componentWillMount`.\n\t *\n\t * @optional\n\t */\n\t UNSAFE_componentWillMount: 'DEFINE_MANY',\n\t\n\t /**\n\t * Replacement for (deprecated) `componentWillReceiveProps`.\n\t *\n\t * @optional\n\t */\n\t UNSAFE_componentWillReceiveProps: 'DEFINE_MANY',\n\t\n\t /**\n\t * Replacement for (deprecated) `componentWillUpdate`.\n\t *\n\t * @optional\n\t */\n\t UNSAFE_componentWillUpdate: 'DEFINE_MANY',\n\t\n\t // ==== Advanced methods ====\n\t\n\t /**\n\t * Updates the component's currently mounted DOM representation.\n\t *\n\t * By default, this implements React's rendering and reconciliation algorithm.\n\t * Sophisticated clients may wish to override this.\n\t *\n\t * @param {ReactReconcileTransaction} transaction\n\t * @internal\n\t * @overridable\n\t */\n\t updateComponent: 'OVERRIDE_BASE'\n\t };\n\t\n\t /**\n\t * Similar to ReactClassInterface but for static methods.\n\t */\n\t var ReactClassStaticInterface = {\n\t /**\n\t * This method is invoked after a component is instantiated and when it\n\t * receives new props. Return an object to update state in response to\n\t * prop changes. Return null to indicate no change to state.\n\t *\n\t * If an object is returned, its keys will be merged into the existing state.\n\t *\n\t * @return {object || null}\n\t * @optional\n\t */\n\t getDerivedStateFromProps: 'DEFINE_MANY_MERGED'\n\t };\n\t\n\t /**\n\t * Mapping from class specification keys to special processing functions.\n\t *\n\t * Although these are declared like instance properties in the specification\n\t * when defining classes using `React.createClass`, they are actually static\n\t * and are accessible on the constructor instead of the prototype. Despite\n\t * being static, they must be defined outside of the \"statics\" key under\n\t * which all other static methods are defined.\n\t */\n\t var RESERVED_SPEC_KEYS = {\n\t displayName: function(Constructor, displayName) {\n\t Constructor.displayName = displayName;\n\t },\n\t mixins: function(Constructor, mixins) {\n\t if (mixins) {\n\t for (var i = 0; i < mixins.length; i++) {\n\t mixSpecIntoComponent(Constructor, mixins[i]);\n\t }\n\t }\n\t },\n\t childContextTypes: function(Constructor, childContextTypes) {\n\t if (false) {\n\t validateTypeDef(Constructor, childContextTypes, 'childContext');\n\t }\n\t Constructor.childContextTypes = _assign(\n\t {},\n\t Constructor.childContextTypes,\n\t childContextTypes\n\t );\n\t },\n\t contextTypes: function(Constructor, contextTypes) {\n\t if (false) {\n\t validateTypeDef(Constructor, contextTypes, 'context');\n\t }\n\t Constructor.contextTypes = _assign(\n\t {},\n\t Constructor.contextTypes,\n\t contextTypes\n\t );\n\t },\n\t /**\n\t * Special case getDefaultProps which should move into statics but requires\n\t * automatic merging.\n\t */\n\t getDefaultProps: function(Constructor, getDefaultProps) {\n\t if (Constructor.getDefaultProps) {\n\t Constructor.getDefaultProps = createMergedResultFunction(\n\t Constructor.getDefaultProps,\n\t getDefaultProps\n\t );\n\t } else {\n\t Constructor.getDefaultProps = getDefaultProps;\n\t }\n\t },\n\t propTypes: function(Constructor, propTypes) {\n\t if (false) {\n\t validateTypeDef(Constructor, propTypes, 'prop');\n\t }\n\t Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n\t },\n\t statics: function(Constructor, statics) {\n\t mixStaticSpecIntoComponent(Constructor, statics);\n\t },\n\t autobind: function() {}\n\t };\n\t\n\t function validateTypeDef(Constructor, typeDef, location) {\n\t for (var propName in typeDef) {\n\t if (typeDef.hasOwnProperty(propName)) {\n\t // use a warning instead of an _invariant so components\n\t // don't show up in prod but only in __DEV__\n\t if (false) {\n\t warning(\n\t typeof typeDef[propName] === 'function',\n\t '%s: %s type `%s` is invalid; it must be a function, usually from ' +\n\t 'React.PropTypes.',\n\t Constructor.displayName || 'ReactClass',\n\t ReactPropTypeLocationNames[location],\n\t propName\n\t );\n\t }\n\t }\n\t }\n\t }\n\t\n\t function validateMethodOverride(isAlreadyDefined, name) {\n\t var specPolicy = ReactClassInterface.hasOwnProperty(name)\n\t ? ReactClassInterface[name]\n\t : null;\n\t\n\t // Disallow overriding of base class methods unless explicitly allowed.\n\t if (ReactClassMixin.hasOwnProperty(name)) {\n\t _invariant(\n\t specPolicy === 'OVERRIDE_BASE',\n\t 'ReactClassInterface: You are attempting to override ' +\n\t '`%s` from your class specification. Ensure that your method names ' +\n\t 'do not overlap with React methods.',\n\t name\n\t );\n\t }\n\t\n\t // Disallow defining methods more than once unless explicitly allowed.\n\t if (isAlreadyDefined) {\n\t _invariant(\n\t specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',\n\t 'ReactClassInterface: You are attempting to define ' +\n\t '`%s` on your component more than once. This conflict may be due ' +\n\t 'to a mixin.',\n\t name\n\t );\n\t }\n\t }\n\t\n\t /**\n\t * Mixin helper which handles policy validation and reserved\n\t * specification keys when building React classes.\n\t */\n\t function mixSpecIntoComponent(Constructor, spec) {\n\t if (!spec) {\n\t if (false) {\n\t var typeofSpec = typeof spec;\n\t var isMixinValid = typeofSpec === 'object' && spec !== null;\n\t\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t isMixinValid,\n\t \"%s: You're attempting to include a mixin that is either null \" +\n\t 'or not an object. Check the mixins included by the component, ' +\n\t 'as well as any mixins they include themselves. ' +\n\t 'Expected object but got %s.',\n\t Constructor.displayName || 'ReactClass',\n\t spec === null ? null : typeofSpec\n\t );\n\t }\n\t }\n\t\n\t return;\n\t }\n\t\n\t _invariant(\n\t typeof spec !== 'function',\n\t \"ReactClass: You're attempting to \" +\n\t 'use a component class or function as a mixin. Instead, just use a ' +\n\t 'regular object.'\n\t );\n\t _invariant(\n\t !isValidElement(spec),\n\t \"ReactClass: You're attempting to \" +\n\t 'use a component as a mixin. Instead, just use a regular object.'\n\t );\n\t\n\t var proto = Constructor.prototype;\n\t var autoBindPairs = proto.__reactAutoBindPairs;\n\t\n\t // By handling mixins before any other properties, we ensure the same\n\t // chaining order is applied to methods with DEFINE_MANY policy, whether\n\t // mixins are listed before or after these methods in the spec.\n\t if (spec.hasOwnProperty(MIXINS_KEY)) {\n\t RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n\t }\n\t\n\t for (var name in spec) {\n\t if (!spec.hasOwnProperty(name)) {\n\t continue;\n\t }\n\t\n\t if (name === MIXINS_KEY) {\n\t // We have already handled mixins in a special case above.\n\t continue;\n\t }\n\t\n\t var property = spec[name];\n\t var isAlreadyDefined = proto.hasOwnProperty(name);\n\t validateMethodOverride(isAlreadyDefined, name);\n\t\n\t if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n\t RESERVED_SPEC_KEYS[name](Constructor, property);\n\t } else {\n\t // Setup methods on prototype:\n\t // The following member methods should not be automatically bound:\n\t // 1. Expected ReactClass methods (in the \"interface\").\n\t // 2. Overridden methods (that were mixed in).\n\t var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n\t var isFunction = typeof property === 'function';\n\t var shouldAutoBind =\n\t isFunction &&\n\t !isReactClassMethod &&\n\t !isAlreadyDefined &&\n\t spec.autobind !== false;\n\t\n\t if (shouldAutoBind) {\n\t autoBindPairs.push(name, property);\n\t proto[name] = property;\n\t } else {\n\t if (isAlreadyDefined) {\n\t var specPolicy = ReactClassInterface[name];\n\t\n\t // These cases should already be caught by validateMethodOverride.\n\t _invariant(\n\t isReactClassMethod &&\n\t (specPolicy === 'DEFINE_MANY_MERGED' ||\n\t specPolicy === 'DEFINE_MANY'),\n\t 'ReactClass: Unexpected spec policy %s for key %s ' +\n\t 'when mixing in component specs.',\n\t specPolicy,\n\t name\n\t );\n\t\n\t // For methods which are defined more than once, call the existing\n\t // methods before calling the new property, merging if appropriate.\n\t if (specPolicy === 'DEFINE_MANY_MERGED') {\n\t proto[name] = createMergedResultFunction(proto[name], property);\n\t } else if (specPolicy === 'DEFINE_MANY') {\n\t proto[name] = createChainedFunction(proto[name], property);\n\t }\n\t } else {\n\t proto[name] = property;\n\t if (false) {\n\t // Add verbose displayName to the function, which helps when looking\n\t // at profiling tools.\n\t if (typeof property === 'function' && spec.displayName) {\n\t proto[name].displayName = spec.displayName + '_' + name;\n\t }\n\t }\n\t }\n\t }\n\t }\n\t }\n\t }\n\t\n\t function mixStaticSpecIntoComponent(Constructor, statics) {\n\t if (!statics) {\n\t return;\n\t }\n\t\n\t for (var name in statics) {\n\t var property = statics[name];\n\t if (!statics.hasOwnProperty(name)) {\n\t continue;\n\t }\n\t\n\t var isReserved = name in RESERVED_SPEC_KEYS;\n\t _invariant(\n\t !isReserved,\n\t 'ReactClass: You are attempting to define a reserved ' +\n\t 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' +\n\t 'as an instance property instead; it will still be accessible on the ' +\n\t 'constructor.',\n\t name\n\t );\n\t\n\t var isAlreadyDefined = name in Constructor;\n\t if (isAlreadyDefined) {\n\t var specPolicy = ReactClassStaticInterface.hasOwnProperty(name)\n\t ? ReactClassStaticInterface[name]\n\t : null;\n\t\n\t _invariant(\n\t specPolicy === 'DEFINE_MANY_MERGED',\n\t 'ReactClass: You are attempting to define ' +\n\t '`%s` on your component more than once. This conflict may be ' +\n\t 'due to a mixin.',\n\t name\n\t );\n\t\n\t Constructor[name] = createMergedResultFunction(Constructor[name], property);\n\t\n\t return;\n\t }\n\t\n\t Constructor[name] = property;\n\t }\n\t }\n\t\n\t /**\n\t * Merge two objects, but throw if both contain the same key.\n\t *\n\t * @param {object} one The first object, which is mutated.\n\t * @param {object} two The second object\n\t * @return {object} one after it has been mutated to contain everything in two.\n\t */\n\t function mergeIntoWithNoDuplicateKeys(one, two) {\n\t _invariant(\n\t one && two && typeof one === 'object' && typeof two === 'object',\n\t 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'\n\t );\n\t\n\t for (var key in two) {\n\t if (two.hasOwnProperty(key)) {\n\t _invariant(\n\t one[key] === undefined,\n\t 'mergeIntoWithNoDuplicateKeys(): ' +\n\t 'Tried to merge two objects with the same key: `%s`. This conflict ' +\n\t 'may be due to a mixin; in particular, this may be caused by two ' +\n\t 'getInitialState() or getDefaultProps() methods returning objects ' +\n\t 'with clashing keys.',\n\t key\n\t );\n\t one[key] = two[key];\n\t }\n\t }\n\t return one;\n\t }\n\t\n\t /**\n\t * Creates a function that invokes two functions and merges their return values.\n\t *\n\t * @param {function} one Function to invoke first.\n\t * @param {function} two Function to invoke second.\n\t * @return {function} Function that invokes the two argument functions.\n\t * @private\n\t */\n\t function createMergedResultFunction(one, two) {\n\t return function mergedResult() {\n\t var a = one.apply(this, arguments);\n\t var b = two.apply(this, arguments);\n\t if (a == null) {\n\t return b;\n\t } else if (b == null) {\n\t return a;\n\t }\n\t var c = {};\n\t mergeIntoWithNoDuplicateKeys(c, a);\n\t mergeIntoWithNoDuplicateKeys(c, b);\n\t return c;\n\t };\n\t }\n\t\n\t /**\n\t * Creates a function that invokes two functions and ignores their return vales.\n\t *\n\t * @param {function} one Function to invoke first.\n\t * @param {function} two Function to invoke second.\n\t * @return {function} Function that invokes the two argument functions.\n\t * @private\n\t */\n\t function createChainedFunction(one, two) {\n\t return function chainedFunction() {\n\t one.apply(this, arguments);\n\t two.apply(this, arguments);\n\t };\n\t }\n\t\n\t /**\n\t * Binds a method to the component.\n\t *\n\t * @param {object} component Component whose method is going to be bound.\n\t * @param {function} method Method to be bound.\n\t * @return {function} The bound method.\n\t */\n\t function bindAutoBindMethod(component, method) {\n\t var boundMethod = method.bind(component);\n\t if (false) {\n\t boundMethod.__reactBoundContext = component;\n\t boundMethod.__reactBoundMethod = method;\n\t boundMethod.__reactBoundArguments = null;\n\t var componentName = component.constructor.displayName;\n\t var _bind = boundMethod.bind;\n\t boundMethod.bind = function(newThis) {\n\t for (\n\t var _len = arguments.length,\n\t args = Array(_len > 1 ? _len - 1 : 0),\n\t _key = 1;\n\t _key < _len;\n\t _key++\n\t ) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\t\n\t // User is trying to bind() an autobound method; we effectively will\n\t // ignore the value of \"this\" that the user is trying to use, so\n\t // let's warn.\n\t if (newThis !== component && newThis !== null) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t false,\n\t 'bind(): React component methods may only be bound to the ' +\n\t 'component instance. See %s',\n\t componentName\n\t );\n\t }\n\t } else if (!args.length) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t false,\n\t 'bind(): You are binding a component method to the component. ' +\n\t 'React does this for you automatically in a high-performance ' +\n\t 'way, so you can safely remove this call. See %s',\n\t componentName\n\t );\n\t }\n\t return boundMethod;\n\t }\n\t var reboundMethod = _bind.apply(boundMethod, arguments);\n\t reboundMethod.__reactBoundContext = component;\n\t reboundMethod.__reactBoundMethod = method;\n\t reboundMethod.__reactBoundArguments = args;\n\t return reboundMethod;\n\t };\n\t }\n\t return boundMethod;\n\t }\n\t\n\t /**\n\t * Binds all auto-bound methods in a component.\n\t *\n\t * @param {object} component Component whose method is going to be bound.\n\t */\n\t function bindAutoBindMethods(component) {\n\t var pairs = component.__reactAutoBindPairs;\n\t for (var i = 0; i < pairs.length; i += 2) {\n\t var autoBindKey = pairs[i];\n\t var method = pairs[i + 1];\n\t component[autoBindKey] = bindAutoBindMethod(component, method);\n\t }\n\t }\n\t\n\t var IsMountedPreMixin = {\n\t componentDidMount: function() {\n\t this.__isMounted = true;\n\t }\n\t };\n\t\n\t var IsMountedPostMixin = {\n\t componentWillUnmount: function() {\n\t this.__isMounted = false;\n\t }\n\t };\n\t\n\t /**\n\t * Add more to the ReactClass base class. These are all legacy features and\n\t * therefore not already part of the modern ReactComponent.\n\t */\n\t var ReactClassMixin = {\n\t /**\n\t * TODO: This will be deprecated because state should always keep a consistent\n\t * type signature and the only use case for this, is to avoid that.\n\t */\n\t replaceState: function(newState, callback) {\n\t this.updater.enqueueReplaceState(this, newState, callback);\n\t },\n\t\n\t /**\n\t * Checks whether or not this composite component is mounted.\n\t * @return {boolean} True if mounted, false otherwise.\n\t * @protected\n\t * @final\n\t */\n\t isMounted: function() {\n\t if (false) {\n\t warning(\n\t this.__didWarnIsMounted,\n\t '%s: isMounted is deprecated. Instead, make sure to clean up ' +\n\t 'subscriptions and pending requests in componentWillUnmount to ' +\n\t 'prevent memory leaks.',\n\t (this.constructor && this.constructor.displayName) ||\n\t this.name ||\n\t 'Component'\n\t );\n\t this.__didWarnIsMounted = true;\n\t }\n\t return !!this.__isMounted;\n\t }\n\t };\n\t\n\t var ReactClassComponent = function() {};\n\t _assign(\n\t ReactClassComponent.prototype,\n\t ReactComponent.prototype,\n\t ReactClassMixin\n\t );\n\t\n\t /**\n\t * Creates a composite component class given a class specification.\n\t * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n\t *\n\t * @param {object} spec Class specification (which must define `render`).\n\t * @return {function} Component constructor function.\n\t * @public\n\t */\n\t function createClass(spec) {\n\t // To keep our warnings more understandable, we'll use a little hack here to\n\t // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n\t // unnecessarily identify a class without displayName as 'Constructor'.\n\t var Constructor = identity(function(props, context, updater) {\n\t // This constructor gets overridden by mocks. The argument is used\n\t // by mocks to assert on what gets mounted.\n\t\n\t if (false) {\n\t warning(\n\t this instanceof Constructor,\n\t 'Something is calling a React component directly. Use a factory or ' +\n\t 'JSX instead. See: https://fb.me/react-legacyfactory'\n\t );\n\t }\n\t\n\t // Wire up auto-binding\n\t if (this.__reactAutoBindPairs.length) {\n\t bindAutoBindMethods(this);\n\t }\n\t\n\t this.props = props;\n\t this.context = context;\n\t this.refs = emptyObject;\n\t this.updater = updater || ReactNoopUpdateQueue;\n\t\n\t this.state = null;\n\t\n\t // ReactClasses doesn't have constructors. Instead, they use the\n\t // getInitialState and componentWillMount methods for initialization.\n\t\n\t var initialState = this.getInitialState ? this.getInitialState() : null;\n\t if (false) {\n\t // We allow auto-mocks to proceed as if they're returning null.\n\t if (\n\t initialState === undefined &&\n\t this.getInitialState._isMockFunction\n\t ) {\n\t // This is probably bad practice. Consider warning here and\n\t // deprecating this convenience.\n\t initialState = null;\n\t }\n\t }\n\t _invariant(\n\t typeof initialState === 'object' && !Array.isArray(initialState),\n\t '%s.getInitialState(): must return an object or null',\n\t Constructor.displayName || 'ReactCompositeComponent'\n\t );\n\t\n\t this.state = initialState;\n\t });\n\t Constructor.prototype = new ReactClassComponent();\n\t Constructor.prototype.constructor = Constructor;\n\t Constructor.prototype.__reactAutoBindPairs = [];\n\t\n\t injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\t\n\t mixSpecIntoComponent(Constructor, IsMountedPreMixin);\n\t mixSpecIntoComponent(Constructor, spec);\n\t mixSpecIntoComponent(Constructor, IsMountedPostMixin);\n\t\n\t // Initialize the defaultProps property after all mixins have been merged.\n\t if (Constructor.getDefaultProps) {\n\t Constructor.defaultProps = Constructor.getDefaultProps();\n\t }\n\t\n\t if (false) {\n\t // This is a tag to indicate that the use of these method names is ok,\n\t // since it's used with createClass. If it's not, then it's likely a\n\t // mistake so we'll warn you to use the static property, property\n\t // initializer or constructor respectively.\n\t if (Constructor.getDefaultProps) {\n\t Constructor.getDefaultProps.isReactClassApproved = {};\n\t }\n\t if (Constructor.prototype.getInitialState) {\n\t Constructor.prototype.getInitialState.isReactClassApproved = {};\n\t }\n\t }\n\t\n\t _invariant(\n\t Constructor.prototype.render,\n\t 'createClass(...): Class specification must implement a `render` method.'\n\t );\n\t\n\t if (false) {\n\t warning(\n\t !Constructor.prototype.componentShouldUpdate,\n\t '%s has a method called ' +\n\t 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\n\t 'The name is phrased as a question because the function is ' +\n\t 'expected to return a value.',\n\t spec.displayName || 'A component'\n\t );\n\t warning(\n\t !Constructor.prototype.componentWillRecieveProps,\n\t '%s has a method called ' +\n\t 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\n\t spec.displayName || 'A component'\n\t );\n\t warning(\n\t !Constructor.prototype.UNSAFE_componentWillRecieveProps,\n\t '%s has a method called UNSAFE_componentWillRecieveProps(). ' +\n\t 'Did you mean UNSAFE_componentWillReceiveProps()?',\n\t spec.displayName || 'A component'\n\t );\n\t }\n\t\n\t // Reduce time spent doing lookups by setting these on the prototype.\n\t for (var methodName in ReactClassInterface) {\n\t if (!Constructor.prototype[methodName]) {\n\t Constructor.prototype[methodName] = null;\n\t }\n\t }\n\t\n\t return Constructor;\n\t }\n\t\n\t return createClass;\n\t}\n\t\n\tmodule.exports = factory;\n\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * @typechecks\n\t */\n\t\n\tvar _hyphenPattern = /-(.)/g;\n\t\n\t/**\n\t * Camelcases a hyphenated string, for example:\n\t *\n\t * > camelize('background-color')\n\t * < \"backgroundColor\"\n\t *\n\t * @param {string} string\n\t * @return {string}\n\t */\n\tfunction camelize(string) {\n\t return string.replace(_hyphenPattern, function (_, character) {\n\t return character.toUpperCase();\n\t });\n\t}\n\t\n\tmodule.exports = camelize;\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * @typechecks\n\t */\n\t\n\t'use strict';\n\t\n\tvar camelize = __webpack_require__(83);\n\t\n\tvar msPattern = /^-ms-/;\n\t\n\t/**\n\t * Camelcases a hyphenated CSS property name, for example:\n\t *\n\t * > camelizeStyleName('background-color')\n\t * < \"backgroundColor\"\n\t * > camelizeStyleName('-moz-transition')\n\t * < \"MozTransition\"\n\t * > camelizeStyleName('-ms-transition')\n\t * < \"msTransition\"\n\t *\n\t * As Andi Smith suggests\n\t * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n\t * is converted to lowercase `ms`.\n\t *\n\t * @param {string} string\n\t * @return {string}\n\t */\n\tfunction camelizeStyleName(string) {\n\t return camelize(string.replace(msPattern, 'ms-'));\n\t}\n\t\n\tmodule.exports = camelizeStyleName;\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t\n\tvar isTextNode = __webpack_require__(93);\n\t\n\t/*eslint-disable no-bitwise */\n\t\n\t/**\n\t * Checks if a given DOM node contains or is another DOM node.\n\t */\n\tfunction containsNode(outerNode, innerNode) {\n\t if (!outerNode || !innerNode) {\n\t return false;\n\t } else if (outerNode === innerNode) {\n\t return true;\n\t } else if (isTextNode(outerNode)) {\n\t return false;\n\t } else if (isTextNode(innerNode)) {\n\t return containsNode(outerNode, innerNode.parentNode);\n\t } else if ('contains' in outerNode) {\n\t return outerNode.contains(innerNode);\n\t } else if (outerNode.compareDocumentPosition) {\n\t return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n\t } else {\n\t return false;\n\t }\n\t}\n\t\n\tmodule.exports = containsNode;\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * @typechecks\n\t */\n\t\n\tvar invariant = __webpack_require__(1);\n\t\n\t/**\n\t * Convert array-like objects to arrays.\n\t *\n\t * This API assumes the caller knows the contents of the data type. For less\n\t * well defined inputs use createArrayFromMixed.\n\t *\n\t * @param {object|function|filelist} obj\n\t * @return {array}\n\t */\n\tfunction toArray(obj) {\n\t var length = obj.length;\n\t\n\t // Some browsers builtin objects can report typeof 'function' (e.g. NodeList\n\t // in old versions of Safari).\n\t !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? false ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;\n\t\n\t !(typeof length === 'number') ? false ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;\n\t\n\t !(length === 0 || length - 1 in obj) ? false ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;\n\t\n\t !(typeof obj.callee !== 'function') ? false ? invariant(false, 'toArray: Object can\\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;\n\t\n\t // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\n\t // without method will throw during the slice call and skip straight to the\n\t // fallback.\n\t if (obj.hasOwnProperty) {\n\t try {\n\t return Array.prototype.slice.call(obj);\n\t } catch (e) {\n\t // IE < 9 does not support Array#slice on collections objects\n\t }\n\t }\n\t\n\t // Fall back to copying key by key. This assumes all keys have a value,\n\t // so will not preserve sparsely populated inputs.\n\t var ret = Array(length);\n\t for (var ii = 0; ii < length; ii++) {\n\t ret[ii] = obj[ii];\n\t }\n\t return ret;\n\t}\n\t\n\t/**\n\t * Perform a heuristic test to determine if an object is \"array-like\".\n\t *\n\t * A monk asked Joshu, a Zen master, \"Has a dog Buddha nature?\"\n\t * Joshu replied: \"Mu.\"\n\t *\n\t * This function determines if its argument has \"array nature\": it returns\n\t * true if the argument is an actual array, an `arguments' object, or an\n\t * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\n\t *\n\t * It will return false for other array-like objects like Filelist.\n\t *\n\t * @param {*} obj\n\t * @return {boolean}\n\t */\n\tfunction hasArrayNature(obj) {\n\t return (\n\t // not null/false\n\t !!obj && (\n\t // arrays are objects, NodeLists are functions in Safari\n\t typeof obj == 'object' || typeof obj == 'function') &&\n\t // quacks like an array\n\t 'length' in obj &&\n\t // not window\n\t !('setInterval' in obj) &&\n\t // no DOM node should be considered an array-like\n\t // a 'select' element has 'length' and 'item' properties on IE8\n\t typeof obj.nodeType != 'number' && (\n\t // a real array\n\t Array.isArray(obj) ||\n\t // arguments\n\t 'callee' in obj ||\n\t // HTMLCollection/NodeList\n\t 'item' in obj)\n\t );\n\t}\n\t\n\t/**\n\t * Ensure that the argument is an array by wrapping it in an array if it is not.\n\t * Creates a copy of the argument if it is already an array.\n\t *\n\t * This is mostly useful idiomatically:\n\t *\n\t * var createArrayFromMixed = require('createArrayFromMixed');\n\t *\n\t * function takesOneOrMoreThings(things) {\n\t * things = createArrayFromMixed(things);\n\t * ...\n\t * }\n\t *\n\t * This allows you to treat `things' as an array, but accept scalars in the API.\n\t *\n\t * If you need to convert an array-like object, like `arguments`, into an array\n\t * use toArray instead.\n\t *\n\t * @param {*} obj\n\t * @return {array}\n\t */\n\tfunction createArrayFromMixed(obj) {\n\t if (!hasArrayNature(obj)) {\n\t return [obj];\n\t } else if (Array.isArray(obj)) {\n\t return obj.slice();\n\t } else {\n\t return toArray(obj);\n\t }\n\t}\n\t\n\tmodule.exports = createArrayFromMixed;\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * @typechecks\n\t */\n\t\n\t/*eslint-disable fb-www/unsafe-html*/\n\t\n\tvar ExecutionEnvironment = __webpack_require__(6);\n\t\n\tvar createArrayFromMixed = __webpack_require__(86);\n\tvar getMarkupWrap = __webpack_require__(88);\n\tvar invariant = __webpack_require__(1);\n\t\n\t/**\n\t * Dummy container used to render all markup.\n\t */\n\tvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\t\n\t/**\n\t * Pattern used by `getNodeName`.\n\t */\n\tvar nodeNamePattern = /^\\s*<(\\w+)/;\n\t\n\t/**\n\t * Extracts the `nodeName` of the first element in a string of markup.\n\t *\n\t * @param {string} markup String of markup.\n\t * @return {?string} Node name of the supplied markup.\n\t */\n\tfunction getNodeName(markup) {\n\t var nodeNameMatch = markup.match(nodeNamePattern);\n\t return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n\t}\n\t\n\t/**\n\t * Creates an array containing the nodes rendered from the supplied markup. The\n\t * optionally supplied `handleScript` function will be invoked once for each\n\t *