/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = "./jaas-client/src/index.js");
/******/ })
/************************************************************************/
/******/ ({

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
  \*********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _arrayLikeToArray; });\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _arrayWithHoles; });\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _arrayWithoutHoles; });\n/* harmony import */ var _arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return Object(_arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js":
/*!**************************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
  \**************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _assertThisInitialized; });\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _classCallCheck; });\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _createClass; });\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _defineProperty; });\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _extends; });\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***!
  \******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _inheritsLoose; });\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArray.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _iterableToArray; });\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArray.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js":
/*!*************************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
  \*************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _iterableToArrayLimit; });\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _nonIterableRest; });\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _nonIterableSpread; });\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js":
/*!****************************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js ***!
  \****************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _objectWithoutProperties; });\n/* harmony import */ var _objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = Object(_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js":
/*!*********************************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***!
  \*********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _objectWithoutPropertiesLoose; });\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***!
  \******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _slicedToArray; });\n/* harmony import */ var _arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\");\n/* harmony import */ var _iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\");\n/* harmony import */ var _unsupportedIterableToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableRest__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\");\n\n\n\n\nfunction _slicedToArray(arr, i) {\n  return Object(_arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr) || Object(_iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arr, i) || Object(_unsupportedIterableToArray__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arr, i) || Object(_nonIterableRest__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _toConsumableArray; });\n/* harmony import */ var _arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithoutHoles */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\");\n/* harmony import */ var _iterableToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArray.js\");\n/* harmony import */ var _unsupportedIterableToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableSpread__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableSpread */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\");\n\n\n\n\nfunction _toConsumableArray(arr) {\n  return Object(_arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr) || Object(_iterableToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arr) || Object(_unsupportedIterableToArray__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arr) || Object(_nonIterableSpread__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js ***!
  \***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _typeof; });\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js":
/*!*******************************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***!
  \*******************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _unsupportedIterableToArray; });\n/* harmony import */ var _arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return Object(_arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Object(_arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/extends.js":
/*!********************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/extends.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("function _extends() {\n  module.exports = _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/extends.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
  \**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("function _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \"default\": obj\n  };\n}\n\nmodule.exports = _interopRequireDefault;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Avatar/Avatar.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Avatar/Avatar.js ***!
  \*************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _internal_svg_icons_Person__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../internal/svg-icons/Person */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/Person.js\");\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      flexShrink: 0,\n      width: 40,\n      height: 40,\n      fontFamily: theme.typography.fontFamily,\n      fontSize: theme.typography.pxToRem(20),\n      lineHeight: 1,\n      borderRadius: '50%',\n      overflow: 'hidden',\n      userSelect: 'none'\n    },\n\n    /* Styles applied to the root element if not `src` or `srcSet`. */\n    colorDefault: {\n      color: theme.palette.background.default,\n      backgroundColor: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[600]\n    },\n\n    /* Styles applied to the root element if `variant=\"circle\"`. */\n    circle: {},\n\n    /* Styles applied to the root element if `variant=\"rounded\"`. */\n    rounded: {\n      borderRadius: theme.shape.borderRadius\n    },\n\n    /* Styles applied to the root element if `variant=\"square\"`. */\n    square: {\n      borderRadius: 0\n    },\n\n    /* Styles applied to the img element if either `src` or `srcSet` is defined. */\n    img: {\n      width: '100%',\n      height: '100%',\n      textAlign: 'center',\n      // Handle non-square image. The property isn't supported by IE 11.\n      objectFit: 'cover',\n      // Hide alt text.\n      color: 'transparent',\n      // Hide the image broken icon, only works on Chrome.\n      textIndent: 10000\n    },\n\n    /* Styles applied to the fallback icon */\n    fallback: {\n      width: '75%',\n      height: '75%'\n    }\n  };\n};\n\nfunction useLoaded(_ref) {\n  var src = _ref.src,\n      srcSet = _ref.srcSet;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      loaded = _React$useState[0],\n      setLoaded = _React$useState[1];\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (!src && !srcSet) {\n      return undefined;\n    }\n\n    setLoaded(false);\n    var active = true;\n    var image = new Image();\n    image.src = src;\n    image.srcSet = srcSet;\n\n    image.onload = function () {\n      if (!active) {\n        return;\n      }\n\n      setLoaded('loaded');\n    };\n\n    image.onerror = function () {\n      if (!active) {\n        return;\n      }\n\n      setLoaded('error');\n    };\n\n    return function () {\n      active = false;\n    };\n  }, [src, srcSet]);\n  return loaded;\n}\n\nvar Avatar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Avatar(props, ref) {\n  var alt = props.alt,\n      childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      imgProps = props.imgProps,\n      sizes = props.sizes,\n      src = props.src,\n      srcSet = props.srcSet,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'circle' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"alt\", \"children\", \"classes\", \"className\", \"component\", \"imgProps\", \"sizes\", \"src\", \"srcSet\", \"variant\"]);\n\n  var children = null; // Use a hook instead of onError on the img element to support server-side rendering.\n\n  var loaded = useLoaded({\n    src: src,\n    srcSet: srcSet\n  });\n  var hasImg = src || srcSet;\n  var hasImgNotFailing = hasImg && loaded !== 'error';\n\n  if (hasImgNotFailing) {\n    children = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"img\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      alt: alt,\n      src: src,\n      srcSet: srcSet,\n      sizes: sizes,\n      className: classes.img\n    }, imgProps));\n  } else if (childrenProp != null) {\n    children = childrenProp;\n  } else if (hasImg && alt) {\n    children = alt[0];\n  } else {\n    children = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_svg_icons_Person__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n      className: classes.fallback\n    });\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes.system, classes[variant], className, !hasImgNotFailing && classes.colorDefault),\n    ref: ref\n  }, other), children);\n});\n true ? Avatar.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * Used in combination with `src` or `srcSet` to\n   * provide an alt attribute for the rendered `img` element.\n   */\n  alt: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Used to render icon or text elements inside the Avatar if `src` is not set.\n   * This can be an element, or just a string.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * Attributes applied to the `img` element if the component is used to display an image.\n   * It can be used to listen for the loading error event.\n   */\n  imgProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The `sizes` attribute for the `img` element.\n   */\n  sizes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The `src` attribute for the `img` element.\n   */\n  src: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The `srcSet` attribute for the `img` element.\n   * Use this attribute for responsive image display.\n   */\n  srcSet: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The shape of the avatar.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['circle', 'rounded', 'square'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiAvatar'\n})(Avatar));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Avatar/Avatar.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Avatar/index.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Avatar/index.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Avatar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Avatar */ \"./jaas-client/node_modules/@material-ui/core/esm/Avatar/Avatar.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Avatar__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Avatar/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Backdrop/Backdrop.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Backdrop/Backdrop.js ***!
  \*****************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Fade__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Fade */ \"./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js\");\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    // Improve scrollable dialog support.\n    zIndex: -1,\n    position: 'fixed',\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    right: 0,\n    bottom: 0,\n    top: 0,\n    left: 0,\n    backgroundColor: 'rgba(0, 0, 0, 0.5)',\n    WebkitTapHighlightColor: 'transparent'\n  },\n\n  /* Styles applied to the root element if `invisible={true}`. */\n  invisible: {\n    backgroundColor: 'transparent'\n  }\n};\nvar Backdrop = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Backdrop(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$invisible = props.invisible,\n      invisible = _props$invisible === void 0 ? false : _props$invisible,\n      open = props.open,\n      transitionDuration = props.transitionDuration,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? _Fade__WEBPACK_IMPORTED_MODULE_6__[\"default\"] : _props$TransitionComp,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"invisible\", \"open\", \"transitionDuration\", \"TransitionComponent\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    in: open,\n    timeout: transitionDuration\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, invisible && classes.invisible),\n    \"aria-hidden\": true,\n    ref: ref\n  }, children));\n});\n true ? Backdrop.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the backdrop is invisible.\n   * It can be used when rendering a popover or a custom select component.\n   */\n  invisible: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the backdrop is open.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool.isRequired,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number\n  })])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiBackdrop'\n})(Backdrop));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Backdrop/Backdrop.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Backdrop/index.js":
/*!**************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Backdrop/index.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Backdrop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Backdrop */ \"./jaas-client/node_modules/@material-ui/core/esm/Backdrop/Backdrop.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Backdrop__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Backdrop/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Box/Box.js":
/*!*******************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Box/Box.js ***!
  \*******************************************************************/
/*! exports provided: styleFunction, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styleFunction\", function() { return styleFunction; });\n/* harmony import */ var _material_ui_system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/system */ \"./jaas-client/node_modules/@material-ui/system/esm/index.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/styled */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/styled.js\");\n\n\nvar styleFunction = Object(_material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"css\"])(Object(_material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"compose\"])(_material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"borders\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"display\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"flexbox\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"grid\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"positions\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"palette\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"shadows\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"sizing\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"spacing\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"typography\"]));\n/**\n * @ignore - do not document.\n */\n\nvar Box = Object(_styles_styled__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('div')(styleFunction, {\n  name: 'MuiBox'\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Box);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Box/Box.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Box/index.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Box/index.js ***!
  \*********************************************************************/
/*! exports provided: default, styleFunction */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Box__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Box */ \"./jaas-client/node_modules/@material-ui/core/esm/Box/Box.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Box__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"styleFunction\", function() { return _Box__WEBPACK_IMPORTED_MODULE_0__[\"styleFunction\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Box/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Button/Button.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Button/Button.js ***!
  \*************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/colorManipulator */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js\");\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ButtonBase */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, theme.typography.button, {\n      boxSizing: 'border-box',\n      minWidth: 64,\n      padding: '6px 16px',\n      borderRadius: theme.shape.borderRadius,\n      color: theme.palette.text.primary,\n      transition: theme.transitions.create(['background-color', 'box-shadow', 'border'], {\n        duration: theme.transitions.duration.short\n      }),\n      '&:hover': {\n        textDecoration: 'none',\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.text.primary, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        },\n        '&$disabled': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    }),\n\n    /* Styles applied to the span element that wraps the children. */\n    label: {\n      width: '100%',\n      // Ensure the correct width for iOS Safari\n      display: 'inherit',\n      alignItems: 'inherit',\n      justifyContent: 'inherit'\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"`. */\n    text: {\n      padding: '6px 8px'\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"` and `color=\"primary\"`. */\n    textPrimary: {\n      color: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"` and `color=\"secondary\"`. */\n    textSecondary: {\n      color: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      padding: '5px 15px',\n      border: \"1px solid \".concat(theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'),\n      '&$disabled': {\n        border: \"1px solid \".concat(theme.palette.action.disabledBackground)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"primary\"`. */\n    outlinedPrimary: {\n      color: theme.palette.primary.main,\n      border: \"1px solid \".concat(Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.primary.main, 0.5)),\n      '&:hover': {\n        border: \"1px solid \".concat(theme.palette.primary.main),\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"secondary\"`. */\n    outlinedSecondary: {\n      color: theme.palette.secondary.main,\n      border: \"1px solid \".concat(Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.secondary.main, 0.5)),\n      '&:hover': {\n        border: \"1px solid \".concat(theme.palette.secondary.main),\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        border: \"1px solid \".concat(theme.palette.action.disabled)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"`. */\n    contained: {\n      color: theme.palette.getContrastText(theme.palette.grey[300]),\n      backgroundColor: theme.palette.grey[300],\n      boxShadow: theme.shadows[2],\n      '&:hover': {\n        backgroundColor: theme.palette.grey.A100,\n        boxShadow: theme.shadows[4],\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          boxShadow: theme.shadows[2],\n          backgroundColor: theme.palette.grey[300]\n        },\n        '&$disabled': {\n          backgroundColor: theme.palette.action.disabledBackground\n        }\n      },\n      '&$focusVisible': {\n        boxShadow: theme.shadows[6]\n      },\n      '&:active': {\n        boxShadow: theme.shadows[8]\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled,\n        boxShadow: theme.shadows[0],\n        backgroundColor: theme.palette.action.disabledBackground\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"` and `color=\"primary\"`. */\n    containedPrimary: {\n      color: theme.palette.primary.contrastText,\n      backgroundColor: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.primary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.primary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"` and `color=\"secondary\"`. */\n    containedSecondary: {\n      color: theme.palette.secondary.contrastText,\n      backgroundColor: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.secondary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.secondary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `disableElevation={true}`. */\n    disableElevation: {\n      boxShadow: 'none',\n      '&:hover': {\n        boxShadow: 'none'\n      },\n      '&$focusVisible': {\n        boxShadow: 'none'\n      },\n      '&:active': {\n        boxShadow: 'none'\n      },\n      '&$disabled': {\n        boxShadow: 'none'\n      }\n    },\n\n    /* Pseudo-class applied to the ButtonBase root element if the button is keyboard focused. */\n    focusVisible: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit',\n      borderColor: 'currentColor'\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"text\"`. */\n    textSizeSmall: {\n      padding: '4px 5px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"text\"`. */\n    textSizeLarge: {\n      padding: '8px 11px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"outlined\"`. */\n    outlinedSizeSmall: {\n      padding: '3px 9px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"outlined\"`. */\n    outlinedSizeLarge: {\n      padding: '7px 21px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"contained\"`. */\n    containedSizeSmall: {\n      padding: '4px 10px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"contained\"`. */\n    containedSizeLarge: {\n      padding: '8px 22px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {},\n\n    /* Styles applied to the root element if `size=\"large\"`. */\n    sizeLarge: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {\n      width: '100%'\n    },\n\n    /* Styles applied to the startIcon element if supplied. */\n    startIcon: {\n      display: 'inherit',\n      marginRight: 8,\n      marginLeft: -4,\n      '&$iconSizeSmall': {\n        marginLeft: -2\n      }\n    },\n\n    /* Styles applied to the endIcon element if supplied. */\n    endIcon: {\n      display: 'inherit',\n      marginRight: -4,\n      marginLeft: 8,\n      '&$iconSizeSmall': {\n        marginRight: -2\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"small\"`. */\n    iconSizeSmall: {\n      '& > *:first-child': {\n        fontSize: 18\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"medium\"`. */\n    iconSizeMedium: {\n      '& > *:first-child': {\n        fontSize: 20\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"large\"`. */\n    iconSizeLarge: {\n      '& > *:first-child': {\n        fontSize: 22\n      }\n    }\n  };\n};\nvar Button = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Button(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'button' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableElevati = props.disableElevation,\n      disableElevation = _props$disableElevati === void 0 ? false : _props$disableElevati,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      endIconProp = props.endIcon,\n      focusVisibleClassName = props.focusVisibleClassName,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      startIconProp = props.startIcon,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'button' : _props$type,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'text' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"disableElevation\", \"disableFocusRipple\", \"endIcon\", \"focusVisibleClassName\", \"fullWidth\", \"size\", \"startIcon\", \"type\", \"variant\"]);\n\n  var startIcon = startIconProp && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.startIcon, classes[\"iconSize\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(size))])\n  }, startIconProp);\n  var endIcon = endIconProp && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.endIcon, classes[\"iconSize\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(size))])\n  }, endIconProp);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_ButtonBase__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes[variant], className, color === 'inherit' ? classes.colorInherit : color !== 'default' && classes[\"\".concat(variant).concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(color))], size !== 'medium' && [classes[\"\".concat(variant, \"Size\").concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(size))], classes[\"size\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(size))]], disableElevation && classes.disableElevation, disabled && classes.disabled, fullWidth && classes.fullWidth),\n    component: component,\n    disabled: disabled,\n    focusRipple: !disableFocusRipple,\n    focusVisibleClassName: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.focusVisible, focusVisibleClassName),\n    ref: ref,\n    type: type\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    className: classes.label\n  }, startIcon, children, endIcon));\n});\n true ? Button.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the button.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the button will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, no elevation is used.\n   */\n  disableElevation: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the  keyboard focus ripple will be disabled.\n   */\n  disableFocusRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `focusVisibleClassName`.\n   */\n  disableRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Element placed after the children.\n   */\n  endIcon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the button will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The URL to link to when the button is clicked.\n   * If defined, an `a` element will be used as the root node.\n   */\n  href: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The size of the button.\n   * `small` is equivalent to the dense button styling.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['large', 'medium', 'small']),\n\n  /**\n   * Element placed before the children.\n   */\n  startIcon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * @ignore\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['button', 'reset', 'submit']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['contained', 'outlined', 'text'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiButton'\n})(Button));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Button/Button.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Button/index.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Button/index.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Button */ \"./jaas-client/node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Button__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Button/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js ***!
  \*********************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/useEventCallback */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/useIsFocusVisible */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js\");\n/* harmony import */ var _TouchRipple__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./TouchRipple */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'inline-flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    position: 'relative',\n    WebkitTapHighlightColor: 'transparent',\n    backgroundColor: 'transparent',\n    // Reset default value\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0,\n    border: 0,\n    margin: 0,\n    // Remove the margin in Safari\n    borderRadius: 0,\n    padding: 0,\n    // Remove the padding in Firefox\n    cursor: 'pointer',\n    userSelect: 'none',\n    verticalAlign: 'middle',\n    '-moz-appearance': 'none',\n    // Reset\n    '-webkit-appearance': 'none',\n    // Reset\n    textDecoration: 'none',\n    // So we take precedent over the style of a native <a /> element.\n    color: 'inherit',\n    '&::-moz-focus-inner': {\n      borderStyle: 'none' // Remove Firefox dotted outline.\n\n    },\n    '&$disabled': {\n      pointerEvents: 'none',\n      // Disable link interactions\n      cursor: 'default'\n    },\n    '@media print': {\n      colorAdjust: 'exact'\n    }\n  },\n\n  /* Pseudo-class applied to the root element if `disabled={true}`. */\n  disabled: {},\n\n  /* Pseudo-class applied to the root element if keyboard focused. */\n  focusVisible: {}\n};\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\n\nvar ButtonBase = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function ButtonBase(props, ref) {\n  var action = props.action,\n      buttonRefProp = props.buttonRef,\n      _props$centerRipple = props.centerRipple,\n      centerRipple = _props$centerRipple === void 0 ? false : _props$centerRipple,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'button' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableRipple = props.disableRipple,\n      disableRipple = _props$disableRipple === void 0 ? false : _props$disableRipple,\n      _props$disableTouchRi = props.disableTouchRipple,\n      disableTouchRipple = _props$disableTouchRi === void 0 ? false : _props$disableTouchRi,\n      _props$focusRipple = props.focusRipple,\n      focusRipple = _props$focusRipple === void 0 ? false : _props$focusRipple,\n      focusVisibleClassName = props.focusVisibleClassName,\n      onBlur = props.onBlur,\n      onClick = props.onClick,\n      onFocus = props.onFocus,\n      onFocusVisible = props.onFocusVisible,\n      onKeyDown = props.onKeyDown,\n      onKeyUp = props.onKeyUp,\n      onMouseDown = props.onMouseDown,\n      onMouseLeave = props.onMouseLeave,\n      onMouseUp = props.onMouseUp,\n      onTouchEnd = props.onTouchEnd,\n      onTouchMove = props.onTouchMove,\n      onTouchStart = props.onTouchStart,\n      onDragLeave = props.onDragLeave,\n      _props$tabIndex = props.tabIndex,\n      tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,\n      TouchRippleProps = props.TouchRippleProps,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'button' : _props$type,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"action\", \"buttonRef\", \"centerRipple\", \"children\", \"classes\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"onBlur\", \"onClick\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"onDragLeave\", \"tabIndex\", \"TouchRippleProps\", \"type\"]);\n\n  var buttonRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n\n  function getButtonNode() {\n    // #StrictMode ready\n    return react_dom__WEBPACK_IMPORTED_MODULE_4__[\"findDOMNode\"](buttonRef.current);\n  }\n\n  var rippleRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      focusVisible = _React$useState[0],\n      setFocusVisible = _React$useState[1];\n\n  if (disabled && focusVisible) {\n    setFocusVisible(false);\n  }\n\n  var _useIsFocusVisible = Object(_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(),\n      isFocusVisible = _useIsFocusVisible.isFocusVisible,\n      onBlurVisible = _useIsFocusVisible.onBlurVisible,\n      focusVisibleRef = _useIsFocusVisible.ref;\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useImperativeHandle\"](action, function () {\n    return {\n      focusVisible: function focusVisible() {\n        setFocusVisible(true);\n        buttonRef.current.focus();\n      }\n    };\n  }, []);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (focusVisible && focusRipple && !disableRipple) {\n      rippleRef.current.pulsate();\n    }\n  }, [disableRipple, focusRipple, focusVisible]);\n\n  function useRippleHandler(rippleAction, eventCallback) {\n    var skipRippleAction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : disableTouchRipple;\n    return Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(function (event) {\n      if (eventCallback) {\n        eventCallback(event);\n      }\n\n      var ignore = skipRippleAction;\n\n      if (!ignore && rippleRef.current) {\n        rippleRef.current[rippleAction](event);\n      }\n\n      return true;\n    });\n  }\n\n  var handleMouseDown = useRippleHandler('start', onMouseDown);\n  var handleDragLeave = useRippleHandler('stop', onDragLeave);\n  var handleMouseUp = useRippleHandler('stop', onMouseUp);\n  var handleMouseLeave = useRippleHandler('stop', function (event) {\n    if (focusVisible) {\n      event.preventDefault();\n    }\n\n    if (onMouseLeave) {\n      onMouseLeave(event);\n    }\n  });\n  var handleTouchStart = useRippleHandler('start', onTouchStart);\n  var handleTouchEnd = useRippleHandler('stop', onTouchEnd);\n  var handleTouchMove = useRippleHandler('stop', onTouchMove);\n  var handleBlur = useRippleHandler('stop', function (event) {\n    if (focusVisible) {\n      onBlurVisible(event);\n      setFocusVisible(false);\n    }\n\n    if (onBlur) {\n      onBlur(event);\n    }\n  }, false);\n  var handleFocus = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(function (event) {\n    // Fix for https://github.com/facebook/react/issues/7769\n    if (!buttonRef.current) {\n      buttonRef.current = event.currentTarget;\n    }\n\n    if (isFocusVisible(event)) {\n      setFocusVisible(true);\n\n      if (onFocusVisible) {\n        onFocusVisible(event);\n      }\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n  });\n\n  var isNonNativeButton = function isNonNativeButton() {\n    var button = getButtonNode();\n    return component && component !== 'button' && !(button.tagName === 'A' && button.href);\n  };\n  /**\n   * IE 11 shim for https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat\n   */\n\n\n  var keydownRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](false);\n  var handleKeyDown = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(function (event) {\n    // Check if key is already down to avoid repeats being counted as multiple activations\n    if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key === ' ') {\n      keydownRef.current = true;\n      event.persist();\n      rippleRef.current.stop(event, function () {\n        rippleRef.current.start(event);\n      });\n    }\n\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {\n      event.preventDefault();\n    }\n\n    if (onKeyDown) {\n      onKeyDown(event);\n    } // Keyboard accessibility for non interactive elements\n\n\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {\n      event.preventDefault();\n\n      if (onClick) {\n        onClick(event);\n      }\n    }\n  });\n  var handleKeyUp = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(function (event) {\n    // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed\n    // https://codesandbox.io/s/button-keyup-preventdefault-dn7f0\n    if (focusRipple && event.key === ' ' && rippleRef.current && focusVisible && !event.defaultPrevented) {\n      keydownRef.current = false;\n      event.persist();\n      rippleRef.current.stop(event, function () {\n        rippleRef.current.pulsate(event);\n      });\n    }\n\n    if (onKeyUp) {\n      onKeyUp(event);\n    } // Keyboard accessibility for non interactive elements\n\n\n    if (onClick && event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented) {\n      onClick(event);\n    }\n  });\n  var ComponentProp = component;\n\n  if (ComponentProp === 'button' && other.href) {\n    ComponentProp = 'a';\n  }\n\n  var buttonProps = {};\n\n  if (ComponentProp === 'button') {\n    buttonProps.type = type;\n    buttonProps.disabled = disabled;\n  } else {\n    if (ComponentProp !== 'a' || !other.href) {\n      buttonProps.role = 'button';\n    }\n\n    buttonProps['aria-disabled'] = disabled;\n  }\n\n  var handleUserRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(buttonRefProp, ref);\n  var handleOwnRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(focusVisibleRef, buttonRef);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(handleUserRef, handleOwnRef);\n\n  var _React$useState2 = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      mountedState = _React$useState2[0],\n      setMountedState = _React$useState2[1];\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    setMountedState(true);\n  }, []);\n  var enableTouchRipple = mountedState && !disableRipple && !disabled;\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n      if (enableTouchRipple && !rippleRef.current) {\n        console.error(['Material-UI: The `component` prop provided to ButtonBase is invalid.', 'Please make sure the children prop is rendered in this custom component.'].join('\\n'));\n      }\n    }, [enableTouchRipple]);\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](ComponentProp, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className, focusVisible && [classes.focusVisible, focusVisibleClassName], disabled && classes.disabled),\n    onBlur: handleBlur,\n    onClick: onClick,\n    onFocus: handleFocus,\n    onKeyDown: handleKeyDown,\n    onKeyUp: handleKeyUp,\n    onMouseDown: handleMouseDown,\n    onMouseLeave: handleMouseLeave,\n    onMouseUp: handleMouseUp,\n    onDragLeave: handleDragLeave,\n    onTouchEnd: handleTouchEnd,\n    onTouchMove: handleTouchMove,\n    onTouchStart: handleTouchStart,\n    ref: handleRef,\n    tabIndex: disabled ? -1 : tabIndex\n  }, buttonProps, other), children, enableTouchRipple ?\n  /*#__PURE__*/\n\n  /* TouchRipple is only needed client-side, x2 boost on the server. */\n  react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_TouchRipple__WEBPACK_IMPORTED_MODULE_11__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    ref: rippleRef,\n    center: centerRipple\n  }, TouchRippleProps)) : null);\n});\n true ? ButtonBase.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A ref for imperative actions.\n   * It currently only supports `focusVisible()` action.\n   */\n  action: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"refType\"],\n\n  /**\n   * @ignore\n   *\n   * Use that prop to pass a ref to the native button component.\n   * @deprecated Use `ref` instead.\n   */\n  buttonRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"refType\"],\n\n  /**\n   * If `true`, the ripples will be centered.\n   * They won't start at the cursor interaction position.\n   */\n  centerRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"elementTypeAcceptingRef\"],\n\n  /**\n   * If `true`, the base button will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `focusVisibleClassName`.\n   */\n  disableRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the touch ripple effect will be disabled.\n   */\n  disableTouchRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the base button will have a keyboard focus ripple.\n   */\n  focusRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * This prop can help a person know which element has the keyboard focus.\n   * The class name will be applied when the element gain the focus through a keyboard interaction.\n   * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n   * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/master/explainer.md).\n   * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n   * if needed.\n   */\n  focusVisibleClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * @ignore\n   */\n  href: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onDragLeave: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component is focused with a keyboard.\n   * We trigger a `onFocus` callback too.\n   */\n  onFocusVisible: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onKeyUp: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onMouseUp: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onTouchEnd: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onTouchMove: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onTouchStart: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Props applied to the `TouchRipple` element.\n   */\n  TouchRippleProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['button', 'reset', 'submit']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(styles, {\n  name: 'MuiButtonBase'\n})(ButtonBase));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/Ripple.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/Ripple.js ***!
  \*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _utils_useEventCallback__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/useEventCallback */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js\");\n\n\n\n\nvar useEnhancedEffect = typeof window === 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"] : react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"];\n/**\n * @ignore - internal component.\n */\n\nfunction Ripple(props) {\n  var classes = props.classes,\n      _props$pulsate = props.pulsate,\n      pulsate = _props$pulsate === void 0 ? false : _props$pulsate,\n      rippleX = props.rippleX,\n      rippleY = props.rippleY,\n      rippleSize = props.rippleSize,\n      inProp = props.in,\n      _props$onExited = props.onExited,\n      onExited = _props$onExited === void 0 ? function () {} : _props$onExited,\n      timeout = props.timeout;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"](false),\n      leaving = _React$useState[0],\n      setLeaving = _React$useState[1];\n\n  var rippleClassName = Object(clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(classes.ripple, classes.rippleVisible, pulsate && classes.ripplePulsate);\n  var rippleStyles = {\n    width: rippleSize,\n    height: rippleSize,\n    top: -(rippleSize / 2) + rippleY,\n    left: -(rippleSize / 2) + rippleX\n  };\n  var childClassName = Object(clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(classes.child, leaving && classes.childLeaving, pulsate && classes.childPulsate);\n  var handleExited = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(onExited); // Ripple is used for user feedback (e.g. click or press) so we want to apply styles with the highest priority\n\n  useEnhancedEffect(function () {\n    if (!inProp) {\n      // react-transition-group#onExit\n      setLeaving(true); // react-transition-group#onExited\n\n      var timeoutId = setTimeout(handleExited, timeout);\n      return function () {\n        clearTimeout(timeoutId);\n      };\n    }\n\n    return undefined;\n  }, [handleExited, inProp, timeout]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n    className: rippleClassName,\n    style: rippleStyles\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n    className: childClassName\n  }));\n}\n\n true ? Ripple.propTypes = {\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  in: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n\n  /**\n   * If `true`, the ripple pulsates, typically indicating the keyboard focus state of an element.\n   */\n  pulsate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n\n  /**\n   * Diameter of the ripple.\n   */\n  rippleSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n\n  /**\n   * Horizontal position of the ripple center.\n   */\n  rippleX: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n\n  /**\n   * Vertical position of the ripple center.\n   */\n  rippleY: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n\n  /**\n   * exit delay\n   */\n  timeout: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Ripple);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/Ripple.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js ***!
  \**********************************************************************************/
/*! exports provided: DELAY_RIPPLE, styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DELAY_RIPPLE\", function() { return DELAY_RIPPLE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_transition_group__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-transition-group */ \"./jaas-client/node_modules/react-transition-group/esm/index.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Ripple__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Ripple */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/Ripple.js\");\n\n\n\n\n\n\n\n\n\nvar DURATION = 550;\nvar DELAY_RIPPLE = 80;\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      overflow: 'hidden',\n      pointerEvents: 'none',\n      position: 'absolute',\n      zIndex: 0,\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0,\n      borderRadius: 'inherit'\n    },\n\n    /* Styles applied to the internal `Ripple` components `ripple` class. */\n    ripple: {\n      opacity: 0,\n      position: 'absolute'\n    },\n\n    /* Styles applied to the internal `Ripple` components `rippleVisible` class. */\n    rippleVisible: {\n      opacity: 0.3,\n      transform: 'scale(1)',\n      animation: \"$enter \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut)\n    },\n\n    /* Styles applied to the internal `Ripple` components `ripplePulsate` class. */\n    ripplePulsate: {\n      animationDuration: \"\".concat(theme.transitions.duration.shorter, \"ms\")\n    },\n\n    /* Styles applied to the internal `Ripple` components `child` class. */\n    child: {\n      opacity: 1,\n      display: 'block',\n      width: '100%',\n      height: '100%',\n      borderRadius: '50%',\n      backgroundColor: 'currentColor'\n    },\n\n    /* Styles applied to the internal `Ripple` components `childLeaving` class. */\n    childLeaving: {\n      opacity: 0,\n      animation: \"$exit \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut)\n    },\n\n    /* Styles applied to the internal `Ripple` components `childPulsate` class. */\n    childPulsate: {\n      position: 'absolute',\n      left: 0,\n      top: 0,\n      animation: \"$pulsate 2500ms \".concat(theme.transitions.easing.easeInOut, \" 200ms infinite\")\n    },\n    '@keyframes enter': {\n      '0%': {\n        transform: 'scale(0)',\n        opacity: 0.1\n      },\n      '100%': {\n        transform: 'scale(1)',\n        opacity: 0.3\n      }\n    },\n    '@keyframes exit': {\n      '0%': {\n        opacity: 1\n      },\n      '100%': {\n        opacity: 0\n      }\n    },\n    '@keyframes pulsate': {\n      '0%': {\n        transform: 'scale(1)'\n      },\n      '50%': {\n        transform: 'scale(0.92)'\n      },\n      '100%': {\n        transform: 'scale(1)'\n      }\n    }\n  };\n};\n/**\n * @ignore - internal component.\n *\n * TODO v5: Make private\n */\n\nvar TouchRipple = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function TouchRipple(props, ref) {\n  var _props$center = props.center,\n      centerProp = _props$center === void 0 ? false : _props$center,\n      classes = props.classes,\n      className = props.className,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"center\", \"classes\", \"className\"]);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__[\"useState\"]([]),\n      ripples = _React$useState[0],\n      setRipples = _React$useState[1];\n\n  var nextKey = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](0);\n  var rippleCallback = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    if (rippleCallback.current) {\n      rippleCallback.current();\n      rippleCallback.current = null;\n    }\n  }, [ripples]); // Used to filter out mouse emulated events on mobile.\n\n  var ignoringMouseDown = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](false); // We use a timer in order to only show the ripples for touch \"click\" like events.\n  // We don't want to display the ripple for touch scroll events.\n\n  var startTimer = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null); // This is the hook called once the previous timeout is ready.\n\n  var startTimerCommit = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  var container = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    return function () {\n      clearTimeout(startTimer.current);\n    };\n  }, []);\n  var startCommit = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function (params) {\n    var pulsate = params.pulsate,\n        rippleX = params.rippleX,\n        rippleY = params.rippleY,\n        rippleSize = params.rippleSize,\n        cb = params.cb;\n    setRipples(function (oldRipples) {\n      return [].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(oldRipples), [/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_Ripple__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n        key: nextKey.current,\n        classes: classes,\n        timeout: DURATION,\n        pulsate: pulsate,\n        rippleX: rippleX,\n        rippleY: rippleY,\n        rippleSize: rippleSize\n      })]);\n    });\n    nextKey.current += 1;\n    rippleCallback.current = cb;\n  }, [classes]);\n  var start = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function () {\n    var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var cb = arguments.length > 2 ? arguments[2] : undefined;\n    var _options$pulsate = options.pulsate,\n        pulsate = _options$pulsate === void 0 ? false : _options$pulsate,\n        _options$center = options.center,\n        center = _options$center === void 0 ? centerProp || options.pulsate : _options$center,\n        _options$fakeElement = options.fakeElement,\n        fakeElement = _options$fakeElement === void 0 ? false : _options$fakeElement;\n\n    if (event.type === 'mousedown' && ignoringMouseDown.current) {\n      ignoringMouseDown.current = false;\n      return;\n    }\n\n    if (event.type === 'touchstart') {\n      ignoringMouseDown.current = true;\n    }\n\n    var element = fakeElement ? null : container.current;\n    var rect = element ? element.getBoundingClientRect() : {\n      width: 0,\n      height: 0,\n      left: 0,\n      top: 0\n    }; // Get the size of the ripple\n\n    var rippleX;\n    var rippleY;\n    var rippleSize;\n\n    if (center || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n      rippleX = Math.round(rect.width / 2);\n      rippleY = Math.round(rect.height / 2);\n    } else {\n      var _ref = event.touches ? event.touches[0] : event,\n          clientX = _ref.clientX,\n          clientY = _ref.clientY;\n\n      rippleX = Math.round(clientX - rect.left);\n      rippleY = Math.round(clientY - rect.top);\n    }\n\n    if (center) {\n      rippleSize = Math.sqrt((2 * Math.pow(rect.width, 2) + Math.pow(rect.height, 2)) / 3); // For some reason the animation is broken on Mobile Chrome if the size if even.\n\n      if (rippleSize % 2 === 0) {\n        rippleSize += 1;\n      }\n    } else {\n      var sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n      var sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n      rippleSize = Math.sqrt(Math.pow(sizeX, 2) + Math.pow(sizeY, 2));\n    } // Touche devices\n\n\n    if (event.touches) {\n      // check that this isn't another touchstart due to multitouch\n      // otherwise we will only clear a single timer when unmounting while two\n      // are running\n      if (startTimerCommit.current === null) {\n        // Prepare the ripple effect.\n        startTimerCommit.current = function () {\n          startCommit({\n            pulsate: pulsate,\n            rippleX: rippleX,\n            rippleY: rippleY,\n            rippleSize: rippleSize,\n            cb: cb\n          });\n        }; // Delay the execution of the ripple effect.\n\n\n        startTimer.current = setTimeout(function () {\n          if (startTimerCommit.current) {\n            startTimerCommit.current();\n            startTimerCommit.current = null;\n          }\n        }, DELAY_RIPPLE); // We have to make a tradeoff with this value.\n      }\n    } else {\n      startCommit({\n        pulsate: pulsate,\n        rippleX: rippleX,\n        rippleY: rippleY,\n        rippleSize: rippleSize,\n        cb: cb\n      });\n    }\n  }, [centerProp, startCommit]);\n  var pulsate = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function () {\n    start({}, {\n      pulsate: true\n    });\n  }, [start]);\n  var stop = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function (event, cb) {\n    clearTimeout(startTimer.current); // The touch interaction occurs too quickly.\n    // We still want to show ripple effect.\n\n    if (event.type === 'touchend' && startTimerCommit.current) {\n      event.persist();\n      startTimerCommit.current();\n      startTimerCommit.current = null;\n      startTimer.current = setTimeout(function () {\n        stop(event, cb);\n      });\n      return;\n    }\n\n    startTimerCommit.current = null;\n    setRipples(function (oldRipples) {\n      if (oldRipples.length > 0) {\n        return oldRipples.slice(1);\n      }\n\n      return oldRipples;\n    });\n    rippleCallback.current = cb;\n  }, []);\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useImperativeHandle\"](ref, function () {\n    return {\n      pulsate: pulsate,\n      start: start,\n      stop: stop\n    };\n  }, [pulsate, start, stop]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"span\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(classes.root, className),\n    ref: container\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](react_transition_group__WEBPACK_IMPORTED_MODULE_5__[\"TransitionGroup\"], {\n    component: null,\n    exit: true\n  }, ripples));\n});\n true ? TouchRipple.propTypes = {\n  /**\n   * If `true`, the ripple starts at the center of the component\n   * rather than at the point of interaction.\n   */\n  center: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  flip: false,\n  name: 'MuiTouchRipple'\n})( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"memo\"](TouchRipple)));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ButtonBase */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _ButtonBase__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Checkbox/Checkbox.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Checkbox/Checkbox.js ***!
  \*****************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _internal_SwitchBase__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../internal/SwitchBase */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/SwitchBase.js\");\n/* harmony import */ var _internal_svg_icons_CheckBoxOutlineBlank__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../internal/svg-icons/CheckBoxOutlineBlank */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js\");\n/* harmony import */ var _internal_svg_icons_CheckBox__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../internal/svg-icons/CheckBox */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js\");\n/* harmony import */ var _styles_colorManipulator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../styles/colorManipulator */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js\");\n/* harmony import */ var _internal_svg_icons_IndeterminateCheckBox__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../internal/svg-icons/IndeterminateCheckBox */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      color: theme.palette.text.secondary\n    },\n\n    /* Pseudo-class applied to the root element if `checked={true}`. */\n    checked: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `indeterminate={true}`. */\n    indeterminate: {},\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      '&$checked': {\n        color: theme.palette.primary.main,\n        '&:hover': {\n          backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_9__[\"fade\"])(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      '&$checked': {\n        color: theme.palette.secondary.main,\n        '&:hover': {\n          backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_9__[\"fade\"])(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    }\n  };\n};\nvar defaultCheckedIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_svg_icons_CheckBox__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null);\nvar defaultIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_svg_icons_CheckBoxOutlineBlank__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null);\nvar defaultIndeterminateIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_svg_icons_IndeterminateCheckBox__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null);\nvar Checkbox = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Checkbox(props, ref) {\n  var _props$checkedIcon = props.checkedIcon,\n      checkedIcon = _props$checkedIcon === void 0 ? defaultCheckedIcon : _props$checkedIcon,\n      classes = props.classes,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'secondary' : _props$color,\n      _props$icon = props.icon,\n      iconProp = _props$icon === void 0 ? defaultIcon : _props$icon,\n      _props$indeterminate = props.indeterminate,\n      indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,\n      _props$indeterminateI = props.indeterminateIcon,\n      indeterminateIconProp = _props$indeterminateI === void 0 ? defaultIndeterminateIcon : _props$indeterminateI,\n      inputProps = props.inputProps,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"checkedIcon\", \"classes\", \"color\", \"icon\", \"indeterminate\", \"indeterminateIcon\", \"inputProps\", \"size\"]);\n\n  var icon = indeterminate ? indeterminateIconProp : iconProp;\n  var indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_SwitchBase__WEBPACK_IMPORTED_MODULE_6__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    type: \"checkbox\",\n    classes: {\n      root: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(color))], indeterminate && classes.indeterminate),\n      checked: classes.checked,\n      disabled: classes.disabled\n    },\n    color: color,\n    inputProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      'data-indeterminate': indeterminate\n    }, inputProps),\n    icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](icon, {\n      fontSize: icon.props.fontSize === undefined && size === \"small\" ? size : icon.props.fontSize\n    }),\n    checkedIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](indeterminateIcon, {\n      fontSize: indeterminateIcon.props.fontSize === undefined && size === \"small\" ? size : indeterminateIcon.props.fontSize\n    }),\n    ref: ref\n  }, other));\n});\n true ? Checkbox.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['default', 'primary', 'secondary']),\n\n  /**\n   * If `true`, the checkbox will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the component appears indeterminate.\n   * This does not set the native input element to indeterminate due\n   * to inconsistent behavior across browsers.\n   * However, we set a `data-indeterminate` attribute on the input.\n   */\n  indeterminate: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon to display when the component is indeterminate.\n   */\n  indeterminateIcon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The size of the checkbox.\n   * `small` is equivalent to the dense checkbox styling.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['medium', 'small']),\n\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   * The browser uses \"on\" as the default value.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(styles, {\n  name: 'MuiCheckbox'\n})(Checkbox));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Checkbox/Checkbox.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Checkbox/index.js":
/*!**************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Checkbox/index.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Checkbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Checkbox */ \"./jaas-client/node_modules/@material-ui/core/esm/Checkbox/Checkbox.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Checkbox__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Checkbox/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js":
/*!*********************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js ***!
  \*********************************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\nvar SIZE = 44;\n\nfunction getRelativeValue(value, min, max) {\n  return (Math.min(Math.max(min, value), max) - min) / (max - min);\n}\n\nfunction easeOut(t) {\n  t = getRelativeValue(t, 0, 1); // https://gist.github.com/gre/1650294\n\n  t = (t -= 1) * t * t + 1;\n  return t;\n}\n\nfunction easeIn(t) {\n  return t * t;\n}\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'inline-block'\n    },\n\n    /* Styles applied to the root element if `variant=\"static\"`. */\n    static: {\n      transition: theme.transitions.create('transform')\n    },\n\n    /* Styles applied to the root element if `variant=\"indeterminate\"`. */\n    indeterminate: {\n      animation: '$circular-rotate 1.4s linear infinite'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the `svg` element. */\n    svg: {\n      display: 'block' // Keeps the progress centered\n\n    },\n\n    /* Styles applied to the `circle` svg path. */\n    circle: {\n      stroke: 'currentColor' // Use butt to follow the specification, by chance, it's already the default CSS value.\n      // strokeLinecap: 'butt',\n\n    },\n\n    /* Styles applied to the `circle` svg path if `variant=\"static\"`. */\n    circleStatic: {\n      transition: theme.transitions.create('stroke-dashoffset')\n    },\n\n    /* Styles applied to the `circle` svg path if `variant=\"indeterminate\"`. */\n    circleIndeterminate: {\n      animation: '$circular-dash 1.4s ease-in-out infinite',\n      // Some default value that looks fine waiting for the animation to kicks in.\n      strokeDasharray: '80px, 200px',\n      strokeDashoffset: '0px' // Add the unit to fix a Edge 16 and below bug.\n\n    },\n    '@keyframes circular-rotate': {\n      '0%': {\n        // Fix IE 11 wobbly\n        transformOrigin: '50% 50%'\n      },\n      '100%': {\n        transform: 'rotate(360deg)'\n      }\n    },\n    '@keyframes circular-dash': {\n      '0%': {\n        strokeDasharray: '1px, 200px',\n        strokeDashoffset: '0px'\n      },\n      '50%': {\n        strokeDasharray: '100px, 200px',\n        strokeDashoffset: '-15px'\n      },\n      '100%': {\n        strokeDasharray: '100px, 200px',\n        strokeDashoffset: '-125px'\n      }\n    },\n\n    /* Styles applied to the `circle` svg path if `disableShrink={true}`. */\n    circleDisableShrink: {\n      animation: 'none'\n    }\n  };\n};\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\n\nvar CircularProgress = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function CircularProgress(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$disableShrink = props.disableShrink,\n      disableShrink = _props$disableShrink === void 0 ? false : _props$disableShrink,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 40 : _props$size,\n      style = props.style,\n      _props$thickness = props.thickness,\n      thickness = _props$thickness === void 0 ? 3.6 : _props$thickness,\n      _props$value = props.value,\n      value = _props$value === void 0 ? 0 : _props$value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'indeterminate' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"color\", \"disableShrink\", \"size\", \"style\", \"thickness\", \"value\", \"variant\"]);\n\n  var circleStyle = {};\n  var rootStyle = {};\n  var rootProps = {};\n\n  if (variant === 'determinate' || variant === 'static') {\n    var circumference = 2 * Math.PI * ((SIZE - thickness) / 2);\n    circleStyle.strokeDasharray = circumference.toFixed(3);\n    rootProps['aria-valuenow'] = Math.round(value);\n\n    if (variant === 'static') {\n      circleStyle.strokeDashoffset = \"\".concat(((100 - value) / 100 * circumference).toFixed(3), \"px\");\n      rootStyle.transform = 'rotate(-90deg)';\n    } else {\n      circleStyle.strokeDashoffset = \"\".concat((easeIn((100 - value) / 100) * circumference).toFixed(3), \"px\");\n      rootStyle.transform = \"rotate(\".concat((easeOut(value / 70) * 270).toFixed(3), \"deg)\");\n    }\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, color !== 'inherit' && classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(color))], {\n      'indeterminate': classes.indeterminate,\n      'static': classes.static\n    }[variant]),\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      width: size,\n      height: size\n    }, rootStyle, style),\n    ref: ref,\n    role: \"progressbar\"\n  }, rootProps, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"svg\", {\n    className: classes.svg,\n    viewBox: \"\".concat(SIZE / 2, \" \").concat(SIZE / 2, \" \").concat(SIZE, \" \").concat(SIZE)\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"circle\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.circle, disableShrink && classes.circleDisableShrink, {\n      'indeterminate': classes.circleIndeterminate,\n      'static': classes.circleStatic\n    }[variant]),\n    style: circleStyle,\n    cx: SIZE,\n    cy: SIZE,\n    r: (SIZE - thickness) / 2,\n    fill: \"none\",\n    strokeWidth: thickness\n  })));\n});\n true ? CircularProgress.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['inherit', 'primary', 'secondary']),\n\n  /**\n   * If `true`, the shrink animation is disabled.\n   * This only works if variant is `indeterminate`.\n   */\n  disableShrink: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool, function (props) {\n    if (props.disableShrink && props.variant && props.variant !== 'indeterminate') {\n      return new Error('Material-UI: You have provided the `disableShrink` prop ' + 'with a variant other than `indeterminate`. This will have no effect.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * The size of the circle.\n   * If using a number, the pixel unit is assumed.\n   * If using a string, you need to provide the CSS unit, e.g '3rem'.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The thickness of the circle.\n   */\n  thickness: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * The value of the progress indicator for the determinate and static variants.\n   * Value between 0 and 100.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * The variant to use.\n   * Use indeterminate when there is no progress value.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['determinate', 'indeterminate', 'static'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiCircularProgress',\n  flip: false\n})(CircularProgress));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/index.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/index.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _CircularProgress__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CircularProgress */ \"./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _CircularProgress__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Container/Container.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Container/Container.js ***!
  \*******************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n      width: '100%',\n      marginLeft: 'auto',\n      boxSizing: 'border-box',\n      marginRight: 'auto',\n      paddingLeft: theme.spacing(2),\n      paddingRight: theme.spacing(2),\n      display: 'block'\n    }, theme.breakpoints.up('sm'), {\n      paddingLeft: theme.spacing(3),\n      paddingRight: theme.spacing(3)\n    }),\n\n    /* Styles applied to the root element if `disableGutters={true}`. */\n    disableGutters: {\n      paddingLeft: 0,\n      paddingRight: 0\n    },\n\n    /* Styles applied to the root element if `fixed={true}`. */\n    fixed: Object.keys(theme.breakpoints.values).reduce(function (acc, breakpoint) {\n      var value = theme.breakpoints.values[breakpoint];\n\n      if (value !== 0) {\n        acc[theme.breakpoints.up(breakpoint)] = {\n          maxWidth: value\n        };\n      }\n\n      return acc;\n    }, {}),\n\n    /* Styles applied to the root element if `maxWidth=\"xs\"`. */\n    maxWidthXs: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('xs'), {\n      maxWidth: Math.max(theme.breakpoints.values.xs, 444)\n    }),\n\n    /* Styles applied to the root element if `maxWidth=\"sm\"`. */\n    maxWidthSm: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('sm'), {\n      maxWidth: theme.breakpoints.values.sm\n    }),\n\n    /* Styles applied to the root element if `maxWidth=\"md\"`. */\n    maxWidthMd: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('md'), {\n      maxWidth: theme.breakpoints.values.md\n    }),\n\n    /* Styles applied to the root element if `maxWidth=\"lg\"`. */\n    maxWidthLg: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('lg'), {\n      maxWidth: theme.breakpoints.values.lg\n    }),\n\n    /* Styles applied to the root element if `maxWidth=\"xl\"`. */\n    maxWidthXl: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('xl'), {\n      maxWidth: theme.breakpoints.values.xl\n    })\n  };\n};\nvar Container = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function Container(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      _props$fixed = props.fixed,\n      fixed = _props$fixed === void 0 ? false : _props$fixed,\n      _props$maxWidth = props.maxWidth,\n      maxWidth = _props$maxWidth === void 0 ? 'lg' : _props$maxWidth,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"component\", \"disableGutters\", \"fixed\", \"maxWidth\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className, fixed && classes.fixed, disableGutters && classes.disableGutters, maxWidth !== false && classes[\"maxWidth\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(String(maxWidth)))]),\n    ref: ref\n  }, other));\n});\n true ? Container.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * @ignore\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Set the max-width to match the min-width of the current breakpoint.\n   * This is useful if you'd prefer to design for a fixed set of sizes\n   * instead of trying to accommodate a fully fluid viewport.\n   * It's fluid by default.\n   */\n  fixed: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Determine the max-width of the container.\n   * The container width grows with the size of the screen.\n   * Set to `false` to disable `maxWidth`.\n   */\n  maxWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['lg', 'md', 'sm', 'xl', 'xs', false])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiContainer'\n})(Container));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Container/Container.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Container/index.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Container/index.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Container__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Container */ \"./jaas-client/node_modules/@material-ui/core/esm/Container/Container.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Container__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Container/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/CssBaseline.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/CssBaseline.js ***!
  \***********************************************************************************/
/*! exports provided: html, body, styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"body\", function() { return body; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\n\n\n\nvar html = {\n  WebkitFontSmoothing: 'antialiased',\n  // Antialiasing.\n  MozOsxFontSmoothing: 'grayscale',\n  // Antialiasing.\n  // Change from `box-sizing: content-box` so that `width`\n  // is not affected by `padding` or `border`.\n  boxSizing: 'border-box'\n};\nvar body = function body(theme) {\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    color: theme.palette.text.primary\n  }, theme.typography.body2, {\n    backgroundColor: theme.palette.background.default,\n    '@media print': {\n      // Save printer ink.\n      backgroundColor: theme.palette.common.white\n    }\n  });\n};\nvar styles = function styles(theme) {\n  return {\n    '@global': {\n      html: html,\n      '*, *::before, *::after': {\n        boxSizing: 'inherit'\n      },\n      'strong, b': {\n        fontWeight: theme.typography.fontWeightBold\n      },\n      body: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        margin: 0\n      }, body(theme), {\n        // Add support for document.body.requestFullScreen().\n        // Other elements, if background transparent, are not supported.\n        '&::backdrop': {\n          backgroundColor: theme.palette.background.default\n        }\n      })\n    }\n  };\n};\n/**\n * Kickstart an elegant, consistent, and simple baseline to build upon.\n */\n\nfunction CssBaseline(props) {\n  /* eslint-disable no-unused-vars */\n  var _props$children = props.children,\n      children = _props$children === void 0 ? null : _props$children,\n      classes = props.classes;\n  /* eslint-enable no-unused-vars */\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, children);\n}\n\n true ? CssBaseline.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * You can wrap a node.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n} : undefined;\n\nif (true) {\n  // eslint-disable-next-line\n  CssBaseline['propTypes' + ''] = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_4__[\"exactProp\"])(CssBaseline.propTypes);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(styles, {\n  name: 'MuiCssBaseline'\n})(CssBaseline));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/CssBaseline.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/index.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/index.js ***!
  \*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _CssBaseline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CssBaseline */ \"./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/CssBaseline.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _CssBaseline__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Dialog/Dialog.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Dialog/Dialog.js ***!
  \*************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _Modal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Modal */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js\");\n/* harmony import */ var _Backdrop__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Backdrop */ \"./jaas-client/node_modules/@material-ui/core/esm/Backdrop/index.js\");\n/* harmony import */ var _Fade__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Fade */ \"./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js\");\n/* harmony import */ var _styles_transitions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../styles/transitions */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js\");\n/* harmony import */ var _Paper__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Paper */ \"./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      '@media print': {\n        // Use !important to override the Modal inline-style.\n        position: 'absolute !important'\n      }\n    },\n\n    /* Styles applied to the container element if `scroll=\"paper\"`. */\n    scrollPaper: {\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center'\n    },\n\n    /* Styles applied to the container element if `scroll=\"body\"`. */\n    scrollBody: {\n      overflowY: 'auto',\n      overflowX: 'hidden',\n      textAlign: 'center',\n      '&:after': {\n        content: '\"\"',\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        height: '100%',\n        width: '0'\n      }\n    },\n\n    /* Styles applied to the container element. */\n    container: {\n      height: '100%',\n      '@media print': {\n        height: 'auto'\n      },\n      // We disable the focus ring for mouse, touch and keyboard users.\n      outline: 0\n    },\n\n    /* Styles applied to the `Paper` component. */\n    paper: {\n      margin: 32,\n      position: 'relative',\n      overflowY: 'auto',\n      // Fix IE 11 issue, to remove at some point.\n      '@media print': {\n        overflowY: 'visible',\n        boxShadow: 'none'\n      }\n    },\n\n    /* Styles applied to the `Paper` component if `scroll=\"paper\"`. */\n    paperScrollPaper: {\n      display: 'flex',\n      flexDirection: 'column',\n      maxHeight: 'calc(100% - 64px)'\n    },\n\n    /* Styles applied to the `Paper` component if `scroll=\"body\"`. */\n    paperScrollBody: {\n      display: 'inline-block',\n      verticalAlign: 'middle',\n      textAlign: 'left' // 'initial' doesn't work on IE 11\n\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=false`. */\n    paperWidthFalse: {\n      maxWidth: 'calc(100% - 64px)'\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"xs\"`. */\n    paperWidthXs: {\n      maxWidth: Math.max(theme.breakpoints.values.xs, 444),\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 444) + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"sm\"`. */\n    paperWidthSm: {\n      maxWidth: theme.breakpoints.values.sm,\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(theme.breakpoints.values.sm + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"md\"`. */\n    paperWidthMd: {\n      maxWidth: theme.breakpoints.values.md,\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(theme.breakpoints.values.md + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"lg\"`. */\n    paperWidthLg: {\n      maxWidth: theme.breakpoints.values.lg,\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(theme.breakpoints.values.lg + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"xl\"`. */\n    paperWidthXl: {\n      maxWidth: theme.breakpoints.values.xl,\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(theme.breakpoints.values.xl + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `fullWidth={true}`. */\n    paperFullWidth: {\n      width: 'calc(100% - 64px)'\n    },\n\n    /* Styles applied to the `Paper` component if `fullScreen={true}`. */\n    paperFullScreen: {\n      margin: 0,\n      width: '100%',\n      maxWidth: '100%',\n      height: '100%',\n      maxHeight: 'none',\n      borderRadius: 0,\n      '&$paperScrollBody': {\n        margin: 0,\n        maxWidth: '100%'\n      }\n    }\n  };\n};\nvar defaultTransitionDuration = {\n  enter: _styles_transitions__WEBPACK_IMPORTED_MODULE_11__[\"duration\"].enteringScreen,\n  exit: _styles_transitions__WEBPACK_IMPORTED_MODULE_11__[\"duration\"].leavingScreen\n};\n/**\n * Dialogs are overlaid modal paper based components with a backdrop.\n */\n\nvar Dialog = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function Dialog(props, ref) {\n  var BackdropProps = props.BackdropProps,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$disableBackdro = props.disableBackdropClick,\n      disableBackdropClick = _props$disableBackdro === void 0 ? false : _props$disableBackdro,\n      _props$disableEscapeK = props.disableEscapeKeyDown,\n      disableEscapeKeyDown = _props$disableEscapeK === void 0 ? false : _props$disableEscapeK,\n      _props$fullScreen = props.fullScreen,\n      fullScreen = _props$fullScreen === void 0 ? false : _props$fullScreen,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$maxWidth = props.maxWidth,\n      maxWidth = _props$maxWidth === void 0 ? 'sm' : _props$maxWidth,\n      onBackdropClick = props.onBackdropClick,\n      onClose = props.onClose,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onEscapeKeyDown = props.onEscapeKeyDown,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      open = props.open,\n      _props$PaperComponent = props.PaperComponent,\n      PaperComponent = _props$PaperComponent === void 0 ? _Paper__WEBPACK_IMPORTED_MODULE_12__[\"default\"] : _props$PaperComponent,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      _props$scroll = props.scroll,\n      scroll = _props$scroll === void 0 ? 'paper' : _props$scroll,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? _Fade__WEBPACK_IMPORTED_MODULE_10__[\"default\"] : _props$TransitionComp,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? defaultTransitionDuration : _props$transitionDura,\n      TransitionProps = props.TransitionProps,\n      ariaDescribedby = props['aria-describedby'],\n      ariaLabelledby = props['aria-labelledby'],\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"BackdropProps\", \"children\", \"classes\", \"className\", \"disableBackdropClick\", \"disableEscapeKeyDown\", \"fullScreen\", \"fullWidth\", \"maxWidth\", \"onBackdropClick\", \"onClose\", \"onEnter\", \"onEntered\", \"onEntering\", \"onEscapeKeyDown\", \"onExit\", \"onExited\", \"onExiting\", \"open\", \"PaperComponent\", \"PaperProps\", \"scroll\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\", \"aria-describedby\", \"aria-labelledby\"]);\n\n  var mouseDownTarget = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"]();\n\n  var handleMouseDown = function handleMouseDown(event) {\n    mouseDownTarget.current = event.target;\n  };\n\n  var handleBackdropClick = function handleBackdropClick(event) {\n    // Ignore the events not coming from the \"backdrop\"\n    // We don't want to close the dialog when clicking the dialog content.\n    if (event.target !== event.currentTarget) {\n      return;\n    } // Make sure the event starts and ends on the same DOM element.\n\n\n    if (event.target !== mouseDownTarget.current) {\n      return;\n    }\n\n    mouseDownTarget.current = null;\n\n    if (onBackdropClick) {\n      onBackdropClick(event);\n    }\n\n    if (!disableBackdropClick && onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_Modal__WEBPACK_IMPORTED_MODULE_8__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className),\n    BackdropComponent: _Backdrop__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n    BackdropProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      transitionDuration: transitionDuration\n    }, BackdropProps),\n    closeAfterTransition: true,\n    disableBackdropClick: disableBackdropClick,\n    disableEscapeKeyDown: disableEscapeKeyDown,\n    onEscapeKeyDown: onEscapeKeyDown,\n    onClose: onClose,\n    open: open,\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    appear: true,\n    in: open,\n    timeout: transitionDuration,\n    onEnter: onEnter,\n    onEntering: onEntering,\n    onEntered: onEntered,\n    onExit: onExit,\n    onExiting: onExiting,\n    onExited: onExited,\n    role: \"none presentation\"\n  }, TransitionProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"div\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.container, classes[\"scroll\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(scroll))]),\n    onMouseUp: handleBackdropClick,\n    onMouseDown: handleMouseDown\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](PaperComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    elevation: 24,\n    role: \"dialog\",\n    \"aria-describedby\": ariaDescribedby,\n    \"aria-labelledby\": ariaLabelledby\n  }, PaperProps, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.paper, classes[\"paperScroll\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(scroll))], classes[\"paperWidth\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(String(maxWidth)))], PaperProps.className, fullScreen && classes.paperFullScreen, fullWidth && classes.paperFullWidth)\n  }), children))));\n});\n true ? Dialog.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The id(s) of the element(s) that describe the dialog.\n   */\n  'aria-describedby': prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The id(s) of the element(s) that label the dialog.\n   */\n  'aria-labelledby': prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * @ignore\n   */\n  BackdropProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Dialog children, usually the included sub-components.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * If `true`, clicking the backdrop will not fire the `onClose` callback.\n   */\n  disableBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, hitting escape will not fire the `onClose` callback.\n   */\n  disableEscapeKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the dialog will be full-screen\n   */\n  fullScreen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the dialog stretches to `maxWidth`.\n   *\n   * Notice that the dialog width grow is limited by the default margin.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Determine the max-width of the dialog.\n   * The dialog width grows with the size of the screen.\n   * Set to `false` to disable `maxWidth`.\n   */\n  maxWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['lg', 'md', 'sm', 'xl', 'xs', false]),\n\n  /**\n   * Callback fired when the backdrop is clicked.\n   */\n  onBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired before the dialog enters.\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the dialog has entered.\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the dialog is entering.\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the escape key is pressed,\n   * `disableKeyboard` is false and the modal is in focus.\n   */\n  onEscapeKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired before the dialog exits.\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the dialog has exited.\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the dialog is exiting.\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * If `true`, the Dialog is open.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired,\n\n  /**\n   * The component used to render the body of the dialog.\n   */\n  PaperComponent: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType,\n\n  /**\n   * Props applied to the [`Paper`](/api/paper/) element.\n   */\n  PaperProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Determine the container for scrolling the dialog.\n   */\n  scroll: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['body', 'paper']),\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  })]),\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiDialog'\n})(Dialog));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Dialog/Dialog.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Dialog/index.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Dialog/index.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Dialog */ \"./jaas-client/node_modules/@material-ui/core/esm/Dialog/Dialog.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Dialog__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Dialog/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js ***!
  \***********************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Typography__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js\");\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    margin: 0,\n    padding: '16px 24px',\n    flex: '0 0 auto'\n  }\n};\nvar DialogTitle = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function DialogTitle(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$disableTypogra = props.disableTypography,\n      disableTypography = _props$disableTypogra === void 0 ? false : _props$disableTypogra,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"disableTypography\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className),\n    ref: ref\n  }, other), disableTypography ? children : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Typography__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n    component: \"h2\",\n    variant: \"h6\"\n  }, children));\n});\n true ? DialogTitle.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the children won't be wrapped by a typography component.\n   * For instance, this can be useful to render an h4 instead of the default h2.\n   */\n  disableTypography: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiDialogTitle'\n})(DialogTitle));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/index.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/index.js ***!
  \*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _DialogTitle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DialogTitle */ \"./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _DialogTitle__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Fade/Fade.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Fade/Fade.js ***!
  \*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_transition_group__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-transition-group */ \"./jaas-client/node_modules/react-transition-group/esm/index.js\");\n/* harmony import */ var _styles_transitions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/transitions */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/useTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js\");\n/* harmony import */ var _transitions_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../transitions/utils */ \"./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  entering: {\n    opacity: 1\n  },\n  entered: {\n    opacity: 1\n  }\n};\nvar defaultTimeout = {\n  enter: _styles_transitions__WEBPACK_IMPORTED_MODULE_6__[\"duration\"].enteringScreen,\n  exit: _styles_transitions__WEBPACK_IMPORTED_MODULE_6__[\"duration\"].leavingScreen\n};\n/**\n * The Fade transition is used by the [Modal](/components/modal/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Fade = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function Fade(props, ref) {\n  var children = props.children,\n      _props$disableStrictM = props.disableStrictModeCompat,\n      disableStrictModeCompat = _props$disableStrictM === void 0 ? false : _props$disableStrictM,\n      inProp = props.in,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      style = props.style,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? react_transition_group__WEBPACK_IMPORTED_MODULE_5__[\"Transition\"] : _props$TransitionComp,\n      _props$timeout = props.timeout,\n      timeout = _props$timeout === void 0 ? defaultTimeout : _props$timeout,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"children\", \"disableStrictModeCompat\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"style\", \"TransitionComponent\", \"timeout\"]);\n\n  var theme = Object(_styles_useTheme__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n  var enableStrictModeCompat = theme.unstable_strictMode && !disableStrictModeCompat;\n  var nodeRef = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  var foreignRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(children.ref, ref);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(enableStrictModeCompat ? nodeRef : undefined, foreignRef);\n\n  var normalizedTransitionCallback = function normalizedTransitionCallback(callback) {\n    return function (nodeOrAppearing, maybeAppearing) {\n      if (callback) {\n        var _ref = enableStrictModeCompat ? [nodeRef.current, nodeOrAppearing] : [nodeOrAppearing, maybeAppearing],\n            _ref2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref, 2),\n            node = _ref2[0],\n            isAppearing = _ref2[1]; // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n\n\n        if (isAppearing === undefined) {\n          callback(node);\n        } else {\n          callback(node, isAppearing);\n        }\n      }\n    };\n  };\n\n  var handleEntering = normalizedTransitionCallback(onEntering);\n  var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {\n    Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_8__[\"reflow\"])(node); // So the animation always start from the start.\n\n    var transitionProps = Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_8__[\"getTransitionProps\"])({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'enter'\n    });\n    node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  });\n  var handleEntered = normalizedTransitionCallback(onEntered);\n  var handleExiting = normalizedTransitionCallback(onExiting);\n  var handleExit = normalizedTransitionCallback(function (node) {\n    var transitionProps = Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_8__[\"getTransitionProps\"])({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'exit'\n    });\n    node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n    if (onExit) {\n      onExit(node);\n    }\n  });\n  var handleExited = normalizedTransitionCallback(onExited);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    appear: true,\n    in: inProp,\n    nodeRef: enableStrictModeCompat ? nodeRef : undefined,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    onExiting: handleExiting,\n    timeout: timeout\n  }, other), function (state, childProps) {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"cloneElement\"](children, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        opacity: 0,\n        visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n      }, styles[state], style, children.props.style),\n      ref: handleRef\n    }, childProps));\n  });\n});\n true ? Fade.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A single child content element.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.element,\n\n  /**\n   * Enable this prop if you encounter 'Function components cannot be given refs',\n   * use `unstable_createStrictModeTheme`,\n   * and can't forward the ref in the child component.\n   */\n  disableStrictModeCompat: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  timeout: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  })])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Fade);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Fade/Fade.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Fade__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Fade */ \"./jaas-client/node_modules/@material-ui/core/esm/Fade/Fade.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Fade__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FilledInput/FilledInput.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FilledInput/FilledInput.js ***!
  \***********************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _InputBase__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../InputBase */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  var backgroundColor = light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      backgroundColor: backgroundColor,\n      borderTopLeftRadius: theme.shape.borderRadius,\n      borderTopRightRadius: theme.shape.borderRadius,\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shorter,\n        easing: theme.transitions.easing.easeOut\n      }),\n      '&:hover': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.13)' : 'rgba(255, 255, 255, 0.13)',\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: backgroundColor\n        }\n      },\n      '&$focused': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)'\n      },\n      '&$disabled': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)'\n      }\n    },\n\n    /* Styles applied to the root element if color secondary. */\n    colorSecondary: {\n      '&$underline:after': {\n        borderBottomColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if `disableUnderline={false}`. */\n    underline: {\n      '&:after': {\n        borderBottom: \"2px solid \".concat(theme.palette.primary.main),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\"',\n        position: 'absolute',\n        right: 0,\n        transform: 'scaleX(0)',\n        transition: theme.transitions.create('transform', {\n          duration: theme.transitions.duration.shorter,\n          easing: theme.transitions.easing.easeOut\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&$focused:after': {\n        transform: 'scaleX(1)'\n      },\n      '&$error:after': {\n        borderBottomColor: theme.palette.error.main,\n        transform: 'scaleX(1)' // error is always underlined in red\n\n      },\n      '&:before': {\n        borderBottom: \"1px solid \".concat(bottomLineColor),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\\\\00a0\"',\n        position: 'absolute',\n        right: 0,\n        transition: theme.transitions.create('border-bottom-color', {\n          duration: theme.transitions.duration.shorter\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&:hover:before': {\n        borderBottom: \"1px solid \".concat(theme.palette.text.primary)\n      },\n      '&$disabled:before': {\n        borderBottomStyle: 'dotted'\n      }\n    },\n\n    /* Pseudo-class applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {\n      paddingLeft: 12\n    },\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {\n      paddingRight: 12\n    },\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: '27px 12px 10px',\n      '&$marginDense': {\n        paddingTop: 23,\n        paddingBottom: 6\n      }\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      padding: '27px 12px 10px',\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: theme.palette.type === 'light' ? null : '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: theme.palette.type === 'light' ? null : '#fff',\n        caretColor: theme.palette.type === 'light' ? null : '#fff',\n        borderTopLeftRadius: 'inherit',\n        borderTopRightRadius: 'inherit'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 23,\n      paddingBottom: 6\n    },\n\n    /* Styles applied to the `input` if in `<FormControl hiddenLabel />`. */\n    inputHiddenLabel: {\n      paddingTop: 18,\n      paddingBottom: 19,\n      '&$inputMarginDense': {\n        paddingTop: 10,\n        paddingBottom: 11\n      }\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {\n      paddingLeft: 0\n    },\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {\n      paddingRight: 0\n    }\n  };\n};\nvar FilledInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FilledInput(props, ref) {\n  var disableUnderline = props.disableUnderline,\n      classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"disableUnderline\", \"classes\", \"fullWidth\", \"inputComponent\", \"multiline\", \"type\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_InputBase__WEBPACK_IMPORTED_MODULE_6__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, classes, {\n      root: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, !disableUnderline && classes.underline),\n      underline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\n true ? FilledInput.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will not have an underline.\n   */\n  disableUnderline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\nFilledInput.muiName = 'Input';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiFilledInput'\n})(FilledInput));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FilledInput/FilledInput.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js ***!
  \*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FilledInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FilledInput */ \"./jaas-client/node_modules/@material-ui/core/esm/FilledInput/FilledInput.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FilledInput__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControl.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControl.js ***!
  \***********************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _InputBase_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../InputBase/utils */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/isMuiElement */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js\");\n/* harmony import */ var _FormControlContext__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FormControlContext */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'inline-flex',\n    flexDirection: 'column',\n    position: 'relative',\n    // Reset fieldset default style.\n    minWidth: 0,\n    padding: 0,\n    margin: 0,\n    border: 0,\n    verticalAlign: 'top' // Fix alignment issue on Safari.\n\n  },\n\n  /* Styles applied to the root element if `margin=\"normal\"`. */\n  marginNormal: {\n    marginTop: 16,\n    marginBottom: 8\n  },\n\n  /* Styles applied to the root element if `margin=\"dense\"`. */\n  marginDense: {\n    marginTop: 8,\n    marginBottom: 4\n  },\n\n  /* Styles applied to the root element if `fullWidth={true}`. */\n  fullWidth: {\n    width: '100%'\n  }\n};\n/**\n * Provides context such as filled/focused/error/required for form inputs.\n * Relying on the context provides high flexibility and ensures that the state always stays\n * consistent across the children of the `FormControl`.\n * This context is used by the following components:\n *\n *  - FormLabel\n *  - FormHelperText\n *  - Input\n *  - InputLabel\n *\n * You can find one composition example below and more going to [the demos](/components/text-fields/#components).\n *\n * ```jsx\n * <FormControl>\n *   <InputLabel htmlFor=\"my-input\">Email address</InputLabel>\n *   <Input id=\"my-input\" aria-describedby=\"my-helper-text\" />\n *   <FormHelperText id=\"my-helper-text\">We'll never share your email.</FormHelperText>\n * </FormControl>\n * ```\n *\n * ⚠️Only one input can be used within a FormControl.\n */\n\nvar FormControl = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FormControl(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$error = props.error,\n      error = _props$error === void 0 ? false : _props$error,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      visuallyFocused = props.focused,\n      _props$hiddenLabel = props.hiddenLabel,\n      hiddenLabel = _props$hiddenLabel === void 0 ? false : _props$hiddenLabel,\n      _props$margin = props.margin,\n      margin = _props$margin === void 0 ? 'none' : _props$margin,\n      _props$required = props.required,\n      required = _props$required === void 0 ? false : _props$required,\n      size = props.size,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"error\", \"fullWidth\", \"focused\", \"hiddenLabel\", \"margin\", \"required\", \"size\", \"variant\"]);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](function () {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    var initialAdornedStart = false;\n\n    if (children) {\n      react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].forEach(children, function (child) {\n        if (!Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(child, ['Input', 'Select'])) {\n          return;\n        }\n\n        var input = Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(child, ['Select']) ? child.props.input : child;\n\n        if (input && Object(_InputBase_utils__WEBPACK_IMPORTED_MODULE_5__[\"isAdornedStart\"])(input.props)) {\n          initialAdornedStart = true;\n        }\n      });\n    }\n\n    return initialAdornedStart;\n  }),\n      adornedStart = _React$useState[0],\n      setAdornedStart = _React$useState[1];\n\n  var _React$useState2 = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](function () {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    var initialFilled = false;\n\n    if (children) {\n      react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].forEach(children, function (child) {\n        if (!Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(child, ['Input', 'Select'])) {\n          return;\n        }\n\n        if (Object(_InputBase_utils__WEBPACK_IMPORTED_MODULE_5__[\"isFilled\"])(child.props, true)) {\n          initialFilled = true;\n        }\n      });\n    }\n\n    return initialFilled;\n  }),\n      filled = _React$useState2[0],\n      setFilled = _React$useState2[1];\n\n  var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      _focused = _React$useState3[0],\n      setFocused = _React$useState3[1];\n\n  var focused = visuallyFocused !== undefined ? visuallyFocused : _focused;\n\n  if (disabled && focused) {\n    setFocused(false);\n  }\n\n  var registerEffect;\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    var registeredInput = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](false);\n\n    registerEffect = function registerEffect() {\n      if (registeredInput.current) {\n        console.error(['Material-UI: There are multiple InputBase components inside a FormControl.', 'This is not supported. It might cause infinite rendering loops.', 'Only use one InputBase.'].join('\\n'));\n      }\n\n      registeredInput.current = true;\n      return function () {\n        registeredInput.current = false;\n      };\n    };\n  }\n\n  var onFilled = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    setFilled(true);\n  }, []);\n  var onEmpty = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    setFilled(false);\n  }, []);\n  var childContext = {\n    adornedStart: adornedStart,\n    setAdornedStart: setAdornedStart,\n    color: color,\n    disabled: disabled,\n    error: error,\n    filled: filled,\n    focused: focused,\n    fullWidth: fullWidth,\n    hiddenLabel: hiddenLabel,\n    margin: (size === 'small' ? 'dense' : undefined) || margin,\n    onBlur: function onBlur() {\n      setFocused(false);\n    },\n    onEmpty: onEmpty,\n    onFilled: onFilled,\n    onFocus: function onFocus() {\n      setFocused(true);\n    },\n    registerEffect: registerEffect,\n    required: required,\n    variant: variant\n  };\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FormControlContext__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Provider, {\n    value: childContext\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, margin !== 'none' && classes[\"margin\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(margin))], fullWidth && classes.fullWidth),\n    ref: ref\n  }, other), children));\n});\n true ? FormControl.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The contents of the form control.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the label, input and helper text should be displayed in a disabled state.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label should be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the component will be displayed in focused state.\n   */\n  focused: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the component will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label will be hidden.\n   * This is used to increase density for a `FilledInput`.\n   * Be sure to add `aria-label` to the `input` element.\n   */\n  hiddenLabel: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none', 'normal']),\n\n  /**\n   * If `true`, the label will indicate that the input is required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The size of the text field.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['medium', 'small']),\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiFormControl'\n})(FormControl));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControl.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js":
/*!******************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js ***!
  \******************************************************************************************/
/*! exports provided: useFormControl, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useFormControl\", function() { return useFormControl; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\n * @ignore - internal component.\n */\n\nvar FormControlContext = react__WEBPACK_IMPORTED_MODULE_0__[\"createContext\"]();\n\nif (true) {\n  FormControlContext.displayName = 'FormControlContext';\n}\n\nfunction useFormControl() {\n  return react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"](FormControlContext);\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (FormControlContext);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js":
/*!****************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js ***!
  \****************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return formControlState; });\nfunction formControlState(_ref) {\n  var props = _ref.props,\n      states = _ref.states,\n      muiFormControl = _ref.muiFormControl;\n  return states.reduce(function (acc, state) {\n    acc[state] = props[state];\n\n    if (muiFormControl) {\n      if (typeof props[state] === 'undefined') {\n        acc[state] = muiFormControl[state];\n      }\n    }\n\n    return acc;\n  }, {});\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js ***!
  \*****************************************************************************/
/*! exports provided: default, useFormControl */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FormControl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControl.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FormControl__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _useFormControl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useFormControl\", function() { return _useFormControl__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js":
/*!**************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js ***!
  \**************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useFormControl; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _FormControlContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormControlContext */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js\");\n\n\nfunction useFormControl() {\n  return react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"](_FormControlContext__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js":
/*!*********************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js ***!
  \*********************************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _FormControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Typography__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'inline-flex',\n      alignItems: 'center',\n      cursor: 'pointer',\n      // For correct alignment with the text.\n      verticalAlign: 'middle',\n      WebkitTapHighlightColor: 'transparent',\n      marginLeft: -11,\n      marginRight: 16,\n      // used for row presentation of radio/checkbox\n      '&$disabled': {\n        cursor: 'default'\n      }\n    },\n\n    /* Styles applied to the root element if `labelPlacement=\"start\"`. */\n    labelPlacementStart: {\n      flexDirection: 'row-reverse',\n      marginLeft: 16,\n      // used for row presentation of radio/checkbox\n      marginRight: -11\n    },\n\n    /* Styles applied to the root element if `labelPlacement=\"top\"`. */\n    labelPlacementTop: {\n      flexDirection: 'column-reverse',\n      marginLeft: 16\n    },\n\n    /* Styles applied to the root element if `labelPlacement=\"bottom\"`. */\n    labelPlacementBottom: {\n      flexDirection: 'column',\n      marginLeft: 16\n    },\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the label's Typography component. */\n    label: {\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      }\n    }\n  };\n};\n/**\n * Drop in replacement of the `Radio`, `Switch` and `Checkbox` component.\n * Use this component if you want to display an extra label.\n */\n\nvar FormControlLabel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FormControlLabel(props, ref) {\n  var checked = props.checked,\n      classes = props.classes,\n      className = props.className,\n      control = props.control,\n      disabledProp = props.disabled,\n      inputRef = props.inputRef,\n      label = props.label,\n      _props$labelPlacement = props.labelPlacement,\n      labelPlacement = _props$labelPlacement === void 0 ? 'end' : _props$labelPlacement,\n      name = props.name,\n      onChange = props.onChange,\n      value = props.value,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"checked\", \"classes\", \"className\", \"control\", \"disabled\", \"inputRef\", \"label\", \"labelPlacement\", \"name\", \"onChange\", \"value\"]);\n\n  var muiFormControl = Object(_FormControl__WEBPACK_IMPORTED_MODULE_6__[\"useFormControl\"])();\n  var disabled = disabledProp;\n\n  if (typeof disabled === 'undefined' && typeof control.props.disabled !== 'undefined') {\n    disabled = control.props.disabled;\n  }\n\n  if (typeof disabled === 'undefined' && muiFormControl) {\n    disabled = muiFormControl.disabled;\n  }\n\n  var controlProps = {\n    disabled: disabled\n  };\n  ['checked', 'name', 'onChange', 'value', 'inputRef'].forEach(function (key) {\n    if (typeof control.props[key] === 'undefined' && typeof props[key] !== 'undefined') {\n      controlProps[key] = props[key];\n    }\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"label\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, labelPlacement !== 'end' && classes[\"labelPlacement\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(labelPlacement))], disabled && classes.disabled),\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](control, controlProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Typography__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n    component: \"span\",\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.label, disabled && classes.disabled)\n  }, label));\n});\n true ? FormControlLabel.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, the component appears selected.\n   */\n  checked: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * A control element. For instance, it can be be a `Radio`, a `Switch` or a `Checkbox`.\n   */\n  control: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element.isRequired,\n\n  /**\n   * If `true`, the control will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * The text to be used in an enclosing label element.\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * The position of the label.\n   */\n  labelPlacement: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['bottom', 'end', 'start', 'top']),\n\n  /**\n   * @ignore\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The value of the component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiFormControlLabel'\n})(FormControlLabel));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/index.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/index.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FormControlLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormControlLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FormControlLabel__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js":
/*!*****************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js ***!
  \*****************************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      color: theme.palette.text.secondary\n    }, theme.typography.caption, {\n      textAlign: 'left',\n      marginTop: 3,\n      margin: 0,\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      },\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    }),\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `margin=\"dense\"`. */\n    marginDense: {\n      marginTop: 4\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"` or `variant=\"outlined\"`. */\n    contained: {\n      marginLeft: 14,\n      marginRight: 14\n    },\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `filled={true}`. */\n    filled: {},\n\n    /* Pseudo-class applied to the root element if `required={true}`. */\n    required: {}\n  };\n};\nvar FormHelperText = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FormHelperText(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'p' : _props$component,\n      disabled = props.disabled,\n      error = props.error,\n      filled = props.filled,\n      focused = props.focused,\n      margin = props.margin,\n      required = props.required,\n      variant = props.variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"component\", \"disabled\", \"error\", \"filled\", \"focused\", \"margin\", \"required\", \"variant\"]);\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant', 'margin', 'disabled', 'error', 'filled', 'focused', 'required']\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, (fcs.variant === 'filled' || fcs.variant === 'outlined') && classes.contained, className, fcs.disabled && classes.disabled, fcs.error && classes.error, fcs.filled && classes.filled, fcs.focused && classes.focused, fcs.required && classes.required, fcs.margin === 'dense' && classes.marginDense),\n    ref: ref\n  }, other), children === ' ' ?\n  /*#__PURE__*/\n  // eslint-disable-next-line react/no-danger\n  react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  }) : children);\n});\n true ? FormHelperText.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   *\n   * If `' '` is provided, the component reserves one line height for displaying a future message.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the helper text should be displayed in a disabled state.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, helper text should be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the helper text should use filled classes key.\n   */\n  filled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the helper text should use focused classes key.\n   */\n  focused: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense']),\n\n  /**\n   * If `true`, the helper text should use required classes key.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiFormHelperText'\n})(FormHelperText));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/index.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/index.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FormHelperText__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormHelperText */ \"./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FormHelperText__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormLabel/FormLabel.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormLabel/FormLabel.js ***!
  \*******************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      color: theme.palette.text.secondary\n    }, theme.typography.body1, {\n      lineHeight: 1,\n      padding: 0,\n      '&$focused': {\n        color: theme.palette.primary.main\n      },\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      },\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    }),\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {\n      '&$focused': {\n        color: theme.palette.secondary.main\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element if `filled={true}`. */\n    filled: {},\n\n    /* Pseudo-class applied to the root element if `required={true}`. */\n    required: {},\n\n    /* Styles applied to the asterisk element. */\n    asterisk: {\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    }\n  };\n};\nvar FormLabel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FormLabel(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      color = props.color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'label' : _props$component,\n      disabled = props.disabled,\n      error = props.error,\n      filled = props.filled,\n      focused = props.focused,\n      required = props.required,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"error\", \"filled\", \"focused\", \"required\"]);\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['color', 'required', 'focused', 'disabled', 'error', 'filled']\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(fcs.color || 'primary'))], className, fcs.disabled && classes.disabled, fcs.error && classes.error, fcs.filled && classes.filled, fcs.focused && classes.focused, fcs.required && classes.required),\n    ref: ref\n  }, other), children, fcs.required && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    \"aria-hidden\": true,\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.asterisk, fcs.error && classes.error)\n  }, \"\\u2009\", '*'));\n});\n true ? FormLabel.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the label should be displayed in a disabled state.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label should be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label should use filled classes key.\n   */\n  filled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input of this label is focused (used by `FormGroup` components).\n   */\n  focused: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label will indicate that the input is required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(styles, {\n  name: 'MuiFormLabel'\n})(FormLabel));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormLabel/FormLabel.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormLabel/index.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormLabel/index.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FormLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/FormLabel/FormLabel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FormLabel__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormLabel/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Grid/Grid.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Grid/Grid.js ***!
  \*********************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_requirePropFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/requirePropFactory */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/requirePropFactory.js\");\n\n\n// A grid component using the following libs as inspiration.\n//\n// For the implementation:\n// - https://getbootstrap.com/docs/4.3/layout/grid/\n// - https://github.com/kristoferjoseph/flexboxgrid/blob/master/src/css/flexboxgrid.css\n// - https://github.com/roylee0704/react-flexbox-grid\n// - https://material.angularjs.org/latest/layout/introduction\n//\n// Follow this flexbox Guide to better understand the underlying model:\n// - https://css-tricks.com/snippets/css/a-guide-to-flexbox/\n\n\n\n\n\nvar SPACINGS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\nvar GRID_SIZES = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n\nfunction generateGrid(globalStyles, theme, breakpoint) {\n  var styles = {};\n  GRID_SIZES.forEach(function (size) {\n    var key = \"grid-\".concat(breakpoint, \"-\").concat(size);\n\n    if (size === true) {\n      // For the auto layouting\n      styles[key] = {\n        flexBasis: 0,\n        flexGrow: 1,\n        maxWidth: '100%'\n      };\n      return;\n    }\n\n    if (size === 'auto') {\n      styles[key] = {\n        flexBasis: 'auto',\n        flexGrow: 0,\n        maxWidth: 'none'\n      };\n      return;\n    } // Keep 7 significant numbers.\n\n\n    var width = \"\".concat(Math.round(size / 12 * 10e7) / 10e5, \"%\"); // Close to the bootstrap implementation:\n    // https://github.com/twbs/bootstrap/blob/8fccaa2439e97ec72a4b7dc42ccc1f649790adb0/scss/mixins/_grid.scss#L41\n\n    styles[key] = {\n      flexBasis: width,\n      flexGrow: 0,\n      maxWidth: width\n    };\n  }); // No need for a media query for the first size.\n\n  if (breakpoint === 'xs') {\n    Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(globalStyles, styles);\n  } else {\n    globalStyles[theme.breakpoints.up(breakpoint)] = styles;\n  }\n}\n\nfunction getOffset(val) {\n  var div = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var parse = parseFloat(val);\n  return \"\".concat(parse / div).concat(String(val).replace(String(parse), '') || 'px');\n}\n\nfunction generateGutter(theme, breakpoint) {\n  var styles = {};\n  SPACINGS.forEach(function (spacing) {\n    var themeSpacing = theme.spacing(spacing);\n\n    if (themeSpacing === 0) {\n      return;\n    }\n\n    styles[\"spacing-\".concat(breakpoint, \"-\").concat(spacing)] = {\n      margin: \"-\".concat(getOffset(themeSpacing, 2)),\n      width: \"calc(100% + \".concat(getOffset(themeSpacing), \")\"),\n      '& > $item': {\n        padding: getOffset(themeSpacing, 2)\n      }\n    };\n  });\n  return styles;\n} // Default CSS values\n// flex: '0 1 auto',\n// flexDirection: 'row',\n// alignItems: 'flex-start',\n// flexWrap: 'nowrap',\n// justifyContent: 'flex-start',\n\n\nvar styles = function styles(theme) {\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    /* Styles applied to the root element. */\n    root: {},\n\n    /* Styles applied to the root element if `container={true}`. */\n    container: {\n      boxSizing: 'border-box',\n      display: 'flex',\n      flexWrap: 'wrap',\n      width: '100%'\n    },\n\n    /* Styles applied to the root element if `item={true}`. */\n    item: {\n      boxSizing: 'border-box',\n      margin: '0' // For instance, it's useful when used with a `figure` element.\n\n    },\n\n    /* Styles applied to the root element if `zeroMinWidth={true}`. */\n    zeroMinWidth: {\n      minWidth: 0\n    },\n\n    /* Styles applied to the root element if `direction=\"column\"`. */\n    'direction-xs-column': {\n      flexDirection: 'column'\n    },\n\n    /* Styles applied to the root element if `direction=\"column-reverse\"`. */\n    'direction-xs-column-reverse': {\n      flexDirection: 'column-reverse'\n    },\n\n    /* Styles applied to the root element if `direction=\"row-reverse\"`. */\n    'direction-xs-row-reverse': {\n      flexDirection: 'row-reverse'\n    },\n\n    /* Styles applied to the root element if `wrap=\"nowrap\"`. */\n    'wrap-xs-nowrap': {\n      flexWrap: 'nowrap'\n    },\n\n    /* Styles applied to the root element if `wrap=\"reverse\"`. */\n    'wrap-xs-wrap-reverse': {\n      flexWrap: 'wrap-reverse'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"center\"`. */\n    'align-items-xs-center': {\n      alignItems: 'center'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"flex-start\"`. */\n    'align-items-xs-flex-start': {\n      alignItems: 'flex-start'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"flex-end\"`. */\n    'align-items-xs-flex-end': {\n      alignItems: 'flex-end'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"baseline\"`. */\n    'align-items-xs-baseline': {\n      alignItems: 'baseline'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"center\"`. */\n    'align-content-xs-center': {\n      alignContent: 'center'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"flex-start\"`. */\n    'align-content-xs-flex-start': {\n      alignContent: 'flex-start'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"flex-end\"`. */\n    'align-content-xs-flex-end': {\n      alignContent: 'flex-end'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"space-between\"`. */\n    'align-content-xs-space-between': {\n      alignContent: 'space-between'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"space-around\"`. */\n    'align-content-xs-space-around': {\n      alignContent: 'space-around'\n    },\n\n    /* Styles applied to the root element if `justify=\"center\"`. */\n    'justify-xs-center': {\n      justifyContent: 'center'\n    },\n\n    /* Styles applied to the root element if `justify=\"flex-end\"`. */\n    'justify-xs-flex-end': {\n      justifyContent: 'flex-end'\n    },\n\n    /* Styles applied to the root element if `justify=\"space-between\"`. */\n    'justify-xs-space-between': {\n      justifyContent: 'space-between'\n    },\n\n    /* Styles applied to the root element if `justify=\"space-around\"`. */\n    'justify-xs-space-around': {\n      justifyContent: 'space-around'\n    },\n\n    /* Styles applied to the root element if `justify=\"space-evenly\"`. */\n    'justify-xs-space-evenly': {\n      justifyContent: 'space-evenly'\n    }\n  }, generateGutter(theme, 'xs'), theme.breakpoints.keys.reduce(function (accumulator, key) {\n    // Use side effect over immutability for better performance.\n    generateGrid(accumulator, theme, key);\n    return accumulator;\n  }, {}));\n};\nvar Grid = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Grid(props, ref) {\n  var _props$alignContent = props.alignContent,\n      alignContent = _props$alignContent === void 0 ? 'stretch' : _props$alignContent,\n      _props$alignItems = props.alignItems,\n      alignItems = _props$alignItems === void 0 ? 'stretch' : _props$alignItems,\n      classes = props.classes,\n      classNameProp = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$container = props.container,\n      container = _props$container === void 0 ? false : _props$container,\n      _props$direction = props.direction,\n      direction = _props$direction === void 0 ? 'row' : _props$direction,\n      _props$item = props.item,\n      item = _props$item === void 0 ? false : _props$item,\n      _props$justify = props.justify,\n      justify = _props$justify === void 0 ? 'flex-start' : _props$justify,\n      _props$lg = props.lg,\n      lg = _props$lg === void 0 ? false : _props$lg,\n      _props$md = props.md,\n      md = _props$md === void 0 ? false : _props$md,\n      _props$sm = props.sm,\n      sm = _props$sm === void 0 ? false : _props$sm,\n      _props$spacing = props.spacing,\n      spacing = _props$spacing === void 0 ? 0 : _props$spacing,\n      _props$wrap = props.wrap,\n      wrap = _props$wrap === void 0 ? 'wrap' : _props$wrap,\n      _props$xl = props.xl,\n      xl = _props$xl === void 0 ? false : _props$xl,\n      _props$xs = props.xs,\n      xs = _props$xs === void 0 ? false : _props$xs,\n      _props$zeroMinWidth = props.zeroMinWidth,\n      zeroMinWidth = _props$zeroMinWidth === void 0 ? false : _props$zeroMinWidth,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"alignContent\", \"alignItems\", \"classes\", \"className\", \"component\", \"container\", \"direction\", \"item\", \"justify\", \"lg\", \"md\", \"sm\", \"spacing\", \"wrap\", \"xl\", \"xs\", \"zeroMinWidth\"]);\n\n  var className = Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classNameProp, container && [classes.container, spacing !== 0 && classes[\"spacing-xs-\".concat(String(spacing))]], item && classes.item, zeroMinWidth && classes.zeroMinWidth, direction !== 'row' && classes[\"direction-xs-\".concat(String(direction))], wrap !== 'wrap' && classes[\"wrap-xs-\".concat(String(wrap))], alignItems !== 'stretch' && classes[\"align-items-xs-\".concat(String(alignItems))], alignContent !== 'stretch' && classes[\"align-content-xs-\".concat(String(alignContent))], justify !== 'flex-start' && classes[\"justify-xs-\".concat(String(justify))], xs !== false && classes[\"grid-xs-\".concat(String(xs))], sm !== false && classes[\"grid-sm-\".concat(String(sm))], md !== false && classes[\"grid-md-\".concat(String(md))], lg !== false && classes[\"grid-lg-\".concat(String(lg))], xl !== false && classes[\"grid-xl-\".concat(String(xl))]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: className,\n    ref: ref\n  }, other));\n});\n true ? Grid.propTypes = {\n  /**\n   * Defines the `align-content` style property.\n   * It's applied for all screen sizes.\n   */\n  alignContent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['stretch', 'center', 'flex-start', 'flex-end', 'space-between', 'space-around']),\n\n  /**\n   * Defines the `align-items` style property.\n   * It's applied for all screen sizes.\n   */\n  alignItems: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['flex-start', 'center', 'flex-end', 'stretch', 'baseline']),\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the component will have the flex *container* behavior.\n   * You should be wrapping *items* with a *container*.\n   */\n  container: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Defines the `flex-direction` style property.\n   * It is applied for all screen sizes.\n   */\n  direction: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['row', 'row-reverse', 'column', 'column-reverse']),\n\n  /**\n   * If `true`, the component will have the flex *item* behavior.\n   * You should be wrapping *items* with a *container*.\n   */\n  item: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Defines the `justify-content` style property.\n   * It is applied for all screen sizes.\n   */\n  justify: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['flex-start', 'center', 'flex-end', 'space-between', 'space-around', 'space-evenly']),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `lg` breakpoint and wider screens if not overridden.\n   */\n  lg: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `md` breakpoint and wider screens if not overridden.\n   */\n  md: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `sm` breakpoint and wider screens if not overridden.\n   */\n  sm: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the space between the type `item` component.\n   * It can only be used on a type `container` component.\n   */\n  spacing: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(SPACINGS),\n\n  /**\n   * Defines the `flex-wrap` style property.\n   * It's applied for all screen sizes.\n   */\n  wrap: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['nowrap', 'wrap', 'wrap-reverse']),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `xl` breakpoint and wider screens.\n   */\n  xl: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for all the screen sizes with the lowest priority.\n   */\n  xs: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * If `true`, it sets `min-width: 0` on the item.\n   * Refer to the limitations section of the documentation to better understand the use case.\n   */\n  zeroMinWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool\n} : undefined;\nvar StyledGrid = Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiGrid'\n})(Grid);\n\nif (true) {\n  var requireProp = Object(_utils_requirePropFactory__WEBPACK_IMPORTED_MODULE_6__[\"default\"])('Grid');\n  StyledGrid.propTypes = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, StyledGrid.propTypes, {\n    alignContent: requireProp('container'),\n    alignItems: requireProp('container'),\n    direction: requireProp('container'),\n    justify: requireProp('container'),\n    lg: requireProp('item'),\n    md: requireProp('item'),\n    sm: requireProp('item'),\n    spacing: requireProp('container'),\n    wrap: requireProp('container'),\n    xs: requireProp('item'),\n    zeroMinWidth: requireProp('item')\n  });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (StyledGrid);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Grid/Grid.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Grid/index.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Grid/index.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Grid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Grid */ \"./jaas-client/node_modules/@material-ui/core/esm/Grid/Grid.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Grid__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Grid/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Grow/Grow.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Grow/Grow.js ***!
  \*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_transition_group__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-transition-group */ \"./jaas-client/node_modules/react-transition-group/esm/index.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/useTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js\");\n/* harmony import */ var _transitions_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../transitions/utils */ \"./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\n\n\n\nfunction getScale(value) {\n  return \"scale(\".concat(value, \", \").concat(Math.pow(value, 2), \")\");\n}\n\nvar styles = {\n  entering: {\n    opacity: 1,\n    transform: getScale(1)\n  },\n  entered: {\n    opacity: 1,\n    transform: 'none'\n  }\n};\n/**\n * The Grow transition is used by the [Tooltip](/components/tooltips/) and\n * [Popover](/components/popover/) components.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Grow = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function Grow(props, ref) {\n  var children = props.children,\n      _props$disableStrictM = props.disableStrictModeCompat,\n      disableStrictModeCompat = _props$disableStrictM === void 0 ? false : _props$disableStrictM,\n      inProp = props.in,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      style = props.style,\n      _props$timeout = props.timeout,\n      timeout = _props$timeout === void 0 ? 'auto' : _props$timeout,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? react_transition_group__WEBPACK_IMPORTED_MODULE_5__[\"Transition\"] : _props$TransitionComp,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"children\", \"disableStrictModeCompat\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"style\", \"timeout\", \"TransitionComponent\"]);\n\n  var timer = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"]();\n  var autoTimeout = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"]();\n  var theme = Object(_styles_useTheme__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n  var enableStrictModeCompat = theme.unstable_strictMode && !disableStrictModeCompat;\n  var nodeRef = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  var foreignRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(children.ref, ref);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(enableStrictModeCompat ? nodeRef : undefined, foreignRef);\n\n  var normalizedTransitionCallback = function normalizedTransitionCallback(callback) {\n    return function (nodeOrAppearing, maybeAppearing) {\n      if (callback) {\n        var _ref = enableStrictModeCompat ? [nodeRef.current, nodeOrAppearing] : [nodeOrAppearing, maybeAppearing],\n            _ref2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref, 2),\n            node = _ref2[0],\n            isAppearing = _ref2[1]; // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n\n\n        if (isAppearing === undefined) {\n          callback(node);\n        } else {\n          callback(node, isAppearing);\n        }\n      }\n    };\n  };\n\n  var handleEntering = normalizedTransitionCallback(onEntering);\n  var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {\n    Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_7__[\"reflow\"])(node); // So the animation always start from the start.\n\n    var _getTransitionProps = Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_7__[\"getTransitionProps\"])({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'enter'\n    }),\n        transitionDuration = _getTransitionProps.duration,\n        delay = _getTransitionProps.delay;\n\n    var duration;\n\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration: duration,\n      delay: delay\n    }), theme.transitions.create('transform', {\n      duration: duration * 0.666,\n      delay: delay\n    })].join(',');\n\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  });\n  var handleEntered = normalizedTransitionCallback(onEntered);\n  var handleExiting = normalizedTransitionCallback(onExiting);\n  var handleExit = normalizedTransitionCallback(function (node) {\n    var _getTransitionProps2 = Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_7__[\"getTransitionProps\"])({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'exit'\n    }),\n        transitionDuration = _getTransitionProps2.duration,\n        delay = _getTransitionProps2.delay;\n\n    var duration;\n\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration: duration,\n      delay: delay\n    }), theme.transitions.create('transform', {\n      duration: duration * 0.666,\n      delay: delay || duration * 0.333\n    })].join(',');\n    node.style.opacity = '0';\n    node.style.transform = getScale(0.75);\n\n    if (onExit) {\n      onExit(node);\n    }\n  });\n  var handleExited = normalizedTransitionCallback(onExited);\n\n  var addEndListener = function addEndListener(nodeOrNext, maybeNext) {\n    var next = enableStrictModeCompat ? nodeOrNext : maybeNext;\n\n    if (timeout === 'auto') {\n      timer.current = setTimeout(next, autoTimeout.current || 0);\n    }\n  };\n\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    return function () {\n      clearTimeout(timer.current);\n    };\n  }, []);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    appear: true,\n    in: inProp,\n    nodeRef: enableStrictModeCompat ? nodeRef : undefined,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    onExiting: handleExiting,\n    addEndListener: addEndListener,\n    timeout: timeout === 'auto' ? null : timeout\n  }, other), function (state, childProps) {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"cloneElement\"](children, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        opacity: 0,\n        transform: getScale(0.75),\n        visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n      }, styles[state], style, children.props.style),\n      ref: handleRef\n    }, childProps));\n  });\n});\n true ? Grow.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A single child content element.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.element,\n\n  /**\n   * Enable this prop if you encounter 'Function components cannot be given refs',\n   * use `unstable_createStrictModeTheme`,\n   * and can't forward the ref in the child component.\n   */\n  disableStrictModeCompat: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, show the component; triggers the enter or exit animation.\n   */\n  in: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   *\n   * Set to 'auto' to automatically calculate transition time based on height.\n   */\n  timeout: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['auto']), prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  })])\n} : undefined;\nGrow.muiSupportAuto = true;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Grow);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Grow/Grow.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Grow/index.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Grow/index.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Grow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Grow */ \"./jaas-client/node_modules/@material-ui/core/esm/Grow/Grow.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Grow__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Grow/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/IconButton/IconButton.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/IconButton/IconButton.js ***!
  \*********************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _styles_colorManipulator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/colorManipulator */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js\");\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ButtonBase */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      textAlign: 'center',\n      flex: '0 0 auto',\n      fontSize: theme.typography.pxToRem(24),\n      padding: 12,\n      borderRadius: '50%',\n      overflow: 'visible',\n      // Explicitly set the default value to solve a bug on IE 11.\n      color: theme.palette.action.active,\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_7__[\"fade\"])(theme.palette.action.active, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        backgroundColor: 'transparent',\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if `edge=\"start\"`. */\n    edgeStart: {\n      marginLeft: -12,\n      '$sizeSmall&': {\n        marginLeft: -3\n      }\n    },\n\n    /* Styles applied to the root element if `edge=\"end\"`. */\n    edgeEnd: {\n      marginRight: -12,\n      '$sizeSmall&': {\n        marginRight: -3\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_7__[\"fade\"])(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_7__[\"fade\"])(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {\n      padding: 3,\n      fontSize: theme.typography.pxToRem(18)\n    },\n\n    /* Styles applied to the children container element. */\n    label: {\n      width: '100%',\n      display: 'flex',\n      alignItems: 'inherit',\n      justifyContent: 'inherit'\n    }\n  };\n};\n/**\n * Refer to the [Icons](/components/icons/) section of the documentation\n * regarding the available icon options.\n */\n\nvar IconButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function IconButton(props, ref) {\n  var _props$edge = props.edge,\n      edge = _props$edge === void 0 ? false : _props$edge,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"edge\", \"children\", \"classes\", \"className\", \"color\", \"disabled\", \"disableFocusRipple\", \"size\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_ButtonBase__WEBPACK_IMPORTED_MODULE_8__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, color !== 'default' && classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(color))], disabled && classes.disabled, size === \"small\" && classes[\"size\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(size))], {\n      'start': classes.edgeStart,\n      'end': classes.edgeEnd\n    }[edge]),\n    centerRipple: true,\n    focusRipple: !disableFocusRipple,\n    disabled: disabled,\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    className: classes.label\n  }, children));\n});\n true ? IconButton.propTypes = {\n  /**\n   * The icon element.\n   */\n  children: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node, function (props) {\n    var found = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].toArray(props.children).some(function (child) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"isValidElement\"](child) && child.props.onClick;\n    });\n\n    if (found) {\n      return new Error(['Material-UI: You are providing an onClick event listener ' + 'to a child of a button element.', 'Firefox will never trigger the event.', 'You should move the onClick listener to the parent button element.', 'https://github.com/mui-org/material-ui/issues/13957'].join('\\n'));\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * If `true`, the button will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the  keyboard focus ripple will be disabled.\n   */\n  disableFocusRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If given, uses a negative margin to counteract the padding on one\n   * side (this is often helpful for aligning the left or right\n   * side of the icon with content above or below, without ruining the border\n   * size and shape).\n   */\n  edge: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['start', 'end', false]),\n\n  /**\n   * The size of the button.\n   * `small` is equivalent to the dense button styling.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['small', 'medium'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiIconButton'\n})(IconButton));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/IconButton/IconButton.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/IconButton/index.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/IconButton/index.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _IconButton__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./IconButton */ \"./jaas-client/node_modules/@material-ui/core/esm/IconButton/IconButton.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _IconButton__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/IconButton/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Input/Input.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Input/Input.js ***!
  \***********************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _InputBase__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../InputBase */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative'\n    },\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {\n      'label + &': {\n        marginTop: 16\n      }\n    },\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if color secondary. */\n    colorSecondary: {\n      '&$underline:after': {\n        borderBottomColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if `disableUnderline={false}`. */\n    underline: {\n      '&:after': {\n        borderBottom: \"2px solid \".concat(theme.palette.primary.main),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\"',\n        position: 'absolute',\n        right: 0,\n        transform: 'scaleX(0)',\n        transition: theme.transitions.create('transform', {\n          duration: theme.transitions.duration.shorter,\n          easing: theme.transitions.easing.easeOut\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&$focused:after': {\n        transform: 'scaleX(1)'\n      },\n      '&$error:after': {\n        borderBottomColor: theme.palette.error.main,\n        transform: 'scaleX(1)' // error is always underlined in red\n\n      },\n      '&:before': {\n        borderBottom: \"1px solid \".concat(bottomLineColor),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\\\\00a0\"',\n        position: 'absolute',\n        right: 0,\n        transition: theme.transitions.create('border-bottom-color', {\n          duration: theme.transitions.duration.shorter\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&:hover:not($disabled):before': {\n        borderBottom: \"2px solid \".concat(theme.palette.text.primary),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          borderBottom: \"1px solid \".concat(bottomLineColor)\n        }\n      },\n      '&$disabled:before': {\n        borderBottomStyle: 'dotted'\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {},\n\n    /* Styles applied to the `input` element. */\n    input: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {},\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {},\n\n    /* Styles applied to the `input` element if `type=\"search\"`. */\n    inputTypeSearch: {}\n  };\n};\nvar Input = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Input(props, ref) {\n  var disableUnderline = props.disableUnderline,\n      classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"disableUnderline\", \"classes\", \"fullWidth\", \"inputComponent\", \"multiline\", \"type\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_InputBase__WEBPACK_IMPORTED_MODULE_6__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, classes, {\n      root: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, !disableUnderline && classes.underline),\n      underline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\n true ? Input.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will not have an underline.\n   */\n  disableUnderline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\nInput.muiName = 'Input';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiInput'\n})(Input));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Input/Input.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Input/index.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Input/index.js ***!
  \***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Input */ \"./jaas-client/node_modules/@material-ui/core/esm/Input/Input.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Input__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Input/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputBase/InputBase.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputBase/InputBase.js ***!
  \*******************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_FormControlContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FormControl/FormControlContext */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _TextareaAutosize__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../TextareaAutosize */ \"./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/index.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js\");\n\n\n\n\n/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */\n\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var placeholder = {\n    color: 'currentColor',\n    opacity: light ? 0.42 : 0.5,\n    transition: theme.transitions.create('opacity', {\n      duration: theme.transitions.duration.shorter\n    })\n  };\n  var placeholderHidden = {\n    opacity: '0 !important'\n  };\n  var placeholderVisible = {\n    opacity: light ? 0.42 : 0.5\n  };\n  return {\n    '@global': {\n      '@keyframes mui-auto-fill': {},\n      '@keyframes mui-auto-fill-cancel': {}\n    },\n\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, theme.typography.body1, {\n      color: theme.palette.text.primary,\n      lineHeight: '1.1876em',\n      // Reset (19px), match the native input line-height\n      boxSizing: 'border-box',\n      // Prevent padding issue with fullWidth.\n      position: 'relative',\n      cursor: 'text',\n      display: 'inline-flex',\n      alignItems: 'center',\n      '&$disabled': {\n        color: theme.palette.text.disabled,\n        cursor: 'default'\n      }\n    }),\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {},\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {},\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\"),\n      '&$marginDense': {\n        paddingTop: 4 - 1\n      }\n    },\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {\n      width: '100%'\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      font: 'inherit',\n      letterSpacing: 'inherit',\n      color: 'currentColor',\n      padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\"),\n      border: 0,\n      boxSizing: 'content-box',\n      background: 'none',\n      height: '1.1876em',\n      // Reset (19px), match the native input line-height\n      margin: 0,\n      // Reset for Safari\n      WebkitTapHighlightColor: 'transparent',\n      display: 'block',\n      // Make the flex item shrink with Firefox\n      minWidth: 0,\n      width: '100%',\n      // Fix IE 11 width issue\n      animationName: 'mui-auto-fill-cancel',\n      animationDuration: '10ms',\n      '&::-webkit-input-placeholder': placeholder,\n      '&::-moz-placeholder': placeholder,\n      // Firefox 19+\n      '&:-ms-input-placeholder': placeholder,\n      // IE 11\n      '&::-ms-input-placeholder': placeholder,\n      // Edge\n      '&:focus': {\n        outline: 0\n      },\n      // Reset Firefox invalid required input style\n      '&:invalid': {\n        boxShadow: 'none'\n      },\n      '&::-webkit-search-decoration': {\n        // Remove the padding when type=search.\n        '-webkit-appearance': 'none'\n      },\n      // Show and hide the placeholder logic\n      'label[data-shrink=false] + $formControl &': {\n        '&::-webkit-input-placeholder': placeholderHidden,\n        '&::-moz-placeholder': placeholderHidden,\n        // Firefox 19+\n        '&:-ms-input-placeholder': placeholderHidden,\n        // IE 11\n        '&::-ms-input-placeholder': placeholderHidden,\n        // Edge\n        '&:focus::-webkit-input-placeholder': placeholderVisible,\n        '&:focus::-moz-placeholder': placeholderVisible,\n        // Firefox 19+\n        '&:focus:-ms-input-placeholder': placeholderVisible,\n        // IE 11\n        '&:focus::-ms-input-placeholder': placeholderVisible // Edge\n\n      },\n      '&$disabled': {\n        opacity: 1 // Reset iOS opacity\n\n      },\n      '&:-webkit-autofill': {\n        animationDuration: '5000s',\n        animationName: 'mui-auto-fill'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 4 - 1\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      height: 'auto',\n      resize: 'none',\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `type=\"search\"`. */\n    inputTypeSearch: {\n      // Improve type search style.\n      '-moz-appearance': 'textfield',\n      '-webkit-appearance': 'textfield'\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {},\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {},\n\n    /* Styles applied to the `input` element if `hiddenLabel={true}`. */\n    inputHiddenLabel: {}\n  };\n};\nvar useEnhancedEffect = typeof window === 'undefined' ? react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"] : react__WEBPACK_IMPORTED_MODULE_3__[\"useLayoutEffect\"];\n/**\n * `InputBase` contains as few styles as possible.\n * It aims to be a simple building block for creating an input.\n * It contains a load of style reset and some state logic.\n */\n\nvar InputBase = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function InputBase(props, ref) {\n  var ariaDescribedby = props['aria-describedby'],\n      autoComplete = props.autoComplete,\n      autoFocus = props.autoFocus,\n      classes = props.classes,\n      className = props.className,\n      color = props.color,\n      defaultValue = props.defaultValue,\n      disabled = props.disabled,\n      endAdornment = props.endAdornment,\n      error = props.error,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      id = props.id,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$inputProps = props.inputProps,\n      inputPropsProp = _props$inputProps === void 0 ? {} : _props$inputProps,\n      inputRefProp = props.inputRef,\n      margin = props.margin,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onClick = props.onClick,\n      onFocus = props.onFocus,\n      onKeyDown = props.onKeyDown,\n      onKeyUp = props.onKeyUp,\n      placeholder = props.placeholder,\n      readOnly = props.readOnly,\n      renderSuffix = props.renderSuffix,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      rowsMin = props.rowsMin,\n      startAdornment = props.startAdornment,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      valueProp = props.value,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"aria-describedby\", \"autoComplete\", \"autoFocus\", \"classes\", \"className\", \"color\", \"defaultValue\", \"disabled\", \"endAdornment\", \"error\", \"fullWidth\", \"id\", \"inputComponent\", \"inputProps\", \"inputRef\", \"margin\", \"multiline\", \"name\", \"onBlur\", \"onChange\", \"onClick\", \"onFocus\", \"onKeyDown\", \"onKeyUp\", \"placeholder\", \"readOnly\", \"renderSuffix\", \"rows\", \"rowsMax\", \"rowsMin\", \"startAdornment\", \"type\", \"value\"]);\n\n  var value = inputPropsProp.value != null ? inputPropsProp.value : valueProp;\n\n  var _React$useRef = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](value != null),\n      isControlled = _React$useRef.current;\n\n  var inputRef = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"]();\n  var handleInputRefWarning = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function (instance) {\n    if (true) {\n      if (instance && instance.nodeName !== 'INPUT' && !instance.focus) {\n        console.error(['Material-UI: You have provided a `inputComponent` to the input component', 'that does not correctly handle the `inputRef` prop.', 'Make sure the `inputRef` prop is called with a HTMLInputElement.'].join('\\n'));\n      }\n    }\n  }, []);\n  var handleInputPropsRefProp = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(inputPropsProp.ref, handleInputRefWarning);\n  var handleInputRefProp = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(inputRefProp, handleInputPropsRefProp);\n  var handleInputRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(inputRef, handleInputRefProp);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__[\"useState\"](false),\n      focused = _React$useState[0],\n      setFocused = _React$useState[1];\n\n  var muiFormControl = Object(_FormControl_FormControlContext__WEBPACK_IMPORTED_MODULE_7__[\"useFormControl\"])();\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n      if (muiFormControl) {\n        return muiFormControl.registerEffect();\n      }\n\n      return undefined;\n    }, [muiFormControl]);\n  }\n\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['color', 'disabled', 'error', 'hiddenLabel', 'margin', 'required', 'filled']\n  });\n  fcs.focused = muiFormControl ? muiFormControl.focused : focused; // The blur won't fire when the disabled state is set on a focused input.\n  // We need to book keep the focused state manually.\n\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    if (!muiFormControl && disabled && focused) {\n      setFocused(false);\n\n      if (onBlur) {\n        onBlur();\n      }\n    }\n  }, [muiFormControl, disabled, focused, onBlur]);\n  var onFilled = muiFormControl && muiFormControl.onFilled;\n  var onEmpty = muiFormControl && muiFormControl.onEmpty;\n  var checkDirty = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function (obj) {\n    if (Object(_utils__WEBPACK_IMPORTED_MODULE_12__[\"isFilled\"])(obj)) {\n      if (onFilled) {\n        onFilled();\n      }\n    } else if (onEmpty) {\n      onEmpty();\n    }\n  }, [onFilled, onEmpty]);\n  useEnhancedEffect(function () {\n    if (isControlled) {\n      checkDirty({\n        value: value\n      });\n    }\n  }, [value, checkDirty, isControlled]);\n\n  var handleFocus = function handleFocus(event) {\n    // Fix a bug with IE 11 where the focus/blur events are triggered\n    // while the input is disabled.\n    if (fcs.disabled) {\n      event.stopPropagation();\n      return;\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n\n    if (inputPropsProp.onFocus) {\n      inputPropsProp.onFocus(event);\n    }\n\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    } else {\n      setFocused(true);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    if (onBlur) {\n      onBlur(event);\n    }\n\n    if (inputPropsProp.onBlur) {\n      inputPropsProp.onBlur(event);\n    }\n\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    } else {\n      setFocused(false);\n    }\n  };\n\n  var handleChange = function handleChange(event) {\n    if (!isControlled) {\n      var element = event.target || inputRef.current;\n\n      if (element == null) {\n        throw new Error( true ? \"Material-UI: Expected valid input target. Did you use a custom `inputComponent` and forget to forward refs? See https://material-ui.com/r/input-component-ref-interface for more info.\" : undefined);\n      }\n\n      checkDirty({\n        value: element.value\n      });\n    }\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    if (inputPropsProp.onChange) {\n      inputPropsProp.onChange.apply(inputPropsProp, [event].concat(args));\n    } // Perform in the willUpdate\n\n\n    if (onChange) {\n      onChange.apply(void 0, [event].concat(args));\n    }\n  }; // Check the input state on mount, in case it was filled by the user\n  // or auto filled by the browser before the hydration (for SSR).\n\n\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    checkDirty(inputRef.current);\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n  var handleClick = function handleClick(event) {\n    if (inputRef.current && event.currentTarget === event.target) {\n      inputRef.current.focus();\n    }\n\n    if (onClick) {\n      onClick(event);\n    }\n  };\n\n  var InputComponent = inputComponent;\n\n  var inputProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, inputPropsProp, {\n    ref: handleInputRef\n  });\n\n  if (typeof InputComponent !== 'string') {\n    inputProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      // Rename ref to inputRef as we don't know the\n      // provided `inputComponent` structure.\n      inputRef: handleInputRef,\n      type: type\n    }, inputProps, {\n      ref: null\n    });\n  } else if (multiline) {\n    if (rows && !rowsMax && !rowsMin) {\n      InputComponent = 'textarea';\n    } else {\n      inputProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        rows: rows,\n        rowsMax: rowsMax\n      }, inputProps);\n      InputComponent = _TextareaAutosize__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\n    }\n  } else {\n    inputProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      type: type\n    }, inputProps);\n  }\n\n  var handleAutoFill = function handleAutoFill(event) {\n    // Provide a fake value as Chrome might not let you access it for security reasons.\n    checkDirty(event.animationName === 'mui-auto-fill-cancel' ? inputRef.current : {\n      value: 'x'\n    });\n  };\n\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    if (muiFormControl) {\n      muiFormControl.setAdornedStart(Boolean(startAdornment));\n    }\n  }, [muiFormControl, startAdornment]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(fcs.color || 'primary'))], className, fcs.disabled && classes.disabled, fcs.error && classes.error, fullWidth && classes.fullWidth, fcs.focused && classes.focused, muiFormControl && classes.formControl, multiline && classes.multiline, startAdornment && classes.adornedStart, endAdornment && classes.adornedEnd, fcs.margin === 'dense' && classes.marginDense),\n    onClick: handleClick,\n    ref: ref\n  }, other), startAdornment, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_FormControl_FormControlContext__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Provider, {\n    value: null\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](InputComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    \"aria-invalid\": fcs.error,\n    \"aria-describedby\": ariaDescribedby,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    disabled: fcs.disabled,\n    id: id,\n    onAnimationStart: handleAutoFill,\n    name: name,\n    placeholder: placeholder,\n    readOnly: readOnly,\n    required: fcs.required,\n    rows: rows,\n    value: value,\n    onKeyDown: onKeyDown,\n    onKeyUp: onKeyUp\n  }, inputProps, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.input, inputPropsProp.className, fcs.disabled && classes.disabled, multiline && classes.inputMultiline, fcs.hiddenLabel && classes.inputHiddenLabel, startAdornment && classes.inputAdornedStart, endAdornment && classes.inputAdornedEnd, type === 'search' && classes.inputTypeSearch, fcs.margin === 'dense' && classes.inputMarginDense),\n    onBlur: handleBlur,\n    onChange: handleChange,\n    onFocus: handleFocus\n  }))), endAdornment, renderSuffix ? renderSuffix(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, fcs, {\n    startAdornment: startAdornment\n  })) : null);\n});\n true ? InputBase.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * @ignore\n   */\n  'aria-describedby': prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"refType\"],\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * Callback fired when the input is blurred.\n   *\n   * Notice that the first argument (event) might be undefined.\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onKeyUp: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  renderSuffix: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string]),\n\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  rowsMin: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(styles, {\n  name: 'MuiInputBase'\n})(InputBase));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputBase/InputBase.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _InputBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InputBase */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/InputBase.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _InputBase__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js ***!
  \***************************************************************************/
/*! exports provided: hasValue, isFilled, isAdornedStart */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hasValue\", function() { return hasValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isFilled\", function() { return isFilled; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isAdornedStart\", function() { return isAdornedStart; });\n// Supports determination of isControlled().\n// Controlled input accepts its current value as a prop.\n//\n// @see https://facebook.github.io/react/docs/forms.html#controlled-components\n// @param value\n// @returns {boolean} true if string (including '') or number (including zero)\nfunction hasValue(value) {\n  return value != null && !(Array.isArray(value) && value.length === 0);\n} // Determine if field is empty or filled.\n// Response determines if label is presented above field or as placeholder.\n//\n// @param obj\n// @param SSR\n// @returns {boolean} False when not present or empty string.\n//                    True when any number or string with length.\n\nfunction isFilled(obj) {\n  var SSR = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  return obj && (hasValue(obj.value) && obj.value !== '' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !== '');\n} // Determine if an Input is adorned on start.\n// It's corresponding to the left with LTR.\n//\n// @param obj\n// @returns {boolean} False when no adornments.\n//                    True when adorned at the start.\n\nfunction isAdornedStart(obj) {\n  return obj.startAdornment;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputLabel/InputLabel.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputLabel/InputLabel.js ***!
  \*********************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _FormLabel__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../FormLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/FormLabel/index.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'block',\n      transformOrigin: 'top left'\n    },\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element if `required={true}`. */\n    required: {},\n\n    /* Pseudo-class applied to the asterisk element. */\n    asterisk: {},\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {\n      position: 'absolute',\n      left: 0,\n      top: 0,\n      // slight alteration to spec spacing to match visual spec result\n      transform: 'translate(0, 24px) scale(1)'\n    },\n\n    /* Styles applied to the root element if `margin=\"dense\"`. */\n    marginDense: {\n      // Compensation for the `Input.inputDense` style.\n      transform: 'translate(0, 21px) scale(1)'\n    },\n\n    /* Styles applied to the `input` element if `shrink={true}`. */\n    shrink: {\n      transform: 'translate(0, 1.5px) scale(0.75)',\n      transformOrigin: 'top left'\n    },\n\n    /* Styles applied to the `input` element if `disableAnimation={false}`. */\n    animated: {\n      transition: theme.transitions.create(['color', 'transform'], {\n        duration: theme.transitions.duration.shorter,\n        easing: theme.transitions.easing.easeOut\n      })\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"`. */\n    filled: {\n      // Chrome's autofill feature gives the input field a yellow background.\n      // Since the input field is behind the label in the HTML tree,\n      // the input field is drawn last and hides the label with an opaque background color.\n      // zIndex: 1 will raise the label above opaque background-colors of input.\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(12px, 20px) scale(1)',\n      '&$marginDense': {\n        transform: 'translate(12px, 17px) scale(1)'\n      },\n      '&$shrink': {\n        transform: 'translate(12px, 10px) scale(0.75)',\n        '&$marginDense': {\n          transform: 'translate(12px, 7px) scale(0.75)'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      // see comment above on filled.zIndex\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(14px, 20px) scale(1)',\n      '&$marginDense': {\n        transform: 'translate(14px, 12px) scale(1)'\n      },\n      '&$shrink': {\n        transform: 'translate(14px, -6px) scale(0.75)'\n      }\n    }\n  };\n};\nvar InputLabel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function InputLabel(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$disableAnimati = props.disableAnimation,\n      disableAnimation = _props$disableAnimati === void 0 ? false : _props$disableAnimati,\n      margin = props.margin,\n      shrinkProp = props.shrink,\n      variant = props.variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"disableAnimation\", \"margin\", \"shrink\", \"variant\"]);\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n  var shrink = shrinkProp;\n\n  if (typeof shrink === 'undefined' && muiFormControl) {\n    shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;\n  }\n\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['margin', 'variant']\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FormLabel__WEBPACK_IMPORTED_MODULE_8__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    \"data-shrink\": shrink,\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, muiFormControl && classes.formControl, !disableAnimation && classes.animated, shrink && classes.shrink, fcs.margin === 'dense' && classes.marginDense, {\n      'filled': classes.filled,\n      'outlined': classes.outlined\n    }[fcs.variant]),\n    classes: {\n      focused: classes.focused,\n      disabled: classes.disabled,\n      error: classes.error,\n      required: classes.required,\n      asterisk: classes.asterisk\n    },\n    ref: ref\n  }, other));\n});\n true ? InputLabel.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The contents of the `InputLabel`.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * If `true`, the transition animation is disabled.\n   */\n  disableAnimation: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, apply disabled class.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label will be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input of this label is focused.\n   */\n  focused: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense']),\n\n  /**\n   * if `true`, the label will indicate that the input is required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label is shrunk.\n   */\n  shrink: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiInputLabel'\n})(InputLabel));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputLabel/InputLabel.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputLabel/index.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputLabel/index.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _InputLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InputLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/InputLabel/InputLabel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _InputLabel__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputLabel/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Link/Link.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Link/Link.js ***!
  \*********************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/useIsFocusVisible */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _Typography__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js\");\n\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {},\n\n  /* Styles applied to the root element if `underline=\"none\"`. */\n  underlineNone: {\n    textDecoration: 'none'\n  },\n\n  /* Styles applied to the root element if `underline=\"hover\"`. */\n  underlineHover: {\n    textDecoration: 'none',\n    '&:hover': {\n      textDecoration: 'underline'\n    }\n  },\n\n  /* Styles applied to the root element if `underline=\"always\"`. */\n  underlineAlways: {\n    textDecoration: 'underline'\n  },\n  // Same reset as ButtonBase.root\n\n  /* Styles applied to the root element if `component=\"button\"`. */\n  button: {\n    position: 'relative',\n    WebkitTapHighlightColor: 'transparent',\n    backgroundColor: 'transparent',\n    // Reset default value\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0,\n    border: 0,\n    margin: 0,\n    // Remove the margin in Safari\n    borderRadius: 0,\n    padding: 0,\n    // Remove the padding in Firefox\n    cursor: 'pointer',\n    userSelect: 'none',\n    verticalAlign: 'middle',\n    '-moz-appearance': 'none',\n    // Reset\n    '-webkit-appearance': 'none',\n    // Reset\n    '&::-moz-focus-inner': {\n      borderStyle: 'none' // Remove Firefox dotted outline.\n\n    },\n    '&$focusVisible': {\n      outline: 'auto'\n    }\n  },\n\n  /* Pseudo-class applied to the root element if the link is keyboard focused. */\n  focusVisible: {}\n};\nvar Link = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Link(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'a' : _props$component,\n      onBlur = props.onBlur,\n      onFocus = props.onFocus,\n      TypographyClasses = props.TypographyClasses,\n      _props$underline = props.underline,\n      underline = _props$underline === void 0 ? 'hover' : _props$underline,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'inherit' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"color\", \"component\", \"onBlur\", \"onFocus\", \"TypographyClasses\", \"underline\", \"variant\"]);\n\n  var _useIsFocusVisible = Object(_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(),\n      isFocusVisible = _useIsFocusVisible.isFocusVisible,\n      onBlurVisible = _useIsFocusVisible.onBlurVisible,\n      focusVisibleRef = _useIsFocusVisible.ref;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      focusVisible = _React$useState[0],\n      setFocusVisible = _React$useState[1];\n\n  var handlerRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(ref, focusVisibleRef);\n\n  var handleBlur = function handleBlur(event) {\n    if (focusVisible) {\n      onBlurVisible();\n      setFocusVisible(false);\n    }\n\n    if (onBlur) {\n      onBlur(event);\n    }\n  };\n\n  var handleFocus = function handleFocus(event) {\n    if (isFocusVisible(event)) {\n      setFocusVisible(true);\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n  };\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Typography__WEBPACK_IMPORTED_MODULE_10__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes[\"underline\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(underline))], className, focusVisible && classes.focusVisible, component === 'button' && classes.button),\n    classes: TypographyClasses,\n    color: color,\n    component: component,\n    onBlur: handleBlur,\n    onFocus: handleFocus,\n    ref: handlerRef,\n    variant: variant\n  }, other));\n});\n true ? Link.propTypes = {\n  /**\n   * The content of the link.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the link.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['initial', 'inherit', 'primary', 'secondary', 'textPrimary', 'textSecondary', 'error']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: _material_ui_utils__WEBPACK_IMPORTED_MODULE_7__[\"elementTypeAcceptingRef\"],\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * `classes` prop applied to the [`Typography`](/api/typography/) element.\n   */\n  TypographyClasses: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Controls when the link should have an underline.\n   */\n  underline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['none', 'hover', 'always']),\n\n  /**\n   * Applies the theme typography styles.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiLink'\n})(Link));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Link/Link.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Link/index.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Link/index.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Link */ \"./jaas-client/node_modules/@material-ui/core/esm/Link/Link.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Link__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Link/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/List/List.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/List/List.js ***!
  \*********************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _ListContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ListContext */ \"./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js\");\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    listStyle: 'none',\n    margin: 0,\n    padding: 0,\n    position: 'relative'\n  },\n\n  /* Styles applied to the root element if `disablePadding={false}`. */\n  padding: {\n    paddingTop: 8,\n    paddingBottom: 8\n  },\n\n  /* Styles applied to the root element if dense. */\n  dense: {},\n\n  /* Styles applied to the root element if a `subheader` is provided. */\n  subheader: {\n    paddingTop: 0\n  }\n};\nvar List = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function List(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'ul' : _props$component,\n      _props$dense = props.dense,\n      dense = _props$dense === void 0 ? false : _props$dense,\n      _props$disablePadding = props.disablePadding,\n      disablePadding = _props$disablePadding === void 0 ? false : _props$disablePadding,\n      subheader = props.subheader,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"component\", \"dense\", \"disablePadding\", \"subheader\"]);\n\n  var context = react__WEBPACK_IMPORTED_MODULE_2__[\"useMemo\"](function () {\n    return {\n      dense: dense\n    };\n  }, [dense]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_ListContext__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Provider, {\n    value: context\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, dense && classes.dense, !disablePadding && classes.padding, subheader && classes.subheader),\n    ref: ref\n  }, other), subheader, children));\n});\n true ? List.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used for\n   * the list and list items.\n   * The prop is available to descendant components as the `dense` context.\n   */\n  dense: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, vertical padding will be removed from the list.\n   */\n  disablePadding: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The content of the subheader, normally `ListSubheader`.\n   */\n  subheader: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiList'\n})(List));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/List/List.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\n * @ignore - internal component.\n */\n\nvar ListContext = react__WEBPACK_IMPORTED_MODULE_0__[\"createContext\"]({});\n\nif (true) {\n  ListContext.displayName = 'ListContext';\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ListContext);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/List/index.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/List/index.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _List__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./List */ \"./jaas-client/node_modules/@material-ui/core/esm/List/List.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _List__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/List/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/ListItem/ListItem.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/ListItem/ListItem.js ***!
  \*****************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ButtonBase */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js\");\n/* harmony import */ var _utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/isMuiElement */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _List_ListContext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../List/ListContext */ \"./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_11__);\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the (normally root) `component` element. May be wrapped by a `container`. */\n    root: {\n      display: 'flex',\n      justifyContent: 'flex-start',\n      alignItems: 'center',\n      position: 'relative',\n      textDecoration: 'none',\n      width: '100%',\n      boxSizing: 'border-box',\n      textAlign: 'left',\n      paddingTop: 8,\n      paddingBottom: 8,\n      '&$focusVisible': {\n        backgroundColor: theme.palette.action.selected\n      },\n      '&$selected, &$selected:hover': {\n        backgroundColor: theme.palette.action.selected\n      },\n      '&$disabled': {\n        opacity: 0.5\n      }\n    },\n\n    /* Styles applied to the `container` element if `children` includes `ListItemSecondaryAction`. */\n    container: {\n      position: 'relative'\n    },\n\n    /* Pseudo-class applied to the `component`'s `focusVisibleClassName` prop if `button={true}`. */\n    focusVisible: {},\n\n    /* Styles applied to the `component` element if dense. */\n    dense: {\n      paddingTop: 4,\n      paddingBottom: 4\n    },\n\n    /* Styles applied to the `component` element if `alignItems=\"flex-start\"`. */\n    alignItemsFlexStart: {\n      alignItems: 'flex-start'\n    },\n\n    /* Pseudo-class applied to the inner `component` element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the inner `component` element if `divider={true}`. */\n    divider: {\n      borderBottom: \"1px solid \".concat(theme.palette.divider),\n      backgroundClip: 'padding-box'\n    },\n\n    /* Styles applied to the inner `component` element if `disableGutters={false}`. */\n    gutters: {\n      paddingLeft: 16,\n      paddingRight: 16\n    },\n\n    /* Styles applied to the inner `component` element if `button={true}`. */\n    button: {\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&:hover': {\n        textDecoration: 'none',\n        backgroundColor: theme.palette.action.hover,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the `component` element if `children` includes `ListItemSecondaryAction`. */\n    secondaryAction: {\n      // Add some space to avoid collision as `ListItemSecondaryAction`\n      // is absolutely positioned.\n      paddingRight: 48\n    },\n\n    /* Pseudo-class applied to the root element if `selected={true}`. */\n    selected: {}\n  };\n};\nvar useEnhancedEffect = typeof window === 'undefined' ? react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"] : react__WEBPACK_IMPORTED_MODULE_2__[\"useLayoutEffect\"];\n/**\n * Uses an additional container component if `ListItemSecondaryAction` is the last child.\n */\n\nvar ListItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function ListItem(props, ref) {\n  var _props$alignItems = props.alignItems,\n      alignItems = _props$alignItems === void 0 ? 'center' : _props$alignItems,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      _props$button = props.button,\n      button = _props$button === void 0 ? false : _props$button,\n      childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      componentProp = props.component,\n      _props$ContainerCompo = props.ContainerComponent,\n      ContainerComponent = _props$ContainerCompo === void 0 ? 'li' : _props$ContainerCompo,\n      _props$ContainerProps = props.ContainerProps;\n  _props$ContainerProps = _props$ContainerProps === void 0 ? {} : _props$ContainerProps;\n\n  var ContainerClassName = _props$ContainerProps.className,\n      ContainerProps = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_props$ContainerProps, [\"className\"]),\n      _props$dense = props.dense,\n      dense = _props$dense === void 0 ? false : _props$dense,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      _props$divider = props.divider,\n      divider = _props$divider === void 0 ? false : _props$divider,\n      focusVisibleClassName = props.focusVisibleClassName,\n      _props$selected = props.selected,\n      selected = _props$selected === void 0 ? false : _props$selected,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"alignItems\", \"autoFocus\", \"button\", \"children\", \"classes\", \"className\", \"component\", \"ContainerComponent\", \"ContainerProps\", \"dense\", \"disabled\", \"disableGutters\", \"divider\", \"focusVisibleClassName\", \"selected\"]);\n\n  var context = react__WEBPACK_IMPORTED_MODULE_2__[\"useContext\"](_List_ListContext__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n  var childContext = {\n    dense: dense || context.dense || false,\n    alignItems: alignItems\n  };\n  var listItemRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  useEnhancedEffect(function () {\n    if (autoFocus) {\n      if (listItemRef.current) {\n        listItemRef.current.focus();\n      } else if (true) {\n        console.error('Material-UI: Unable to set focus to a ListItem whose component has not been rendered.');\n      }\n    }\n  }, [autoFocus]);\n  var children = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].toArray(childrenProp);\n  var hasSecondaryAction = children.length && Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(children[children.length - 1], ['ListItemSecondaryAction']);\n  var handleOwnRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (instance) {\n    // #StrictMode ready\n    listItemRef.current = react_dom__WEBPACK_IMPORTED_MODULE_11__[\"findDOMNode\"](instance);\n  }, []);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(handleOwnRef, ref);\n\n  var componentProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, childContext.dense && classes.dense, !disableGutters && classes.gutters, divider && classes.divider, disabled && classes.disabled, button && classes.button, alignItems !== \"center\" && classes.alignItemsFlexStart, hasSecondaryAction && classes.secondaryAction, selected && classes.selected),\n    disabled: disabled\n  }, other);\n\n  var Component = componentProp || 'li';\n\n  if (button) {\n    componentProps.component = componentProp || 'div';\n    componentProps.focusVisibleClassName = Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.focusVisible, focusVisibleClassName);\n    Component = _ButtonBase__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\n  }\n\n  if (hasSecondaryAction) {\n    // Use div by default.\n    Component = !componentProps.component && !componentProp ? 'div' : Component; // Avoid nesting of li > li.\n\n    if (ContainerComponent === 'li') {\n      if (Component === 'li') {\n        Component = 'div';\n      } else if (componentProps.component === 'li') {\n        componentProps.component = 'div';\n      }\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_List_ListContext__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Provider, {\n      value: childContext\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](ContainerComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.container, ContainerClassName),\n      ref: handleRef\n    }, ContainerProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, componentProps, children), children.pop()));\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_List_ListContext__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Provider, {\n    value: childContext\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    ref: handleRef\n  }, componentProps), children));\n});\n true ? ListItem.propTypes = {\n  /**\n   * Defines the `align-items` style property.\n   */\n  alignItems: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['flex-start', 'center']),\n\n  /**\n   * If `true`, the list item will be focused during the first mount.\n   * Focus will also be triggered if the value changes from false to true.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the list item will be a button (using `ButtonBase`). Props intended\n   * for `ButtonBase` can then be applied to `ListItem`.\n   */\n  button: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The content of the component. If a `ListItemSecondaryAction` is used it must\n   * be the last child.\n   */\n  children: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node, function (props) {\n    var children = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].toArray(props.children); // React.Children.toArray(props.children).findLastIndex(isListItemSecondaryAction)\n\n    var secondaryActionIndex = -1;\n\n    for (var i = children.length - 1; i >= 0; i -= 1) {\n      var child = children[i];\n\n      if (Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(child, ['ListItemSecondaryAction'])) {\n        secondaryActionIndex = i;\n        break;\n      }\n    } //  is ListItemSecondaryAction the last child of ListItem\n\n\n    if (secondaryActionIndex !== -1 && secondaryActionIndex !== children.length - 1) {\n      return new Error('Material-UI: You used an element after ListItemSecondaryAction. ' + 'For ListItem to detect that it has a secondary action ' + 'you must pass it as the last child to ListItem.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   * By default, it's a `li` when `button` is `false` and a `div` when `button` is `true`.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * The container component used when a `ListItemSecondaryAction` is the last child.\n   */\n  ContainerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * Props applied to the container component if used.\n   */\n  ContainerProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used.\n   */\n  dense: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the list item will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, a 1px light border is added to the bottom of the list item.\n   */\n  divider: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Use to apply selected styling.\n   */\n  selected: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiListItem'\n})(ListItem));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ListItem/ListItem.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/ListItem/index.js":
/*!**************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/ListItem/index.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ListItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ListItem */ \"./jaas-client/node_modules/@material-ui/core/esm/ListItem/ListItem.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _ListItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ListItem/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js ***!
  \*********************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Popover__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Popover */ \"./jaas-client/node_modules/@material-ui/core/esm/Popover/index.js\");\n/* harmony import */ var _MenuList__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../MenuList */ \"./jaas-client/node_modules/@material-ui/core/esm/MenuList/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _utils_setRef__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/setRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../styles/useTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar RTL_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'right'\n};\nvar LTR_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'left'\n};\nvar styles = {\n  /* Styles applied to the `Paper` component. */\n  paper: {\n    // specZ: The maximum height of a simple menu should be one or more rows less than the view\n    // height. This ensures a tapable area outside of the simple menu with which to dismiss\n    // the menu.\n    maxHeight: 'calc(100% - 96px)',\n    // Add iOS momentum scrolling.\n    WebkitOverflowScrolling: 'touch'\n  },\n\n  /* Styles applied to the `List` component via `MenuList`. */\n  list: {\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0\n  }\n};\nvar Menu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Menu(props, ref) {\n  var _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,\n      children = props.children,\n      classes = props.classes,\n      _props$disableAutoFoc = props.disableAutoFocusItem,\n      disableAutoFocusItem = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$MenuListProps = props.MenuListProps,\n      MenuListProps = _props$MenuListProps === void 0 ? {} : _props$MenuListProps,\n      onClose = props.onClose,\n      onEntering = props.onEntering,\n      open = props.open,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      PopoverClasses = props.PopoverClasses,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? 'auto' : _props$transitionDura,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'selectedMenu' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"autoFocus\", \"children\", \"classes\", \"disableAutoFocusItem\", \"MenuListProps\", \"onClose\", \"onEntering\", \"open\", \"PaperProps\", \"PopoverClasses\", \"transitionDuration\", \"variant\"]);\n\n  var theme = Object(_styles_useTheme__WEBPACK_IMPORTED_MODULE_12__[\"default\"])();\n  var autoFocusItem = autoFocus && !disableAutoFocusItem && open;\n  var menuListActionsRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var contentAnchorRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n\n  var getContentAnchorEl = function getContentAnchorEl() {\n    return contentAnchorRef.current;\n  };\n\n  var handleEntering = function handleEntering(element, isAppearing) {\n    if (menuListActionsRef.current) {\n      menuListActionsRef.current.adjustStyleForScrollbar(element, theme);\n    }\n\n    if (onEntering) {\n      onEntering(element, isAppearing);\n    }\n  };\n\n  var handleListKeyDown = function handleListKeyDown(event) {\n    if (event.key === 'Tab') {\n      event.preventDefault();\n\n      if (onClose) {\n        onClose(event, 'tabKeyDown');\n      }\n    }\n  };\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n\n\n  var activeItemIndex = -1; // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].map(children, function (child, index) {\n    if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"isValidElement\"](child)) {\n      return;\n    }\n\n    if (true) {\n      if (Object(react_is__WEBPACK_IMPORTED_MODULE_3__[\"isFragment\"])(child)) {\n        console.error([\"Material-UI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    if (!child.props.disabled) {\n      if (variant !== \"menu\" && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  var items = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].map(children, function (child, index) {\n    if (index === activeItemIndex) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](child, {\n        ref: function ref(instance) {\n          // #StrictMode ready\n          contentAnchorRef.current = react_dom__WEBPACK_IMPORTED_MODULE_10__[\"findDOMNode\"](instance);\n          Object(_utils_setRef__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(child.ref, instance);\n        }\n      });\n    }\n\n    return child;\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Popover__WEBPACK_IMPORTED_MODULE_8__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    getContentAnchorEl: getContentAnchorEl,\n    classes: PopoverClasses,\n    onClose: onClose,\n    onEntering: handleEntering,\n    anchorOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n    transformOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n    PaperProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, PaperProps, {\n      classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, PaperProps.classes, {\n        root: classes.paper\n      })\n    }),\n    open: open,\n    ref: ref,\n    transitionDuration: transitionDuration\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_MenuList__WEBPACK_IMPORTED_MODULE_9__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    onKeyDown: handleListKeyDown,\n    actions: menuListActionsRef,\n    autoFocus: autoFocus && (activeItemIndex === -1 || disableAutoFocusItem),\n    autoFocusItem: autoFocusItem,\n    variant: variant\n  }, MenuListProps, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.list, MenuListProps.className)\n  }), items));\n});\n true ? Menu.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A HTML element, or a function that returns it.\n   * It's used to set the position of the menu.\n   */\n  anchorEl: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func]),\n\n  /**\n   * If `true` (Default) will focus the `[role=\"menu\"]` if no focusable child is found. Disabled\n   * children are not focusable. If you set this prop to `false` focus will be placed\n   * on the parent modal container. This has severe accessibility implications\n   * and should only be considered if you manage focus otherwise.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Menu contents, normally `MenuItem`s.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * When opening the menu will not focus the active item but the `[role=\"menu\"]`\n   * unless `autoFocus` is also set to `false`. Not using the default means not\n   * following WAI-ARIA authoring practices. Please be considerate about possible\n   * accessibility implications.\n   */\n  disableAutoFocusItem: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Props applied to the [`MenuList`](/api/menu-list/) element.\n   */\n  MenuListProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`, `\"tabKeyDown\"`.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired before the Menu enters.\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the Menu has entered.\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the Menu is entering.\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired before the Menu exits.\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the Menu has exited.\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the Menu is exiting.\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * If `true`, the menu is visible.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired,\n\n  /**\n   * @ignore\n   */\n  PaperProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * `classes` prop applied to the [`Popover`](/api/popover/) element.\n   */\n  PopoverClasses: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * The length of the transition in `ms`, or 'auto'\n   */\n  transitionDuration: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['auto']), prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  })]),\n\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['menu', 'selectedMenu'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiMenu'\n})(Menu));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Menu/index.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Menu/index.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Menu */ \"./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Menu__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Menu/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/MenuItem/MenuItem.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/MenuItem/MenuItem.js ***!
  \*****************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _ListItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ListItem */ \"./jaas-client/node_modules/@material-ui/core/esm/ListItem/index.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.typography.body1, Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      minHeight: 48,\n      paddingTop: 6,\n      paddingBottom: 6,\n      boxSizing: 'border-box',\n      width: 'auto',\n      overflow: 'hidden',\n      whiteSpace: 'nowrap'\n    }, theme.breakpoints.up('sm'), {\n      minHeight: 'auto'\n    })),\n    // TODO v5: remove\n\n    /* Styles applied to the root element if `disableGutters={false}`. */\n    gutters: {},\n\n    /* Styles applied to the root element if `selected={true}`. */\n    selected: {},\n\n    /* Styles applied to the root element if dense. */\n    dense: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.typography.body2, {\n      minHeight: 'auto'\n    })\n  };\n};\nvar MenuItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function MenuItem(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'li' : _props$component,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      ListItemClasses = props.ListItemClasses,\n      _props$role = props.role,\n      role = _props$role === void 0 ? 'menuitem' : _props$role,\n      selected = props.selected,\n      tabIndexProp = props.tabIndex,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"classes\", \"className\", \"component\", \"disableGutters\", \"ListItemClasses\", \"role\", \"selected\", \"tabIndex\"]);\n\n  var tabIndex;\n\n  if (!props.disabled) {\n    tabIndex = tabIndexProp !== undefined ? tabIndexProp : -1;\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_ListItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n    button: true,\n    role: role,\n    tabIndex: tabIndex,\n    component: component,\n    selected: selected,\n    disableGutters: disableGutters,\n    classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n      dense: classes.dense\n    }, ListItemClasses),\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className, selected && classes.selected, !disableGutters && classes.gutters),\n    ref: ref\n  }, other));\n});\n true ? MenuItem.propTypes = {\n  /**\n   * Menu item contents.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used.\n   */\n  dense: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * `classes` prop applied to the [`ListItem`](/api/list-item/) element.\n   */\n  ListItemClasses: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  role: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * @ignore\n   */\n  selected: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiMenuItem'\n})(MenuItem));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/MenuItem/MenuItem.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/MenuItem/index.js":
/*!**************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/MenuItem/index.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MenuItem */ \"./jaas-client/node_modules/@material-ui/core/esm/MenuItem/MenuItem.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _MenuItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/MenuItem/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/MenuList/MenuList.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/MenuList/MenuList.js ***!
  \*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _List__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../List */ \"./jaas-client/node_modules/@material-ui/core/esm/List/index.js\");\n/* harmony import */ var _utils_getScrollbarSize__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/getScrollbarSize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\n\n\n\n\nfunction nextItem(list, item, disableListWrap) {\n  if (list === item) {\n    return list.firstChild;\n  }\n\n  if (item && item.nextElementSibling) {\n    return item.nextElementSibling;\n  }\n\n  return disableListWrap ? null : list.firstChild;\n}\n\nfunction previousItem(list, item, disableListWrap) {\n  if (list === item) {\n    return disableListWrap ? list.firstChild : list.lastChild;\n  }\n\n  if (item && item.previousElementSibling) {\n    return item.previousElementSibling;\n  }\n\n  return disableListWrap ? null : list.lastChild;\n}\n\nfunction textCriteriaMatches(nextFocus, textCriteria) {\n  if (textCriteria === undefined) {\n    return true;\n  }\n\n  var text = nextFocus.innerText;\n\n  if (text === undefined) {\n    // jsdom doesn't support innerText\n    text = nextFocus.textContent;\n  }\n\n  text = text.trim().toLowerCase();\n\n  if (text.length === 0) {\n    return false;\n  }\n\n  if (textCriteria.repeating) {\n    return text[0] === textCriteria.keys[0];\n  }\n\n  return text.indexOf(textCriteria.keys.join('')) === 0;\n}\n\nfunction moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, traversalFunction, textCriteria) {\n  var wrappedOnce = false;\n  var nextFocus = traversalFunction(list, currentFocus, currentFocus ? disableListWrap : false);\n\n  while (nextFocus) {\n    // Prevent infinite loop.\n    if (nextFocus === list.firstChild) {\n      if (wrappedOnce) {\n        return;\n      }\n\n      wrappedOnce = true;\n    } // Same logic as useAutocomplete.js\n\n\n    var nextFocusDisabled = disabledItemsFocusable ? false : nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';\n\n    if (!nextFocus.hasAttribute('tabindex') || !textCriteriaMatches(nextFocus, textCriteria) || nextFocusDisabled) {\n      // Move to the next element.\n      nextFocus = traversalFunction(list, nextFocus, disableListWrap);\n    } else {\n      nextFocus.focus();\n      return;\n    }\n  }\n}\n\nvar useEnhancedEffect = typeof window === 'undefined' ? react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"] : react__WEBPACK_IMPORTED_MODULE_2__[\"useLayoutEffect\"];\n/**\n * A permanently displayed menu following https://www.w3.org/TR/wai-aria-practices/#menubutton.\n * It's exposed to help customization of the [`Menu`](/api/menu/) component. If you\n * use it separately you need to move focus into the component manually. Once\n * the focus is placed inside the component it is fully keyboard accessible.\n */\n\nvar MenuList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function MenuList(props, ref) {\n  var actions = props.actions,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      _props$autoFocusItem = props.autoFocusItem,\n      autoFocusItem = _props$autoFocusItem === void 0 ? false : _props$autoFocusItem,\n      children = props.children,\n      className = props.className,\n      _props$disabledItemsF = props.disabledItemsFocusable,\n      disabledItemsFocusable = _props$disabledItemsF === void 0 ? false : _props$disabledItemsF,\n      _props$disableListWra = props.disableListWrap,\n      disableListWrap = _props$disableListWra === void 0 ? false : _props$disableListWra,\n      onKeyDown = props.onKeyDown,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'selectedMenu' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"actions\", \"autoFocus\", \"autoFocusItem\", \"children\", \"className\", \"disabledItemsFocusable\", \"disableListWrap\", \"onKeyDown\", \"variant\"]);\n\n  var listRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var textCriteriaRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"]({\n    keys: [],\n    repeating: true,\n    previousKeyMatched: true,\n    lastTime: null\n  });\n  useEnhancedEffect(function () {\n    if (autoFocus) {\n      listRef.current.focus();\n    }\n  }, [autoFocus]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useImperativeHandle\"](actions, function () {\n    return {\n      adjustStyleForScrollbar: function adjustStyleForScrollbar(containerElement, theme) {\n        // Let's ignore that piece of logic if users are already overriding the width\n        // of the menu.\n        var noExplicitWidth = !listRef.current.style.width;\n\n        if (containerElement.clientHeight < listRef.current.clientHeight && noExplicitWidth) {\n          var scrollbarSize = \"\".concat(Object(_utils_getScrollbarSize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(true), \"px\");\n          listRef.current.style[theme.direction === 'rtl' ? 'paddingLeft' : 'paddingRight'] = scrollbarSize;\n          listRef.current.style.width = \"calc(100% + \".concat(scrollbarSize, \")\");\n        }\n\n        return listRef.current;\n      }\n    };\n  }, []);\n\n  var handleKeyDown = function handleKeyDown(event) {\n    var list = listRef.current;\n    var key = event.key;\n    /**\n     * @type {Element} - will always be defined since we are in a keydown handler\n     * attached to an element. A keydown event is either dispatched to the activeElement\n     * or document.body or document.documentElement. Only the first case will\n     * trigger this specific handler.\n     */\n\n    var currentFocus = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(list).activeElement;\n\n    if (key === 'ArrowDown') {\n      // Prevent scroll of the page\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'ArrowUp') {\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key === 'Home') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'End') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key.length === 1) {\n      var criteria = textCriteriaRef.current;\n      var lowerKey = key.toLowerCase();\n      var currTime = performance.now();\n\n      if (criteria.keys.length > 0) {\n        // Reset\n        if (currTime - criteria.lastTime > 500) {\n          criteria.keys = [];\n          criteria.repeating = true;\n          criteria.previousKeyMatched = true;\n        } else if (criteria.repeating && lowerKey !== criteria.keys[0]) {\n          criteria.repeating = false;\n        }\n      }\n\n      criteria.lastTime = currTime;\n      criteria.keys.push(lowerKey);\n      var keepFocusOnCurrent = currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus, criteria);\n\n      if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus(list, currentFocus, false, disabledItemsFocusable, nextItem, criteria))) {\n        event.preventDefault();\n      } else {\n        criteria.previousKeyMatched = false;\n      }\n    }\n\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n  };\n\n  var handleOwnRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (instance) {\n    // #StrictMode ready\n    listRef.current = react_dom__WEBPACK_IMPORTED_MODULE_5__[\"findDOMNode\"](instance);\n  }, []);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(handleOwnRef, ref);\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n\n  var activeItemIndex = -1; // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].forEach(children, function (child, index) {\n    if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"isValidElement\"](child)) {\n      return;\n    }\n\n    if (true) {\n      if (Object(react_is__WEBPACK_IMPORTED_MODULE_3__[\"isFragment\"])(child)) {\n        console.error([\"Material-UI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    if (!child.props.disabled) {\n      if (variant === 'selectedMenu' && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  var items = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].map(children, function (child, index) {\n    if (index === activeItemIndex) {\n      var newChildProps = {};\n\n      if (autoFocusItem) {\n        newChildProps.autoFocus = true;\n      }\n\n      if (child.props.tabIndex === undefined && variant === 'selectedMenu') {\n        newChildProps.tabIndex = 0;\n      }\n\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](child, newChildProps);\n    }\n\n    return child;\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_List__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    role: \"menu\",\n    ref: handleRef,\n    className: className,\n    onKeyDown: handleKeyDown,\n    tabIndex: autoFocus ? 0 : -1\n  }, other), items);\n});\n true ? MenuList.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, will focus the `[role=\"menu\"]` container and move into tab order.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, will focus the first menuitem if `variant=\"menu\"` or selected item\n   * if `variant=\"selectedMenu\"`.\n   */\n  autoFocusItem: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * MenuList contents, normally `MenuItem`s.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * If `true`, will allow focus on disabled items.\n   */\n  disabledItemsFocusable: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the menu items will not wrap focus.\n   */\n  disableListWrap: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['menu', 'selectedMenu'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (MenuList);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/MenuList/MenuList.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/MenuList/index.js":
/*!**************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/MenuList/index.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _MenuList__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MenuList */ \"./jaas-client/node_modules/@material-ui/core/esm/MenuList/MenuList.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _MenuList__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/MenuList/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Modal/Modal.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Modal/Modal.js ***!
  \***********************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _Portal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Portal */ \"./jaas-client/node_modules/@material-ui/core/esm/Portal/index.js\");\n/* harmony import */ var _utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/createChainedFunction */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/useEventCallback */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js\");\n/* harmony import */ var _styles_zIndex__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../styles/zIndex */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js\");\n/* harmony import */ var _ModalManager__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ModalManager */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js\");\n/* harmony import */ var _Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Unstable_TrapFocus */ \"./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/index.js\");\n/* harmony import */ var _SimpleBackdrop__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./SimpleBackdrop */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getContainer(container) {\n  container = typeof container === 'function' ? container() : container;\n  return react_dom__WEBPACK_IMPORTED_MODULE_3__[\"findDOMNode\"](container);\n}\n\nfunction getHasTransition(props) {\n  return props.children ? props.children.props.hasOwnProperty('in') : false;\n} // A modal manager used to track and manage the state of open Modals.\n// Modals don't open on the server so this won't conflict with concurrent requests.\n\n\nvar defaultManager = new _ModalManager__WEBPACK_IMPORTED_MODULE_13__[\"default\"]();\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'fixed',\n      zIndex: theme.zIndex.modal,\n      right: 0,\n      bottom: 0,\n      top: 0,\n      left: 0\n    },\n\n    /* Styles applied to the root element if the `Modal` has exited. */\n    hidden: {\n      visibility: 'hidden'\n    }\n  };\n};\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/api/dialog/)\n * - [Drawer](/api/drawer/)\n * - [Menu](/api/menu/)\n * - [Popover](/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\n\nvar Modal = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Modal(inProps, ref) {\n  var theme = Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_5__[\"useTheme\"])();\n  var props = Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_5__[\"getThemeProps\"])({\n    name: 'MuiModal',\n    props: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, inProps),\n    theme: theme\n  });\n\n  var _props$BackdropCompon = props.BackdropComponent,\n      BackdropComponent = _props$BackdropCompon === void 0 ? _SimpleBackdrop__WEBPACK_IMPORTED_MODULE_15__[\"default\"] : _props$BackdropCompon,\n      BackdropProps = props.BackdropProps,\n      children = props.children,\n      _props$closeAfterTran = props.closeAfterTransition,\n      closeAfterTransition = _props$closeAfterTran === void 0 ? false : _props$closeAfterTran,\n      container = props.container,\n      _props$disableAutoFoc = props.disableAutoFocus,\n      disableAutoFocus = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$disableBackdro = props.disableBackdropClick,\n      disableBackdropClick = _props$disableBackdro === void 0 ? false : _props$disableBackdro,\n      _props$disableEnforce = props.disableEnforceFocus,\n      disableEnforceFocus = _props$disableEnforce === void 0 ? false : _props$disableEnforce,\n      _props$disableEscapeK = props.disableEscapeKeyDown,\n      disableEscapeKeyDown = _props$disableEscapeK === void 0 ? false : _props$disableEscapeK,\n      _props$disablePortal = props.disablePortal,\n      disablePortal = _props$disablePortal === void 0 ? false : _props$disablePortal,\n      _props$disableRestore = props.disableRestoreFocus,\n      disableRestoreFocus = _props$disableRestore === void 0 ? false : _props$disableRestore,\n      _props$disableScrollL = props.disableScrollLock,\n      disableScrollLock = _props$disableScrollL === void 0 ? false : _props$disableScrollL,\n      _props$hideBackdrop = props.hideBackdrop,\n      hideBackdrop = _props$hideBackdrop === void 0 ? false : _props$hideBackdrop,\n      _props$keepMounted = props.keepMounted,\n      keepMounted = _props$keepMounted === void 0 ? false : _props$keepMounted,\n      _props$manager = props.manager,\n      manager = _props$manager === void 0 ? defaultManager : _props$manager,\n      onBackdropClick = props.onBackdropClick,\n      onClose = props.onClose,\n      onEscapeKeyDown = props.onEscapeKeyDown,\n      onRendered = props.onRendered,\n      open = props.open,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"BackdropComponent\", \"BackdropProps\", \"children\", \"closeAfterTransition\", \"container\", \"disableAutoFocus\", \"disableBackdropClick\", \"disableEnforceFocus\", \"disableEscapeKeyDown\", \"disablePortal\", \"disableRestoreFocus\", \"disableScrollLock\", \"hideBackdrop\", \"keepMounted\", \"manager\", \"onBackdropClick\", \"onClose\", \"onEscapeKeyDown\", \"onRendered\", \"open\"]);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](true),\n      exited = _React$useState[0],\n      setExited = _React$useState[1];\n\n  var modal = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"]({});\n  var mountNodeRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var modalRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(modalRef, ref);\n  var hasTransition = getHasTransition(props);\n\n  var getDoc = function getDoc() {\n    return Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(mountNodeRef.current);\n  };\n\n  var getModal = function getModal() {\n    modal.current.modalRef = modalRef.current;\n    modal.current.mountNode = mountNodeRef.current;\n    return modal.current;\n  };\n\n  var handleMounted = function handleMounted() {\n    manager.mount(getModal(), {\n      disableScrollLock: disableScrollLock\n    }); // Fix a bug on Chrome where the scroll isn't initially 0.\n\n    modalRef.current.scrollTop = 0;\n  };\n\n  var handleOpen = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(function () {\n    var resolvedContainer = getContainer(container) || getDoc().body;\n    manager.add(getModal(), resolvedContainer); // The element was already mounted.\n\n    if (modalRef.current) {\n      handleMounted();\n    }\n  });\n  var isTopModal = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    return manager.isTopModal(getModal());\n  }, [manager]);\n  var handlePortalRef = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(function (node) {\n    mountNodeRef.current = node;\n\n    if (!node) {\n      return;\n    }\n\n    if (onRendered) {\n      onRendered();\n    }\n\n    if (open && isTopModal()) {\n      handleMounted();\n    } else {\n      Object(_ModalManager__WEBPACK_IMPORTED_MODULE_13__[\"ariaHidden\"])(modalRef.current, true);\n    }\n  });\n  var handleClose = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    manager.remove(getModal());\n  }, [manager]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    return function () {\n      handleClose();\n    };\n  }, [handleClose]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (open) {\n      handleOpen();\n    } else if (!hasTransition || !closeAfterTransition) {\n      handleClose();\n    }\n  }, [open, handleClose, hasTransition, closeAfterTransition, handleOpen]);\n\n  if (!keepMounted && !open && (!hasTransition || exited)) {\n    return null;\n  }\n\n  var handleEnter = function handleEnter() {\n    setExited(false);\n  };\n\n  var handleExited = function handleExited() {\n    setExited(true);\n\n    if (closeAfterTransition) {\n      handleClose();\n    }\n  };\n\n  var handleBackdropClick = function handleBackdropClick(event) {\n    if (event.target !== event.currentTarget) {\n      return;\n    }\n\n    if (onBackdropClick) {\n      onBackdropClick(event);\n    }\n\n    if (!disableBackdropClick && onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n\n  var handleKeyDown = function handleKeyDown(event) {\n    // The handler doesn't take event.defaultPrevented into account:\n    //\n    // event.preventDefault() is meant to stop default behaviours like\n    // clicking a checkbox to check it, hitting a button to submit a form,\n    // and hitting left arrow to move the cursor in a text input etc.\n    // Only special HTML elements have these default behaviors.\n    if (event.key !== 'Escape' || !isTopModal()) {\n      return;\n    }\n\n    if (onEscapeKeyDown) {\n      onEscapeKeyDown(event);\n    }\n\n    if (!disableEscapeKeyDown) {\n      // Swallow the event, in case someone is listening for the escape key on the body.\n      event.stopPropagation();\n\n      if (onClose) {\n        onClose(event, 'escapeKeyDown');\n      }\n    }\n  };\n\n  var inlineStyle = styles(theme || {\n    zIndex: _styles_zIndex__WEBPACK_IMPORTED_MODULE_12__[\"default\"]\n  });\n  var childProps = {};\n\n  if (children.props.tabIndex === undefined) {\n    childProps.tabIndex = children.props.tabIndex || '-1';\n  } // It's a Transition like component\n\n\n  if (hasTransition) {\n    childProps.onEnter = Object(_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(handleEnter, children.props.onEnter);\n    childProps.onExited = Object(_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(handleExited, children.props.onExited);\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Portal__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n    ref: handlePortalRef,\n    container: container,\n    disablePortal: disablePortal\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    ref: handleRef,\n    onKeyDown: handleKeyDown,\n    role: \"presentation\"\n  }, other, {\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, inlineStyle.root, !open && exited ? inlineStyle.hidden : {}, other.style)\n  }), hideBackdrop ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](BackdropComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    open: open,\n    onClick: handleBackdropClick\n  }, BackdropProps)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n    disableEnforceFocus: disableEnforceFocus,\n    disableAutoFocus: disableAutoFocus,\n    disableRestoreFocus: disableRestoreFocus,\n    getDoc: getDoc,\n    isEnabled: isTopModal,\n    open: open\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](children, childProps))));\n});\n true ? Modal.propTypes = {\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   */\n  BackdropComponent: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType,\n\n  /**\n   * Props applied to the [`Backdrop`](/api/backdrop/) element.\n   */\n  BackdropProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * A single child content element.\n   */\n  children: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"elementAcceptingRef\"].isRequired,\n\n  /**\n   * When set to true the Modal waits until a nested Transition is completed before closing.\n   */\n  closeAfterTransition: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * A HTML element, component instance, or function that returns either.\n   * The `container` will have the portal children appended to it.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.instanceOf(react__WEBPACK_IMPORTED_MODULE_2__[\"Component\"]), prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func]),\n\n  /**\n   * If `true`, the modal will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableAutoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, clicking the backdrop will not fire `onClose`.\n   */\n  disableBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the modal will not prevent focus from leaving the modal while open.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableEnforceFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, hitting escape will not fire `onClose`.\n   */\n  disableEscapeKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Disable the portal behavior.\n   * The children stay within it's parent DOM hierarchy.\n   */\n  disablePortal: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the modal will not restore focus to previously focused element once\n   * modal is hidden.\n   */\n  disableRestoreFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Disable the scroll lock behavior.\n   */\n  disableScrollLock: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the backdrop is not rendered.\n   */\n  hideBackdrop: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Modal.\n   */\n  keepMounted: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  manager: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Callback fired when the backdrop is clicked.\n   */\n  onBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * The `reason` parameter can optionally be used to control the response to `onClose`.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the escape key is pressed,\n   * `disableEscapeKeyDown` is false and the modal is in focus.\n   */\n  onEscapeKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired once the children has been mounted into the `container`.\n   * It signals that the `open={true}` prop took effect.\n   *\n   * This prop will be deprecated and removed in v5, the ref can be used instead.\n   */\n  onRendered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * If `true`, the modal is open.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Modal);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Modal/Modal.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js ***!
  \******************************************************************************/
/*! exports provided: ariaHidden, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ariaHidden\", function() { return ariaHidden; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ModalManager; });\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _utils_getScrollbarSize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getScrollbarSize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js\");\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _utils_ownerWindow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/ownerWindow */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js\");\n\n\n\n\n\n // Is a vertical scrollbar displayed?\n\nfunction isOverflowing(container) {\n  var doc = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(container);\n\n  if (doc.body === container) {\n    return Object(_utils_ownerWindow__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(doc).innerWidth > doc.documentElement.clientWidth;\n  }\n\n  return container.scrollHeight > container.clientHeight;\n}\n\nfunction ariaHidden(node, show) {\n  if (show) {\n    node.setAttribute('aria-hidden', 'true');\n  } else {\n    node.removeAttribute('aria-hidden');\n  }\n}\n\nfunction getPaddingRight(node) {\n  return parseInt(window.getComputedStyle(node)['padding-right'], 10) || 0;\n}\n\nfunction ariaHiddenSiblings(container, mountNode, currentNode) {\n  var nodesToExclude = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n  var show = arguments.length > 4 ? arguments[4] : undefined;\n  var blacklist = [mountNode, currentNode].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nodesToExclude));\n  var blacklistTagNames = ['TEMPLATE', 'SCRIPT', 'STYLE'];\n  [].forEach.call(container.children, function (node) {\n    if (node.nodeType === 1 && blacklist.indexOf(node) === -1 && blacklistTagNames.indexOf(node.tagName) === -1) {\n      ariaHidden(node, show);\n    }\n  });\n}\n\nfunction findIndexOf(containerInfo, callback) {\n  var idx = -1;\n  containerInfo.some(function (item, index) {\n    if (callback(item)) {\n      idx = index;\n      return true;\n    }\n\n    return false;\n  });\n  return idx;\n}\n\nfunction handleContainer(containerInfo, props) {\n  var restoreStyle = [];\n  var restorePaddings = [];\n  var container = containerInfo.container;\n  var fixedNodes;\n\n  if (!props.disableScrollLock) {\n    if (isOverflowing(container)) {\n      // Compute the size before applying overflow hidden to avoid any scroll jumps.\n      var scrollbarSize = Object(_utils_getScrollbarSize__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n      restoreStyle.push({\n        value: container.style.paddingRight,\n        key: 'padding-right',\n        el: container\n      }); // Use computed style, here to get the real padding to add our scrollbar width.\n\n      container.style['padding-right'] = \"\".concat(getPaddingRight(container) + scrollbarSize, \"px\"); // .mui-fixed is a global helper.\n\n      fixedNodes = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(container).querySelectorAll('.mui-fixed');\n      [].forEach.call(fixedNodes, function (node) {\n        restorePaddings.push(node.style.paddingRight);\n        node.style.paddingRight = \"\".concat(getPaddingRight(node) + scrollbarSize, \"px\");\n      });\n    } // Improve Gatsby support\n    // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n\n\n    var parent = container.parentElement;\n    var scrollContainer = parent.nodeName === 'HTML' && window.getComputedStyle(parent)['overflow-y'] === 'scroll' ? parent : container; // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n    // screensize shrink.\n\n    restoreStyle.push({\n      value: scrollContainer.style.overflow,\n      key: 'overflow',\n      el: scrollContainer\n    });\n    scrollContainer.style.overflow = 'hidden';\n  }\n\n  var restore = function restore() {\n    if (fixedNodes) {\n      [].forEach.call(fixedNodes, function (node, i) {\n        if (restorePaddings[i]) {\n          node.style.paddingRight = restorePaddings[i];\n        } else {\n          node.style.removeProperty('padding-right');\n        }\n      });\n    }\n\n    restoreStyle.forEach(function (_ref) {\n      var value = _ref.value,\n          el = _ref.el,\n          key = _ref.key;\n\n      if (value) {\n        el.style.setProperty(key, value);\n      } else {\n        el.style.removeProperty(key);\n      }\n    });\n  };\n\n  return restore;\n}\n\nfunction getHiddenSiblings(container) {\n  var hiddenSiblings = [];\n  [].forEach.call(container.children, function (node) {\n    if (node.getAttribute && node.getAttribute('aria-hidden') === 'true') {\n      hiddenSiblings.push(node);\n    }\n  });\n  return hiddenSiblings;\n}\n/**\n * @ignore - do not document.\n *\n * Proper state management for containers and the modals in those containers.\n * Simplified, but inspired by react-overlay's ModalManager class.\n * Used by the Modal to ensure proper styling of containers.\n */\n\n\nvar ModalManager = /*#__PURE__*/function () {\n  function ModalManager() {\n    Object(_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, ModalManager);\n\n    // this.modals[modalIndex] = modal\n    this.modals = []; // this.containers[containerIndex] = {\n    //   modals: [],\n    //   container,\n    //   restore: null,\n    // }\n\n    this.containers = [];\n  }\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(ModalManager, [{\n    key: \"add\",\n    value: function add(modal, container) {\n      var modalIndex = this.modals.indexOf(modal);\n\n      if (modalIndex !== -1) {\n        return modalIndex;\n      }\n\n      modalIndex = this.modals.length;\n      this.modals.push(modal); // If the modal we are adding is already in the DOM.\n\n      if (modal.modalRef) {\n        ariaHidden(modal.modalRef, false);\n      }\n\n      var hiddenSiblingNodes = getHiddenSiblings(container);\n      ariaHiddenSiblings(container, modal.mountNode, modal.modalRef, hiddenSiblingNodes, true);\n      var containerIndex = findIndexOf(this.containers, function (item) {\n        return item.container === container;\n      });\n\n      if (containerIndex !== -1) {\n        this.containers[containerIndex].modals.push(modal);\n        return modalIndex;\n      }\n\n      this.containers.push({\n        modals: [modal],\n        container: container,\n        restore: null,\n        hiddenSiblingNodes: hiddenSiblingNodes\n      });\n      return modalIndex;\n    }\n  }, {\n    key: \"mount\",\n    value: function mount(modal, props) {\n      var containerIndex = findIndexOf(this.containers, function (item) {\n        return item.modals.indexOf(modal) !== -1;\n      });\n      var containerInfo = this.containers[containerIndex];\n\n      if (!containerInfo.restore) {\n        containerInfo.restore = handleContainer(containerInfo, props);\n      }\n    }\n  }, {\n    key: \"remove\",\n    value: function remove(modal) {\n      var modalIndex = this.modals.indexOf(modal);\n\n      if (modalIndex === -1) {\n        return modalIndex;\n      }\n\n      var containerIndex = findIndexOf(this.containers, function (item) {\n        return item.modals.indexOf(modal) !== -1;\n      });\n      var containerInfo = this.containers[containerIndex];\n      containerInfo.modals.splice(containerInfo.modals.indexOf(modal), 1);\n      this.modals.splice(modalIndex, 1); // If that was the last modal in a container, clean up the container.\n\n      if (containerInfo.modals.length === 0) {\n        // The modal might be closed before it had the chance to be mounted in the DOM.\n        if (containerInfo.restore) {\n          containerInfo.restore();\n        }\n\n        if (modal.modalRef) {\n          // In case the modal wasn't in the DOM yet.\n          ariaHidden(modal.modalRef, true);\n        }\n\n        ariaHiddenSiblings(containerInfo.container, modal.mountNode, modal.modalRef, containerInfo.hiddenSiblingNodes, false);\n        this.containers.splice(containerIndex, 1);\n      } else {\n        // Otherwise make sure the next top modal is visible to a screen reader.\n        var nextTop = containerInfo.modals[containerInfo.modals.length - 1]; // as soon as a modal is adding its modalRef is undefined. it can't set\n        // aria-hidden because the dom element doesn't exist either\n        // when modal was unmounted before modalRef gets null\n\n        if (nextTop.modalRef) {\n          ariaHidden(nextTop.modalRef, false);\n        }\n      }\n\n      return modalIndex;\n    }\n  }, {\n    key: \"isTopModal\",\n    value: function isTopModal(modal) {\n      return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n    }\n  }]);\n\n  return ModalManager;\n}();\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js ***!
  \********************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    zIndex: -1,\n    position: 'fixed',\n    right: 0,\n    bottom: 0,\n    top: 0,\n    left: 0,\n    backgroundColor: 'rgba(0, 0, 0, 0.5)',\n    WebkitTapHighlightColor: 'transparent'\n  },\n\n  /* Styles applied to the root element if `invisible={true}`. */\n  invisible: {\n    backgroundColor: 'transparent'\n  }\n};\n/**\n * @ignore - internal component.\n */\n\nvar SimpleBackdrop = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function SimpleBackdrop(props, ref) {\n  var _props$invisible = props.invisible,\n      invisible = _props$invisible === void 0 ? false : _props$invisible,\n      open = props.open,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"invisible\", \"open\"]);\n\n  return open ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    \"aria-hidden\": true,\n    ref: ref\n  }, other, {\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, styles.root, invisible ? styles.invisible : {}, other.style)\n  })) : null;\n});\n true ? SimpleBackdrop.propTypes = {\n  /**\n   * If `true`, the backdrop is invisible.\n   * It can be used when rendering a popover or a custom select component.\n   */\n  invisible: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the backdrop is open.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool.isRequired\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (SimpleBackdrop);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js ***!
  \***********************************************************************/
/*! exports provided: default, ModalManager */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Modal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Modal */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/Modal.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Modal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _ModalManager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ModalManager */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ModalManager\", function() { return _ModalManager__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js":
/*!*************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js ***!
  \*************************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _NativeSelectInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./NativeSelectInput */ \"./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _internal_svg_icons_ArrowDropDown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../internal/svg-icons/ArrowDropDown */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js\");\n/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Input */ \"./jaas-client/node_modules/@material-ui/core/esm/Input/index.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the select component `root` class. */\n    root: {},\n\n    /* Styles applied to the select component `select` class. */\n    select: {\n      '-moz-appearance': 'none',\n      // Reset\n      '-webkit-appearance': 'none',\n      // Reset\n      // When interacting quickly, the text can end up selected.\n      // Native select can't be selected either.\n      userSelect: 'none',\n      borderRadius: 0,\n      // Reset\n      minWidth: 16,\n      // So it doesn't collapse.\n      cursor: 'pointer',\n      '&:focus': {\n        // Show that it's not an text input\n        backgroundColor: theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.05)' : 'rgba(255, 255, 255, 0.05)',\n        borderRadius: 0 // Reset Chrome style\n\n      },\n      // Remove IE 11 arrow\n      '&::-ms-expand': {\n        display: 'none'\n      },\n      '&$disabled': {\n        cursor: 'default'\n      },\n      '&[multiple]': {\n        height: 'auto'\n      },\n      '&:not([multiple]) option, &:not([multiple]) optgroup': {\n        backgroundColor: theme.palette.background.paper\n      },\n      '&&': {\n        paddingRight: 24\n      }\n    },\n\n    /* Styles applied to the select component if `variant=\"filled\"`. */\n    filled: {\n      '&&': {\n        paddingRight: 32\n      }\n    },\n\n    /* Styles applied to the select component if `variant=\"outlined\"`. */\n    outlined: {\n      borderRadius: theme.shape.borderRadius,\n      '&&': {\n        paddingRight: 32\n      }\n    },\n\n    /* Styles applied to the select component `selectMenu` class. */\n    selectMenu: {\n      height: 'auto',\n      // Resets for multpile select with chips\n      minHeight: '1.1876em',\n      // Required for select\\text-field height consistency\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden'\n    },\n\n    /* Pseudo-class applied to the select component `disabled` class. */\n    disabled: {},\n\n    /* Styles applied to the icon component. */\n    icon: {\n      // We use a position absolute over a flexbox in order to forward the pointer events\n      // to the input and to support wrapping tags..\n      position: 'absolute',\n      right: 0,\n      top: 'calc(50% - 12px)',\n      // Center vertically\n      pointerEvents: 'none',\n      // Don't block pointer events on the select under the icon.\n      color: theme.palette.action.active,\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the icon component if the popup is open. */\n    iconOpen: {\n      transform: 'rotate(180deg)'\n    },\n\n    /* Styles applied to the icon component if `variant=\"filled\"`. */\n    iconFilled: {\n      right: 7\n    },\n\n    /* Styles applied to the icon component if `variant=\"outlined\"`. */\n    iconOutlined: {\n      right: 7\n    },\n\n    /* Styles applied to the underlying native input component. */\n    nativeInput: {\n      bottom: 0,\n      left: 0,\n      position: 'absolute',\n      opacity: 0,\n      pointerEvents: 'none',\n      width: '100%'\n    }\n  };\n};\nvar defaultInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Input__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null);\n/**\n * An alternative to `<Select native />` with a much smaller bundle size footprint.\n */\n\nvar NativeSelect = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function NativeSelect(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      _props$IconComponent = props.IconComponent,\n      IconComponent = _props$IconComponent === void 0 ? _internal_svg_icons_ArrowDropDown__WEBPACK_IMPORTED_MODULE_8__[\"default\"] : _props$IconComponent,\n      _props$input = props.input,\n      input = _props$input === void 0 ? defaultInput : _props$input,\n      inputProps = props.inputProps,\n      variant = props.variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"IconComponent\", \"input\", \"inputProps\", \"variant\"]);\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant']\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](input, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    // Most of the logic is implemented in `NativeSelectInput`.\n    // The `Select` component is a simple API wrapper to expose something better to play with.\n    inputComponent: _NativeSelectInput__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n    inputProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      children: children,\n      classes: classes,\n      IconComponent: IconComponent,\n      variant: fcs.variant,\n      type: undefined\n    }, inputProps, input ? input.props.inputProps : {}),\n    ref: ref\n  }, other));\n});\n true ? NativeSelect.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element,\n\n  /**\n   * Attributes applied to the `select` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The input value. The DOM API casts this to a string.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\nNativeSelect.muiName = 'Select';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiNativeSelect'\n})(NativeSelect));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js":
/*!******************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js ***!
  \******************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n/**\n * @ignore - internal component.\n */\n\nvar NativeSelectInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function NativeSelectInput(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      disabled = props.disabled,\n      IconComponent = props.IconComponent,\n      inputRef = props.inputRef,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"disabled\", \"IconComponent\", \"inputRef\", \"variant\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"select\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, // TODO v5: merge root and select\n    classes.select, classes[variant], className, disabled && classes.disabled),\n    disabled: disabled,\n    ref: inputRef || ref\n  }, other)), props.multiple ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](IconComponent, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.icon, classes[\"icon\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(variant))], disabled && classes.disabled)\n  }));\n});\n true ? NativeSelectInput.propTypes = {\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * The CSS class name of the select element.\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the select will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType.isRequired,\n\n  /**\n   * Use that prop to pass a ref to the native select element.\n   * @deprecated\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * @ignore\n   */\n  multiple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The input value.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['standard', 'outlined', 'filled'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (NativeSelectInput);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js":
/*!****************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js ***!
  \****************************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/useTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'absolute',\n      bottom: 0,\n      right: 0,\n      top: -5,\n      left: 0,\n      margin: 0,\n      padding: '0 8px',\n      pointerEvents: 'none',\n      borderRadius: 'inherit',\n      borderStyle: 'solid',\n      borderWidth: 1,\n      overflow: 'hidden'\n    },\n\n    /* Styles applied to the legend element when `labelWidth` is provided. */\n    legend: {\n      textAlign: 'left',\n      padding: 0,\n      lineHeight: '11px',\n      // sync with `height` in `legend` styles\n      transition: theme.transitions.create('width', {\n        duration: 150,\n        easing: theme.transitions.easing.easeOut\n      })\n    },\n\n    /* Styles applied to the legend element. */\n    legendLabelled: {\n      display: 'block',\n      width: 'auto',\n      textAlign: 'left',\n      padding: 0,\n      height: 11,\n      // sync with `lineHeight` in `legend` styles\n      fontSize: '0.75em',\n      visibility: 'hidden',\n      maxWidth: 0.01,\n      transition: theme.transitions.create('max-width', {\n        duration: 50,\n        easing: theme.transitions.easing.easeOut\n      }),\n      '& > span': {\n        paddingLeft: 5,\n        paddingRight: 5,\n        display: 'inline-block'\n      }\n    },\n\n    /* Styles applied to the legend element is notched. */\n    legendNotched: {\n      maxWidth: 1000,\n      transition: theme.transitions.create('max-width', {\n        duration: 100,\n        easing: theme.transitions.easing.easeOut,\n        delay: 50\n      })\n    }\n  };\n};\n/**\n * @ignore - internal component.\n */\n\nvar NotchedOutline = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function NotchedOutline(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      label = props.label,\n      labelWidthProp = props.labelWidth,\n      notched = props.notched,\n      style = props.style,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"label\", \"labelWidth\", \"notched\", \"style\"]);\n\n  var theme = Object(_styles_useTheme__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n  var align = theme.direction === 'rtl' ? 'right' : 'left';\n\n  if (label !== undefined) {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"fieldset\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      \"aria-hidden\": true,\n      className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className),\n      ref: ref,\n      style: style\n    }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"legend\", {\n      className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.legendLabelled, notched && classes.legendNotched)\n    }, label ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"span\", null, label) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"span\", {\n      dangerouslySetInnerHTML: {\n        __html: '&#8203;'\n      }\n    })));\n  }\n\n  var labelWidth = labelWidthProp > 0 ? labelWidthProp * 0.75 + 8 : 0.01;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"fieldset\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    \"aria-hidden\": true,\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, \"padding\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(align)), 8), style),\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className),\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"legend\", {\n    className: classes.legend,\n    style: {\n      // IE 11: fieldset with legend does not render\n      // a border radius. This maintains consistency\n      // by always having a legend rendered\n      width: notched ? labelWidth : 0.01\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  })));\n});\n true ? NotchedOutline.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The label.\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * The width of the label.\n   */\n  labelWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number.isRequired,\n\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired,\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'PrivateNotchedOutline'\n})(NotchedOutline));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js":
/*!***************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js ***!
  \***************************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _InputBase__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../InputBase */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js\");\n/* harmony import */ var _NotchedOutline__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./NotchedOutline */ \"./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var borderColor = theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      borderRadius: theme.shape.borderRadius,\n      '&:hover $notchedOutline': {\n        borderColor: theme.palette.text.primary\n      },\n      // Reset on touch devices, it doesn't add specificity\n      '@media (hover: none)': {\n        '&:hover $notchedOutline': {\n          borderColor: borderColor\n        }\n      },\n      '&$focused $notchedOutline': {\n        borderColor: theme.palette.primary.main,\n        borderWidth: 2\n      },\n      '&$error $notchedOutline': {\n        borderColor: theme.palette.error.main\n      },\n      '&$disabled $notchedOutline': {\n        borderColor: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {\n      '&$focused $notchedOutline': {\n        borderColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {\n      paddingLeft: 14\n    },\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {\n      paddingRight: 14\n    },\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: '18.5px 14px',\n      '&$marginDense': {\n        paddingTop: 10.5,\n        paddingBottom: 10.5\n      }\n    },\n\n    /* Styles applied to the `NotchedOutline` element. */\n    notchedOutline: {\n      borderColor: borderColor\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      padding: '18.5px 14px',\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: theme.palette.type === 'light' ? null : '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: theme.palette.type === 'light' ? null : '#fff',\n        caretColor: theme.palette.type === 'light' ? null : '#fff',\n        borderRadius: 'inherit'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 10.5,\n      paddingBottom: 10.5\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {\n      paddingLeft: 0\n    },\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {\n      paddingRight: 0\n    }\n  };\n};\nvar OutlinedInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function OutlinedInput(props, ref) {\n  var classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      label = props.label,\n      _props$labelWidth = props.labelWidth,\n      labelWidth = _props$labelWidth === void 0 ? 0 : _props$labelWidth,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      notched = props.notched,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"fullWidth\", \"inputComponent\", \"label\", \"labelWidth\", \"multiline\", \"notched\", \"type\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_InputBase__WEBPACK_IMPORTED_MODULE_6__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    renderSuffix: function renderSuffix(state) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_NotchedOutline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n        className: classes.notchedOutline,\n        label: label,\n        labelWidth: labelWidth,\n        notched: typeof notched !== 'undefined' ? notched : Boolean(state.startAdornment || state.filled || state.focused)\n      });\n    },\n    classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, classes, {\n      root: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes.underline),\n      notchedOutline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\n true ? OutlinedInput.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * The label of the input. It is only used for layout. The actual labelling\n   * is handled by `InputLabel`. If specified `labelWidth` is ignored.\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * The width of the label. Is ignored if `label` is provided. Prefer `label`\n   * if the input label appears with a strike through.\n   */\n  labelWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\nOutlinedInput.muiName = 'Input';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(styles, {\n  name: 'MuiOutlinedInput'\n})(OutlinedInput));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _OutlinedInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OutlinedInput */ \"./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _OutlinedInput__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Paper/Paper.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Paper/Paper.js ***!
  \***********************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var elevations = {};\n  theme.shadows.forEach(function (shadow, index) {\n    elevations[\"elevation\".concat(index)] = {\n      boxShadow: shadow\n    };\n  });\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    /* Styles applied to the root element. */\n    root: {\n      backgroundColor: theme.palette.background.paper,\n      color: theme.palette.text.primary,\n      transition: theme.transitions.create('box-shadow')\n    },\n\n    /* Styles applied to the root element if `square={false}`. */\n    rounded: {\n      borderRadius: theme.shape.borderRadius\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      border: \"1px solid \".concat(theme.palette.divider)\n    }\n  }, elevations);\n};\nvar Paper = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Paper(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$square = props.square,\n      square = _props$square === void 0 ? false : _props$square,\n      _props$elevation = props.elevation,\n      elevation = _props$elevation === void 0 ? 1 : _props$elevation,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'elevation' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"classes\", \"className\", \"component\", \"square\", \"elevation\", \"variant\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, variant === 'outlined' ? classes.outlined : classes[\"elevation\".concat(elevation)], !square && classes.rounded),\n    ref: ref\n  }, other));\n});\n true ? Paper.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * Shadow depth, corresponds to `dp` in the spec.\n   * It accepts values between 0 and 24 inclusive.\n   */\n  elevation: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, function (props) {\n    var classes = props.classes,\n        elevation = props.elevation; // in case `withStyles` fails to inject we don't need this warning\n\n    if (classes === undefined) {\n      return null;\n    }\n\n    if (elevation != null && classes[\"elevation\".concat(elevation)] === undefined) {\n      return new Error(\"Material-UI: This elevation `\".concat(elevation, \"` is not implemented.\"));\n    }\n\n    return null;\n  }),\n\n  /**\n   * If `true`, rounded corners are disabled.\n   */\n  square: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['elevation', 'outlined'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiPaper'\n})(Paper));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Paper/Paper.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js ***!
  \***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Paper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Paper */ \"./jaas-client/node_modules/@material-ui/core/esm/Paper/Paper.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Paper__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Popover/Popover.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Popover/Popover.js ***!
  \***************************************************************************/
/*! exports provided: getOffsetTop, getOffsetLeft, styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOffsetTop\", function() { return getOffsetTop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOffsetLeft\", function() { return getOffsetLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_debounce__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/debounce */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _utils_ownerWindow__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/ownerWindow */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js\");\n/* harmony import */ var _utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/createChainedFunction */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Modal__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Modal */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js\");\n/* harmony import */ var _Grow__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../Grow */ \"./jaas-client/node_modules/@material-ui/core/esm/Grow/index.js\");\n/* harmony import */ var _Paper__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Paper */ \"./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getOffsetTop(rect, vertical) {\n  var offset = 0;\n\n  if (typeof vertical === 'number') {\n    offset = vertical;\n  } else if (vertical === 'center') {\n    offset = rect.height / 2;\n  } else if (vertical === 'bottom') {\n    offset = rect.height;\n  }\n\n  return offset;\n}\nfunction getOffsetLeft(rect, horizontal) {\n  var offset = 0;\n\n  if (typeof horizontal === 'number') {\n    offset = horizontal;\n  } else if (horizontal === 'center') {\n    offset = rect.width / 2;\n  } else if (horizontal === 'right') {\n    offset = rect.width;\n  }\n\n  return offset;\n}\n\nfunction getTransformOriginValue(transformOrigin) {\n  return [transformOrigin.horizontal, transformOrigin.vertical].map(function (n) {\n    return typeof n === 'number' ? \"\".concat(n, \"px\") : n;\n  }).join(' ');\n} // Sum the scrollTop between two elements.\n\n\nfunction getScrollParent(parent, child) {\n  var element = child;\n  var scrollTop = 0;\n\n  while (element && element !== parent) {\n    element = element.parentElement;\n    scrollTop += element.scrollTop;\n  }\n\n  return scrollTop;\n}\n\nfunction getAnchorEl(anchorEl) {\n  return typeof anchorEl === 'function' ? anchorEl() : anchorEl;\n}\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {},\n\n  /* Styles applied to the `Paper` component. */\n  paper: {\n    position: 'absolute',\n    overflowY: 'auto',\n    overflowX: 'hidden',\n    // So we see the popover when it's empty.\n    // It's most likely on issue on userland.\n    minWidth: 16,\n    minHeight: 16,\n    maxWidth: 'calc(100% - 32px)',\n    maxHeight: 'calc(100% - 32px)',\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0\n  }\n};\nvar Popover = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Popover(props, ref) {\n  var action = props.action,\n      anchorEl = props.anchorEl,\n      _props$anchorOrigin = props.anchorOrigin,\n      anchorOrigin = _props$anchorOrigin === void 0 ? {\n    vertical: 'top',\n    horizontal: 'left'\n  } : _props$anchorOrigin,\n      anchorPosition = props.anchorPosition,\n      _props$anchorReferenc = props.anchorReference,\n      anchorReference = _props$anchorReferenc === void 0 ? 'anchorEl' : _props$anchorReferenc,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      containerProp = props.container,\n      _props$elevation = props.elevation,\n      elevation = _props$elevation === void 0 ? 8 : _props$elevation,\n      getContentAnchorEl = props.getContentAnchorEl,\n      _props$marginThreshol = props.marginThreshold,\n      marginThreshold = _props$marginThreshol === void 0 ? 16 : _props$marginThreshol,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      open = props.open,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      _props$transformOrigi = props.transformOrigin,\n      transformOrigin = _props$transformOrigi === void 0 ? {\n    vertical: 'top',\n    horizontal: 'left'\n  } : _props$transformOrigi,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? _Grow__WEBPACK_IMPORTED_MODULE_13__[\"default\"] : _props$TransitionComp,\n      _props$transitionDura = props.transitionDuration,\n      transitionDurationProp = _props$transitionDura === void 0 ? 'auto' : _props$transitionDura,\n      _props$TransitionProp = props.TransitionProps,\n      TransitionProps = _props$TransitionProp === void 0 ? {} : _props$TransitionProp,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"action\", \"anchorEl\", \"anchorOrigin\", \"anchorPosition\", \"anchorReference\", \"children\", \"classes\", \"className\", \"container\", \"elevation\", \"getContentAnchorEl\", \"marginThreshold\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"open\", \"PaperProps\", \"transformOrigin\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\"]);\n\n  var paperRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](); // Returns the top/left offset of the position\n  // to attach to on the anchor element (or body if none is provided)\n\n  var getAnchorOffset = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (contentAnchorOffset) {\n    if (anchorReference === 'anchorPosition') {\n      if (true) {\n        if (!anchorPosition) {\n          console.error('Material-UI: You need to provide a `anchorPosition` prop when using ' + '<Popover anchorReference=\"anchorPosition\" />.');\n        }\n      }\n\n      return anchorPosition;\n    }\n\n    var resolvedAnchorEl = getAnchorEl(anchorEl); // If an anchor element wasn't provided, just use the parent body element of this Popover\n\n    var anchorElement = resolvedAnchorEl && resolvedAnchorEl.nodeType === 1 ? resolvedAnchorEl : Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(paperRef.current).body;\n    var anchorRect = anchorElement.getBoundingClientRect();\n\n    if (true) {\n      var box = anchorElement.getBoundingClientRect();\n\n      if ( true && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n        console.warn(['Material-UI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n      }\n    }\n\n    var anchorVertical = contentAnchorOffset === 0 ? anchorOrigin.vertical : 'center';\n    return {\n      top: anchorRect.top + getOffsetTop(anchorRect, anchorVertical),\n      left: anchorRect.left + getOffsetLeft(anchorRect, anchorOrigin.horizontal)\n    };\n  }, [anchorEl, anchorOrigin.horizontal, anchorOrigin.vertical, anchorPosition, anchorReference]); // Returns the vertical offset of inner content to anchor the transform on if provided\n\n  var getContentAnchorOffset = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (element) {\n    var contentAnchorOffset = 0;\n\n    if (getContentAnchorEl && anchorReference === 'anchorEl') {\n      var contentAnchorEl = getContentAnchorEl(element);\n\n      if (contentAnchorEl && element.contains(contentAnchorEl)) {\n        var scrollTop = getScrollParent(element, contentAnchorEl);\n        contentAnchorOffset = contentAnchorEl.offsetTop + contentAnchorEl.clientHeight / 2 - scrollTop || 0;\n      } // != the default value\n\n\n      if (true) {\n        if (anchorOrigin.vertical !== 'top') {\n          console.error(['Material-UI: You can not change the default `anchorOrigin.vertical` value ', 'when also providing the `getContentAnchorEl` prop to the popover component.', 'Only use one of the two props.', 'Set `getContentAnchorEl` to `null | undefined`' + ' or leave `anchorOrigin.vertical` unchanged.'].join('\\n'));\n        }\n      }\n    }\n\n    return contentAnchorOffset;\n  }, [anchorOrigin.vertical, anchorReference, getContentAnchorEl]); // Return the base transform origin using the element\n  // and taking the content anchor offset into account if in use\n\n  var getTransformOrigin = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (elemRect) {\n    var contentAnchorOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    return {\n      vertical: getOffsetTop(elemRect, transformOrigin.vertical) + contentAnchorOffset,\n      horizontal: getOffsetLeft(elemRect, transformOrigin.horizontal)\n    };\n  }, [transformOrigin.horizontal, transformOrigin.vertical]);\n  var getPositioningStyle = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (element) {\n    // Check if the parent has requested anchoring on an inner content node\n    var contentAnchorOffset = getContentAnchorOffset(element);\n    var elemRect = {\n      width: element.offsetWidth,\n      height: element.offsetHeight\n    }; // Get the transform origin point on the element itself\n\n    var elemTransformOrigin = getTransformOrigin(elemRect, contentAnchorOffset);\n\n    if (anchorReference === 'none') {\n      return {\n        top: null,\n        left: null,\n        transformOrigin: getTransformOriginValue(elemTransformOrigin)\n      };\n    } // Get the offset of of the anchoring element\n\n\n    var anchorOffset = getAnchorOffset(contentAnchorOffset); // Calculate element positioning\n\n    var top = anchorOffset.top - elemTransformOrigin.vertical;\n    var left = anchorOffset.left - elemTransformOrigin.horizontal;\n    var bottom = top + elemRect.height;\n    var right = left + elemRect.width; // Use the parent window of the anchorEl if provided\n\n    var containerWindow = Object(_utils_ownerWindow__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(getAnchorEl(anchorEl)); // Window thresholds taking required margin into account\n\n    var heightThreshold = containerWindow.innerHeight - marginThreshold;\n    var widthThreshold = containerWindow.innerWidth - marginThreshold; // Check if the vertical axis needs shifting\n\n    if (top < marginThreshold) {\n      var diff = top - marginThreshold;\n      top -= diff;\n      elemTransformOrigin.vertical += diff;\n    } else if (bottom > heightThreshold) {\n      var _diff = bottom - heightThreshold;\n\n      top -= _diff;\n      elemTransformOrigin.vertical += _diff;\n    }\n\n    if (true) {\n      if (elemRect.height > heightThreshold && elemRect.height && heightThreshold) {\n        console.error(['Material-UI: The popover component is too tall.', \"Some part of it can not be seen on the screen (\".concat(elemRect.height - heightThreshold, \"px).\"), 'Please consider adding a `max-height` to improve the user-experience.'].join('\\n'));\n      }\n    } // Check if the horizontal axis needs shifting\n\n\n    if (left < marginThreshold) {\n      var _diff2 = left - marginThreshold;\n\n      left -= _diff2;\n      elemTransformOrigin.horizontal += _diff2;\n    } else if (right > widthThreshold) {\n      var _diff3 = right - widthThreshold;\n\n      left -= _diff3;\n      elemTransformOrigin.horizontal += _diff3;\n    }\n\n    return {\n      top: \"\".concat(Math.round(top), \"px\"),\n      left: \"\".concat(Math.round(left), \"px\"),\n      transformOrigin: getTransformOriginValue(elemTransformOrigin)\n    };\n  }, [anchorEl, anchorReference, getAnchorOffset, getContentAnchorOffset, getTransformOrigin, marginThreshold]);\n  var setPositioningStyles = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    var element = paperRef.current;\n\n    if (!element) {\n      return;\n    }\n\n    var positioning = getPositioningStyle(element);\n\n    if (positioning.top !== null) {\n      element.style.top = positioning.top;\n    }\n\n    if (positioning.left !== null) {\n      element.style.left = positioning.left;\n    }\n\n    element.style.transformOrigin = positioning.transformOrigin;\n  }, [getPositioningStyle]);\n\n  var handleEntering = function handleEntering(element, isAppearing) {\n    if (onEntering) {\n      onEntering(element, isAppearing);\n    }\n\n    setPositioningStyles();\n  };\n\n  var handlePaperRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (instance) {\n    // #StrictMode ready\n    paperRef.current = react_dom__WEBPACK_IMPORTED_MODULE_4__[\"findDOMNode\"](instance);\n  }, []);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (open) {\n      setPositioningStyles();\n    }\n  });\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useImperativeHandle\"](action, function () {\n    return open ? {\n      updatePosition: function updatePosition() {\n        setPositioningStyles();\n      }\n    } : null;\n  }, [open, setPositioningStyles]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (!open) {\n      return undefined;\n    }\n\n    var handleResize = Object(_utils_debounce__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(function () {\n      setPositioningStyles();\n    });\n    window.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [open, setPositioningStyles]);\n  var transitionDuration = transitionDurationProp;\n\n  if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) {\n    transitionDuration = undefined;\n  } // If the container prop is provided, use that\n  // If the anchorEl prop is provided, use its parent body element as the container\n  // If neither are provided let the Modal take care of choosing the container\n\n\n  var container = containerProp || (anchorEl ? Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(getAnchorEl(anchorEl)).body : undefined);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Modal__WEBPACK_IMPORTED_MODULE_12__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    container: container,\n    open: open,\n    ref: ref,\n    BackdropProps: {\n      invisible: true\n    },\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(classes.root, className)\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    appear: true,\n    in: open,\n    onEnter: onEnter,\n    onEntered: onEntered,\n    onExit: onExit,\n    onExited: onExited,\n    onExiting: onExiting,\n    timeout: transitionDuration\n  }, TransitionProps, {\n    onEntering: Object(_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(handleEntering, TransitionProps.onEntering)\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Paper__WEBPACK_IMPORTED_MODULE_14__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    elevation: elevation,\n    ref: handlePaperRef\n  }, PaperProps, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(classes.paper, PaperProps.className)\n  }), children)));\n});\n true ? Popover.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A ref for imperative actions.\n   * It currently only supports updatePosition() action.\n   */\n  action: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * A HTML element, or a function that returns it.\n   * It's used to set the position of the popover.\n   */\n  anchorEl: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func]), function (props) {\n    if (props.open && (!props.anchorReference || props.anchorReference === 'anchorEl')) {\n      var resolvedAnchorEl = getAnchorEl(props.anchorEl);\n\n      if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {\n        var box = resolvedAnchorEl.getBoundingClientRect();\n\n        if ( true && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n          return new Error(['Material-UI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n        }\n      } else {\n        return new Error(['Material-UI: The `anchorEl` prop provided to the component is invalid.', \"It should be an Element instance but it's `\".concat(resolvedAnchorEl, \"` instead.\")].join('\\n'));\n      }\n    }\n\n    return null;\n  }),\n\n  /**\n   * This is the point on the anchor where the popover's\n   * `anchorEl` will attach to. This is not used when the\n   * anchorReference is 'anchorPosition'.\n   *\n   * Options:\n   * vertical: [top, center, bottom];\n   * horizontal: [left, center, right].\n   */\n  anchorOrigin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    horizontal: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['center', 'left', 'right']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number]).isRequired,\n    vertical: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['bottom', 'center', 'top']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number]).isRequired\n  }),\n\n  /**\n   * This is the position that may be used\n   * to set the position of the popover.\n   * The coordinates are relative to\n   * the application's client area.\n   */\n  anchorPosition: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    left: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number.isRequired,\n    top: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number.isRequired\n  }),\n\n  /**\n   * This determines which anchor prop to refer to to set\n   * the position of the popover.\n   */\n  anchorReference: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['anchorEl', 'anchorPosition', 'none']),\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * A HTML element, component instance, or function that returns either.\n   * The `container` will passed to the Modal component.\n   *\n   * By default, it uses the body of the anchorEl's top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.instanceOf(react__WEBPACK_IMPORTED_MODULE_2__[\"Component\"]), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func]),\n\n  /**\n   * The elevation of the popover.\n   */\n  elevation: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * This function is called in order to retrieve the content anchor element.\n   * It's the opposite of the `anchorEl` prop.\n   * The content anchor element should be an element inside the popover.\n   * It's used to correctly scroll and set the position of the popover.\n   * The positioning strategy tries to make the content anchor element just above the\n   * anchor element.\n   */\n  getContentAnchorEl: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Specifies how close to the edge of the window the popover can appear.\n   */\n  marginThreshold: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired before the component is entering.\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component has entered.\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component is entering.\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired before the component is exiting.\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component has exited.\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component is exiting.\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * If `true`, the popover is visible.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool.isRequired,\n\n  /**\n   * Props applied to the [`Paper`](/api/paper/) element.\n   */\n  PaperProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .shape({\n    component: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"elementTypeAcceptingRef\"]\n  }),\n\n  /**\n   * This is the point on the popover which\n   * will attach to the anchor's origin.\n   *\n   * Options:\n   * vertical: [top, center, bottom, x(px)];\n   * horizontal: [left, center, right, x(px)].\n   */\n  transformOrigin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    horizontal: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['center', 'left', 'right']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number]).isRequired,\n    vertical: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['bottom', 'center', 'top']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number]).isRequired\n  }),\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * Set to 'auto' to automatically calculate transition time based on height.\n   */\n  transitionDuration: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['auto']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number\n  })]),\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(styles, {\n  name: 'MuiPopover'\n})(Popover));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Popover/Popover.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Popover/index.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Popover/index.js ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Popover__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Popover */ \"./jaas-client/node_modules/@material-ui/core/esm/Popover/Popover.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Popover__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Popover/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Portal/Portal.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Portal/Portal.js ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_setRef__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/setRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\nfunction getContainer(container) {\n  container = typeof container === 'function' ? container() : container; // #StrictMode ready\n\n  return react_dom__WEBPACK_IMPORTED_MODULE_1__[\"findDOMNode\"](container);\n}\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"] : react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\n\nvar Portal = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"](function Portal(props, ref) {\n  var children = props.children,\n      container = props.container,\n      _props$disablePortal = props.disablePortal,\n      disablePortal = _props$disablePortal === void 0 ? false : _props$disablePortal,\n      onRendered = props.onRendered;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"](null),\n      mountNode = _React$useState[0],\n      setMountNode = _React$useState[1];\n\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"](children) ? children.ref : null, ref);\n  useEnhancedEffect(function () {\n    if (!disablePortal) {\n      setMountNode(getContainer(container) || document.body);\n    }\n  }, [container, disablePortal]);\n  useEnhancedEffect(function () {\n    if (mountNode && !disablePortal) {\n      Object(_utils_setRef__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(ref, mountNode);\n      return function () {\n        Object(_utils_setRef__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(ref, null);\n      };\n    }\n\n    return undefined;\n  }, [ref, mountNode, disablePortal]);\n  useEnhancedEffect(function () {\n    if (onRendered && (mountNode || disablePortal)) {\n      onRendered();\n    }\n  }, [onRendered, mountNode, disablePortal]);\n\n  if (disablePortal) {\n    if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"](children)) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"](children, {\n        ref: handleRef\n      });\n    }\n\n    return children;\n  }\n\n  return mountNode ? /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_1__[\"createPortal\"](children, mountNode) : mountNode;\n});\n true ? Portal.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The children to render into the `container`.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n\n  /**\n   * A HTML element, component instance, or function that returns either.\n   * The `container` will have the portal children appended to it.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a\n  /* @typescript-to-proptypes-ignore */\n  .oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_3__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]), prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func]),\n\n  /**\n   * Disable the portal behavior.\n   * The children stay within it's parent DOM hierarchy.\n   */\n  disablePortal: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * Callback fired once the children has been mounted into the `container`.\n   *\n   * This prop will be deprecated and removed in v5, the ref can be used instead.\n   */\n  onRendered: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func\n} : undefined;\n\nif (true) {\n  // eslint-disable-next-line\n  Portal['propTypes' + ''] = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_3__[\"exactProp\"])(Portal.propTypes);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Portal);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Portal/Portal.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Portal/index.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Portal/index.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Portal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Portal */ \"./jaas-client/node_modules/@material-ui/core/esm/Portal/Portal.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Portal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Portal/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Select/Select.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Select/Select.js ***!
  \*************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var _SelectInput__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./SelectInput */ \"./jaas-client/node_modules/@material-ui/core/esm/Select/SelectInput.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _internal_svg_icons_ArrowDropDown__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../internal/svg-icons/ArrowDropDown */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js\");\n/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Input */ \"./jaas-client/node_modules/@material-ui/core/esm/Input/index.js\");\n/* harmony import */ var _NativeSelect_NativeSelect__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../NativeSelect/NativeSelect */ \"./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js\");\n/* harmony import */ var _NativeSelect_NativeSelectInput__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../NativeSelect/NativeSelectInput */ \"./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js\");\n/* harmony import */ var _FilledInput__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../FilledInput */ \"./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js\");\n/* harmony import */ var _OutlinedInput__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../OutlinedInput */ \"./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = _NativeSelect_NativeSelect__WEBPACK_IMPORTED_MODULE_11__[\"styles\"];\n\nvar _ref = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Input__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null);\n\nvar _ref2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FilledInput__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null);\n\nvar Select = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Select(props, ref) {\n  var _props$autoWidth = props.autoWidth,\n      autoWidth = _props$autoWidth === void 0 ? false : _props$autoWidth,\n      children = props.children,\n      classes = props.classes,\n      _props$displayEmpty = props.displayEmpty,\n      displayEmpty = _props$displayEmpty === void 0 ? false : _props$displayEmpty,\n      _props$IconComponent = props.IconComponent,\n      IconComponent = _props$IconComponent === void 0 ? _internal_svg_icons_ArrowDropDown__WEBPACK_IMPORTED_MODULE_9__[\"default\"] : _props$IconComponent,\n      id = props.id,\n      input = props.input,\n      inputProps = props.inputProps,\n      label = props.label,\n      labelId = props.labelId,\n      _props$labelWidth = props.labelWidth,\n      labelWidth = _props$labelWidth === void 0 ? 0 : _props$labelWidth,\n      MenuProps = props.MenuProps,\n      _props$multiple = props.multiple,\n      multiple = _props$multiple === void 0 ? false : _props$multiple,\n      _props$native = props.native,\n      native = _props$native === void 0 ? false : _props$native,\n      onClose = props.onClose,\n      onOpen = props.onOpen,\n      open = props.open,\n      renderValue = props.renderValue,\n      SelectDisplayProps = props.SelectDisplayProps,\n      _props$variant = props.variant,\n      variantProps = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"autoWidth\", \"children\", \"classes\", \"displayEmpty\", \"IconComponent\", \"id\", \"input\", \"inputProps\", \"label\", \"labelId\", \"labelWidth\", \"MenuProps\", \"multiple\", \"native\", \"onClose\", \"onOpen\", \"open\", \"renderValue\", \"SelectDisplayProps\", \"variant\"]);\n\n  var inputComponent = native ? _NativeSelect_NativeSelectInput__WEBPACK_IMPORTED_MODULE_12__[\"default\"] : _SelectInput__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant']\n  });\n  var variant = fcs.variant || variantProps;\n  var InputComponent = input || {\n    standard: _ref,\n    outlined: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_OutlinedInput__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n      label: label,\n      labelWidth: labelWidth\n    }),\n    filled: _ref2\n  }[variant];\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](InputComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    // Most of the logic is implemented in `SelectInput`.\n    // The `Select` component is a simple API wrapper to expose something better to play with.\n    inputComponent: inputComponent,\n    inputProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      children: children,\n      IconComponent: IconComponent,\n      variant: variant,\n      type: undefined,\n      // We render a select. We can ignore the type provided by the `Input`.\n      multiple: multiple\n    }, native ? {\n      id: id\n    } : {\n      autoWidth: autoWidth,\n      displayEmpty: displayEmpty,\n      labelId: labelId,\n      MenuProps: MenuProps,\n      onClose: onClose,\n      onOpen: onOpen,\n      open: open,\n      renderValue: renderValue,\n      SelectDisplayProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        id: id\n      }, SelectDisplayProps)\n    }, inputProps, {\n      classes: inputProps ? Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_4__[\"mergeClasses\"])({\n        baseClasses: classes,\n        newClasses: inputProps.classes,\n        Component: Select\n      }) : classes\n    }, input ? input.props.inputProps : {}),\n    ref: ref\n  }, other));\n});\n true ? Select.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `MenuItem` when `native` is false and `option` when `native` is true.\n   *\n   * ⚠️The `MenuItem` elements **must** be direct descendants when `native` is false.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The default element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, a value is displayed even if no items are selected.\n   *\n   * In order to display a meaningful value, a function should be passed to the `renderValue` prop which returns the value to be displayed when no items are selected.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  displayEmpty: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * The `id` of the wrapper element or the `select` element when `native`.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   * When `native` is `true`, the attributes are applied on the `select` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * See [OutlinedInput#label](/api/outlined-input/#props)\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * See [OutlinedInput#label](/api/outlined-input/#props)\n   */\n  labelWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * Props applied to the [`Menu`](/api/menu/) element.\n   */\n  MenuProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the component will be using a native `select` element.\n   */\n  native: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected when `native` is `false` (default).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Control `select` open state.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Render the selected value.\n   * You can only use it when the `native` prop is `false` (default).\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The input value. Providing an empty string will select no options.\n   * This prop is required when the `native` prop is `false` (default).\n   * Set to an empty string `''` if you don't want any of the available options to be selected.\n   *\n   * If the value is an object it must have reference equality with the option in order to be selected.\n   * If the value is not an object, the string representation must match with the string representation of the option in order to be selected.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\nSelect.muiName = 'Select';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(styles, {\n  name: 'MuiSelect'\n})(Select));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Select/Select.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Select/SelectInput.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Select/SelectInput.js ***!
  \******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _Menu_Menu__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../Menu/Menu */ \"./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js\");\n/* harmony import */ var _InputBase_utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../InputBase/utils */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _utils_useControlled__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/useControlled */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction areEqualValues(a, b) {\n  if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(b) === 'object' && b !== null) {\n    return a === b;\n  }\n\n  return String(a) === String(b);\n}\n\nfunction isEmpty(display) {\n  return display == null || typeof display === 'string' && !display.trim();\n}\n/**\n * @ignore - internal component.\n */\n\n\nvar SelectInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"forwardRef\"](function SelectInput(props, ref) {\n  var ariaLabel = props['aria-label'],\n      autoFocus = props.autoFocus,\n      autoWidth = props.autoWidth,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      defaultValue = props.defaultValue,\n      disabled = props.disabled,\n      displayEmpty = props.displayEmpty,\n      IconComponent = props.IconComponent,\n      inputRefProp = props.inputRef,\n      labelId = props.labelId,\n      _props$MenuProps = props.MenuProps,\n      MenuProps = _props$MenuProps === void 0 ? {} : _props$MenuProps,\n      multiple = props.multiple,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onClose = props.onClose,\n      onFocus = props.onFocus,\n      onOpen = props.onOpen,\n      openProp = props.open,\n      readOnly = props.readOnly,\n      renderValue = props.renderValue,\n      _props$SelectDisplayP = props.SelectDisplayProps,\n      SelectDisplayProps = _props$SelectDisplayP === void 0 ? {} : _props$SelectDisplayP,\n      tabIndexProp = props.tabIndex,\n      type = props.type,\n      valueProp = props.value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"aria-label\", \"autoFocus\", \"autoWidth\", \"children\", \"classes\", \"className\", \"defaultValue\", \"disabled\", \"displayEmpty\", \"IconComponent\", \"inputRef\", \"labelId\", \"MenuProps\", \"multiple\", \"name\", \"onBlur\", \"onChange\", \"onClose\", \"onFocus\", \"onOpen\", \"open\", \"readOnly\", \"renderValue\", \"SelectDisplayProps\", \"tabIndex\", \"type\", \"value\", \"variant\"]);\n\n  var _useControlled = Object(_utils_useControlled__WEBPACK_IMPORTED_MODULE_14__[\"default\"])({\n    controlled: valueProp,\n    default: defaultValue,\n    name: 'Select'\n  }),\n      _useControlled2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_useControlled, 2),\n      value = _useControlled2[0],\n      setValue = _useControlled2[1];\n\n  var inputRef = react__WEBPACK_IMPORTED_MODULE_5__[\"useRef\"](null);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_5__[\"useState\"](null),\n      displayNode = _React$useState[0],\n      setDisplayNode = _React$useState[1];\n\n  var _React$useRef = react__WEBPACK_IMPORTED_MODULE_5__[\"useRef\"](openProp != null),\n      isOpenControlled = _React$useRef.current;\n\n  var _React$useState2 = react__WEBPACK_IMPORTED_MODULE_5__[\"useState\"](),\n      menuMinWidthState = _React$useState2[0],\n      setMenuMinWidthState = _React$useState2[1];\n\n  var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_5__[\"useState\"](false),\n      openState = _React$useState3[0],\n      setOpenState = _React$useState3[1];\n\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(ref, inputRefProp);\n  react__WEBPACK_IMPORTED_MODULE_5__[\"useImperativeHandle\"](handleRef, function () {\n    return {\n      focus: function focus() {\n        displayNode.focus();\n      },\n      node: inputRef.current,\n      value: value\n    };\n  }, [displayNode, value]);\n  react__WEBPACK_IMPORTED_MODULE_5__[\"useEffect\"](function () {\n    if (autoFocus && displayNode) {\n      displayNode.focus();\n    }\n  }, [autoFocus, displayNode]);\n  react__WEBPACK_IMPORTED_MODULE_5__[\"useEffect\"](function () {\n    if (displayNode) {\n      var label = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(displayNode).getElementById(labelId);\n\n      if (label) {\n        var handler = function handler() {\n          if (getSelection().isCollapsed) {\n            displayNode.focus();\n          }\n        };\n\n        label.addEventListener('click', handler);\n        return function () {\n          label.removeEventListener('click', handler);\n        };\n      }\n    }\n\n    return undefined;\n  }, [labelId, displayNode]);\n\n  var update = function update(open, event) {\n    if (open) {\n      if (onOpen) {\n        onOpen(event);\n      }\n    } else if (onClose) {\n      onClose(event);\n    }\n\n    if (!isOpenControlled) {\n      setMenuMinWidthState(autoWidth ? null : displayNode.clientWidth);\n      setOpenState(open);\n    }\n  };\n\n  var handleMouseDown = function handleMouseDown(event) {\n    // Ignore everything but left-click\n    if (event.button !== 0) {\n      return;\n    } // Hijack the default focus behavior.\n\n\n    event.preventDefault();\n    displayNode.focus();\n    update(true, event);\n  };\n\n  var handleClose = function handleClose(event) {\n    update(false, event);\n  };\n\n  var childrenArray = react__WEBPACK_IMPORTED_MODULE_5__[\"Children\"].toArray(children); // Support autofill.\n\n  var handleChange = function handleChange(event) {\n    var index = childrenArray.map(function (child) {\n      return child.props.value;\n    }).indexOf(event.target.value);\n\n    if (index === -1) {\n      return;\n    }\n\n    var child = childrenArray[index];\n    setValue(child.props.value);\n\n    if (onChange) {\n      onChange(event, child);\n    }\n  };\n\n  var handleItemClick = function handleItemClick(child) {\n    return function (event) {\n      if (!multiple) {\n        update(false, event);\n      }\n\n      var newValue;\n\n      if (multiple) {\n        newValue = Array.isArray(value) ? value.slice() : [];\n        var itemIndex = value.indexOf(child.props.value);\n\n        if (itemIndex === -1) {\n          newValue.push(child.props.value);\n        } else {\n          newValue.splice(itemIndex, 1);\n        }\n      } else {\n        newValue = child.props.value;\n      }\n\n      if (child.props.onClick) {\n        child.props.onClick(event);\n      }\n\n      if (value === newValue) {\n        return;\n      }\n\n      setValue(newValue);\n\n      if (onChange) {\n        event.persist(); // Preact support, target is read only property on a native event.\n\n        Object.defineProperty(event, 'target', {\n          writable: true,\n          value: {\n            value: newValue,\n            name: name\n          }\n        });\n        onChange(event, child);\n      }\n    };\n  };\n\n  var handleKeyDown = function handleKeyDown(event) {\n    if (!readOnly) {\n      var validKeys = [' ', 'ArrowUp', 'ArrowDown', // The native select doesn't respond to enter on MacOS, but it's recommended by\n      // https://www.w3.org/TR/wai-aria-practices/examples/listbox/listbox-collapsible.html\n      'Enter'];\n\n      if (validKeys.indexOf(event.key) !== -1) {\n        event.preventDefault();\n        update(true, event);\n      }\n    }\n  };\n\n  var open = displayNode !== null && (isOpenControlled ? openProp : openState);\n\n  var handleBlur = function handleBlur(event) {\n    // if open event.stopImmediatePropagation\n    if (!open && onBlur) {\n      event.persist(); // Preact support, target is read only property on a native event.\n\n      Object.defineProperty(event, 'target', {\n        writable: true,\n        value: {\n          value: value,\n          name: name\n        }\n      });\n      onBlur(event);\n    }\n  };\n\n  delete other['aria-invalid'];\n  var display;\n  var displaySingle;\n  var displayMultiple = [];\n  var computeDisplay = false;\n  var foundMatch = false; // No need to display any value if the field is empty.\n\n  if (Object(_InputBase_utils__WEBPACK_IMPORTED_MODULE_12__[\"isFilled\"])({\n    value: value\n  }) || displayEmpty) {\n    if (renderValue) {\n      display = renderValue(value);\n    } else {\n      computeDisplay = true;\n    }\n  }\n\n  var items = childrenArray.map(function (child) {\n    if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"isValidElement\"](child)) {\n      return null;\n    }\n\n    if (true) {\n      if (Object(react_is__WEBPACK_IMPORTED_MODULE_6__[\"isFragment\"])(child)) {\n        console.error([\"Material-UI: The Select component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    var selected;\n\n    if (multiple) {\n      if (!Array.isArray(value)) {\n        throw new Error( true ? \"Material-UI: The `value` prop must be an array when using the `Select` component with `multiple`.\" : undefined);\n      }\n\n      selected = value.some(function (v) {\n        return areEqualValues(v, child.props.value);\n      });\n\n      if (selected && computeDisplay) {\n        displayMultiple.push(child.props.children);\n      }\n    } else {\n      selected = areEqualValues(value, child.props.value);\n\n      if (selected && computeDisplay) {\n        displaySingle = child.props.children;\n      }\n    }\n\n    if (selected) {\n      foundMatch = true;\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"cloneElement\"](child, {\n      'aria-selected': selected ? 'true' : undefined,\n      onClick: handleItemClick(child),\n      onKeyUp: function onKeyUp(event) {\n        if (event.key === ' ') {\n          // otherwise our MenuItems dispatches a click event\n          // it's not behavior of the native <option> and causes\n          // the select to close immediately since we open on space keydown\n          event.preventDefault();\n        }\n\n        if (child.props.onKeyUp) {\n          child.props.onKeyUp(event);\n        }\n      },\n      role: 'option',\n      selected: selected,\n      value: undefined,\n      // The value is most likely not a valid HTML attribute.\n      'data-value': child.props.value // Instead, we provide it as a data attribute.\n\n    });\n  });\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_5__[\"useEffect\"](function () {\n      if (!foundMatch && !multiple && value !== '') {\n        var values = childrenArray.map(function (child) {\n          return child.props.value;\n        });\n        console.warn([\"Material-UI: You have provided an out-of-range value `\".concat(value, \"` for the select \").concat(name ? \"(name=\\\"\".concat(name, \"\\\") \") : '', \"component.\"), \"Consider providing a value that matches one of the available options or ''.\", \"The available values are \".concat(values.filter(function (x) {\n          return x != null;\n        }).map(function (x) {\n          return \"`\".concat(x, \"`\");\n        }).join(', ') || '\"\"', \".\")].join('\\n'));\n      }\n    }, [foundMatch, childrenArray, multiple, name, value]);\n  }\n\n  if (computeDisplay) {\n    display = multiple ? displayMultiple.join(', ') : displaySingle;\n  } // Avoid performing a layout computation in the render method.\n\n\n  var menuMinWidth = menuMinWidthState;\n\n  if (!autoWidth && isOpenControlled && displayNode) {\n    menuMinWidth = displayNode.clientWidth;\n  }\n\n  var tabIndex;\n\n  if (typeof tabIndexProp !== 'undefined') {\n    tabIndex = tabIndexProp;\n  } else {\n    tabIndex = disabled ? null : 0;\n  }\n\n  var buttonId = SelectDisplayProps.id || (name ? \"mui-component-select-\".concat(name) : undefined);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_5__[\"Fragment\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(classes.root, // TODO v5: merge root and select\n    classes.select, classes.selectMenu, classes[variant], className, disabled && classes.disabled),\n    ref: setDisplayNode,\n    tabIndex: tabIndex,\n    role: \"button\",\n    \"aria-disabled\": disabled ? 'true' : undefined,\n    \"aria-expanded\": open ? 'true' : undefined,\n    \"aria-haspopup\": \"listbox\",\n    \"aria-label\": ariaLabel,\n    \"aria-labelledby\": [labelId, buttonId].filter(Boolean).join(' ') || undefined,\n    onKeyDown: handleKeyDown,\n    onMouseDown: disabled || readOnly ? null : handleMouseDown,\n    onBlur: handleBlur,\n    onFocus: onFocus\n  }, SelectDisplayProps, {\n    // The id is required for proper a11y\n    id: buttonId\n  }), isEmpty(display) ?\n  /*#__PURE__*/\n  // eslint-disable-next-line react/no-danger\n  react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  }) : display), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](\"input\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    value: Array.isArray(value) ? value.join(',') : value,\n    name: name,\n    ref: inputRef,\n    \"aria-hidden\": true,\n    onChange: handleChange,\n    tabIndex: -1,\n    className: classes.nativeInput,\n    autoFocus: autoFocus\n  }, other)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](IconComponent, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(classes.icon, classes[\"icon\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(variant))], open && classes.iconOpen, disabled && classes.disabled)\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](_Menu_Menu__WEBPACK_IMPORTED_MODULE_11__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    id: \"menu-\".concat(name || ''),\n    anchorEl: displayNode,\n    open: open,\n    onClose: handleClose\n  }, MenuProps, {\n    MenuListProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      'aria-labelledby': labelId,\n      role: 'listbox',\n      disableListWrap: true\n    }, MenuProps.MenuListProps),\n    PaperProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, MenuProps.PaperProps, {\n      style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        minWidth: menuMinWidth\n      }, MenuProps.PaperProps != null ? MenuProps.PaperProps.style : null)\n    })\n  }), items));\n});\n true ? SelectInput.propTypes = {\n  /**\n   * @ignore\n   */\n  'aria-label': prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string,\n\n  /**\n   * @ignore\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<MenuItem>` elements.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.object.isRequired,\n\n  /**\n   * The CSS class name of the select element.\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string,\n\n  /**\n   * The default element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.any,\n\n  /**\n   * If `true`, the select will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * If `true`, the selected item is displayed even if its value is empty.\n   */\n  displayEmpty: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.elementType.isRequired,\n\n  /**\n   * Imperative handle implementing `{ value: T, node: HTMLElement, focus(): void }`\n   * Equivalent to `ref`\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_4__[\"refType\"],\n\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string,\n\n  /**\n   * Props applied to the [`Menu`](/api/menu/) element.\n   */\n  MenuProps: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.object,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected.\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Control `select` open state.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * Render the selected value.\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.object,\n\n  /**\n   * @ignore\n   */\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string]),\n\n  /**\n   * @ignore\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.any,\n\n  /**\n   * The input value.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.oneOf(['standard', 'outlined', 'filled'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (SelectInput);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Select/SelectInput.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Select/index.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Select/index.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Select__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Select */ \"./jaas-client/node_modules/@material-ui/core/esm/Select/Select.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Select__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Select/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js ***!
  \***************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      userSelect: 'none',\n      width: '1em',\n      height: '1em',\n      display: 'inline-block',\n      fill: 'currentColor',\n      flexShrink: 0,\n      fontSize: theme.typography.pxToRem(24),\n      transition: theme.transitions.create('fill', {\n        duration: theme.transitions.duration.shorter\n      })\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the root element if `color=\"action\"`. */\n    colorAction: {\n      color: theme.palette.action.active\n    },\n\n    /* Styles applied to the root element if `color=\"error\"`. */\n    colorError: {\n      color: theme.palette.error.main\n    },\n\n    /* Styles applied to the root element if `color=\"disabled\"`. */\n    colorDisabled: {\n      color: theme.palette.action.disabled\n    },\n\n    /* Styles applied to the root element if `fontSize=\"inherit\"`. */\n    fontSizeInherit: {\n      fontSize: 'inherit'\n    },\n\n    /* Styles applied to the root element if `fontSize=\"small\"`. */\n    fontSizeSmall: {\n      fontSize: theme.typography.pxToRem(20)\n    },\n\n    /* Styles applied to the root element if `fontSize=\"large\"`. */\n    fontSizeLarge: {\n      fontSize: theme.typography.pxToRem(35)\n    }\n  };\n};\nvar SvgIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function SvgIcon(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'inherit' : _props$color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'svg' : _props$component,\n      _props$fontSize = props.fontSize,\n      fontSize = _props$fontSize === void 0 ? 'default' : _props$fontSize,\n      htmlColor = props.htmlColor,\n      titleAccess = props.titleAccess,\n      _props$viewBox = props.viewBox,\n      viewBox = _props$viewBox === void 0 ? '0 0 24 24' : _props$viewBox,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"fontSize\", \"htmlColor\", \"titleAccess\", \"viewBox\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, color !== 'inherit' && classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(color))], fontSize !== 'default' && classes[\"fontSize\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(fontSize))]),\n    focusable: \"false\",\n    viewBox: viewBox,\n    color: htmlColor,\n    \"aria-hidden\": titleAccess ? undefined : true,\n    role: titleAccess ? 'img' : undefined,\n    ref: ref\n  }, other), children, titleAccess ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"title\", null, titleAccess) : null);\n});\n true ? SvgIcon.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * Node passed into the SVG element.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['action', 'disabled', 'error', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n   */\n  fontSize: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['default', 'inherit', 'large', 'small']),\n\n  /**\n   * Applies a color attribute to the SVG element.\n   */\n  htmlColor: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The shape-rendering attribute. The behavior of the different options is described on the\n   * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering).\n   * If you are having issues with blurry icons you should investigate this property.\n   */\n  shapeRendering: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Provides a human-readable title for the element that contains it.\n   * https://www.w3.org/TR/SVG-access/#Equivalent\n   */\n  titleAccess: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Allows you to redefine what the coordinates without units mean inside an SVG element.\n   * For example, if the SVG element is 500 (width) by 200 (height),\n   * and you pass viewBox=\"0 0 50 20\",\n   * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n   * to bottom right (50,20) and each unit will be worth 10px.\n   */\n  viewBox: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string\n} : undefined;\nSvgIcon.muiName = 'SvgIcon';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiSvgIcon'\n})(SvgIcon));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _SvgIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _SvgIcon__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/TextField/TextField.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/TextField/TextField.js ***!
  \*******************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Input */ \"./jaas-client/node_modules/@material-ui/core/esm/Input/index.js\");\n/* harmony import */ var _FilledInput__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FilledInput */ \"./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js\");\n/* harmony import */ var _OutlinedInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../OutlinedInput */ \"./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js\");\n/* harmony import */ var _InputLabel__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../InputLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/InputLabel/index.js\");\n/* harmony import */ var _FormControl__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../FormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js\");\n/* harmony import */ var _FormHelperText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../FormHelperText */ \"./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/index.js\");\n/* harmony import */ var _Select__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Select */ \"./jaas-client/node_modules/@material-ui/core/esm/Select/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar variantComponent = {\n  standard: _Input__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n  filled: _FilledInput__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n  outlined: _OutlinedInput__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n};\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {}\n};\n/**\n * The `TextField` is a convenience wrapper for the most common cases (80%).\n * It cannot be all things to all people, otherwise the API would grow out of control.\n *\n * ## Advanced Configuration\n *\n * It's important to understand that the text field is a simple abstraction\n * on top of the following components:\n *\n * - [FormControl](/api/form-control/)\n * - [InputLabel](/api/input-label/)\n * - [FilledInput](/api/filled-input/)\n * - [OutlinedInput](/api/outlined-input/)\n * - [Input](/api/input/)\n * - [FormHelperText](/api/form-helper-text/)\n *\n * If you wish to alter the props applied to the `input` element, you can do so as follows:\n *\n * ```jsx\n * const inputProps = {\n *   step: 300,\n * };\n *\n * return <TextField id=\"time\" type=\"time\" inputProps={inputProps} />;\n * ```\n *\n * For advanced cases, please look at the source of TextField by clicking on the\n * \"Edit this page\" button above. Consider either:\n *\n * - using the upper case props for passing values directly to the components\n * - using the underlying components directly as shown in the demos\n */\n\nvar TextField = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function TextField(props, ref) {\n  var autoComplete = props.autoComplete,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      defaultValue = props.defaultValue,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$error = props.error,\n      error = _props$error === void 0 ? false : _props$error,\n      FormHelperTextProps = props.FormHelperTextProps,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      helperText = props.helperText,\n      hiddenLabel = props.hiddenLabel,\n      id = props.id,\n      InputLabelProps = props.InputLabelProps,\n      inputProps = props.inputProps,\n      InputProps = props.InputProps,\n      inputRef = props.inputRef,\n      label = props.label,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onFocus = props.onFocus,\n      placeholder = props.placeholder,\n      _props$required = props.required,\n      required = _props$required === void 0 ? false : _props$required,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      _props$select = props.select,\n      select = _props$select === void 0 ? false : _props$select,\n      SelectProps = props.SelectProps,\n      type = props.type,\n      value = props.value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"autoComplete\", \"autoFocus\", \"children\", \"classes\", \"className\", \"color\", \"defaultValue\", \"disabled\", \"error\", \"FormHelperTextProps\", \"fullWidth\", \"helperText\", \"hiddenLabel\", \"id\", \"InputLabelProps\", \"inputProps\", \"InputProps\", \"inputRef\", \"label\", \"multiline\", \"name\", \"onBlur\", \"onChange\", \"onFocus\", \"placeholder\", \"required\", \"rows\", \"rowsMax\", \"select\", \"SelectProps\", \"type\", \"value\", \"variant\"]);\n\n  if (true) {\n    if (select && !children) {\n      console.error('Material-UI: `children` must be passed when using the `TextField` component with `select`.');\n    }\n  }\n\n  var InputMore = {};\n\n  if (variant === 'outlined') {\n    if (InputLabelProps && typeof InputLabelProps.shrink !== 'undefined') {\n      InputMore.notched = InputLabelProps.shrink;\n    }\n\n    if (label) {\n      var _InputLabelProps$requ;\n\n      var displayRequired = (_InputLabelProps$requ = InputLabelProps === null || InputLabelProps === void 0 ? void 0 : InputLabelProps.required) !== null && _InputLabelProps$requ !== void 0 ? _InputLabelProps$requ : required;\n      InputMore.label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, label, displayRequired && \"\\xA0*\");\n    }\n  }\n\n  if (select) {\n    // unset defaults from textbox inputs\n    if (!SelectProps || !SelectProps.native) {\n      InputMore.id = undefined;\n    }\n\n    InputMore['aria-describedby'] = undefined;\n  }\n\n  var helperTextId = helperText && id ? \"\".concat(id, \"-helper-text\") : undefined;\n  var inputLabelId = label && id ? \"\".concat(id, \"-label\") : undefined;\n  var InputComponent = variantComponent[variant];\n  var InputElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](InputComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    \"aria-describedby\": helperTextId,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    fullWidth: fullWidth,\n    multiline: multiline,\n    name: name,\n    rows: rows,\n    rowsMax: rowsMax,\n    type: type,\n    value: value,\n    id: id,\n    inputRef: inputRef,\n    onBlur: onBlur,\n    onChange: onChange,\n    onFocus: onFocus,\n    placeholder: placeholder,\n    inputProps: inputProps\n  }, InputMore, InputProps));\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FormControl__WEBPACK_IMPORTED_MODULE_10__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className),\n    disabled: disabled,\n    error: error,\n    fullWidth: fullWidth,\n    hiddenLabel: hiddenLabel,\n    ref: ref,\n    required: required,\n    color: color,\n    variant: variant\n  }, other), label && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_InputLabel__WEBPACK_IMPORTED_MODULE_9__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    htmlFor: id,\n    id: inputLabelId\n  }, InputLabelProps), label), select ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Select__WEBPACK_IMPORTED_MODULE_12__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    \"aria-describedby\": helperTextId,\n    id: id,\n    labelId: inputLabelId,\n    value: value,\n    input: InputElement\n  }, SelectProps), children) : InputElement, helperText && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FormHelperText__WEBPACK_IMPORTED_MODULE_11__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    id: helperTextId\n  }, FormHelperTextProps), helperText));\n});\n true ? TextField.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default value of the `input` element.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label will be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Props applied to the [`FormHelperText`](/api/form-helper-text/) element.\n   */\n  FormHelperTextProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The helper text content.\n   */\n  helperText: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * @ignore\n   */\n  hiddenLabel: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   * Use this prop to make `label` and `helperText` accessible for screen readers.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Props applied to the [`InputLabel`](/api/input-label/) element.\n   */\n  InputLabelProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Props applied to the Input element.\n   * It will be a [`FilledInput`](/api/filled-input/),\n   * [`OutlinedInput`](/api/outlined-input/) or [`Input`](/api/input/)\n   * component depending on the `variant` prop value.\n   */\n  InputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * The label content.\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none', 'normal']),\n\n  /**\n   * If `true`, a textarea element will be rendered instead of an input.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the label is displayed as required and the `input` element` will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Render a [`Select`](/api/select/) element while passing the Input element to `Select` as `input` parameter.\n   * If this option is set you must pass the options of the select as children.\n   */\n  select: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Props applied to the [`Select`](/api/select/) element.\n   */\n  SelectProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The size of the text field.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['medium', 'small']),\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(styles, {\n  name: 'MuiTextField'\n})(TextField));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/TextField/TextField.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/TextField/index.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/TextField/index.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _TextField__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TextField */ \"./jaas-client/node_modules/@material-ui/core/esm/TextField/TextField.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _TextField__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/TextField/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js":
/*!*********************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js ***!
  \*********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_debounce__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/debounce */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\nfunction getStyleValue(computedStyle, property) {\n  return parseInt(computedStyle[property], 10) || 0;\n}\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_2__[\"useLayoutEffect\"] : react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"];\nvar styles = {\n  /* Styles applied to the shadow textarea element. */\n  shadow: {\n    // Visibility needed to hide the extra text area on iPads\n    visibility: 'hidden',\n    // Remove from the content flow\n    position: 'absolute',\n    // Ignore the scrollbar width\n    overflow: 'hidden',\n    height: 0,\n    top: 0,\n    left: 0,\n    // Create a new layer, increase the isolation of the computed values\n    transform: 'translateZ(0)'\n  }\n};\nvar TextareaAutosize = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function TextareaAutosize(props, ref) {\n  var onChange = props.onChange,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      _props$rowsMin = props.rowsMin,\n      rowsMinProp = _props$rowsMin === void 0 ? 1 : _props$rowsMin,\n      style = props.style,\n      value = props.value,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"onChange\", \"rows\", \"rowsMax\", \"rowsMin\", \"style\", \"value\"]);\n\n  var rowsMin = rows || rowsMinProp;\n\n  var _React$useRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](value != null),\n      isControlled = _React$useRef.current;\n\n  var inputRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ref, inputRef);\n  var shadowRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var renders = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](0);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"]({}),\n      state = _React$useState[0],\n      setState = _React$useState[1];\n\n  var syncHeight = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    var input = inputRef.current;\n    var computedStyle = window.getComputedStyle(input);\n    var inputShallow = shadowRef.current;\n    inputShallow.style.width = computedStyle.width;\n    inputShallow.value = input.value || props.placeholder || 'x';\n\n    if (inputShallow.value.slice(-1) === '\\n') {\n      // Certain fonts which overflow the line height will cause the textarea\n      // to report a different scrollHeight depending on whether the last line\n      // is empty. Make it non-empty to avoid this issue.\n      inputShallow.value += ' ';\n    }\n\n    var boxSizing = computedStyle['box-sizing'];\n    var padding = getStyleValue(computedStyle, 'padding-bottom') + getStyleValue(computedStyle, 'padding-top');\n    var border = getStyleValue(computedStyle, 'border-bottom-width') + getStyleValue(computedStyle, 'border-top-width'); // The height of the inner content\n\n    var innerHeight = inputShallow.scrollHeight - padding; // Measure height of a textarea with a single row\n\n    inputShallow.value = 'x';\n    var singleRowHeight = inputShallow.scrollHeight - padding; // The height of the outer content\n\n    var outerHeight = innerHeight;\n\n    if (rowsMin) {\n      outerHeight = Math.max(Number(rowsMin) * singleRowHeight, outerHeight);\n    }\n\n    if (rowsMax) {\n      outerHeight = Math.min(Number(rowsMax) * singleRowHeight, outerHeight);\n    }\n\n    outerHeight = Math.max(outerHeight, singleRowHeight); // Take the box sizing into account for applying this value as a style.\n\n    var outerHeightStyle = outerHeight + (boxSizing === 'border-box' ? padding + border : 0);\n    var overflow = Math.abs(outerHeight - innerHeight) <= 1;\n    setState(function (prevState) {\n      // Need a large enough difference to update the height.\n      // This prevents infinite rendering loop.\n      if (renders.current < 20 && (outerHeightStyle > 0 && Math.abs((prevState.outerHeightStyle || 0) - outerHeightStyle) > 1 || prevState.overflow !== overflow)) {\n        renders.current += 1;\n        return {\n          overflow: overflow,\n          outerHeightStyle: outerHeightStyle\n        };\n      }\n\n      if (true) {\n        if (renders.current === 20) {\n          console.error(['Material-UI: Too many re-renders. The layout is unstable.', 'TextareaAutosize limits the number of renders to prevent an infinite loop.'].join('\\n'));\n        }\n      }\n\n      return prevState;\n    });\n  }, [rowsMax, rowsMin, props.placeholder]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    var handleResize = Object(_utils_debounce__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(function () {\n      renders.current = 0;\n      syncHeight();\n    });\n    window.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [syncHeight]);\n  useEnhancedEffect(function () {\n    syncHeight();\n  });\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    renders.current = 0;\n  }, [value]);\n\n  var handleChange = function handleChange(event) {\n    renders.current = 0;\n\n    if (!isControlled) {\n      syncHeight();\n    }\n\n    if (onChange) {\n      onChange(event);\n    }\n  };\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"textarea\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    value: value,\n    onChange: handleChange,\n    ref: handleRef // Apply the rows prop to get a \"correct\" first SSR paint\n    ,\n    rows: rowsMin,\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      height: state.outerHeightStyle,\n      // Need a large enough difference to allow scrolling.\n      // This prevents infinite rendering loop.\n      overflow: state.overflow ? 'hidden' : null\n    }, style)\n  }, other)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"textarea\", {\n    \"aria-hidden\": true,\n    className: props.className,\n    readOnly: true,\n    ref: shadowRef,\n    tabIndex: -1,\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, styles.shadow, style)\n  }));\n});\n true ? TextareaAutosize.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Use `rowsMin` instead. The prop will be removed in v5.\n   *\n   * @deprecated\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Minimum number of rows to display.\n   */\n  rowsMin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (TextareaAutosize);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/index.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/index.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _TextareaAutosize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TextareaAutosize */ \"./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _TextareaAutosize__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Typography/Typography.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Typography/Typography.js ***!
  \*********************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      margin: 0\n    },\n\n    /* Styles applied to the root element if `variant=\"body2\"`. */\n    body2: theme.typography.body2,\n\n    /* Styles applied to the root element if `variant=\"body1\"`. */\n    body1: theme.typography.body1,\n\n    /* Styles applied to the root element if `variant=\"caption\"`. */\n    caption: theme.typography.caption,\n\n    /* Styles applied to the root element if `variant=\"button\"`. */\n    button: theme.typography.button,\n\n    /* Styles applied to the root element if `variant=\"h1\"`. */\n    h1: theme.typography.h1,\n\n    /* Styles applied to the root element if `variant=\"h2\"`. */\n    h2: theme.typography.h2,\n\n    /* Styles applied to the root element if `variant=\"h3\"`. */\n    h3: theme.typography.h3,\n\n    /* Styles applied to the root element if `variant=\"h4\"`. */\n    h4: theme.typography.h4,\n\n    /* Styles applied to the root element if `variant=\"h5\"`. */\n    h5: theme.typography.h5,\n\n    /* Styles applied to the root element if `variant=\"h6\"`. */\n    h6: theme.typography.h6,\n\n    /* Styles applied to the root element if `variant=\"subtitle1\"`. */\n    subtitle1: theme.typography.subtitle1,\n\n    /* Styles applied to the root element if `variant=\"subtitle2\"`. */\n    subtitle2: theme.typography.subtitle2,\n\n    /* Styles applied to the root element if `variant=\"overline\"`. */\n    overline: theme.typography.overline,\n\n    /* Styles applied to the root element if `variant=\"srOnly\"`. Only accessible to screen readers. */\n    srOnly: {\n      position: 'absolute',\n      height: 1,\n      width: 1,\n      overflow: 'hidden'\n    },\n\n    /* Styles applied to the root element if `align=\"left\"`. */\n    alignLeft: {\n      textAlign: 'left'\n    },\n\n    /* Styles applied to the root element if `align=\"center\"`. */\n    alignCenter: {\n      textAlign: 'center'\n    },\n\n    /* Styles applied to the root element if `align=\"right\"`. */\n    alignRight: {\n      textAlign: 'right'\n    },\n\n    /* Styles applied to the root element if `align=\"justify\"`. */\n    alignJustify: {\n      textAlign: 'justify'\n    },\n\n    /* Styles applied to the root element if `nowrap={true}`. */\n    noWrap: {\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap'\n    },\n\n    /* Styles applied to the root element if `gutterBottom={true}`. */\n    gutterBottom: {\n      marginBottom: '0.35em'\n    },\n\n    /* Styles applied to the root element if `paragraph={true}`. */\n    paragraph: {\n      marginBottom: 16\n    },\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the root element if `color=\"textPrimary\"`. */\n    colorTextPrimary: {\n      color: theme.palette.text.primary\n    },\n\n    /* Styles applied to the root element if `color=\"textSecondary\"`. */\n    colorTextSecondary: {\n      color: theme.palette.text.secondary\n    },\n\n    /* Styles applied to the root element if `color=\"error\"`. */\n    colorError: {\n      color: theme.palette.error.main\n    },\n\n    /* Styles applied to the root element if `display=\"inline\"`. */\n    displayInline: {\n      display: 'inline'\n    },\n\n    /* Styles applied to the root element if `display=\"block\"`. */\n    displayBlock: {\n      display: 'block'\n    }\n  };\n};\nvar defaultVariantMapping = {\n  h1: 'h1',\n  h2: 'h2',\n  h3: 'h3',\n  h4: 'h4',\n  h5: 'h5',\n  h6: 'h6',\n  subtitle1: 'h6',\n  subtitle2: 'h6',\n  body1: 'p',\n  body2: 'p'\n};\nvar Typography = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Typography(props, ref) {\n  var _props$align = props.align,\n      align = _props$align === void 0 ? 'inherit' : _props$align,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'initial' : _props$color,\n      component = props.component,\n      _props$display = props.display,\n      display = _props$display === void 0 ? 'initial' : _props$display,\n      _props$gutterBottom = props.gutterBottom,\n      gutterBottom = _props$gutterBottom === void 0 ? false : _props$gutterBottom,\n      _props$noWrap = props.noWrap,\n      noWrap = _props$noWrap === void 0 ? false : _props$noWrap,\n      _props$paragraph = props.paragraph,\n      paragraph = _props$paragraph === void 0 ? false : _props$paragraph,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'body1' : _props$variant,\n      _props$variantMapping = props.variantMapping,\n      variantMapping = _props$variantMapping === void 0 ? defaultVariantMapping : _props$variantMapping,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"align\", \"classes\", \"className\", \"color\", \"component\", \"display\", \"gutterBottom\", \"noWrap\", \"paragraph\", \"variant\", \"variantMapping\"]);\n\n  var Component = component || (paragraph ? 'p' : variantMapping[variant] || defaultVariantMapping[variant]) || 'span';\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, variant !== 'inherit' && classes[variant], color !== 'initial' && classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(color))], noWrap && classes.noWrap, gutterBottom && classes.gutterBottom, paragraph && classes.paragraph, align !== 'inherit' && classes[\"align\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(align))], display !== 'initial' && classes[\"display\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(display))]),\n    ref: ref\n  }, other));\n});\n true ? Typography.propTypes = {\n  /**\n   * Set the text-align on the component.\n   */\n  align: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['inherit', 'left', 'center', 'right', 'justify']),\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['initial', 'inherit', 'primary', 'secondary', 'textPrimary', 'textSecondary', 'error']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   * Overrides the behavior of the `variantMapping` prop.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * Controls the display type\n   */\n  display: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['initial', 'block', 'inline']),\n\n  /**\n   * If `true`, the text will have a bottom margin.\n   */\n  gutterBottom: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the text will not wrap, but instead will truncate with a text overflow ellipsis.\n   *\n   * Note that text overflow can only happen with block or inline-block level elements\n   * (the element needs to have a width in order to overflow).\n   */\n  noWrap: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the text will have a bottom margin.\n   */\n  paragraph: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Applies the theme typography styles.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'caption', 'button', 'overline', 'srOnly', 'inherit']),\n\n  /**\n   * The component maps the variant prop to a range of different HTML element types.\n   * For instance, subtitle1 to `<h6>`.\n   * If you wish to change that mapping, you can provide your own.\n   * Alternatively, you can use the `component` prop.\n   */\n  variantMapping: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiTypography'\n})(Typography));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Typography/Typography.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Typography__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Typography__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js":
/*!*************************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js ***!
  \*************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* eslint-disable consistent-return, jsx-a11y/no-noninteractive-tabindex, camelcase */\n\n\n\n\n\n\n/**\n * Utility component that locks focus inside the component.\n */\n\nfunction Unstable_TrapFocus(props) {\n  var children = props.children,\n      _props$disableAutoFoc = props.disableAutoFocus,\n      disableAutoFocus = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$disableEnforce = props.disableEnforceFocus,\n      disableEnforceFocus = _props$disableEnforce === void 0 ? false : _props$disableEnforce,\n      _props$disableRestore = props.disableRestoreFocus,\n      disableRestoreFocus = _props$disableRestore === void 0 ? false : _props$disableRestore,\n      getDoc = props.getDoc,\n      isEnabled = props.isEnabled,\n      open = props.open;\n  var ignoreNextEnforceFocus = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"]();\n  var sentinelStart = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](null);\n  var sentinelEnd = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](null);\n  var nodeToRestore = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"]();\n  var rootRef = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](null); // can be removed once we drop support for non ref forwarding class components\n\n  var handleOwnRef = react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"](function (instance) {\n    // #StrictMode ready\n    rootRef.current = react_dom__WEBPACK_IMPORTED_MODULE_1__[\"findDOMNode\"](instance);\n  }, []);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(children.ref, handleOwnRef);\n  var prevOpenRef = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"]();\n  react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"](function () {\n    prevOpenRef.current = open;\n  }, [open]);\n\n  if (!prevOpenRef.current && open && typeof window !== 'undefined') {\n    // WARNING: Potentially unsafe in concurrent mode.\n    // The way the read on `nodeToRestore` is setup could make this actually safe.\n    // Say we render `open={false}` -> `open={true}` but never commit.\n    // We have now written a state that wasn't committed. But no committed effect\n    // will read this wrong value. We only read from `nodeToRestore` in effects\n    // that were committed on `open={true}`\n    // WARNING: Prevents the instance from being garbage collected. Should only\n    // hold a weak ref.\n    nodeToRestore.current = getDoc().activeElement;\n  }\n\n  react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"](function () {\n    if (!open) {\n      return;\n    }\n\n    var doc = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(rootRef.current); // We might render an empty child.\n\n    if (!disableAutoFocus && rootRef.current && !rootRef.current.contains(doc.activeElement)) {\n      if (!rootRef.current.hasAttribute('tabIndex')) {\n        if (true) {\n          console.error(['Material-UI: The modal content node does not accept focus.', 'For the benefit of assistive technologies, ' + 'the tabIndex of the node is being set to \"-1\".'].join('\\n'));\n        }\n\n        rootRef.current.setAttribute('tabIndex', -1);\n      }\n\n      rootRef.current.focus();\n    }\n\n    var contain = function contain() {\n      if (!doc.hasFocus() || disableEnforceFocus || !isEnabled() || ignoreNextEnforceFocus.current) {\n        ignoreNextEnforceFocus.current = false;\n        return;\n      }\n\n      if (rootRef.current && !rootRef.current.contains(doc.activeElement)) {\n        rootRef.current.focus();\n      }\n    };\n\n    var loopFocus = function loopFocus(event) {\n      // 9 = Tab\n      if (disableEnforceFocus || !isEnabled() || event.keyCode !== 9) {\n        return;\n      } // Make sure the next tab starts from the right place.\n\n\n      if (doc.activeElement === rootRef.current) {\n        // We need to ignore the next contain as\n        // it will try to move the focus back to the rootRef element.\n        ignoreNextEnforceFocus.current = true;\n\n        if (event.shiftKey) {\n          sentinelEnd.current.focus();\n        } else {\n          sentinelStart.current.focus();\n        }\n      }\n    };\n\n    doc.addEventListener('focus', contain, true);\n    doc.addEventListener('keydown', loopFocus, true); // With Edge, Safari and Firefox, no focus related events are fired when the focused area stops being a focused area\n    // e.g. https://bugzilla.mozilla.org/show_bug.cgi?id=559561.\n    //\n    // The whatwg spec defines how the browser should behave but does not explicitly mention any events:\n    // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.\n\n    var interval = setInterval(function () {\n      contain();\n    }, 50);\n    return function () {\n      clearInterval(interval);\n      doc.removeEventListener('focus', contain, true);\n      doc.removeEventListener('keydown', loopFocus, true); // restoreLastFocus()\n\n      if (!disableRestoreFocus) {\n        // In IE 11 it is possible for document.activeElement to be null resulting\n        // in nodeToRestore.current being null.\n        // Not all elements in IE 11 have a focus method.\n        // Once IE 11 support is dropped the focus() call can be unconditional.\n        if (nodeToRestore.current && nodeToRestore.current.focus) {\n          nodeToRestore.current.focus();\n        }\n\n        nodeToRestore.current = null;\n      }\n    };\n  }, [disableAutoFocus, disableEnforceFocus, disableRestoreFocus, isEnabled, open]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n    tabIndex: 0,\n    ref: sentinelStart,\n    \"data-test\": \"sentinelStart\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"](children, {\n    ref: handleRef\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n    tabIndex: 0,\n    ref: sentinelEnd,\n    \"data-test\": \"sentinelEnd\"\n  }));\n}\n\n true ? Unstable_TrapFocus.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A single child content element.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n\n  /**\n   * If `true`, the trap focus will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any trap focus children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the trap focus less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableAutoFocus: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * If `true`, the trap focus will not prevent focus from leaving the trap focus while open.\n   *\n   * Generally this should never be set to `true` as it makes the trap focus less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableEnforceFocus: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * If `true`, the trap focus will not restore focus to previously focused element once\n   * trap focus is hidden.\n   */\n  disableRestoreFocus: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * Return the document to consider.\n   * We use it to implement the restore focus between different browser documents.\n   */\n  getDoc: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,\n\n  /**\n   * Do we still want to enforce the focus?\n   * This prop helps nesting TrapFocus elements.\n   */\n  isEnabled: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,\n\n  /**\n   * If `true`, focus will be locked.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired\n} : undefined;\n\nif (true) {\n  // eslint-disable-next-line\n  Unstable_TrapFocus['propTypes' + ''] = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"exactProp\"])(Unstable_TrapFocus.propTypes);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Unstable_TrapFocus);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/index.js":
/*!************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/index.js ***!
  \************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Unstable_TrapFocus */ \"./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/blue.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/blue.js ***!
  \***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar blue = {\n  50: '#e3f2fd',\n  100: '#bbdefb',\n  200: '#90caf9',\n  300: '#64b5f6',\n  400: '#42a5f5',\n  500: '#2196f3',\n  600: '#1e88e5',\n  700: '#1976d2',\n  800: '#1565c0',\n  900: '#0d47a1',\n  A100: '#82b1ff',\n  A200: '#448aff',\n  A400: '#2979ff',\n  A700: '#2962ff'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (blue);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/blue.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/common.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/common.js ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar common = {\n  black: '#000',\n  white: '#fff'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (common);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/common.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/green.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/green.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar green = {\n  50: '#e8f5e9',\n  100: '#c8e6c9',\n  200: '#a5d6a7',\n  300: '#81c784',\n  400: '#66bb6a',\n  500: '#4caf50',\n  600: '#43a047',\n  700: '#388e3c',\n  800: '#2e7d32',\n  900: '#1b5e20',\n  A100: '#b9f6ca',\n  A200: '#69f0ae',\n  A400: '#00e676',\n  A700: '#00c853'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (green);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/green.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/grey.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/grey.js ***!
  \***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar grey = {\n  50: '#fafafa',\n  100: '#f5f5f5',\n  200: '#eeeeee',\n  300: '#e0e0e0',\n  400: '#bdbdbd',\n  500: '#9e9e9e',\n  600: '#757575',\n  700: '#616161',\n  800: '#424242',\n  900: '#212121',\n  A100: '#d5d5d5',\n  A200: '#aaaaaa',\n  A400: '#303030',\n  A700: '#616161'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (grey);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/grey.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/indigo.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/indigo.js ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar indigo = {\n  50: '#e8eaf6',\n  100: '#c5cae9',\n  200: '#9fa8da',\n  300: '#7986cb',\n  400: '#5c6bc0',\n  500: '#3f51b5',\n  600: '#3949ab',\n  700: '#303f9f',\n  800: '#283593',\n  900: '#1a237e',\n  A100: '#8c9eff',\n  A200: '#536dfe',\n  A400: '#3d5afe',\n  A700: '#304ffe'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (indigo);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/indigo.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/orange.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/orange.js ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar orange = {\n  50: '#fff3e0',\n  100: '#ffe0b2',\n  200: '#ffcc80',\n  300: '#ffb74d',\n  400: '#ffa726',\n  500: '#ff9800',\n  600: '#fb8c00',\n  700: '#f57c00',\n  800: '#ef6c00',\n  900: '#e65100',\n  A100: '#ffd180',\n  A200: '#ffab40',\n  A400: '#ff9100',\n  A700: '#ff6d00'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (orange);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/orange.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/pink.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/pink.js ***!
  \***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar pink = {\n  50: '#fce4ec',\n  100: '#f8bbd0',\n  200: '#f48fb1',\n  300: '#f06292',\n  400: '#ec407a',\n  500: '#e91e63',\n  600: '#d81b60',\n  700: '#c2185b',\n  800: '#ad1457',\n  900: '#880e4f',\n  A100: '#ff80ab',\n  A200: '#ff4081',\n  A400: '#f50057',\n  A700: '#c51162'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (pink);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/pink.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/red.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/red.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar red = {\n  50: '#ffebee',\n  100: '#ffcdd2',\n  200: '#ef9a9a',\n  300: '#e57373',\n  400: '#ef5350',\n  500: '#f44336',\n  600: '#e53935',\n  700: '#d32f2f',\n  800: '#c62828',\n  900: '#b71c1c',\n  A100: '#ff8a80',\n  A200: '#ff5252',\n  A400: '#ff1744',\n  A700: '#d50000'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (red);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/red.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/SwitchBase.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/SwitchBase.js ***!
  \*******************************************************************************/
/*! exports provided: styles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_useControlled__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/useControlled */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _IconButton__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../IconButton */ \"./jaas-client/node_modules/@material-ui/core/esm/IconButton/index.js\");\n\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  root: {\n    padding: 9\n  },\n  checked: {},\n  disabled: {},\n  input: {\n    cursor: 'inherit',\n    position: 'absolute',\n    opacity: 0,\n    width: '100%',\n    height: '100%',\n    top: 0,\n    left: 0,\n    margin: 0,\n    padding: 0,\n    zIndex: 1\n  }\n};\n/**\n * @ignore - internal component.\n */\n\nvar SwitchBase = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function SwitchBase(props, ref) {\n  var autoFocus = props.autoFocus,\n      checkedProp = props.checked,\n      checkedIcon = props.checkedIcon,\n      classes = props.classes,\n      className = props.className,\n      defaultChecked = props.defaultChecked,\n      disabledProp = props.disabled,\n      icon = props.icon,\n      id = props.id,\n      inputProps = props.inputProps,\n      inputRef = props.inputRef,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onFocus = props.onFocus,\n      readOnly = props.readOnly,\n      required = props.required,\n      tabIndex = props.tabIndex,\n      type = props.type,\n      value = props.value,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"autoFocus\", \"checked\", \"checkedIcon\", \"classes\", \"className\", \"defaultChecked\", \"disabled\", \"icon\", \"id\", \"inputProps\", \"inputRef\", \"name\", \"onBlur\", \"onChange\", \"onFocus\", \"readOnly\", \"required\", \"tabIndex\", \"type\", \"value\"]);\n\n  var _useControlled = Object(_utils_useControlled__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({\n    controlled: checkedProp,\n    default: Boolean(defaultChecked),\n    name: 'SwitchBase',\n    state: 'checked'\n  }),\n      _useControlled2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_useControlled, 2),\n      checked = _useControlled2[0],\n      setCheckedState = _useControlled2[1];\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_8__[\"default\"])();\n\n  var handleFocus = function handleFocus(event) {\n    if (onFocus) {\n      onFocus(event);\n    }\n\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    if (onBlur) {\n      onBlur(event);\n    }\n\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    }\n  };\n\n  var handleInputChange = function handleInputChange(event) {\n    var newChecked = event.target.checked;\n    setCheckedState(newChecked);\n\n    if (onChange) {\n      // TODO v5: remove the second argument.\n      onChange(event, newChecked);\n    }\n  };\n\n  var disabled = disabledProp;\n\n  if (muiFormControl) {\n    if (typeof disabled === 'undefined') {\n      disabled = muiFormControl.disabled;\n    }\n  }\n\n  var hasLabelFor = type === 'checkbox' || type === 'radio';\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_IconButton__WEBPACK_IMPORTED_MODULE_10__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    component: \"span\",\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className, checked && classes.checked, disabled && classes.disabled),\n    disabled: disabled,\n    tabIndex: null,\n    role: undefined,\n    onFocus: handleFocus,\n    onBlur: handleBlur,\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"input\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    autoFocus: autoFocus,\n    checked: checkedProp,\n    defaultChecked: defaultChecked,\n    className: classes.input,\n    disabled: disabled,\n    id: hasLabelFor && id,\n    name: name,\n    onChange: handleInputChange,\n    readOnly: readOnly,\n    ref: inputRef,\n    required: required,\n    tabIndex: tabIndex,\n    type: type,\n    value: value\n  }, inputProps)), checked ? checkedIcon : icon);\n}); // NB: If changed, please update Checkbox, Switch and Radio\n// so that the API documentation is updated.\n\n true ? SwitchBase.propTypes = {\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * @ignore\n   */\n  defaultChecked: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the switch will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node.isRequired,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"refType\"],\n\n  /*\n   * @ignore\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string]),\n\n  /**\n   * The input component prop `type`.\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string.isRequired,\n\n  /**\n   * The value of the component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(styles, {\n  name: 'PrivateSwitchBase'\n})(SwitchBase));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/SwitchBase.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js":
/*!********************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js ***!
  \********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js":
/*!***************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js ***!
  \***************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js":
/*!***************************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js ***!
  \***************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js":
/*!****************************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js ***!
  \****************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z\"\n}), 'IndeterminateCheckBox'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/Person.js":
/*!*************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/Person.js ***!
  \*************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n}), 'Person'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/Person.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js ***!
  \***********************************************************************************/
/*! exports provided: hexToRgb, rgbToHex, hslToRgb, decomposeColor, recomposeColor, getContrastRatio, getLuminance, emphasize, fade, darken, lighten */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hexToRgb\", function() { return hexToRgb; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rgbToHex\", function() { return rgbToHex; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hslToRgb\", function() { return hslToRgb; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"decomposeColor\", function() { return decomposeColor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"recomposeColor\", function() { return recomposeColor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getContrastRatio\", function() { return getContrastRatio; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLuminance\", function() { return getLuminance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"emphasize\", function() { return emphasize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fade\", function() { return fade; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"darken\", function() { return darken; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lighten\", function() { return lighten; });\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\n/* eslint-disable no-use-before-define */\n\n/**\n * Returns a number whose value is limited to the given range.\n *\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clamp(value) {\n  var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n  if (true) {\n    if (value < min || value > max) {\n      console.error(\"Material-UI: The value provided \".concat(value, \" is out of range [\").concat(min, \", \").concat(max, \"].\"));\n    }\n  }\n\n  return Math.min(Math.max(min, value), max);\n}\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n *\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\n\n\nfunction hexToRgb(color) {\n  color = color.substr(1);\n  var re = new RegExp(\".{1,\".concat(color.length >= 6 ? 2 : 1, \"}\"), 'g');\n  var colors = color.match(re);\n\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(function (n) {\n      return n + n;\n    });\n  }\n\n  return colors ? \"rgb\".concat(colors.length === 4 ? 'a' : '', \"(\").concat(colors.map(function (n, index) {\n    return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n  }).join(', '), \")\") : '';\n}\n\nfunction intToHex(int) {\n  var hex = int.toString(16);\n  return hex.length === 1 ? \"0\".concat(hex) : hex;\n}\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n *\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\n\n\nfunction rgbToHex(color) {\n  // Idempotent\n  if (color.indexOf('#') === 0) {\n    return color;\n  }\n\n  var _decomposeColor = decomposeColor(color),\n      values = _decomposeColor.values;\n\n  return \"#\".concat(values.map(function (n) {\n    return intToHex(n);\n  }).join(''));\n}\n/**\n * Converts a color from hsl format to rgb format.\n *\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\n\nfunction hslToRgb(color) {\n  color = decomposeColor(color);\n  var _color = color,\n      values = _color.values;\n  var h = values[0];\n  var s = values[1] / 100;\n  var l = values[2] / 100;\n  var a = s * Math.min(l, 1 - l);\n\n  var f = function f(n) {\n    var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n    return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  };\n\n  var type = 'rgb';\n  var rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n\n  return recomposeColor({\n    type: type,\n    values: rgb\n  });\n}\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\n\nfunction decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n\n  var marker = color.indexOf('(');\n  var type = color.substring(0, marker);\n\n  if (['rgb', 'rgba', 'hsl', 'hsla'].indexOf(type) === -1) {\n    throw new Error( true ? \"Material-UI: Unsupported `\".concat(color, \"` color.\\nWe support the following formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla().\") : undefined);\n  }\n\n  var values = color.substring(marker + 1, color.length - 1).split(',');\n  values = values.map(function (value) {\n    return parseFloat(value);\n  });\n  return {\n    type: type,\n    values: values\n  };\n}\n/**\n * Converts a color object with type and values to a string.\n *\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\n\nfunction recomposeColor(color) {\n  var type = color.type;\n  var values = color.values;\n\n  if (type.indexOf('rgb') !== -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map(function (n, i) {\n      return i < 3 ? parseInt(n, 10) : n;\n    });\n  } else if (type.indexOf('hsl') !== -1) {\n    values[1] = \"\".concat(values[1], \"%\");\n    values[2] = \"\".concat(values[2], \"%\");\n  }\n\n  return \"\".concat(type, \"(\").concat(values.join(', '), \")\");\n}\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\n\nfunction getContrastRatio(foreground, background) {\n  var lumA = getLuminance(foreground);\n  var lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\n\nfunction getLuminance(color) {\n  color = decomposeColor(color);\n  var rgb = color.type === 'hsl' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(function (val) {\n    val /= 255; // normalized\n\n    return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n  }); // Truncate at 3 digits\n\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction emphasize(color) {\n  var coefficient = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} value - value to set the alpha channel to in the range 0 -1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction fade(color, value) {\n  color = decomposeColor(color);\n  value = clamp(value);\n\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n\n  color.values[3] = value;\n  return recomposeColor(color);\n}\n/**\n * Darkens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}\n/**\n * Lightens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createBreakpoints.js":
/*!************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createBreakpoints.js ***!
  \************************************************************************************/
/*! exports provided: keys, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"keys\", function() { return keys; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createBreakpoints; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n\n\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nvar keys = ['xs', 'sm', 'md', 'lg', 'xl']; // Keep in mind that @media is inclusive by the CSS specification.\n\nfunction createBreakpoints(breakpoints) {\n  var _breakpoints$values = breakpoints.values,\n      values = _breakpoints$values === void 0 ? {\n    xs: 0,\n    sm: 600,\n    md: 960,\n    lg: 1280,\n    xl: 1920\n  } : _breakpoints$values,\n      _breakpoints$unit = breakpoints.unit,\n      unit = _breakpoints$unit === void 0 ? 'px' : _breakpoints$unit,\n      _breakpoints$step = breakpoints.step,\n      step = _breakpoints$step === void 0 ? 5 : _breakpoints$step,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(breakpoints, [\"values\", \"unit\", \"step\"]);\n\n  function up(key) {\n    var value = typeof values[key] === 'number' ? values[key] : key;\n    return \"@media (min-width:\".concat(value).concat(unit, \")\");\n  }\n\n  function down(key) {\n    var endIndex = keys.indexOf(key) + 1;\n    var upperbound = values[keys[endIndex]];\n\n    if (endIndex === keys.length) {\n      // xl down applies to all sizes\n      return up('xs');\n    }\n\n    var value = typeof upperbound === 'number' && endIndex > 0 ? upperbound : key;\n    return \"@media (max-width:\".concat(value - step / 100).concat(unit, \")\");\n  }\n\n  function between(start, end) {\n    var endIndex = keys.indexOf(end);\n\n    if (endIndex === keys.length - 1) {\n      return up(start);\n    }\n\n    return \"@media (min-width:\".concat(typeof values[start] === 'number' ? values[start] : start).concat(unit, \") and \") + \"(max-width:\".concat((endIndex !== -1 && typeof values[keys[endIndex + 1]] === 'number' ? values[keys[endIndex + 1]] : end) - step / 100).concat(unit, \")\");\n  }\n\n  function only(key) {\n    return between(key, key);\n  }\n\n  function width(key) {\n    return values[key];\n  }\n\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    keys: keys,\n    values: values,\n    up: up,\n    down: down,\n    between: between,\n    only: only,\n    width: width\n  }, other);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createBreakpoints.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createMixins.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createMixins.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createMixins; });\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n\n\nfunction createMixins(breakpoints, spacing, mixins) {\n  var _toolbar;\n\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    gutters: function gutters() {\n      var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      // To deprecate in v4.1\n      //       warning(\n      //         false,\n      //         [\n      //           'Material-UI: Theme.mixins.gutters() is deprecated.',\n      //           'You can use the source of the mixin directly:',\n      //           `\n      // paddingLeft: theme.spacing(2),\n      // paddingRight: theme.spacing(2),\n      // [theme.breakpoints.up('sm')]: {\n      //   paddingLeft: theme.spacing(3),\n      //   paddingRight: theme.spacing(3),\n      // },\n      // `,\n      //         ].join('\\n'),\n      //       );\n      return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        paddingLeft: spacing(2),\n        paddingRight: spacing(2)\n      }, styles, Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, breakpoints.up('sm'), Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        paddingLeft: spacing(3),\n        paddingRight: spacing(3)\n      }, styles[breakpoints.up('sm')])));\n    },\n    toolbar: (_toolbar = {\n      minHeight: 56\n    }, Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_toolbar, \"\".concat(breakpoints.up('xs'), \" and (orientation: landscape)\"), {\n      minHeight: 48\n    }), Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_toolbar, breakpoints.up('sm'), {\n      minHeight: 64\n    }), _toolbar)\n  }, mixins);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createMixins.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createMuiTheme.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createMuiTheme.js ***!
  \*********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _createBreakpoints__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createBreakpoints */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createBreakpoints.js\");\n/* harmony import */ var _createMixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createMixins */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createMixins.js\");\n/* harmony import */ var _createPalette__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPalette */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createPalette.js\");\n/* harmony import */ var _createTypography__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./createTypography */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createTypography.js\");\n/* harmony import */ var _shadows__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./shadows */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/shadows.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./shape */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/shape.js\");\n/* harmony import */ var _createSpacing__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createSpacing */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createSpacing.js\");\n/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./transitions */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js\");\n/* harmony import */ var _zIndex__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./zIndex */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction createMuiTheme() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var _options$breakpoints = options.breakpoints,\n      breakpointsInput = _options$breakpoints === void 0 ? {} : _options$breakpoints,\n      _options$mixins = options.mixins,\n      mixinsInput = _options$mixins === void 0 ? {} : _options$mixins,\n      _options$palette = options.palette,\n      paletteInput = _options$palette === void 0 ? {} : _options$palette,\n      spacingInput = options.spacing,\n      _options$typography = options.typography,\n      typographyInput = _options$typography === void 0 ? {} : _options$typography,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(options, [\"breakpoints\", \"mixins\", \"palette\", \"spacing\", \"typography\"]);\n\n  var palette = Object(_createPalette__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(paletteInput);\n  var breakpoints = Object(_createBreakpoints__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(breakpointsInput);\n  var spacing = Object(_createSpacing__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(spacingInput);\n  var muiTheme = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])({\n    breakpoints: breakpoints,\n    direction: 'ltr',\n    mixins: Object(_createMixins__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(breakpoints, spacing, mixinsInput),\n    overrides: {},\n    // Inject custom styles\n    palette: palette,\n    props: {},\n    // Provide default props\n    shadows: _shadows__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n    typography: Object(_createTypography__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(palette, typographyInput),\n    spacing: spacing,\n    shape: _shape__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n    transitions: _transitions__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n    zIndex: _zIndex__WEBPACK_IMPORTED_MODULE_11__[\"default\"]\n  }, other);\n\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  muiTheme = args.reduce(function (acc, argument) {\n    return Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])(acc, argument);\n  }, muiTheme);\n\n  if (true) {\n    var pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected'];\n\n    var traverse = function traverse(node, parentKey) {\n      var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var key; // eslint-disable-next-line guard-for-in, no-restricted-syntax\n\n      for (key in node) {\n        var child = node[key];\n\n        if (depth === 1) {\n          if (key.indexOf('Mui') === 0 && child) {\n            traverse(child, key, depth + 1);\n          }\n        } else if (pseudoClasses.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n          if (true) {\n            console.error([\"Material-UI: The `\".concat(parentKey, \"` component increases \") + \"the CSS specificity of the `\".concat(key, \"` internal state.\"), 'You can not override it like this: ', JSON.stringify(node, null, 2), '', 'Instead, you need to use the $ruleName syntax:', JSON.stringify({\n              root: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, \"&$\".concat(key), child)\n            }, null, 2), '', 'https://material-ui.com/r/pseudo-classes-guide'].join('\\n'));\n          } // Remove the style to prevent global conflicts.\n\n\n          node[key] = {};\n        }\n      }\n    };\n\n    traverse(muiTheme.overrides);\n  }\n\n  return muiTheme;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (createMuiTheme);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createMuiTheme.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createPalette.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createPalette.js ***!
  \********************************************************************************/
/*! exports provided: light, dark, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"light\", function() { return light; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dark\", function() { return dark; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createPalette; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _colors_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../colors/common */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/common.js\");\n/* harmony import */ var _colors_grey__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../colors/grey */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/grey.js\");\n/* harmony import */ var _colors_indigo__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../colors/indigo */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/indigo.js\");\n/* harmony import */ var _colors_pink__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../colors/pink */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/pink.js\");\n/* harmony import */ var _colors_red__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../colors/red */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/red.js\");\n/* harmony import */ var _colors_orange__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../colors/orange */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/orange.js\");\n/* harmony import */ var _colors_blue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../colors/blue */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/blue.js\");\n/* harmony import */ var _colors_green__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../colors/green */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/green.js\");\n/* harmony import */ var _colorManipulator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./colorManipulator */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar light = {\n  // The colors used to style the text.\n  text: {\n    // The most important text.\n    primary: 'rgba(0, 0, 0, 0.87)',\n    // Secondary text.\n    secondary: 'rgba(0, 0, 0, 0.54)',\n    // Disabled text have even lower visual prominence.\n    disabled: 'rgba(0, 0, 0, 0.38)',\n    // Text hints.\n    hint: 'rgba(0, 0, 0, 0.38)'\n  },\n  // The color used to divide different elements.\n  divider: 'rgba(0, 0, 0, 0.12)',\n  // The background colors used to style the surfaces.\n  // Consistency between these values is important.\n  background: {\n    paper: _colors_common__WEBPACK_IMPORTED_MODULE_3__[\"default\"].white,\n    default: _colors_grey__WEBPACK_IMPORTED_MODULE_4__[\"default\"][50]\n  },\n  // The colors used to style the action elements.\n  action: {\n    // The color of an active action like an icon button.\n    active: 'rgba(0, 0, 0, 0.54)',\n    // The color of an hovered action.\n    hover: 'rgba(0, 0, 0, 0.04)',\n    hoverOpacity: 0.04,\n    // The color of a selected action.\n    selected: 'rgba(0, 0, 0, 0.08)',\n    selectedOpacity: 0.08,\n    // The color of a disabled action.\n    disabled: 'rgba(0, 0, 0, 0.26)',\n    // The background color of a disabled action.\n    disabledBackground: 'rgba(0, 0, 0, 0.12)',\n    disabledOpacity: 0.38,\n    focus: 'rgba(0, 0, 0, 0.12)',\n    focusOpacity: 0.12,\n    activatedOpacity: 0.12\n  }\n};\nvar dark = {\n  text: {\n    primary: _colors_common__WEBPACK_IMPORTED_MODULE_3__[\"default\"].white,\n    secondary: 'rgba(255, 255, 255, 0.7)',\n    disabled: 'rgba(255, 255, 255, 0.5)',\n    hint: 'rgba(255, 255, 255, 0.5)',\n    icon: 'rgba(255, 255, 255, 0.5)'\n  },\n  divider: 'rgba(255, 255, 255, 0.12)',\n  background: {\n    paper: _colors_grey__WEBPACK_IMPORTED_MODULE_4__[\"default\"][800],\n    default: '#303030'\n  },\n  action: {\n    active: _colors_common__WEBPACK_IMPORTED_MODULE_3__[\"default\"].white,\n    hover: 'rgba(255, 255, 255, 0.08)',\n    hoverOpacity: 0.08,\n    selected: 'rgba(255, 255, 255, 0.16)',\n    selectedOpacity: 0.16,\n    disabled: 'rgba(255, 255, 255, 0.3)',\n    disabledBackground: 'rgba(255, 255, 255, 0.12)',\n    disabledOpacity: 0.38,\n    focus: 'rgba(255, 255, 255, 0.12)',\n    focusOpacity: 0.12,\n    activatedOpacity: 0.24\n  }\n};\n\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n  var tonalOffsetLight = tonalOffset.light || tonalOffset;\n  var tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = Object(_colorManipulator__WEBPACK_IMPORTED_MODULE_11__[\"lighten\"])(intent.main, tonalOffsetLight);\n    } else if (direction === 'dark') {\n      intent.dark = Object(_colorManipulator__WEBPACK_IMPORTED_MODULE_11__[\"darken\"])(intent.main, tonalOffsetDark);\n    }\n  }\n}\n\nfunction createPalette(palette) {\n  var _palette$primary = palette.primary,\n      primary = _palette$primary === void 0 ? {\n    light: _colors_indigo__WEBPACK_IMPORTED_MODULE_5__[\"default\"][300],\n    main: _colors_indigo__WEBPACK_IMPORTED_MODULE_5__[\"default\"][500],\n    dark: _colors_indigo__WEBPACK_IMPORTED_MODULE_5__[\"default\"][700]\n  } : _palette$primary,\n      _palette$secondary = palette.secondary,\n      secondary = _palette$secondary === void 0 ? {\n    light: _colors_pink__WEBPACK_IMPORTED_MODULE_6__[\"default\"].A200,\n    main: _colors_pink__WEBPACK_IMPORTED_MODULE_6__[\"default\"].A400,\n    dark: _colors_pink__WEBPACK_IMPORTED_MODULE_6__[\"default\"].A700\n  } : _palette$secondary,\n      _palette$error = palette.error,\n      error = _palette$error === void 0 ? {\n    light: _colors_red__WEBPACK_IMPORTED_MODULE_7__[\"default\"][300],\n    main: _colors_red__WEBPACK_IMPORTED_MODULE_7__[\"default\"][500],\n    dark: _colors_red__WEBPACK_IMPORTED_MODULE_7__[\"default\"][700]\n  } : _palette$error,\n      _palette$warning = palette.warning,\n      warning = _palette$warning === void 0 ? {\n    light: _colors_orange__WEBPACK_IMPORTED_MODULE_8__[\"default\"][300],\n    main: _colors_orange__WEBPACK_IMPORTED_MODULE_8__[\"default\"][500],\n    dark: _colors_orange__WEBPACK_IMPORTED_MODULE_8__[\"default\"][700]\n  } : _palette$warning,\n      _palette$info = palette.info,\n      info = _palette$info === void 0 ? {\n    light: _colors_blue__WEBPACK_IMPORTED_MODULE_9__[\"default\"][300],\n    main: _colors_blue__WEBPACK_IMPORTED_MODULE_9__[\"default\"][500],\n    dark: _colors_blue__WEBPACK_IMPORTED_MODULE_9__[\"default\"][700]\n  } : _palette$info,\n      _palette$success = palette.success,\n      success = _palette$success === void 0 ? {\n    light: _colors_green__WEBPACK_IMPORTED_MODULE_10__[\"default\"][300],\n    main: _colors_green__WEBPACK_IMPORTED_MODULE_10__[\"default\"][500],\n    dark: _colors_green__WEBPACK_IMPORTED_MODULE_10__[\"default\"][700]\n  } : _palette$success,\n      _palette$type = palette.type,\n      type = _palette$type === void 0 ? 'light' : _palette$type,\n      _palette$contrastThre = palette.contrastThreshold,\n      contrastThreshold = _palette$contrastThre === void 0 ? 3 : _palette$contrastThre,\n      _palette$tonalOffset = palette.tonalOffset,\n      tonalOffset = _palette$tonalOffset === void 0 ? 0.2 : _palette$tonalOffset,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(palette, [\"primary\", \"secondary\", \"error\", \"warning\", \"info\", \"success\", \"type\", \"contrastThreshold\", \"tonalOffset\"]); // Use the same logic as\n  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n\n\n  function getContrastText(background) {\n    var contrastText = Object(_colorManipulator__WEBPACK_IMPORTED_MODULE_11__[\"getContrastRatio\"])(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n\n    if (true) {\n      var contrast = Object(_colorManipulator__WEBPACK_IMPORTED_MODULE_11__[\"getContrastRatio\"])(background, contrastText);\n\n      if (contrast < 3) {\n        console.error([\"Material-UI: The contrast ratio of \".concat(contrast, \":1 for \").concat(contrastText, \" on \").concat(background), 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n      }\n    }\n\n    return contrastText;\n  }\n\n  var augmentColor = function augmentColor(color) {\n    var mainShade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n    var lightShade = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n    var darkShade = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 700;\n    color = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, color);\n\n    if (!color.main && color[mainShade]) {\n      color.main = color[mainShade];\n    }\n\n    if (!color.main) {\n      throw new Error( true ? \"Material-UI: The color provided to augmentColor(color) is invalid.\\nThe color object needs to have a `main` property or a `\".concat(mainShade, \"` property.\") : undefined);\n    }\n\n    if (typeof color.main !== 'string') {\n      throw new Error( true ? \"Material-UI: The color provided to augmentColor(color) is invalid.\\n`color.main` should be a string, but `\".concat(JSON.stringify(color.main), \"` was provided instead.\\n\\nDid you intend to use one of the following approaches?\\n\\nimport {\\xA0green } from \\\"@material-ui/core/colors\\\";\\n\\nconst theme1 = createMuiTheme({ palette: {\\n  primary: green,\\n} });\\n\\nconst theme2 = createMuiTheme({ palette: {\\n  primary: { main: green[500] },\\n} });\") : undefined);\n    }\n\n    addLightOrDark(color, 'light', lightShade, tonalOffset);\n    addLightOrDark(color, 'dark', darkShade, tonalOffset);\n\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n\n    return color;\n  };\n\n  var types = {\n    dark: dark,\n    light: light\n  };\n\n  if (true) {\n    if (!types[type]) {\n      console.error(\"Material-UI: The palette type `\".concat(type, \"` is not supported.\"));\n    }\n  }\n\n  var paletteOutput = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    // A collection of common colors.\n    common: _colors_common__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n    // The palette type, can be light or dark.\n    type: type,\n    // The colors used to represent primary interface elements for a user.\n    primary: augmentColor(primary),\n    // The colors used to represent secondary interface elements for a user.\n    secondary: augmentColor(secondary, 'A400', 'A200', 'A700'),\n    // The colors used to represent interface elements that the user should be made aware of.\n    error: augmentColor(error),\n    // The colors used to represent potentially dangerous actions or important messages.\n    warning: augmentColor(warning),\n    // The colors used to present information to the user that is neutral and not necessarily important.\n    info: augmentColor(info),\n    // The colors used to indicate the successful completion of an action that user triggered.\n    success: augmentColor(success),\n    // The grey colors.\n    grey: _colors_grey__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n    // Used by `getContrastText()` to maximize the contrast between\n    // the background and the text.\n    contrastThreshold: contrastThreshold,\n    // Takes a background color and returns the text color that maximizes the contrast.\n    getContrastText: getContrastText,\n    // Generate a rich color object.\n    augmentColor: augmentColor,\n    // Used by the functions below to shift a color's luminance by approximately\n    // two indexes within its tonal palette.\n    // E.g., shift from Red 500 to Red 300 or Red 700.\n    tonalOffset: tonalOffset\n  }, types[type]), other);\n  return paletteOutput;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createPalette.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createSpacing.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createSpacing.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createSpacing; });\n/* harmony import */ var _material_ui_system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/system */ \"./jaas-client/node_modules/@material-ui/system/esm/index.js\");\n\nvar warnOnce;\nfunction createSpacing() {\n  var spacingInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8;\n\n  // Already transformed.\n  if (spacingInput.mui) {\n    return spacingInput;\n  } // Material Design layouts are visually balanced. Most measurements align to an 8dp grid applied, which aligns both spacing and the overall layout.\n  // Smaller components, such as icons and type, can align to a 4dp grid.\n  // https://material.io/design/layout/understanding-layout.html#usage\n\n\n  var transform = Object(_material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"createUnarySpacing\"])({\n    spacing: spacingInput\n  });\n\n  var spacing = function spacing() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (true) {\n      if (!(args.length <= 4)) {\n        console.error(\"Material-UI: Too many arguments provided, expected between 0 and 4, got \".concat(args.length));\n      }\n    }\n\n    if (args.length === 0) {\n      return transform(1);\n    }\n\n    if (args.length === 1) {\n      return transform(args[0]);\n    }\n\n    return args.map(function (argument) {\n      if (typeof argument === 'string') {\n        return argument;\n      }\n\n      var output = transform(argument);\n      return typeof output === 'number' ? \"\".concat(output, \"px\") : output;\n    }).join(' ');\n  }; // Backward compatibility, to remove in v5.\n\n\n  Object.defineProperty(spacing, 'unit', {\n    get: function get() {\n      if (true) {\n        if (!warnOnce || \"development\" === 'test') {\n          console.error(['Material-UI: theme.spacing.unit usage has been deprecated.', 'It will be removed in v5.', 'You can replace `theme.spacing.unit * y` with `theme.spacing(y)`.', '', 'You can use the `https://github.com/mui-org/material-ui/tree/master/packages/material-ui-codemod/README.md#theme-spacing-api` migration helper to make the process smoother.'].join('\\n'));\n        }\n\n        warnOnce = true;\n      }\n\n      return spacingInput;\n    }\n  });\n  spacing.mui = true;\n  return spacing;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createSpacing.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createTypography.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createTypography.js ***!
  \***********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createTypography; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\n\n\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\n\nvar caseAllCaps = {\n  textTransform: 'uppercase'\n};\nvar defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n/**\n * @see @link{https://material.io/design/typography/the-type-system.html}\n * @see @link{https://material.io/design/typography/understanding-typography.html}\n */\n\nfunction createTypography(palette, typography) {\n  var _ref = typeof typography === 'function' ? typography(palette) : typography,\n      _ref$fontFamily = _ref.fontFamily,\n      fontFamily = _ref$fontFamily === void 0 ? defaultFontFamily : _ref$fontFamily,\n      _ref$fontSize = _ref.fontSize,\n      fontSize = _ref$fontSize === void 0 ? 14 : _ref$fontSize,\n      _ref$fontWeightLight = _ref.fontWeightLight,\n      fontWeightLight = _ref$fontWeightLight === void 0 ? 300 : _ref$fontWeightLight,\n      _ref$fontWeightRegula = _ref.fontWeightRegular,\n      fontWeightRegular = _ref$fontWeightRegula === void 0 ? 400 : _ref$fontWeightRegula,\n      _ref$fontWeightMedium = _ref.fontWeightMedium,\n      fontWeightMedium = _ref$fontWeightMedium === void 0 ? 500 : _ref$fontWeightMedium,\n      _ref$fontWeightBold = _ref.fontWeightBold,\n      fontWeightBold = _ref$fontWeightBold === void 0 ? 700 : _ref$fontWeightBold,\n      _ref$htmlFontSize = _ref.htmlFontSize,\n      htmlFontSize = _ref$htmlFontSize === void 0 ? 16 : _ref$htmlFontSize,\n      allVariants = _ref.allVariants,\n      pxToRem2 = _ref.pxToRem,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref, [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"fontWeightBold\", \"htmlFontSize\", \"allVariants\", \"pxToRem\"]);\n\n  if (true) {\n    if (typeof fontSize !== 'number') {\n      console.error('Material-UI: `fontSize` is required to be a number.');\n    }\n\n    if (typeof htmlFontSize !== 'number') {\n      console.error('Material-UI: `htmlFontSize` is required to be a number.');\n    }\n  }\n\n  var coef = fontSize / 14;\n\n  var pxToRem = pxToRem2 || function (size) {\n    return \"\".concat(size / htmlFontSize * coef, \"rem\");\n  };\n\n  var buildVariant = function buildVariant(fontWeight, size, lineHeight, letterSpacing, casing) {\n    return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      fontFamily: fontFamily,\n      fontWeight: fontWeight,\n      fontSize: pxToRem(size),\n      // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n      lineHeight: lineHeight\n    }, fontFamily === defaultFontFamily ? {\n      letterSpacing: \"\".concat(round(letterSpacing / size), \"em\")\n    } : {}, casing, allVariants);\n  };\n\n  var variants = {\n    h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n    h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n    h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n    h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n    h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n    h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n    subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n    subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n    body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n    body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n    button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n    caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n    overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps)\n  };\n  return Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    htmlFontSize: htmlFontSize,\n    pxToRem: pxToRem,\n    round: round,\n    // TODO v5: remove\n    fontFamily: fontFamily,\n    fontSize: fontSize,\n    fontWeightLight: fontWeightLight,\n    fontWeightRegular: fontWeightRegular,\n    fontWeightMedium: fontWeightMedium,\n    fontWeightBold: fontWeightBold\n  }, variants), other, {\n    clone: false // No need to clone deep\n\n  });\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createTypography.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _createMuiTheme__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createMuiTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n\nvar defaultTheme = Object(_createMuiTheme__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n/* harmony default export */ __webpack_exports__[\"default\"] = (defaultTheme);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/shadows.js":
/*!**************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/shadows.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar shadowKeyUmbraOpacity = 0.2;\nvar shadowKeyPenumbraOpacity = 0.14;\nvar shadowAmbientShadowOpacity = 0.12;\n\nfunction createShadow() {\n  return [\"\".concat(arguments.length <= 0 ? undefined : arguments[0], \"px \").concat(arguments.length <= 1 ? undefined : arguments[1], \"px \").concat(arguments.length <= 2 ? undefined : arguments[2], \"px \").concat(arguments.length <= 3 ? undefined : arguments[3], \"px rgba(0,0,0,\").concat(shadowKeyUmbraOpacity, \")\"), \"\".concat(arguments.length <= 4 ? undefined : arguments[4], \"px \").concat(arguments.length <= 5 ? undefined : arguments[5], \"px \").concat(arguments.length <= 6 ? undefined : arguments[6], \"px \").concat(arguments.length <= 7 ? undefined : arguments[7], \"px rgba(0,0,0,\").concat(shadowKeyPenumbraOpacity, \")\"), \"\".concat(arguments.length <= 8 ? undefined : arguments[8], \"px \").concat(arguments.length <= 9 ? undefined : arguments[9], \"px \").concat(arguments.length <= 10 ? undefined : arguments[10], \"px \").concat(arguments.length <= 11 ? undefined : arguments[11], \"px rgba(0,0,0,\").concat(shadowAmbientShadowOpacity, \")\")].join(',');\n} // Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\n\n\nvar shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\n/* harmony default export */ __webpack_exports__[\"default\"] = (shadows);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/shadows.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/shape.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/shape.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar shape = {\n  borderRadius: 4\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (shape);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/shape.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/styled.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/styled.js ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var _defaultTheme__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js\");\n\n\n\n\nvar styled = function styled(Component) {\n  var componentCreator = Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_1__[\"styled\"])(Component);\n  return function (style, options) {\n    return componentCreator(style, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      defaultTheme: _defaultTheme__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n    }, options));\n  };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (styled);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/styled.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js ***!
  \******************************************************************************/
/*! exports provided: easing, duration, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"easing\", function() { return easing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"duration\", function() { return duration; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nvar easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n}; // Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\n\nvar duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195\n};\n\nfunction formatMs(milliseconds) {\n  return \"\".concat(Math.round(milliseconds), \"ms\");\n}\n/**\n * @param {string|Array} props\n * @param {object} param\n * @param {string} param.prop\n * @param {number} param.duration\n * @param {string} param.easing\n * @param {number} param.delay\n */\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  easing: easing,\n  duration: duration,\n  create: function create() {\n    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['all'];\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var _options$duration = options.duration,\n        durationOption = _options$duration === void 0 ? duration.standard : _options$duration,\n        _options$easing = options.easing,\n        easingOption = _options$easing === void 0 ? easing.easeInOut : _options$easing,\n        _options$delay = options.delay,\n        delay = _options$delay === void 0 ? 0 : _options$delay,\n        other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(options, [\"duration\", \"easing\", \"delay\"]);\n\n    if (true) {\n      var isString = function isString(value) {\n        return typeof value === 'string';\n      };\n\n      var isNumber = function isNumber(value) {\n        return !isNaN(parseFloat(value));\n      };\n\n      if (!isString(props) && !Array.isArray(props)) {\n        console.error('Material-UI: Argument \"props\" must be a string or Array.');\n      }\n\n      if (!isNumber(durationOption) && !isString(durationOption)) {\n        console.error(\"Material-UI: Argument \\\"duration\\\" must be a number or a string but found \".concat(durationOption, \".\"));\n      }\n\n      if (!isString(easingOption)) {\n        console.error('Material-UI: Argument \"easing\" must be a string.');\n      }\n\n      if (!isNumber(delay) && !isString(delay)) {\n        console.error('Material-UI: Argument \"delay\" must be a number or a string.');\n      }\n\n      if (Object.keys(other).length !== 0) {\n        console.error(\"Material-UI: Unrecognized argument(s) [\".concat(Object.keys(other).join(','), \"].\"));\n      }\n    }\n\n    return (Array.isArray(props) ? props : [props]).map(function (animatedProp) {\n      return \"\".concat(animatedProp, \" \").concat(typeof durationOption === 'string' ? durationOption : formatMs(durationOption), \" \").concat(easingOption, \" \").concat(typeof delay === 'string' ? delay : formatMs(delay));\n    }).join(',');\n  },\n  getAutoHeightDuration: function getAutoHeightDuration(height) {\n    if (!height) {\n      return 0;\n    }\n\n    var constant = height / 36; // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n\n    return Math.round((4 + 15 * Math.pow(constant, 0.25) + constant / 5) * 10);\n  }\n});\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useTheme; });\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _defaultTheme__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js\");\n\n\n\nfunction useTheme() {\n  var theme = Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_0__[\"useTheme\"])() || _defaultTheme__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_1___default.a.useDebugValue(theme);\n  }\n\n  return theme;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js ***!
  \*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var _defaultTheme__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js\");\n\n\n\n\nfunction withStyles(stylesOrCreator, options) {\n  return Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_1__[\"withStyles\"])(stylesOrCreator, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    defaultTheme: _defaultTheme__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n  }, options));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (withStyles);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nvar zIndex = {\n  mobileStepper: 1000,\n  speedDial: 1050,\n  appBar: 1100,\n  drawer: 1200,\n  modal: 1300,\n  snackbar: 1400,\n  tooltip: 1500\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (zIndex);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js ***!
  \*****************************************************************************/
/*! exports provided: reflow, getTransitionProps */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reflow\", function() { return reflow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getTransitionProps\", function() { return getTransitionProps; });\nvar reflow = function reflow(node) {\n  return node.scrollTop;\n};\nfunction getTransitionProps(props, options) {\n  var timeout = props.timeout,\n      _props$style = props.style,\n      style = _props$style === void 0 ? {} : _props$style;\n  return {\n    duration: style.transitionDuration || typeof timeout === 'number' ? timeout : timeout[options.mode] || 0,\n    delay: style.transitionDelay\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return capitalize; });\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word a the sentence.\n// We only handle the first word.\nfunction capitalize(string) {\n  if (typeof string !== 'string') {\n    throw new Error( true ? \"Material-UI: capitalize(string) expects a string argument.\" : undefined);\n  }\n\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js":
/*!***************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js ***!
  \***************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createChainedFunction; });\n/**\n * Safe chained function\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n *\n * @param {function} functions to chain\n * @returns {function|null}\n */\nfunction createChainedFunction() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  return funcs.reduce(function (acc, func) {\n    if (func == null) {\n      return acc;\n    }\n\n    if (true) {\n      if (typeof func !== 'function') {\n        console.error('Material-UI: Invalid Argument Type, must only provide functions, undefined, or null.');\n      }\n    }\n\n    return function chainedFunction() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      acc.apply(this, args);\n      func.apply(this, args);\n    };\n  }, function () {});\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createSvgIcon; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _SvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../SvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js\");\n\n\n\n/**\n * Private module reserved for @material-ui/x packages.\n */\n\nfunction createSvgIcon(path, displayName) {\n  var Component = function Component(props, ref) {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_SvgIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      ref: ref\n    }, props), path);\n  };\n\n  if (true) {\n    // Need to set `displayName` on the inner component for React.memo.\n    // React prior to 16.14 ignores `displayName` on the wrapper.\n    Component.displayName = \"\".concat(displayName, \"Icon\");\n  }\n\n  Component.muiName = _SvgIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"].muiName;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.memo( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.forwardRef(Component));\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js":
/*!**************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return debounce; });\n// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nfunction debounce(func) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 166;\n  var timeout;\n\n  function debounced() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    // eslint-disable-next-line consistent-this\n    var that = this;\n\n    var later = function later() {\n      func.apply(that, args);\n    };\n\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  }\n\n  debounced.clear = function () {\n    clearTimeout(timeout);\n  };\n\n  return debounced;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getScrollbarSize; });\n// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/3ffe3a5d82f6f561b82ff78d82b32a7d14aed558/js/src/modal.js#L512-L519\nfunction getScrollbarSize() {\n  var scrollDiv = document.createElement('div');\n  scrollDiv.style.width = '99px';\n  scrollDiv.style.height = '99px';\n  scrollDiv.style.position = 'absolute';\n  scrollDiv.style.top = '-9999px';\n  scrollDiv.style.overflow = 'scroll';\n  document.body.appendChild(scrollDiv);\n  var scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n  document.body.removeChild(scrollDiv);\n  return scrollbarSize;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js ***!
  \******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return isMuiElement; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction isMuiElement(element, muiNames) {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"](element) && muiNames.indexOf(element.type.muiName) !== -1;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ownerDocument; });\nfunction ownerDocument(node) {\n  return node && node.ownerDocument || document;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js ***!
  \*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ownerWindow; });\n/* harmony import */ var _ownerDocument__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n\nfunction ownerWindow(node) {\n  var doc = Object(_ownerDocument__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node);\n  return doc.defaultView || window;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/requirePropFactory.js":
/*!************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/requirePropFactory.js ***!
  \************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return requirePropFactory; });\nfunction requirePropFactory(componentNameInError) {\n  if (false) {}\n\n  var requireProp = function requireProp(requiredProp) {\n    return function (props, propName, componentName, location, propFullName) {\n      var propFullNameSafe = propFullName || propName;\n\n      if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n        return new Error(\"The prop `\".concat(propFullNameSafe, \"` of \") + \"`\".concat(componentNameInError, \"` must be used on `\").concat(requiredProp, \"`.\"));\n      }\n\n      return null;\n    };\n  };\n\n  return requireProp;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/requirePropFactory.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return setRef; });\n// TODO v5: consider to make it private\nfunction setRef(ref, value) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useControlled; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\n\nfunction useControlled(_ref) {\n  var controlled = _ref.controlled,\n      defaultProp = _ref.default,\n      name = _ref.name,\n      _ref$state = _ref.state,\n      state = _ref$state === void 0 ? 'value' : _ref$state;\n\n  var _React$useRef = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](controlled !== undefined),\n      isControlled = _React$useRef.current;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"](defaultProp),\n      valueState = _React$useState[0],\n      setValue = _React$useState[1];\n\n  var value = isControlled ? controlled : valueState;\n\n  if (true) {\n    react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"](function () {\n      if (isControlled !== (controlled !== undefined)) {\n        console.error([\"Material-UI: A component is changing the \".concat(isControlled ? '' : 'un', \"controlled \").concat(state, \" state of \").concat(name, \" to be \").concat(isControlled ? 'un' : '', \"controlled.\"), 'Elements should not switch from uncontrolled to controlled (or vice versa).', \"Decide between using a controlled or uncontrolled \".concat(name, \" \") + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render, it's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n      }\n    }, [controlled]);\n\n    var _React$useRef2 = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](defaultProp),\n        defaultValue = _React$useRef2.current;\n\n    react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"](function () {\n      if (!isControlled && defaultValue !== defaultProp) {\n        console.error([\"Material-UI: A component is changing the default \".concat(state, \" state of an uncontrolled \").concat(name, \" after being initialized. \") + \"To suppress this warning opt to use a controlled \".concat(name, \".\")].join('\\n'));\n      }\n    }, [JSON.stringify(defaultProp)]);\n  }\n\n  var setValueIfUncontrolled = react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"](function (newValue) {\n    if (!isControlled) {\n      setValue(newValue);\n    }\n  }, []);\n  return [value, setValueIfUncontrolled];\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useEventCallback; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"] : react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n/**\n * https://github.com/facebook/react/issues/14099#issuecomment-440013892\n *\n * @param {function} fn\n */\n\nfunction useEventCallback(fn) {\n  var ref = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](fn);\n  useEnhancedEffect(function () {\n    ref.current = fn;\n  });\n  return react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"](function () {\n    return (0, ref.current).apply(void 0, arguments);\n  }, []);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useForkRef; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _setRef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js\");\n\n\nfunction useForkRef(refA, refB) {\n  /**\n   * This will create a new function if the ref props change and are defined.\n   * This means react will call the old forkRef with `null` and the new forkRef\n   * with the ref. Cleanup naturally emerges from this behavior\n   */\n  return react__WEBPACK_IMPORTED_MODULE_0__[\"useMemo\"](function () {\n    if (refA == null && refB == null) {\n      return null;\n    }\n\n    return function (refValue) {\n      Object(_setRef__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(refA, refValue);\n      Object(_setRef__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(refB, refValue);\n    };\n  }, [refA, refB]);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js ***!
  \***********************************************************************************/
/*! exports provided: teardown, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"teardown\", function() { return teardown; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useIsFocusVisible; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\n\n\nvar hadKeyboardEvent = true;\nvar hadFocusVisibleRecently = false;\nvar hadFocusVisibleRecentlyTimeout = null;\nvar inputTypesWhitelist = {\n  text: true,\n  search: true,\n  url: true,\n  tel: true,\n  email: true,\n  password: true,\n  number: true,\n  date: true,\n  month: true,\n  week: true,\n  time: true,\n  datetime: true,\n  'datetime-local': true\n};\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @return {boolean}\n */\n\nfunction focusTriggersKeyboardModality(node) {\n  var type = node.type,\n      tagName = node.tagName;\n\n  if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n    return true;\n  }\n\n  if (tagName === 'TEXTAREA' && !node.readOnly) {\n    return true;\n  }\n\n  if (node.isContentEditable) {\n    return true;\n  }\n\n  return false;\n}\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\n\n\nfunction handleKeyDown(event) {\n  if (event.metaKey || event.altKey || event.ctrlKey) {\n    return;\n  }\n\n  hadKeyboardEvent = true;\n}\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\n\n\nfunction handlePointerDown() {\n  hadKeyboardEvent = false;\n}\n\nfunction handleVisibilityChange() {\n  if (this.visibilityState === 'hidden') {\n    // If the tab becomes active again, the browser will handle calling focus\n    // on the element (Safari actually calls it twice).\n    // If this tab change caused a blur on an element with focus-visible,\n    // re-apply the class when the user switches back to the tab.\n    if (hadFocusVisibleRecently) {\n      hadKeyboardEvent = true;\n    }\n  }\n}\n\nfunction prepare(doc) {\n  doc.addEventListener('keydown', handleKeyDown, true);\n  doc.addEventListener('mousedown', handlePointerDown, true);\n  doc.addEventListener('pointerdown', handlePointerDown, true);\n  doc.addEventListener('touchstart', handlePointerDown, true);\n  doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\n\nfunction teardown(doc) {\n  doc.removeEventListener('keydown', handleKeyDown, true);\n  doc.removeEventListener('mousedown', handlePointerDown, true);\n  doc.removeEventListener('pointerdown', handlePointerDown, true);\n  doc.removeEventListener('touchstart', handlePointerDown, true);\n  doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\n\nfunction isFocusVisible(event) {\n  var target = event.target;\n\n  try {\n    return target.matches(':focus-visible');\n  } catch (error) {} // browsers not implementing :focus-visible will throw a SyntaxError\n  // we use our own heuristic for those browsers\n  // rethrow might be better if it's not the expected error but do we really\n  // want to crash if focus-visible malfunctioned?\n  // no need for validFocusTarget check. the user does that by attaching it to\n  // focusable events only\n\n\n  return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\n/**\n * Should be called if a blur event is fired on a focus-visible element\n */\n\n\nfunction handleBlurVisible() {\n  // To detect a tab/window switch, we look for a blur event followed\n  // rapidly by a visibility change.\n  // If we don't see a visibility change within 100ms, it's probably a\n  // regular focus change.\n  hadFocusVisibleRecently = true;\n  window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n  hadFocusVisibleRecentlyTimeout = window.setTimeout(function () {\n    hadFocusVisibleRecently = false;\n  }, 100);\n}\n\nfunction useIsFocusVisible() {\n  var ref = react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"](function (instance) {\n    var node = react_dom__WEBPACK_IMPORTED_MODULE_1__[\"findDOMNode\"](instance);\n\n    if (node != null) {\n      prepare(node.ownerDocument);\n    }\n  }, []);\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_0__[\"useDebugValue\"](isFocusVisible);\n  }\n\n  return {\n    isFocusVisible: isFocusVisible,\n    onBlurVisible: handleBlurVisible,\n    ref: ref\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/icons/LockOutlined.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/icons/LockOutlined.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\"));\n\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(/*! ./utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/icons/utils/createSvgIcon.js\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM9 6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9V6zm9 14H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z\"\n}), 'LockOutlined');\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/icons/LockOutlined.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/icons/utils/createSvgIcon.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/icons/utils/createSvgIcon.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createSvgIcon;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\"));\n\nvar _SvgIcon = _interopRequireDefault(__webpack_require__(/*! @material-ui/core/SvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js\"));\n\nfunction createSvgIcon(path, displayName) {\n  var Component = _react.default.memo(_react.default.forwardRef(function (props, ref) {\n    return _react.default.createElement(_SvgIcon.default, (0, _extends2.default)({\n      ref: ref\n    }, props), path);\n  }));\n\n  if (true) {\n    Component.displayName = \"\".concat(displayName, \"Icon\");\n  }\n\n  Component.muiName = _SvgIcon.default.muiName;\n  return Component;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/icons/utils/createSvgIcon.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/ServerStyleSheets.js":
/*!*************************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/ServerStyleSheets.js ***!
  \*************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ServerStyleSheets; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n/* harmony import */ var _StylesProvider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../StylesProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js\");\n/* harmony import */ var _createGenerateClassName__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../createGenerateClassName */ \"./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js\");\n\n\n\n\n\n\n\n\nvar ServerStyleSheets = /*#__PURE__*/function () {\n  function ServerStyleSheets() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    Object(_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, ServerStyleSheets);\n\n    this.options = options;\n  }\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(ServerStyleSheets, [{\n    key: \"collect\",\n    value: function collect(children) {\n      // This is needed in order to deduplicate the injection of CSS in the page.\n      var sheetsManager = new Map(); // This is needed in order to inject the critical CSS.\n\n      this.sheetsRegistry = new jss__WEBPACK_IMPORTED_MODULE_4__[\"SheetsRegistry\"](); // A new class name generator\n\n      var generateClassName = Object(_createGenerateClassName__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_StylesProvider__WEBPACK_IMPORTED_MODULE_5__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        sheetsManager: sheetsManager,\n        serverGenerateClassName: generateClassName,\n        sheetsRegistry: this.sheetsRegistry\n      }, this.options), children);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.sheetsRegistry ? this.sheetsRegistry.toString() : '';\n    }\n  }, {\n    key: \"getStyleElement\",\n    value: function getStyleElement(props) {\n      return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement('style', Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        id: 'jss-server-side',\n        key: 'jss-server-side',\n        dangerouslySetInnerHTML: {\n          __html: this.toString()\n        }\n      }, props));\n    }\n  }]);\n\n  return ServerStyleSheets;\n}();\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/ServerStyleSheets.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/index.js":
/*!*************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/index.js ***!
  \*************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ServerStyleSheets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ServerStyleSheets */ \"./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/ServerStyleSheets.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _ServerStyleSheets__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js":
/*!*******************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js ***!
  \*******************************************************************************************/
/*! exports provided: sheetsManager, StylesContext, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sheetsManager\", function() { return sheetsManager; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StylesContext\", function() { return StylesContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return StylesProvider; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _createGenerateClassName__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../createGenerateClassName */ \"./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js\");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n/* harmony import */ var _jssPreset__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../jssPreset */ \"./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js\");\n\n\n\n\n\n\n\n // Default JSS instance.\n\nvar jss = Object(jss__WEBPACK_IMPORTED_MODULE_6__[\"create\"])(Object(_jssPreset__WEBPACK_IMPORTED_MODULE_7__[\"default\"])()); // Use a singleton or the provided one by the context.\n//\n// The counter-based approach doesn't tolerate any mistake.\n// It's much safer to use the same counter everywhere.\n\nvar generateClassName = Object(_createGenerateClassName__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(); // Exported for test purposes\n\nvar sheetsManager = new Map();\nvar defaultOptions = {\n  disableGeneration: false,\n  generateClassName: generateClassName,\n  jss: jss,\n  sheetsCache: null,\n  sheetsManager: sheetsManager,\n  sheetsRegistry: null\n};\nvar StylesContext = react__WEBPACK_IMPORTED_MODULE_2___default.a.createContext(defaultOptions);\n\nif (true) {\n  StylesContext.displayName = 'StylesContext';\n}\n\nvar injectFirstNode;\nfunction StylesProvider(props) {\n  var children = props.children,\n      _props$injectFirst = props.injectFirst,\n      injectFirst = _props$injectFirst === void 0 ? false : _props$injectFirst,\n      _props$disableGenerat = props.disableGeneration,\n      disableGeneration = _props$disableGenerat === void 0 ? false : _props$disableGenerat,\n      localOptions = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"injectFirst\", \"disableGeneration\"]);\n\n  var outerOptions = react__WEBPACK_IMPORTED_MODULE_2___default.a.useContext(StylesContext);\n\n  var context = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, outerOptions), {}, {\n    disableGeneration: disableGeneration\n  }, localOptions);\n\n  if (true) {\n    if (typeof window === 'undefined' && !context.sheetsManager) {\n      console.error('Material-UI: You need to use the ServerStyleSheets API when rendering on the server.');\n    }\n  }\n\n  if (true) {\n    if (context.jss.options.insertionPoint && injectFirst) {\n      console.error('Material-UI: You cannot use a custom insertionPoint and <StylesContext injectFirst> at the same time.');\n    }\n  }\n\n  if (true) {\n    if (injectFirst && localOptions.jss) {\n      console.error('Material-UI: You cannot use the jss and injectFirst props at the same time.');\n    }\n  }\n\n  if (!context.jss.options.insertionPoint && injectFirst && typeof window !== 'undefined') {\n    if (!injectFirstNode) {\n      var head = document.head;\n      injectFirstNode = document.createComment('mui-inject-first');\n      head.insertBefore(injectFirstNode, head.firstChild);\n    }\n\n    context.jss = Object(jss__WEBPACK_IMPORTED_MODULE_6__[\"create\"])({\n      plugins: Object(_jssPreset__WEBPACK_IMPORTED_MODULE_7__[\"default\"])().plugins,\n      insertionPoint: injectFirstNode\n    });\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(StylesContext.Provider, {\n    value: context\n  }, children);\n}\n true ? StylesProvider.propTypes = {\n  /**\n   * Your component tree.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node.isRequired,\n\n  /**\n   * You can disable the generation of the styles with this option.\n   * It can be useful when traversing the React tree outside of the HTML\n   * rendering step on the server.\n   * Let's say you are using react-apollo to extract all\n   * the queries made by the interface server-side - you can significantly speed up the traversal with this prop.\n   */\n  disableGeneration: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * JSS's class name generator.\n   */\n  generateClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * By default, the styles are injected last in the <head> element of the page.\n   * As a result, they gain more specificity than any other style sheet.\n   * If you want to override Material-UI's styles, set this prop.\n   */\n  injectFirst: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * JSS's instance.\n   */\n  jss: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  serverGenerateClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   *\n   * Beta feature.\n   *\n   * Cache for the sheets.\n   */\n  sheetsCache: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   *\n   * The sheetsManager is used to deduplicate style sheet injection in the page.\n   * It's deduplicating using the (theme, styles) couple.\n   * On the server, you should provide a new instance for each request.\n   */\n  sheetsManager: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   *\n   * Collect the sheets.\n   */\n  sheetsRegistry: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object\n} : undefined;\n\nif (true) {\n   true ? StylesProvider.propTypes = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_4__[\"exactProp\"])(StylesProvider.propTypes) : undefined;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js ***!
  \**********************************************************************************/
/*! exports provided: default, sheetsManager, StylesContext */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _StylesProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./StylesProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sheetsManager\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_0__[\"sheetsManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesContext\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_0__[\"StylesContext\"]; });\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js":
/*!*****************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js ***!
  \*****************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _useTheme_ThemeContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../useTheme/ThemeContext */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js\");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n/* harmony import */ var _nested__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./nested */ \"./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js\");\n\n\n\n\n\n\n // To support composition of theme.\n\nfunction mergeOuterLocalTheme(outerTheme, localTheme) {\n  if (typeof localTheme === 'function') {\n    var mergedTheme = localTheme(outerTheme);\n\n    if (true) {\n      if (!mergedTheme) {\n        console.error(['Material-UI: You should return an object from your theme function, i.e.', '<ThemeProvider theme={() => ({})} />'].join('\\n'));\n      }\n    }\n\n    return mergedTheme;\n  }\n\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, outerTheme), localTheme);\n}\n/**\n * This component takes a `theme` prop.\n * It makes the `theme` available down the React tree thanks to React context.\n * This component should preferably be used at **the root of your component tree**.\n */\n\n\nfunction ThemeProvider(props) {\n  var children = props.children,\n      localTheme = props.theme;\n  var outerTheme = Object(_useTheme__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n\n  if (true) {\n    if (outerTheme === null && typeof localTheme === 'function') {\n      console.error(['Material-UI: You are providing a theme function prop to the ThemeProvider component:', '<ThemeProvider theme={outerTheme => outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n'));\n    }\n  }\n\n  var theme = react__WEBPACK_IMPORTED_MODULE_1___default.a.useMemo(function () {\n    var output = outerTheme === null ? localTheme : mergeOuterLocalTheme(outerTheme, localTheme);\n\n    if (output != null) {\n      output[_nested__WEBPACK_IMPORTED_MODULE_6__[\"default\"]] = outerTheme !== null;\n    }\n\n    return output;\n  }, [localTheme, outerTheme]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_useTheme_ThemeContext__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Provider, {\n    value: theme\n  }, children);\n}\n\n true ? ThemeProvider.propTypes = {\n  /**\n   * Your component tree.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node.isRequired,\n\n  /**\n   * A theme object. You can provide a function to extend the outer theme.\n   */\n  theme: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func]).isRequired\n} : undefined;\n\nif (true) {\n   true ? ThemeProvider.propTypes = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_3__[\"exactProp\"])(ThemeProvider.propTypes) : undefined;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ThemeProvider);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/index.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/index.js ***!
  \*********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ThemeProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ThemeProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _ThemeProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\n/* harmony default export */ __webpack_exports__[\"default\"] = (hasSymbol ? Symbol.for('mui.nested') : '__THEME_NESTED__');\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js":
/*!*************************************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js ***!
  \*************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createGenerateClassName; });\n/* harmony import */ var _ThemeProvider_nested__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ThemeProvider/nested */ \"./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js\");\n\n/**\n * This is the list of the style rule name we use as drop in replacement for the built-in\n * pseudo classes (:checked, :disabled, :focused, etc.).\n *\n * Why do they exist in the first place?\n * These classes are used at a specificity of 2.\n * It allows them to override previously definied styles as well as\n * being untouched by simple user overrides.\n */\n\nvar pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected']; // Returns a function which generates unique class names based on counters.\n// When new generator function is created, rule counter is reset.\n// We need to reset the rule counter for SSR for each request.\n//\n// It's inspired by\n// https://github.com/cssinjs/jss/blob/4e6a05dd3f7b6572fdd3ab216861d9e446c20331/src/utils/createGenerateClassName.js\n\nfunction createGenerateClassName() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _options$disableGloba = options.disableGlobal,\n      disableGlobal = _options$disableGloba === void 0 ? false : _options$disableGloba,\n      _options$productionPr = options.productionPrefix,\n      productionPrefix = _options$productionPr === void 0 ? 'jss' : _options$productionPr,\n      _options$seed = options.seed,\n      seed = _options$seed === void 0 ? '' : _options$seed;\n  var seedPrefix = seed === '' ? '' : \"\".concat(seed, \"-\");\n  var ruleCounter = 0;\n\n  var getNextCounterId = function getNextCounterId() {\n    ruleCounter += 1;\n\n    if (true) {\n      if (ruleCounter >= 1e10) {\n        console.warn(['Material-UI: You might have a memory leak.', 'The ruleCounter is not supposed to grow that much.'].join(''));\n      }\n    }\n\n    return ruleCounter;\n  };\n\n  return function (rule, styleSheet) {\n    var name = styleSheet.options.name; // Is a global static MUI style?\n\n    if (name && name.indexOf('Mui') === 0 && !styleSheet.options.link && !disableGlobal) {\n      // We can use a shorthand class name, we never use the keys to style the components.\n      if (pseudoClasses.indexOf(rule.key) !== -1) {\n        return \"Mui-\".concat(rule.key);\n      }\n\n      var prefix = \"\".concat(seedPrefix).concat(name, \"-\").concat(rule.key);\n\n      if (!styleSheet.options.theme[_ThemeProvider_nested__WEBPACK_IMPORTED_MODULE_0__[\"default\"]] || seed !== '') {\n        return prefix;\n      }\n\n      return \"\".concat(prefix, \"-\").concat(getNextCounterId());\n    }\n\n    if (false) {}\n\n    var suffix = \"\".concat(rule.key, \"-\").concat(getNextCounterId()); // Help with debuggability.\n\n    if (styleSheet.options.classNamePrefix) {\n      return \"\".concat(seedPrefix).concat(styleSheet.options.classNamePrefix, \"-\").concat(suffix);\n    }\n\n    return \"\".concat(seedPrefix).concat(suffix);\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js":
/*!*******************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js ***!
  \*******************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _createGenerateClassName__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createGenerateClassName */ \"./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _createGenerateClassName__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/createStyles/createStyles.js":
/*!***************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/createStyles/createStyles.js ***!
  \***************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createStyles; });\nfunction createStyles(styles) {\n  return styles;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/createStyles/createStyles.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/createStyles/index.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/createStyles/index.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _createStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/createStyles/createStyles.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _createStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/createStyles/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js":
/*!***********************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js ***!
  \***********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getStylesCreator; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _noopTheme__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./noopTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js\");\n\n\n\n\nfunction getStylesCreator(stylesOrCreator) {\n  var themingEnabled = typeof stylesOrCreator === 'function';\n\n  if (true) {\n    if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(stylesOrCreator) !== 'object' && !themingEnabled) {\n      console.error(['Material-UI: The `styles` argument provided is invalid.', 'You need to provide a function generating the styles or a styles object.'].join('\\n'));\n    }\n  }\n\n  return {\n    create: function create(theme, name) {\n      var styles;\n\n      try {\n        styles = themingEnabled ? stylesOrCreator(theme) : stylesOrCreator;\n      } catch (err) {\n        if (true) {\n          if (themingEnabled === true && theme === _noopTheme__WEBPACK_IMPORTED_MODULE_3__[\"default\"]) {\n            // TODO: prepend error message/name instead\n            console.error(['Material-UI: The `styles` argument provided is invalid.', 'You are providing a function without a theme in the context.', 'One of the parent elements needs to use a ThemeProvider.'].join('\\n'));\n          }\n        }\n\n        throw err;\n      }\n\n      if (!name || !theme.overrides || !theme.overrides[name]) {\n        return styles;\n      }\n\n      var overrides = theme.overrides[name];\n\n      var stylesWithOverrides = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, styles);\n\n      Object.keys(overrides).forEach(function (key) {\n        if (true) {\n          if (!stylesWithOverrides[key]) {\n            console.warn(['Material-UI: You are trying to override a style that does not exist.', \"Fix the `\".concat(key, \"` key of `theme.overrides.\").concat(name, \"`.\")].join('\\n'));\n          }\n        }\n\n        stylesWithOverrides[key] = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])(stylesWithOverrides[key], overrides[key]);\n      });\n      return stylesWithOverrides;\n    },\n    options: {}\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/index.js":
/*!************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/index.js ***!
  \************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getStylesCreator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getStylesCreator */ \"./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _getStylesCreator__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js":
/*!****************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js ***!
  \****************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// We use the same empty object to ref count the styles that don't need a theme object.\nvar noopTheme = {};\n/* harmony default export */ __webpack_exports__[\"default\"] = (noopTheme);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js":
/*!*****************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js ***!
  \*****************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getThemeProps; });\n/* eslint-disable no-restricted-syntax */\nfunction getThemeProps(params) {\n  var theme = params.theme,\n      name = params.name,\n      props = params.props;\n\n  if (!theme || !theme.props || !theme.props[name]) {\n    return props;\n  } // Resolve default props, code borrow from React source.\n  // https://github.com/facebook/react/blob/15a8f031838a553e41c0b66eb1bcf1da8448104d/packages/react/src/ReactElement.js#L221\n\n\n  var defaultProps = theme.props[name];\n  var propName;\n\n  for (propName in defaultProps) {\n    if (props[propName] === undefined) {\n      props[propName] = defaultProps[propName];\n    }\n  }\n\n  return props;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js ***!
  \*********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getThemeProps__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getThemeProps */ \"./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _getThemeProps__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/index.js":
/*!*******************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/index.js ***!
  \*******************************************************************/
/*! exports provided: createGenerateClassName, createStyles, getThemeProps, jssPreset, makeStyles, mergeClasses, ServerStyleSheets, styled, StylesProvider, sheetsManager, StylesContext, ThemeProvider, useTheme, withStyles, withTheme, withThemeCreator */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _createGenerateClassName__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createGenerateClassName */ \"./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createGenerateClassName\", function() { return _createGenerateClassName__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _createStyles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/createStyles/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createStyles\", function() { return _createStyles__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _getThemeProps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getThemeProps */ \"./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getThemeProps\", function() { return _getThemeProps__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _jssPreset__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./jssPreset */ \"./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"jssPreset\", function() { return _jssPreset__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _makeStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./makeStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"makeStyles\", function() { return _makeStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _mergeClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./mergeClasses */ \"./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"mergeClasses\", function() { return _mergeClasses__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _ServerStyleSheets__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ServerStyleSheets */ \"./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ServerStyleSheets\", function() { return _ServerStyleSheets__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _styled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styled */ \"./jaas-client/node_modules/@material-ui/styles/esm/styled/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"styled\", function() { return _styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _StylesProvider__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./StylesProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesProvider\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sheetsManager\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_9__[\"sheetsManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesContext\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_9__[\"StylesContext\"]; });\n\n/* harmony import */ var _ThemeProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ThemeProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ThemeProvider\", function() { return _ThemeProvider__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useTheme\", function() { return _useTheme__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _withStyles__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./withStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/withStyles/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withStyles\", function() { return _withStyles__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _withTheme__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./withTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/withTheme/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withTheme\", function() { return _withTheme__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withThemeCreator\", function() { return _withTheme__WEBPACK_IMPORTED_MODULE_13__[\"withThemeCreator\"]; });\n\n/** @license Material-UI v4.10.0\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/* eslint-disable import/export */\n\n/* Warning if there are several instances of @material-ui/styles */\n\nif ( true && typeof window !== 'undefined') {\n  _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"ponyfillGlobal\"]['__@material-ui/styles-init__'] = _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"ponyfillGlobal\"]['__@material-ui/styles-init__'] || 0;\n\n  if (_material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"ponyfillGlobal\"]['__@material-ui/styles-init__'] === 1) {\n    console.warn(['It looks like there are several instances of `@material-ui/styles` initialized in this application.', 'This may cause theme propagation issues, broken class names, ' + 'specificity issues, and makes your application bigger without a good reason.', '', 'See https://material-ui.com/r/styles-instance-warning for more info.'].join('\\n'));\n  }\n\n  _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"ponyfillGlobal\"]['__@material-ui/styles-init__'] += 1;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js ***!
  \*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _jssPreset__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jssPreset */ \"./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _jssPreset__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js ***!
  \*********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return jssPreset; });\n/* harmony import */ var jss_plugin_rule_value_function__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jss-plugin-rule-value-function */ \"./jaas-client/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js\");\n/* harmony import */ var jss_plugin_global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jss-plugin-global */ \"./jaas-client/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js\");\n/* harmony import */ var jss_plugin_nested__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jss-plugin-nested */ \"./jaas-client/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js\");\n/* harmony import */ var jss_plugin_camel_case__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jss-plugin-camel-case */ \"./jaas-client/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js\");\n/* harmony import */ var jss_plugin_default_unit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! jss-plugin-default-unit */ \"./jaas-client/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js\");\n/* harmony import */ var jss_plugin_vendor_prefixer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! jss-plugin-vendor-prefixer */ \"./jaas-client/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js\");\n/* harmony import */ var jss_plugin_props_sort__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! jss-plugin-props-sort */ \"./jaas-client/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js\");\n\n\n\n\n\n\n // Subset of jss-preset-default with only the plugins the Material-UI components are using.\n\nfunction jssPreset() {\n  return {\n    plugins: [Object(jss_plugin_rule_value_function__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(), Object(jss_plugin_global__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(), Object(jss_plugin_nested__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(), Object(jss_plugin_camel_case__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(), Object(jss_plugin_default_unit__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(), // Disable the vendor prefixer server-side, it does nothing.\n    // This way, we can get a performance boost.\n    // In the documentation, we are using `autoprefixer` to solve this problem.\n    typeof window === 'undefined' ? null : Object(jss_plugin_vendor_prefixer__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(), Object(jss_plugin_props_sort__WEBPACK_IMPORTED_MODULE_6__[\"default\"])()]\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js ***!
  \******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _makeStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./makeStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _makeStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js":
/*!*************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js ***!
  \*************************************************************************************/
/*! exports provided: increment */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"increment\", function() { return increment; });\n/* eslint-disable import/prefer-default-export */\n// Global index counter to preserve source order.\n// We create the style sheet during the creation of the component,\n// children are handled after the parents, so the order of style elements would be parent->child.\n// It is a problem though when a parent passes a className\n// which needs to override any child's styles.\n// StyleSheet of the child has a higher specificity, because of the source order.\n// So our solution is to render sheets them in the reverse order child->sheet, so\n// that parent has a higher specificity.\nvar indexCounter = -1e9;\nfunction increment() {\n  indexCounter += 1;\n\n  if (true) {\n    if (indexCounter >= 0) {\n      console.warn(['Material-UI: You might have a memory leak.', 'The indexCounter is not supposed to grow that much.'].join('\\n'));\n    }\n  }\n\n  return indexCounter;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js ***!
  \***********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return makeStyles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n/* harmony import */ var _mergeClasses__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../mergeClasses */ \"./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js\");\n/* harmony import */ var _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./multiKeyStore */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js\");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n/* harmony import */ var _StylesProvider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../StylesProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js\");\n/* harmony import */ var _indexCounter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./indexCounter */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js\");\n/* harmony import */ var _getStylesCreator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../getStylesCreator */ \"./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/index.js\");\n/* harmony import */ var _getStylesCreator_noopTheme__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../getStylesCreator/noopTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getClasses(_ref, classes, Component) {\n  var state = _ref.state,\n      stylesOptions = _ref.stylesOptions;\n\n  if (stylesOptions.disableGeneration) {\n    return classes || {};\n  }\n\n  if (!state.cacheClasses) {\n    state.cacheClasses = {\n      // Cache for the finalized classes value.\n      value: null,\n      // Cache for the last used classes prop pointer.\n      lastProp: null,\n      // Cache for the last used rendered classes pointer.\n      lastJSS: {}\n    };\n  } // Tracks if either the rendered classes or classes prop has changed,\n  // requiring the generation of a new finalized classes object.\n\n\n  var generate = false;\n\n  if (state.classes !== state.cacheClasses.lastJSS) {\n    state.cacheClasses.lastJSS = state.classes;\n    generate = true;\n  }\n\n  if (classes !== state.cacheClasses.lastProp) {\n    state.cacheClasses.lastProp = classes;\n    generate = true;\n  }\n\n  if (generate) {\n    state.cacheClasses.value = Object(_mergeClasses__WEBPACK_IMPORTED_MODULE_4__[\"default\"])({\n      baseClasses: state.cacheClasses.lastJSS,\n      newClasses: classes,\n      Component: Component\n    });\n  }\n\n  return state.cacheClasses.value;\n}\n\nfunction attach(_ref2, props) {\n  var state = _ref2.state,\n      theme = _ref2.theme,\n      stylesOptions = _ref2.stylesOptions,\n      stylesCreator = _ref2.stylesCreator,\n      name = _ref2.name;\n\n  if (stylesOptions.disableGeneration) {\n    return;\n  }\n\n  var sheetManager = _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].get(stylesOptions.sheetsManager, stylesCreator, theme);\n\n  if (!sheetManager) {\n    sheetManager = {\n      refs: 0,\n      staticSheet: null,\n      dynamicStyles: null\n    };\n    _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].set(stylesOptions.sheetsManager, stylesCreator, theme, sheetManager);\n  }\n\n  var options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, stylesCreator.options), stylesOptions), {}, {\n    theme: theme,\n    flip: typeof stylesOptions.flip === 'boolean' ? stylesOptions.flip : theme.direction === 'rtl'\n  });\n\n  options.generateId = options.serverGenerateClassName || options.generateClassName;\n  var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n  if (sheetManager.refs === 0) {\n    var staticSheet;\n\n    if (stylesOptions.sheetsCache) {\n      staticSheet = _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].get(stylesOptions.sheetsCache, stylesCreator, theme);\n    }\n\n    var styles = stylesCreator.create(theme, name);\n\n    if (!staticSheet) {\n      staticSheet = stylesOptions.jss.createStyleSheet(styles, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        link: false\n      }, options));\n      staticSheet.attach();\n\n      if (stylesOptions.sheetsCache) {\n        _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].set(stylesOptions.sheetsCache, stylesCreator, theme, staticSheet);\n      }\n    }\n\n    if (sheetsRegistry) {\n      sheetsRegistry.add(staticSheet);\n    }\n\n    sheetManager.staticSheet = staticSheet;\n    sheetManager.dynamicStyles = Object(jss__WEBPACK_IMPORTED_MODULE_3__[\"getDynamicStyles\"])(styles);\n  }\n\n  if (sheetManager.dynamicStyles) {\n    var dynamicSheet = stylesOptions.jss.createStyleSheet(sheetManager.dynamicStyles, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      link: true\n    }, options));\n    dynamicSheet.update(props);\n    dynamicSheet.attach();\n    state.dynamicSheet = dynamicSheet;\n    state.classes = Object(_mergeClasses__WEBPACK_IMPORTED_MODULE_4__[\"default\"])({\n      baseClasses: sheetManager.staticSheet.classes,\n      newClasses: dynamicSheet.classes\n    });\n\n    if (sheetsRegistry) {\n      sheetsRegistry.add(dynamicSheet);\n    }\n  } else {\n    state.classes = sheetManager.staticSheet.classes;\n  }\n\n  sheetManager.refs += 1;\n}\n\nfunction update(_ref3, props) {\n  var state = _ref3.state;\n\n  if (state.dynamicSheet) {\n    state.dynamicSheet.update(props);\n  }\n}\n\nfunction detach(_ref4) {\n  var state = _ref4.state,\n      theme = _ref4.theme,\n      stylesOptions = _ref4.stylesOptions,\n      stylesCreator = _ref4.stylesCreator;\n\n  if (stylesOptions.disableGeneration) {\n    return;\n  }\n\n  var sheetManager = _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].get(stylesOptions.sheetsManager, stylesCreator, theme);\n  sheetManager.refs -= 1;\n  var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n  if (sheetManager.refs === 0) {\n    _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].delete(stylesOptions.sheetsManager, stylesCreator, theme);\n    stylesOptions.jss.removeStyleSheet(sheetManager.staticSheet);\n\n    if (sheetsRegistry) {\n      sheetsRegistry.remove(sheetManager.staticSheet);\n    }\n  }\n\n  if (state.dynamicSheet) {\n    stylesOptions.jss.removeStyleSheet(state.dynamicSheet);\n\n    if (sheetsRegistry) {\n      sheetsRegistry.remove(state.dynamicSheet);\n    }\n  }\n}\n\nfunction useSynchronousEffect(func, values) {\n  var key = react__WEBPACK_IMPORTED_MODULE_2___default.a.useRef([]);\n  var output; // Store \"generation\" key. Just returns a new object every time\n\n  var currentKey = react__WEBPACK_IMPORTED_MODULE_2___default.a.useMemo(function () {\n    return {};\n  }, values); // eslint-disable-line react-hooks/exhaustive-deps\n  // \"the first render\", or \"memo dropped the value\"\n\n  if (key.current !== currentKey) {\n    key.current = currentKey;\n    output = func();\n  }\n\n  react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n    return function () {\n      if (output) {\n        output();\n      }\n    };\n  }, [currentKey] // eslint-disable-line react-hooks/exhaustive-deps\n  );\n}\n\nfunction makeStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var name = options.name,\n      classNamePrefixOption = options.classNamePrefix,\n      Component = options.Component,\n      _options$defaultTheme = options.defaultTheme,\n      defaultTheme = _options$defaultTheme === void 0 ? _getStylesCreator_noopTheme__WEBPACK_IMPORTED_MODULE_10__[\"default\"] : _options$defaultTheme,\n      stylesOptions2 = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(options, [\"name\", \"classNamePrefix\", \"Component\", \"defaultTheme\"]);\n\n  var stylesCreator = Object(_getStylesCreator__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(stylesOrCreator);\n  var classNamePrefix = name || classNamePrefixOption || 'makeStyles';\n  stylesCreator.options = {\n    index: Object(_indexCounter__WEBPACK_IMPORTED_MODULE_8__[\"increment\"])(),\n    name: name,\n    meta: classNamePrefix,\n    classNamePrefix: classNamePrefix\n  };\n\n  var useStyles = function useStyles() {\n    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var theme = Object(_useTheme__WEBPACK_IMPORTED_MODULE_6__[\"default\"])() || defaultTheme;\n\n    var stylesOptions = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, react__WEBPACK_IMPORTED_MODULE_2___default.a.useContext(_StylesProvider__WEBPACK_IMPORTED_MODULE_7__[\"StylesContext\"])), stylesOptions2);\n\n    var instance = react__WEBPACK_IMPORTED_MODULE_2___default.a.useRef();\n    var shouldUpdate = react__WEBPACK_IMPORTED_MODULE_2___default.a.useRef();\n    useSynchronousEffect(function () {\n      var current = {\n        name: name,\n        state: {},\n        stylesCreator: stylesCreator,\n        stylesOptions: stylesOptions,\n        theme: theme\n      };\n      attach(current, props);\n      shouldUpdate.current = false;\n      instance.current = current;\n      return function () {\n        detach(current);\n      };\n    }, [theme, stylesCreator]);\n    react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n      if (shouldUpdate.current) {\n        update(instance.current, props);\n      }\n\n      shouldUpdate.current = true;\n    });\n    var classes = getClasses(instance.current, props.classes, Component);\n\n    if (true) {\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      react__WEBPACK_IMPORTED_MODULE_2___default.a.useDebugValue(classes);\n    }\n\n    return classes;\n  };\n\n  return useStyles;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js":
/*!**************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js ***!
  \**************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// Used https://github.com/thinkloop/multi-key-cache as inspiration\nvar multiKeyStore = {\n  set: function set(cache, key1, key2, value) {\n    var subCache = cache.get(key1);\n\n    if (!subCache) {\n      subCache = new Map();\n      cache.set(key1, subCache);\n    }\n\n    subCache.set(key2, value);\n  },\n  get: function get(cache, key1, key2) {\n    var subCache = cache.get(key1);\n    return subCache ? subCache.get(key2) : undefined;\n  },\n  delete: function _delete(cache, key1, key2) {\n    var subCache = cache.get(key1);\n    subCache.delete(key2);\n  }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (multiKeyStore);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mergeClasses__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mergeClasses */ \"./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _mergeClasses__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js":
/*!***************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js ***!
  \***************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return mergeClasses; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\nfunction mergeClasses() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var baseClasses = options.baseClasses,\n      newClasses = options.newClasses,\n      Component = options.Component;\n\n  if (!newClasses) {\n    return baseClasses;\n  }\n\n  var nextClasses = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, baseClasses);\n\n  if (true) {\n    if (typeof newClasses === 'string') {\n      console.error([\"Material-UI: The value `\".concat(newClasses, \"` \") + \"provided to the classes prop of \".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_1__[\"getDisplayName\"])(Component), \" is incorrect.\"), 'You might want to use the className prop instead.'].join('\\n'));\n      return baseClasses;\n    }\n  }\n\n  Object.keys(newClasses).forEach(function (key) {\n    if (true) {\n      if (!baseClasses[key] && newClasses[key]) {\n        console.error([\"Material-UI: The key `\".concat(key, \"` \") + \"provided to the classes prop is not implemented in \".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_1__[\"getDisplayName\"])(Component), \".\"), \"You can only override one of the following: \".concat(Object.keys(baseClasses).join(','), \".\")].join('\\n'));\n      }\n\n      if (newClasses[key] && typeof newClasses[key] !== 'string') {\n        console.error([\"Material-UI: The key `\".concat(key, \"` \") + \"provided to the classes prop is not valid for \".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_1__[\"getDisplayName\"])(Component), \".\"), \"You need to provide a non empty string instead of: \".concat(newClasses[key], \".\")].join('\\n'));\n      }\n    }\n\n    if (newClasses[key]) {\n      nextClasses[key] = \"\".concat(baseClasses[key], \" \").concat(newClasses[key]);\n    }\n  });\n  return nextClasses;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/styled/index.js":
/*!**************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/styled/index.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _styled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./styled */ \"./jaas-client/node_modules/@material-ui/styles/esm/styled/styled.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _styled__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/styled/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/styled/styled.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/styled/styled.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return styled; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! hoist-non-react-statics */ \"./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _makeStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../makeStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js\");\n\n\n\n\n\n\n\n\n\nfunction omit(input, fields) {\n  var output = {};\n  Object.keys(input).forEach(function (prop) {\n    if (fields.indexOf(prop) === -1) {\n      output[prop] = input[prop];\n    }\n  });\n  return output;\n} // styled-components's API removes the mapping between components and styles.\n// Using components as a low-level styling construct can be simpler.\n\n\nfunction styled(Component) {\n  var componentCreator = function componentCreator(style) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var name = options.name,\n        stylesOptions = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(options, [\"name\"]);\n\n    if ( true && Component === undefined) {\n      throw new Error(['You are calling styled(Component)(style) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n    }\n\n    var classNamePrefix = name;\n\n    if (true) {\n      if (!name) {\n        // Provide a better DX outside production.\n        var displayName = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"getDisplayName\"])(Component);\n\n        if (displayName !== undefined) {\n          classNamePrefix = displayName;\n        }\n      }\n    }\n\n    var stylesOrCreator = typeof style === 'function' ? function (theme) {\n      return {\n        root: function root(props) {\n          return style(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n            theme: theme\n          }, props));\n        }\n      };\n    } : {\n      root: style\n    };\n    var useStyles = Object(_makeStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(stylesOrCreator, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      Component: Component,\n      name: name || Component.displayName,\n      classNamePrefix: classNamePrefix\n    }, stylesOptions));\n    var filterProps;\n    var propTypes = {};\n\n    if (style.filterProps) {\n      filterProps = style.filterProps;\n      delete style.filterProps;\n    }\n    /* eslint-disable react/forbid-foreign-prop-types */\n\n\n    if (style.propTypes) {\n      propTypes = style.propTypes;\n      delete style.propTypes;\n    }\n    /* eslint-enable react/forbid-foreign-prop-types */\n\n\n    var StyledComponent = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef(function StyledComponent(props, ref) {\n      var children = props.children,\n          classNameProp = props.className,\n          clone = props.clone,\n          ComponentProp = props.component,\n          other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"className\", \"clone\", \"component\"]);\n\n      var classes = useStyles(props);\n      var className = Object(clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.root, classNameProp);\n      var spread = other;\n\n      if (filterProps) {\n        spread = omit(spread, filterProps);\n      }\n\n      if (clone) {\n        return react__WEBPACK_IMPORTED_MODULE_2___default.a.cloneElement(children, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n          className: Object(clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(children.props.className, className)\n        }, spread));\n      }\n\n      if (typeof children === 'function') {\n        return children(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n          className: className\n        }, spread));\n      }\n\n      var FinalComponent = ComponentProp || Component;\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(FinalComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        ref: ref,\n        className: className\n      }, spread), children);\n    });\n     true ? StyledComponent.propTypes = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      /**\n       * A render function or node.\n       */\n      children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func]),\n\n      /**\n       * @ignore\n       */\n      className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n      /**\n       * If `true`, the component will recycle it's children HTML element.\n       * It's using `React.cloneElement` internally.\n       *\n       * This prop will be deprecated and removed in v5\n       */\n      clone: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, function (props) {\n        if (props.clone && props.component) {\n          return new Error('You can not use the clone and component prop at the same time.');\n        }\n\n        return null;\n      }),\n\n      /**\n       * The component used for the root node.\n       * Either a string to use a HTML element or a component.\n       */\n      component: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType\n    }, propTypes) : undefined;\n\n    if (true) {\n      StyledComponent.displayName = \"Styled(\".concat(classNamePrefix, \")\");\n    }\n\n    hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_6___default()(StyledComponent, Component);\n    return StyledComponent;\n  };\n\n  return componentCreator;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/styled/styled.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js ***!
  \***********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nvar ThemeContext = react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null);\n\nif (true) {\n  ThemeContext.displayName = 'ThemeContext';\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ThemeContext);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/useTheme.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _useTheme__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/useTheme/useTheme.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/useTheme/useTheme.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useTheme; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ThemeContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ThemeContext */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js\");\n\n\nfunction useTheme() {\n  var theme = react__WEBPACK_IMPORTED_MODULE_0___default.a.useContext(_ThemeContext__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_0___default.a.useDebugValue(theme);\n  }\n\n  return theme;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/useTheme/useTheme.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/withStyles/index.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/withStyles/index.js ***!
  \******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _withStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./withStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/withStyles/withStyles.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _withStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/withStyles/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/withStyles/withStyles.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/withStyles/withStyles.js ***!
  \***********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! hoist-non-react-statics */ \"./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _makeStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../makeStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js\");\n/* harmony import */ var _getThemeProps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../getThemeProps */ \"./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js\");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n\n\n\n\n\n\n\n\n // Link a style sheet with a component.\n// It does not modify the component passed to it;\n// instead, it returns a new component, with a `classes` property.\n\nvar withStyles = function withStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return function (Component) {\n    var defaultTheme = options.defaultTheme,\n        _options$withTheme = options.withTheme,\n        withTheme = _options$withTheme === void 0 ? false : _options$withTheme,\n        name = options.name,\n        stylesOptions = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(options, [\"defaultTheme\", \"withTheme\", \"name\"]);\n\n    if (true) {\n      if (Component === undefined) {\n        throw new Error(['You are calling withStyles(styles)(Component) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n      }\n    }\n\n    var classNamePrefix = name;\n\n    if (true) {\n      if (!name) {\n        // Provide a better DX outside production.\n        var displayName = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"getDisplayName\"])(Component);\n\n        if (displayName !== undefined) {\n          classNamePrefix = displayName;\n        }\n      }\n    }\n\n    var useStyles = Object(_makeStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(stylesOrCreator, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      defaultTheme: defaultTheme,\n      Component: Component,\n      name: name || Component.displayName,\n      classNamePrefix: classNamePrefix\n    }, stylesOptions));\n    var WithStyles = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef(function WithStyles(props, ref) {\n      var classesProp = props.classes,\n          innerRef = props.innerRef,\n          other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"innerRef\"]); // The wrapper receives only user supplied props, which could be a subset of\n      // the actual props Component might receive due to merging with defaultProps.\n      // So copying it here would give us the same result in the wrapper as well.\n\n\n      var classes = useStyles(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, Component.defaultProps), props));\n      var theme;\n      var more = other;\n\n      if (typeof name === 'string' || withTheme) {\n        // name and withTheme are invariant in the outer scope\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        theme = Object(_useTheme__WEBPACK_IMPORTED_MODULE_8__[\"default\"])() || defaultTheme;\n\n        if (name) {\n          more = Object(_getThemeProps__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({\n            theme: theme,\n            name: name,\n            props: other\n          });\n        } // Provide the theme to the wrapped component.\n        // So we don't have to use the `withTheme()` Higher-order Component.\n\n\n        if (withTheme && !more.theme) {\n          more.theme = theme;\n        }\n      }\n\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        ref: innerRef || ref,\n        classes: classes\n      }, more));\n    });\n     true ? WithStyles.propTypes = {\n      /**\n       * Override or extend the styles applied to the component.\n       */\n      classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n      /**\n       * Use that prop to pass a ref to the decorated component.\n       * @deprecated\n       */\n      innerRef: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object]), function (props) {\n        if (props.innerRef == null) {\n          return null;\n        }\n\n        return null; // return new Error(\n        //   'Material-UI: The `innerRef` prop is deprecated and will be removed in v5. ' +\n        //     'Refs are now automatically forwarded to the inner component.',\n        // );\n      })\n    } : undefined;\n\n    if (true) {\n      WithStyles.displayName = \"WithStyles(\".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"getDisplayName\"])(Component), \")\");\n    }\n\n    hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default()(WithStyles, Component);\n\n    if (true) {\n      // Exposed for test purposes.\n      WithStyles.Naked = Component;\n      WithStyles.options = options;\n      WithStyles.useStyles = useStyles;\n    }\n\n    return WithStyles;\n  };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (withStyles);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/withStyles/withStyles.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/withTheme/index.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/withTheme/index.js ***!
  \*****************************************************************************/
/*! exports provided: default, withThemeCreator */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _withTheme__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./withTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/withTheme/withTheme.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _withTheme__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withThemeCreator\", function() { return _withTheme__WEBPACK_IMPORTED_MODULE_0__[\"withThemeCreator\"]; });\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/withTheme/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/styles/esm/withTheme/withTheme.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/styles/esm/withTheme/withTheme.js ***!
  \*********************************************************************************/
/*! exports provided: withThemeCreator, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"withThemeCreator\", function() { return withThemeCreator; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! hoist-non-react-statics */ \"./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n\n\n\n\n\n\n\nfunction withThemeCreator() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var defaultTheme = options.defaultTheme;\n\n  var withTheme = function withTheme(Component) {\n    if (true) {\n      if (Component === undefined) {\n        throw new Error(['You are calling withTheme(Component) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n      }\n    }\n\n    var WithTheme = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef(function WithTheme(props, ref) {\n      var innerRef = props.innerRef,\n          other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"innerRef\"]);\n\n      var theme = Object(_useTheme__WEBPACK_IMPORTED_MODULE_6__[\"default\"])() || defaultTheme;\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        theme: theme,\n        ref: innerRef || ref\n      }, other));\n    });\n     true ? WithTheme.propTypes = {\n      /**\n       * Use that prop to pass a ref to the decorated component.\n       * @deprecated\n       */\n      innerRef: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object]), function (props) {\n        if (props.innerRef == null) {\n          return null;\n        }\n\n        return new Error('Material-UI: The `innerRef` prop is deprecated and will be removed in v5. ' + 'Refs are now automatically forwarded to the inner component.');\n      })\n    } : undefined;\n\n    if (true) {\n      WithTheme.displayName = \"WithTheme(\".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"getDisplayName\"])(Component), \")\");\n    }\n\n    hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default()(WithTheme, Component);\n\n    if (true) {\n      // Exposed for test purposes.\n      WithTheme.Naked = Component;\n    }\n\n    return WithTheme;\n  };\n\n  return withTheme;\n} // Provide the theme object as a prop to the input component.\n// It's an alternative API to useTheme().\n// We encourage the usage of useTheme() where possible.\n\nvar withTheme = withThemeCreator();\n/* harmony default export */ __webpack_exports__[\"default\"] = (withTheme);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/withTheme/withTheme.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/borders.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/borders.js ***!
  \*********************************************************************/
/*! exports provided: border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderRadius, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"border\", function() { return border; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderTop\", function() { return borderTop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderRight\", function() { return borderRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderBottom\", function() { return borderBottom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderLeft\", function() { return borderLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderColor\", function() { return borderColor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderRadius\", function() { return borderRadius; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\n\nfunction getBorder(value) {\n  if (typeof value !== 'number') {\n    return value;\n  }\n\n  return \"\".concat(value, \"px solid\");\n}\n\nvar border = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'border',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderTop = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderTop',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderRight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderRight',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderBottom = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderBottom',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderLeft = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderLeft',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderColor = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderColor',\n  themeKey: 'palette'\n});\nvar borderRadius = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderRadius',\n  themeKey: 'shape'\n});\nvar borders = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderRadius);\n/* harmony default export */ __webpack_exports__[\"default\"] = (borders);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/borders.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js ***!
  \*************************************************************************/
/*! exports provided: handleBreakpoints, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"handleBreakpoints\", function() { return handleBreakpoints; });\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./merge */ \"./jaas-client/node_modules/@material-ui/system/esm/merge.js\");\n\n\n\n\n // The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\n\nvar values = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1280,\n  xl: 1920\n};\nvar defaultBreakpoints = {\n  // Sorted ASC by size. That's important.\n  // It can't be configured as it's used statically for propTypes.\n  keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n  up: function up(key) {\n    return \"@media (min-width:\".concat(values[key], \"px)\");\n  }\n};\nfunction handleBreakpoints(props, propValue, styleFromPropValue) {\n  if (true) {\n    if (!props.theme) {\n      console.error('Material-UI: You are calling a style function without a theme value.');\n    }\n  }\n\n  if (Array.isArray(propValue)) {\n    var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n    return propValue.reduce(function (acc, item, index) {\n      acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n      return acc;\n    }, {});\n  }\n\n  if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(propValue) === 'object') {\n    var _themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n\n    return Object.keys(propValue).reduce(function (acc, breakpoint) {\n      acc[_themeBreakpoints.up(breakpoint)] = styleFromPropValue(propValue[breakpoint]);\n      return acc;\n    }, {});\n  }\n\n  var output = styleFromPropValue(propValue);\n  return output;\n}\n\nfunction breakpoints(styleFunction) {\n  var newStyleFunction = function newStyleFunction(props) {\n    var base = styleFunction(props);\n    var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n    var extended = themeBreakpoints.keys.reduce(function (acc, key) {\n      if (props[key]) {\n        acc = acc || {};\n        acc[themeBreakpoints.up(key)] = styleFunction(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n          theme: props.theme\n        }, props[key]));\n      }\n\n      return acc;\n    }, null);\n    return Object(_merge__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(base, extended);\n  };\n\n  newStyleFunction.propTypes =  true ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, styleFunction.propTypes), {}, {\n    xs: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n    sm: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n    md: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n    lg: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n    xl: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object\n  }) : undefined;\n  newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl'].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(styleFunction.filterProps));\n  return newStyleFunction;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (breakpoints);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/compose.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/compose.js ***!
  \*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./merge */ \"./jaas-client/node_modules/@material-ui/system/esm/merge.js\");\n\n\n\nfunction compose() {\n  for (var _len = arguments.length, styles = new Array(_len), _key = 0; _key < _len; _key++) {\n    styles[_key] = arguments[_key];\n  }\n\n  var fn = function fn(props) {\n    return styles.reduce(function (acc, style) {\n      var output = style(props);\n\n      if (output) {\n        return Object(_merge__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(acc, output);\n      }\n\n      return acc;\n    }, {});\n  }; // Alternative approach that doesn't yield any performance gain.\n  // const handlers = styles.reduce((acc, style) => {\n  //   style.filterProps.forEach(prop => {\n  //     acc[prop] = style;\n  //   });\n  //   return acc;\n  // }, {});\n  // const fn = props => {\n  //   return Object.keys(props).reduce((acc, prop) => {\n  //     if (handlers[prop]) {\n  //       return merge(acc, handlers[prop](props));\n  //     }\n  //     return acc;\n  //   }, {});\n  // };\n\n\n  fn.propTypes =  true ? styles.reduce(function (acc, style) {\n    return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(acc, style.propTypes);\n  }, {}) : undefined;\n  fn.filterProps = styles.reduce(function (acc, style) {\n    return acc.concat(style.filterProps);\n  }, []);\n  return fn;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (compose);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/compose.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/css.js":
/*!*****************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/css.js ***!
  \*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./merge */ \"./jaas-client/node_modules/@material-ui/system/esm/merge.js\");\n\n\n\n\n\nfunction omit(input, fields) {\n  var output = {};\n  Object.keys(input).forEach(function (prop) {\n    if (fields.indexOf(prop) === -1) {\n      output[prop] = input[prop];\n    }\n  });\n  return output;\n}\n\nfunction css(styleFunction) {\n  var newStyleFunction = function newStyleFunction(props) {\n    var output = styleFunction(props);\n\n    if (props.css) {\n      return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, Object(_merge__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(output, styleFunction(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        theme: props.theme\n      }, props.css)))), omit(props.css, [styleFunction.filterProps]));\n    }\n\n    return output;\n  };\n\n  newStyleFunction.propTypes =  true ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, styleFunction.propTypes), {}, {\n    css: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n  }) : undefined;\n  newStyleFunction.filterProps = ['css'].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(styleFunction.filterProps));\n  return newStyleFunction;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (css);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/css.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/display.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/display.js ***!
  \*********************************************************************/
/*! exports provided: displayPrint, displayRaw, overflow, textOverflow, visibility, whiteSpace, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"displayPrint\", function() { return displayPrint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"displayRaw\", function() { return displayRaw; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"overflow\", function() { return overflow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"textOverflow\", function() { return textOverflow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"visibility\", function() { return visibility; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whiteSpace\", function() { return whiteSpace; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar displayPrint = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'displayPrint',\n  cssProperty: false,\n  transform: function transform(value) {\n    return {\n      '@media print': {\n        display: value\n      }\n    };\n  }\n});\nvar displayRaw = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'display'\n});\nvar overflow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'overflow'\n});\nvar textOverflow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'textOverflow'\n});\nvar visibility = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'visibility'\n});\nvar whiteSpace = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'whiteSpace'\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(displayPrint, displayRaw, overflow, textOverflow, visibility, whiteSpace));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/display.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/flexbox.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/flexbox.js ***!
  \*********************************************************************/
/*! exports provided: flexBasis, flexDirection, flexWrap, justifyContent, alignItems, alignContent, order, flex, flexGrow, flexShrink, alignSelf, justifyItems, justifySelf, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexBasis\", function() { return flexBasis; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexDirection\", function() { return flexDirection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexWrap\", function() { return flexWrap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"justifyContent\", function() { return justifyContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"alignItems\", function() { return alignItems; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"alignContent\", function() { return alignContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"order\", function() { return order; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flex\", function() { return flex; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexGrow\", function() { return flexGrow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexShrink\", function() { return flexShrink; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"alignSelf\", function() { return alignSelf; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"justifyItems\", function() { return justifyItems; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"justifySelf\", function() { return justifySelf; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar flexBasis = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexBasis'\n});\nvar flexDirection = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexDirection'\n});\nvar flexWrap = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexWrap'\n});\nvar justifyContent = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'justifyContent'\n});\nvar alignItems = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'alignItems'\n});\nvar alignContent = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'alignContent'\n});\nvar order = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'order'\n});\nvar flex = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flex'\n});\nvar flexGrow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexGrow'\n});\nvar flexShrink = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexShrink'\n});\nvar alignSelf = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'alignSelf'\n});\nvar justifyItems = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'justifyItems'\n});\nvar justifySelf = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'justifySelf'\n});\nvar flexbox = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(flexBasis, flexDirection, flexWrap, justifyContent, alignItems, alignContent, order, flex, flexGrow, flexShrink, alignSelf, justifyItems, justifySelf);\n/* harmony default export */ __webpack_exports__[\"default\"] = (flexbox);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/flexbox.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/grid.js":
/*!******************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/grid.js ***!
  \******************************************************************/
/*! exports provided: gridGap, gridColumnGap, gridRowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridGap\", function() { return gridGap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridColumnGap\", function() { return gridColumnGap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridRowGap\", function() { return gridRowGap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridColumn\", function() { return gridColumn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridRow\", function() { return gridRow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridAutoFlow\", function() { return gridAutoFlow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridAutoColumns\", function() { return gridAutoColumns; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridAutoRows\", function() { return gridAutoRows; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateColumns\", function() { return gridTemplateColumns; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateRows\", function() { return gridTemplateRows; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateAreas\", function() { return gridTemplateAreas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridArea\", function() { return gridArea; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar gridGap = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridGap'\n});\nvar gridColumnGap = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridColumnGap'\n});\nvar gridRowGap = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridRowGap'\n});\nvar gridColumn = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridColumn'\n});\nvar gridRow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridRow'\n});\nvar gridAutoFlow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridAutoFlow'\n});\nvar gridAutoColumns = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridAutoColumns'\n});\nvar gridAutoRows = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridAutoRows'\n});\nvar gridTemplateColumns = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridTemplateColumns'\n});\nvar gridTemplateRows = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridTemplateRows'\n});\nvar gridTemplateAreas = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridTemplateAreas'\n});\nvar gridArea = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridArea'\n});\nvar grid = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(gridGap, gridColumnGap, gridRowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\n/* harmony default export */ __webpack_exports__[\"default\"] = (grid);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/grid.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/index.js":
/*!*******************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/index.js ***!
  \*******************************************************************/
/*! exports provided: borders, border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderRadius, breakpoints, compose, css, display, flexbox, flexBasis, flexDirection, flexWrap, justifyContent, alignItems, alignContent, order, flex, flexGrow, flexShrink, alignSelf, justifyItems, justifySelf, grid, gridGap, gridColumnGap, gridRowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea, palette, color, bgcolor, positions, position, zIndex, top, right, bottom, left, shadows, sizing, width, maxWidth, minWidth, height, maxHeight, minHeight, sizeWidth, sizeHeight, boxSizing, spacing, createUnarySpacing, style, typography, fontFamily, fontSize, fontStyle, fontWeight, letterSpacing, lineHeight, textAlign */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _borders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./borders */ \"./jaas-client/node_modules/@material-ui/system/esm/borders.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borders\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"border\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"border\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderTop\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderTop\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderRight\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderRight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderBottom\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderBottom\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderLeft\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderLeft\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderColor\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderColor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderRadius\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderRadius\"]; });\n\n/* harmony import */ var _breakpoints__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./breakpoints */ \"./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"breakpoints\", function() { return _breakpoints__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"compose\", function() { return _compose__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./css */ \"./jaas-client/node_modules/@material-ui/system/esm/css.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"css\", function() { return _css__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _display__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./display */ \"./jaas-client/node_modules/@material-ui/system/esm/display.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"display\", function() { return _display__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _flexbox__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./flexbox */ \"./jaas-client/node_modules/@material-ui/system/esm/flexbox.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexbox\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexBasis\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexBasis\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexDirection\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexDirection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexWrap\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexWrap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"justifyContent\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"justifyContent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"alignItems\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"alignItems\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"alignContent\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"alignContent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"order\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"order\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flex\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flex\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexGrow\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexGrow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexShrink\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexShrink\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"alignSelf\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"alignSelf\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"justifyItems\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"justifyItems\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"justifySelf\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"justifySelf\"]; });\n\n/* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./grid */ \"./jaas-client/node_modules/@material-ui/system/esm/grid.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"grid\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridGap\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridGap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridColumnGap\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridColumnGap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridRowGap\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridRowGap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridColumn\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridRow\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridAutoFlow\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridAutoFlow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridAutoColumns\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridAutoColumns\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridAutoRows\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridAutoRows\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateColumns\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridTemplateColumns\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateRows\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridTemplateRows\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateAreas\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridTemplateAreas\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridArea\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridArea\"]; });\n\n/* harmony import */ var _palette__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./palette */ \"./jaas-client/node_modules/@material-ui/system/esm/palette.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"palette\", function() { return _palette__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"color\", function() { return _palette__WEBPACK_IMPORTED_MODULE_7__[\"color\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bgcolor\", function() { return _palette__WEBPACK_IMPORTED_MODULE_7__[\"bgcolor\"]; });\n\n/* harmony import */ var _positions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./positions */ \"./jaas-client/node_modules/@material-ui/system/esm/positions.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"positions\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"position\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"position\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"zIndex\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"zIndex\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"top\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"top\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"right\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"right\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bottom\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"bottom\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"left\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"left\"]; });\n\n/* harmony import */ var _shadows__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./shadows */ \"./jaas-client/node_modules/@material-ui/system/esm/shadows.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"shadows\", function() { return _shadows__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _sizing__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./sizing */ \"./jaas-client/node_modules/@material-ui/system/esm/sizing.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sizing\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"width\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"width\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"maxWidth\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"maxWidth\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"minWidth\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"minWidth\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"height\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"height\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"maxHeight\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"maxHeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"minHeight\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"minHeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sizeWidth\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"sizeWidth\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sizeHeight\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"sizeHeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"boxSizing\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"boxSizing\"]; });\n\n/* harmony import */ var _spacing__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./spacing */ \"./jaas-client/node_modules/@material-ui/system/esm/spacing.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"spacing\", function() { return _spacing__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createUnarySpacing\", function() { return _spacing__WEBPACK_IMPORTED_MODULE_11__[\"createUnarySpacing\"]; });\n\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"style\", function() { return _style__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _typography__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./typography */ \"./jaas-client/node_modules/@material-ui/system/esm/typography.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"typography\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"fontFamily\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"fontFamily\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"fontSize\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"fontSize\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"fontStyle\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"fontStyle\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"fontWeight\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"fontWeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"letterSpacing\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"letterSpacing\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"lineHeight\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"lineHeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"textAlign\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"textAlign\"]; });\n\n/** @license Material-UI v4.9.14\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/memoize.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/memoize.js ***!
  \*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return memoize; });\nfunction memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) {\n      cache[arg] = fn(arg);\n    }\n\n    return cache[arg];\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/memoize.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/merge.js":
/*!*******************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/merge.js ***!
  \*******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\nfunction merge(acc, item) {\n  if (!item) {\n    return acc;\n  }\n\n  return Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"deepmerge\"])(acc, item, {\n    clone: false // No need to clone deep, it's way faster.\n\n  });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (merge);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/merge.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/palette.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/palette.js ***!
  \*********************************************************************/
/*! exports provided: color, bgcolor, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"color\", function() { return color; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bgcolor\", function() { return bgcolor; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar color = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'color',\n  themeKey: 'palette'\n});\nvar bgcolor = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'bgcolor',\n  cssProperty: 'backgroundColor',\n  themeKey: 'palette'\n});\nvar palette = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(color, bgcolor);\n/* harmony default export */ __webpack_exports__[\"default\"] = (palette);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/palette.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/positions.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/positions.js ***!
  \***********************************************************************/
/*! exports provided: position, zIndex, top, right, bottom, left, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"position\", function() { return position; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"zIndex\", function() { return zIndex; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"top\", function() { return top; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"right\", function() { return right; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bottom\", function() { return bottom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"left\", function() { return left; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar position = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'position'\n});\nvar zIndex = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'zIndex',\n  themeKey: 'zIndex'\n});\nvar top = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'top'\n});\nvar right = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'right'\n});\nvar bottom = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'bottom'\n});\nvar left = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'left'\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(position, zIndex, top, right, bottom, left));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/positions.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n\nvar responsivePropType =  true ? prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.array]) : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (responsivePropType);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/shadows.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/shadows.js ***!
  \*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n\nvar boxShadow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'boxShadow',\n  themeKey: 'shadows'\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (boxShadow);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/shadows.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/sizing.js":
/*!********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/sizing.js ***!
  \********************************************************************/
/*! exports provided: width, maxWidth, minWidth, height, maxHeight, minHeight, sizeWidth, sizeHeight, boxSizing, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"width\", function() { return width; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"maxWidth\", function() { return maxWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"minWidth\", function() { return minWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"height\", function() { return height; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"maxHeight\", function() { return maxHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"minHeight\", function() { return minHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sizeWidth\", function() { return sizeWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sizeHeight\", function() { return sizeHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"boxSizing\", function() { return boxSizing; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\n\nfunction transform(value) {\n  return value <= 1 ? \"\".concat(value * 100, \"%\") : value;\n}\n\nvar width = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'width',\n  transform: transform\n});\nvar maxWidth = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'maxWidth',\n  transform: transform\n});\nvar minWidth = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'minWidth',\n  transform: transform\n});\nvar height = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'height',\n  transform: transform\n});\nvar maxHeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'maxHeight',\n  transform: transform\n});\nvar minHeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'minHeight',\n  transform: transform\n});\nvar sizeWidth = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'size',\n  cssProperty: 'width',\n  transform: transform\n});\nvar sizeHeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'size',\n  cssProperty: 'height',\n  transform: transform\n});\nvar boxSizing = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'boxSizing'\n});\nvar sizing = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\n/* harmony default export */ __webpack_exports__[\"default\"] = (sizing);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/sizing.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/spacing.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/spacing.js ***!
  \*********************************************************************/
/*! exports provided: createUnarySpacing, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createUnarySpacing\", function() { return createUnarySpacing; });\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _responsivePropType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./responsivePropType */ \"./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js\");\n/* harmony import */ var _breakpoints__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./breakpoints */ \"./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js\");\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./merge */ \"./jaas-client/node_modules/@material-ui/system/esm/merge.js\");\n/* harmony import */ var _memoize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./memoize */ \"./jaas-client/node_modules/@material-ui/system/esm/memoize.js\");\n\n\n\n\n\nvar properties = {\n  m: 'margin',\n  p: 'padding'\n};\nvar directions = {\n  t: 'Top',\n  r: 'Right',\n  b: 'Bottom',\n  l: 'Left',\n  x: ['Left', 'Right'],\n  y: ['Top', 'Bottom']\n};\nvar aliases = {\n  marginX: 'mx',\n  marginY: 'my',\n  paddingX: 'px',\n  paddingY: 'py'\n}; // memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\n\nvar getCssProperties = Object(_memoize__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(function (prop) {\n  // It's not a shorthand notation.\n  if (prop.length > 2) {\n    if (aliases[prop]) {\n      prop = aliases[prop];\n    } else {\n      return [prop];\n    }\n  }\n\n  var _prop$split = prop.split(''),\n      _prop$split2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_prop$split, 2),\n      a = _prop$split2[0],\n      b = _prop$split2[1];\n\n  var property = properties[a];\n  var direction = directions[b] || '';\n  return Array.isArray(direction) ? direction.map(function (dir) {\n    return property + dir;\n  }) : [property + direction];\n});\nvar spacingKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY'];\nfunction createUnarySpacing(theme) {\n  var themeSpacing = theme.spacing || 8;\n\n  if (typeof themeSpacing === 'number') {\n    return function (abs) {\n      if (true) {\n        if (typeof abs !== 'number') {\n          console.error(\"Material-UI: Expected spacing argument to be a number, got \".concat(abs, \".\"));\n        }\n      }\n\n      return themeSpacing * abs;\n    };\n  }\n\n  if (Array.isArray(themeSpacing)) {\n    return function (abs) {\n      if (true) {\n        if (abs > themeSpacing.length - 1) {\n          console.error([\"Material-UI: The value provided (\".concat(abs, \") overflows.\"), \"The supported values are: \".concat(JSON.stringify(themeSpacing), \".\"), \"\".concat(abs, \" > \").concat(themeSpacing.length - 1, \", you need to add the missing values.\")].join('\\n'));\n        }\n      }\n\n      return themeSpacing[abs];\n    };\n  }\n\n  if (typeof themeSpacing === 'function') {\n    return themeSpacing;\n  }\n\n  if (true) {\n    console.error([\"Material-UI: The `theme.spacing` value (\".concat(themeSpacing, \") is invalid.\"), 'It should be a number, an array or a function.'].join('\\n'));\n  }\n\n  return function () {\n    return undefined;\n  };\n}\n\nfunction getValue(transformer, propValue) {\n  if (typeof propValue === 'string') {\n    return propValue;\n  }\n\n  var abs = Math.abs(propValue);\n  var transformed = transformer(abs);\n\n  if (propValue >= 0) {\n    return transformed;\n  }\n\n  if (typeof transformed === 'number') {\n    return -transformed;\n  }\n\n  return \"-\".concat(transformed);\n}\n\nfunction getStyleFromPropValue(cssProperties, transformer) {\n  return function (propValue) {\n    return cssProperties.reduce(function (acc, cssProperty) {\n      acc[cssProperty] = getValue(transformer, propValue);\n      return acc;\n    }, {});\n  };\n}\n\nfunction spacing(props) {\n  var theme = props.theme;\n  var transformer = createUnarySpacing(theme);\n  return Object.keys(props).map(function (prop) {\n    // Using a hash computation over an array iteration could be faster, but with only 28 items,\n    // it's doesn't worth the bundle size.\n    if (spacingKeys.indexOf(prop) === -1) {\n      return null;\n    }\n\n    var cssProperties = getCssProperties(prop);\n    var styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n    var propValue = props[prop];\n    return Object(_breakpoints__WEBPACK_IMPORTED_MODULE_2__[\"handleBreakpoints\"])(props, propValue, styleFromPropValue);\n  }).reduce(_merge__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {});\n}\n\nspacing.propTypes =  true ? spacingKeys.reduce(function (obj, key) {\n  obj[key] = _responsivePropType__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n  return obj;\n}, {}) : undefined;\nspacing.filterProps = spacingKeys;\n/* harmony default export */ __webpack_exports__[\"default\"] = (spacing);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/spacing.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/style.js":
/*!*******************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/style.js ***!
  \*******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _responsivePropType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./responsivePropType */ \"./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js\");\n/* harmony import */ var _breakpoints__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./breakpoints */ \"./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js\");\n\n\n\n\nfunction getPath(obj, path) {\n  if (!path || typeof path !== 'string') {\n    return null;\n  }\n\n  return path.split('.').reduce(function (acc, item) {\n    return acc && acc[item] ? acc[item] : null;\n  }, obj);\n}\n\nfunction style(options) {\n  var prop = options.prop,\n      _options$cssProperty = options.cssProperty,\n      cssProperty = _options$cssProperty === void 0 ? options.prop : _options$cssProperty,\n      themeKey = options.themeKey,\n      transform = options.transform;\n\n  var fn = function fn(props) {\n    if (props[prop] == null) {\n      return null;\n    }\n\n    var propValue = props[prop];\n    var theme = props.theme;\n    var themeMapping = getPath(theme, themeKey) || {};\n\n    var styleFromPropValue = function styleFromPropValue(propValueFinal) {\n      var value;\n\n      if (typeof themeMapping === 'function') {\n        value = themeMapping(propValueFinal);\n      } else if (Array.isArray(themeMapping)) {\n        value = themeMapping[propValueFinal] || propValueFinal;\n      } else {\n        value = getPath(themeMapping, propValueFinal) || propValueFinal;\n\n        if (transform) {\n          value = transform(value);\n        }\n      }\n\n      if (cssProperty === false) {\n        return value;\n      }\n\n      return Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, cssProperty, value);\n    };\n\n    return Object(_breakpoints__WEBPACK_IMPORTED_MODULE_2__[\"handleBreakpoints\"])(props, propValue, styleFromPropValue);\n  };\n\n  fn.propTypes =  true ? Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, prop, _responsivePropType__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) : undefined;\n  fn.filterProps = [prop];\n  return fn;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (style);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/style.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/system/esm/typography.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/system/esm/typography.js ***!
  \************************************************************************/
/*! exports provided: fontFamily, fontSize, fontStyle, fontWeight, letterSpacing, lineHeight, textAlign, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fontFamily\", function() { return fontFamily; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fontSize\", function() { return fontSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fontStyle\", function() { return fontStyle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fontWeight\", function() { return fontWeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"letterSpacing\", function() { return letterSpacing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lineHeight\", function() { return lineHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"textAlign\", function() { return textAlign; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar fontFamily = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'fontFamily',\n  themeKey: 'typography'\n});\nvar fontSize = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'fontSize',\n  themeKey: 'typography'\n});\nvar fontStyle = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'fontStyle',\n  themeKey: 'typography'\n});\nvar fontWeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'fontWeight',\n  themeKey: 'typography'\n});\nvar letterSpacing = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'letterSpacing'\n});\nvar lineHeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'lineHeight'\n});\nvar textAlign = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'textAlign'\n});\nvar typography = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(fontFamily, fontSize, fontStyle, fontWeight, letterSpacing, lineHeight, textAlign);\n/* harmony default export */ __webpack_exports__[\"default\"] = (typography);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/typography.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/HTMLElementType.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/HTMLElementType.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return HTMLElementType; });\nfunction HTMLElementType(props, propName, componentName, location, propFullName) {\n  if (false) {}\n\n  var propValue = props[propName];\n  var safePropName = propFullName || propName;\n\n  if (propValue == null) {\n    return null;\n  }\n\n  if (propValue && propValue.nodeType !== 1) {\n    return new Error(\"Invalid \".concat(location, \" `\").concat(safePropName, \"` supplied to `\").concat(componentName, \"`. \") + \"Expected an HTMLElement.\");\n  }\n\n  return null;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/HTMLElementType.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return chainPropTypes; });\nfunction chainPropTypes(propType1, propType2) {\n  if (false) {}\n\n  return function validate() {\n    return propType1.apply(void 0, arguments) || propType2.apply(void 0, arguments);\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/deepmerge.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/deepmerge.js ***!
  \**********************************************************************/
/*! exports provided: isPlainObject, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPlainObject\", function() { return isPlainObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return deepmerge; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n\n\nfunction isPlainObject(item) {\n  return item && Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(item) === 'object' && item.constructor === Object;\n}\nfunction deepmerge(target, source) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n    clone: true\n  };\n  var output = options.clone ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, target) : target;\n\n  if (isPlainObject(target) && isPlainObject(source)) {\n    Object.keys(source).forEach(function (key) {\n      // Avoid prototype pollution\n      if (key === '__proto__') {\n        return;\n      }\n\n      if (isPlainObject(source[key]) && key in target) {\n        output[key] = deepmerge(target[key], source[key], options);\n      } else {\n        output[key] = source[key];\n      }\n    });\n  }\n\n  return output;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/deepmerge.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/elementAcceptingRef.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/elementAcceptingRef.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _chainPropTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chainPropTypes */ \"./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js\");\n\n\n\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  var _elementType$prototyp = elementType.prototype,\n      prototype = _elementType$prototyp === void 0 ? {} : _elementType$prototyp;\n  return Boolean(prototype.isReactComponent);\n}\n\nfunction acceptingRef(props, propName, componentName, location, propFullName) {\n  var element = props[propName];\n  var safePropName = propFullName || propName;\n\n  if (element == null) {\n    return null;\n  }\n\n  var warningHint;\n  var elementType = element.type;\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n\n  if (typeof elementType === 'function' && !isClassComponent(elementType)) {\n    warningHint = 'Did you accidentally use a plain function component for an element instead?';\n  }\n\n  if (warningHint !== undefined) {\n    return new Error(\"Invalid \".concat(location, \" `\").concat(safePropName, \"` supplied to `\").concat(componentName, \"`. \") + \"Expected an element that can hold a ref. \".concat(warningHint, \" \") + 'For more information see https://material-ui.com/r/caveat-with-refs-guide');\n  }\n\n  return null;\n}\n\nvar elementAcceptingRef = Object(_chainPropTypes__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.element, acceptingRef);\nelementAcceptingRef.isRequired = Object(_chainPropTypes__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.element.isRequired, acceptingRef);\n/* harmony default export */ __webpack_exports__[\"default\"] = (elementAcceptingRef);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/elementAcceptingRef.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/elementTypeAcceptingRef.js":
/*!************************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/elementTypeAcceptingRef.js ***!
  \************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _chainPropTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chainPropTypes */ \"./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js\");\n\n\n\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  var _elementType$prototyp = elementType.prototype,\n      prototype = _elementType$prototyp === void 0 ? {} : _elementType$prototyp;\n  return Boolean(prototype.isReactComponent);\n}\n\nfunction elementTypeAcceptingRef(props, propName, componentName, location, propFullName) {\n  var propValue = props[propName];\n  var safePropName = propFullName || propName;\n\n  if (propValue == null) {\n    return null;\n  }\n\n  var warningHint;\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n\n  if (typeof propValue === 'function' && !isClassComponent(propValue)) {\n    warningHint = 'Did you accidentally provide a plain function component instead?';\n  }\n\n  if (warningHint !== undefined) {\n    return new Error(\"Invalid \".concat(location, \" `\").concat(safePropName, \"` supplied to `\").concat(componentName, \"`. \") + \"Expected an element type that can hold a ref. \".concat(warningHint, \" \") + 'For more information see https://material-ui.com/r/caveat-with-refs-guide');\n  }\n\n  return null;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_chainPropTypes__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(prop_types__WEBPACK_IMPORTED_MODULE_0__[\"elementType\"], elementTypeAcceptingRef));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/elementTypeAcceptingRef.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/exactProp.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/exactProp.js ***!
  \**********************************************************************/
/*! exports provided: specialProperty, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"specialProperty\", function() { return specialProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return exactProp; });\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n\n\n// This module is based on https://github.com/airbnb/prop-types-exact repository.\n// However, in order to reduce the number of dependencies and to remove some extra safe checks\n// the module was forked.\n// Only exported for test purposes.\nvar specialProperty = \"exact-prop: \\u200B\";\nfunction exactProp(propTypes) {\n  if (false) {}\n\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, propTypes, Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, specialProperty, function (props) {\n    var unsupportedProps = Object.keys(props).filter(function (prop) {\n      return !propTypes.hasOwnProperty(prop);\n    });\n\n    if (unsupportedProps.length > 0) {\n      return new Error(\"The following props are not supported: \".concat(unsupportedProps.map(function (prop) {\n        return \"`\".concat(prop, \"`\");\n      }).join(', '), \". Please remove them.\"));\n    }\n\n    return null;\n  }));\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/exactProp.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return formatMuiErrorMessage; });\n/**\n * WARNING: Don't import this directly.\n * Use `MuiError` from `@material-ui/utils/macros/MuiError.macro` instead.\n * @param {number} code\n */\nfunction formatMuiErrorMessage(code) {\n  // Apply babel-plugin-transform-template-literals in loose mode\n  // loose mode is safe iff we're concatenating primitives\n  // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n\n  /* eslint-disable prefer-template */\n  var url = 'https://material-ui.com/production-error/?code=' + code;\n\n  for (var i = 1; i < arguments.length; i += 1) {\n    // rest params over-transpile for this case\n    // eslint-disable-next-line prefer-rest-params\n    url += '&args[]=' + encodeURIComponent(arguments[i]);\n  }\n\n  return 'Minified Material-UI error #' + code + '; visit ' + url + ' for the full message.';\n  /* eslint-enable prefer-template */\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/getDisplayName.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/getDisplayName.js ***!
  \***************************************************************************/
/*! exports provided: getFunctionName, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getFunctionName\", function() { return getFunctionName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getDisplayName; });\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_1__);\n\n // Simplified polyfill for IE 11 support\n// https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3\n\nvar fnNameMatchRegex = /^\\s*function(?:\\s|\\s*\\/\\*.*\\*\\/\\s*)+([^(\\s/]*)\\s*/;\nfunction getFunctionName(fn) {\n  var match = \"\".concat(fn).match(fnNameMatchRegex);\n  var name = match && match[1];\n  return name || '';\n}\n/**\n * @param {function} Component\n * @param {string} fallback\n * @returns {string | undefined}\n */\n\nfunction getFunctionComponentName(Component) {\n  var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  return Component.displayName || Component.name || getFunctionName(Component) || fallback;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var functionName = getFunctionComponentName(innerType);\n  return outerType.displayName || (functionName !== '' ? \"\".concat(wrapperName, \"(\").concat(functionName, \")\") : wrapperName);\n}\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName with added IE 11 support\n *\n * @param {React.ReactType} Component\n * @returns {string | undefined}\n */\n\n\nfunction getDisplayName(Component) {\n  if (Component == null) {\n    return undefined;\n  }\n\n  if (typeof Component === 'string') {\n    return Component;\n  }\n\n  if (typeof Component === 'function') {\n    return getFunctionComponentName(Component, 'Component');\n  }\n\n  if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Component) === 'object') {\n    switch (Component.$$typeof) {\n      case react_is__WEBPACK_IMPORTED_MODULE_1__[\"ForwardRef\"]:\n        return getWrappedName(Component, Component.render, 'ForwardRef');\n\n      case react_is__WEBPACK_IMPORTED_MODULE_1__[\"Memo\"]:\n        return getWrappedName(Component, Component.type, 'memo');\n\n      default:\n        return undefined;\n    }\n  }\n\n  return undefined;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/getDisplayName.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/index.js":
/*!******************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/index.js ***!
  \******************************************************************/
/*! exports provided: chainPropTypes, deepmerge, elementAcceptingRef, elementTypeAcceptingRef, exactProp, formatMuiErrorMessage, getDisplayName, HTMLElementType, ponyfillGlobal, refType */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chainPropTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chainPropTypes */ \"./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"chainPropTypes\", function() { return _chainPropTypes__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _deepmerge__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deepmerge */ \"./jaas-client/node_modules/@material-ui/utils/esm/deepmerge.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"deepmerge\", function() { return _deepmerge__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _elementAcceptingRef__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./elementAcceptingRef */ \"./jaas-client/node_modules/@material-ui/utils/esm/elementAcceptingRef.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"elementAcceptingRef\", function() { return _elementAcceptingRef__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _elementTypeAcceptingRef__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./elementTypeAcceptingRef */ \"./jaas-client/node_modules/@material-ui/utils/esm/elementTypeAcceptingRef.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"elementTypeAcceptingRef\", function() { return _elementTypeAcceptingRef__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _exactProp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./exactProp */ \"./jaas-client/node_modules/@material-ui/utils/esm/exactProp.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"exactProp\", function() { return _exactProp__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _formatMuiErrorMessage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatMuiErrorMessage */ \"./jaas-client/node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"formatMuiErrorMessage\", function() { return _formatMuiErrorMessage__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _getDisplayName__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDisplayName */ \"./jaas-client/node_modules/@material-ui/utils/esm/getDisplayName.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getDisplayName\", function() { return _getDisplayName__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _HTMLElementType__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./HTMLElementType */ \"./jaas-client/node_modules/@material-ui/utils/esm/HTMLElementType.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HTMLElementType\", function() { return _HTMLElementType__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _ponyfillGlobal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ponyfillGlobal */ \"./jaas-client/node_modules/@material-ui/utils/esm/ponyfillGlobal.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ponyfillGlobal\", function() { return _ponyfillGlobal__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _refType__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./refType */ \"./jaas-client/node_modules/@material-ui/utils/esm/refType.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"refType\", function() { return _refType__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/** @license Material-UI v4.10.2\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/ponyfillGlobal.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/ponyfillGlobal.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* eslint-disable */\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n/* harmony default export */ __webpack_exports__[\"default\"] = (typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')());\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/ponyfillGlobal.js?");

/***/ }),

/***/ "./jaas-client/node_modules/@material-ui/utils/esm/refType.js":
/*!********************************************************************!*\
  !*** ./jaas-client/node_modules/@material-ui/utils/esm/refType.js ***!
  \********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n\nvar refType = prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (refType);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/refType.js?");

/***/ }),

/***/ "./jaas-client/node_modules/after/index.js":
/*!*************************************************!*\
  !*** ./jaas-client/node_modules/after/index.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = after\n\nfunction after(count, callback, err_cb) {\n    var bail = false\n    err_cb = err_cb || noop\n    proxy.count = count\n\n    return (count === 0) ? callback() : proxy\n\n    function proxy(err, result) {\n        if (proxy.count <= 0) {\n            throw new Error('after called too many times')\n        }\n        --proxy.count\n\n        // after first error, rest are passed to err_cb\n        if (err) {\n            bail = true\n            callback(err)\n            // future error callbacks will go to error handler\n            callback = err_cb\n        } else if (proxy.count === 0 && !bail) {\n            callback(null, result)\n        }\n    }\n}\n\nfunction noop() {}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/after/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/arraybuffer.slice/index.js":
/*!*************************************************************!*\
  !*** ./jaas-client/node_modules/arraybuffer.slice/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n  var bytes = arraybuffer.byteLength;\n  start = start || 0;\n  end = end || bytes;\n\n  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n  if (start < 0) { start += bytes; }\n  if (end < 0) { end += bytes; }\n  if (end > bytes) { end = bytes; }\n\n  if (start >= bytes || start >= end || bytes === 0) {\n    return new ArrayBuffer(0);\n  }\n\n  var abv = new Uint8Array(arraybuffer);\n  var result = new Uint8Array(end - start);\n  for (var i = start, ii = 0; i < end; i++, ii++) {\n    result[ii] = abv[i];\n  }\n  return result.buffer;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/arraybuffer.slice/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/backo2/index.js":
/*!**************************************************!*\
  !*** ./jaas-client/node_modules/backo2/index.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/backo2/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(){\n  \"use strict\";\n\n  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n  // Use a lookup table to find the index.\n  var lookup = new Uint8Array(256);\n  for (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n  }\n\n  exports.encode = function(arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer),\n    i, len = bytes.length, base64 = \"\";\n\n    for (i = 0; i < len; i+=3) {\n      base64 += chars[bytes[i] >> 2];\n      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n      base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if ((len % 3) === 2) {\n      base64 = base64.substring(0, base64.length - 1) + \"=\";\n    } else if (len % 3 === 1) {\n      base64 = base64.substring(0, base64.length - 2) + \"==\";\n    }\n\n    return base64;\n  };\n\n  exports.decode =  function(base64) {\n    var bufferLength = base64.length * 0.75,\n    len = base64.length, i, p = 0,\n    encoded1, encoded2, encoded3, encoded4;\n\n    if (base64[base64.length - 1] === \"=\") {\n      bufferLength--;\n      if (base64[base64.length - 2] === \"=\") {\n        bufferLength--;\n      }\n    }\n\n    var arraybuffer = new ArrayBuffer(bufferLength),\n    bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i+=4) {\n      encoded1 = lookup[base64.charCodeAt(i)];\n      encoded2 = lookup[base64.charCodeAt(i+1)];\n      encoded3 = lookup[base64.charCodeAt(i+2)];\n      encoded4 = lookup[base64.charCodeAt(i+3)];\n\n      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n  };\n})();\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js?");

/***/ }),

/***/ "./jaas-client/node_modules/blob/index.js":
/*!************************************************!*\
  !*** ./jaas-client/node_modules/blob/index.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/blob/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/clsx/dist/clsx.m.js":
/*!******************************************************!*\
  !*** ./jaas-client/node_modules/clsx/dist/clsx.m.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction toVal(mix) {\n\tvar k, y, str='';\n\n\tif (typeof mix === 'string' || typeof mix === 'number') {\n\t\tstr += mix;\n\t} else if (typeof mix === 'object') {\n\t\tif (Array.isArray(mix)) {\n\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tif (y = toVal(mix[k])) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (k in mix) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\tstr += k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn str;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function () {\n\tvar i=0, tmp, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (tmp = arguments[i++]) {\n\t\t\tif (x = toVal(tmp)) {\n\t\t\t\tstr && (str += ' ');\n\t\t\t\tstr += x\n\t\t\t}\n\t\t}\n\t}\n\treturn str;\n});\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/clsx/dist/clsx.m.js?");

/***/ }),

/***/ "./jaas-client/node_modules/component-bind/index.js":
/*!**********************************************************!*\
  !*** ./jaas-client/node_modules/component-bind/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/component-bind/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/component-emitter/index.js":
/*!*************************************************************!*\
  !*** ./jaas-client/node_modules/component-emitter/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (true) {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/component-emitter/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/component-inherit/index.js":
/*!*************************************************************!*\
  !*** ./jaas-client/node_modules/component-inherit/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("\nmodule.exports = function(a, b){\n  var fn = function(){};\n  fn.prototype = b.prototype;\n  a.prototype = new fn;\n  a.prototype.constructor = a;\n};\n\n//# sourceURL=webpack:///./jaas-client/node_modules/component-inherit/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/css-vendor/dist/css-vendor.esm.js":
/*!********************************************************************!*\
  !*** ./jaas-client/node_modules/css-vendor/dist/css-vendor.esm.js ***!
  \********************************************************************/
/*! exports provided: prefix, supportedKeyframes, supportedProperty, supportedValue */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"prefix\", function() { return prefix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportedKeyframes\", function() { return supportedKeyframes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportedProperty\", function() { return supportedProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportedValue\", function() { return supportedValue; });\n/* harmony import */ var is_in_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-in-browser */ \"./jaas-client/node_modules/is-in-browser/dist/module.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n\n\n\n// Export javascript style and css style vendor prefixes.\nvar js = '';\nvar css = '';\nvar vendor = '';\nvar browser = '';\nvar isTouch = is_in_browser__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && 'ontouchstart' in document.documentElement; // We should not do anything if required serverside.\n\nif (is_in_browser__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n  // Order matters. We need to check Webkit the last one because\n  // other vendors use to add Webkit prefixes to some properties\n  var jsCssMap = {\n    Moz: '-moz-',\n    ms: '-ms-',\n    O: '-o-',\n    Webkit: '-webkit-'\n  };\n\n  var _document$createEleme = document.createElement('p'),\n      style = _document$createEleme.style;\n\n  var testProp = 'Transform';\n\n  for (var key in jsCssMap) {\n    if (key + testProp in style) {\n      js = key;\n      css = jsCssMap[key];\n      break;\n    }\n  } // Correctly detect the Edge browser.\n\n\n  if (js === 'Webkit' && 'msHyphens' in style) {\n    js = 'ms';\n    css = jsCssMap.ms;\n    browser = 'edge';\n  } // Correctly detect the Safari browser.\n\n\n  if (js === 'Webkit' && '-apple-trailing-word' in style) {\n    vendor = 'apple';\n  }\n}\n/**\n * Vendor prefix string for the current browser.\n *\n * @type {{js: String, css: String, vendor: String, browser: String}}\n * @api public\n */\n\n\nvar prefix = {\n  js: js,\n  css: css,\n  vendor: vendor,\n  browser: browser,\n  isTouch: isTouch\n};\n\n/**\n * Test if a keyframe at-rule should be prefixed or not\n *\n * @param {String} vendor prefix string for the current browser.\n * @return {String}\n * @api public\n */\n\nfunction supportedKeyframes(key) {\n  // Keyframes is already prefixed. e.g. key = '@-webkit-keyframes a'\n  if (key[1] === '-') return key; // No need to prefix IE/Edge. Older browsers will ignore unsupported rules.\n  // https://caniuse.com/#search=keyframes\n\n  if (prefix.js === 'ms') return key;\n  return \"@\" + prefix.css + \"keyframes\" + key.substr(10);\n}\n\n// https://caniuse.com/#search=appearance\n\nvar appearence = {\n  noPrefill: ['appearance'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'appearance') return false;\n    if (prefix.js === 'ms') return \"-webkit-\" + prop;\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=color-adjust\n\nvar colorAdjust = {\n  noPrefill: ['color-adjust'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'color-adjust') return false;\n    if (prefix.js === 'Webkit') return prefix.css + \"print-\" + prop;\n    return prop;\n  }\n};\n\nvar regExp = /[-\\s]+(.)?/g;\n/**\n * Replaces the letter with the capital letter\n *\n * @param {String} match\n * @param {String} c\n * @return {String}\n * @api private\n */\n\nfunction toUpper(match, c) {\n  return c ? c.toUpperCase() : '';\n}\n/**\n * Convert dash separated strings to camel-cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\n\nfunction camelize(str) {\n  return str.replace(regExp, toUpper);\n}\n\n/**\n * Convert dash separated strings to pascal cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nfunction pascalize(str) {\n  return camelize(\"-\" + str);\n}\n\n// but we can use a longhand property instead.\n// https://caniuse.com/#search=mask\n\nvar mask = {\n  noPrefill: ['mask'],\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^mask/.test(prop)) return false;\n\n    if (prefix.js === 'Webkit') {\n      var longhand = 'mask-image';\n\n      if (camelize(longhand) in style) {\n        return prop;\n      }\n\n      if (prefix.js + pascalize(longhand) in style) {\n        return prefix.css + prop;\n      }\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=text-orientation\n\nvar textOrientation = {\n  noPrefill: ['text-orientation'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'text-orientation') return false;\n\n    if (prefix.vendor === 'apple' && !prefix.isTouch) {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=transform\n\nvar transform = {\n  noPrefill: ['transform'],\n  supportedProperty: function supportedProperty(prop, style, options) {\n    if (prop !== 'transform') return false;\n\n    if (options.transform) {\n      return prop;\n    }\n\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=transition\n\nvar transition = {\n  noPrefill: ['transition'],\n  supportedProperty: function supportedProperty(prop, style, options) {\n    if (prop !== 'transition') return false;\n\n    if (options.transition) {\n      return prop;\n    }\n\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=writing-mode\n\nvar writingMode = {\n  noPrefill: ['writing-mode'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'writing-mode') return false;\n\n    if (prefix.js === 'Webkit' || prefix.js === 'ms' && prefix.browser !== 'edge') {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=user-select\n\nvar userSelect = {\n  noPrefill: ['user-select'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'user-select') return false;\n\n    if (prefix.js === 'Moz' || prefix.js === 'ms' || prefix.vendor === 'apple') {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=multicolumn\n// https://github.com/postcss/autoprefixer/issues/491\n// https://github.com/postcss/autoprefixer/issues/177\n\nvar breakPropsOld = {\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^break-/.test(prop)) return false;\n\n    if (prefix.js === 'Webkit') {\n      var jsProp = \"WebkitColumn\" + pascalize(prop);\n      return jsProp in style ? prefix.css + \"column-\" + prop : false;\n    }\n\n    if (prefix.js === 'Moz') {\n      var _jsProp = \"page\" + pascalize(prop);\n\n      return _jsProp in style ? \"page-\" + prop : false;\n    }\n\n    return false;\n  }\n};\n\n// See https://github.com/postcss/autoprefixer/issues/324.\n\nvar inlineLogicalOld = {\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^(border|margin|padding)-inline/.test(prop)) return false;\n    if (prefix.js === 'Moz') return prop;\n    var newProp = prop.replace('-inline', '');\n    return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n  }\n};\n\n// Camelization is required because we can't test using.\n// CSS syntax for e.g. in FF.\n\nvar unprefixed = {\n  supportedProperty: function supportedProperty(prop, style) {\n    return camelize(prop) in style ? prop : false;\n  }\n};\n\nvar prefixed = {\n  supportedProperty: function supportedProperty(prop, style) {\n    var pascalized = pascalize(prop); // Return custom CSS variable without prefixing.\n\n    if (prop[0] === '-') return prop; // Return already prefixed value without prefixing.\n\n    if (prop[0] === '-' && prop[1] === '-') return prop;\n    if (prefix.js + pascalized in style) return prefix.css + prop; // Try webkit fallback.\n\n    if (prefix.js !== 'Webkit' && \"Webkit\" + pascalized in style) return \"-webkit-\" + prop;\n    return false;\n  }\n};\n\n// https://caniuse.com/#search=scroll-snap\n\nvar scrollSnap = {\n  supportedProperty: function supportedProperty(prop) {\n    if (prop.substring(0, 11) !== 'scroll-snap') return false;\n\n    if (prefix.js === 'ms') {\n      return \"\" + prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=overscroll-behavior\n\nvar overscrollBehavior = {\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'overscroll-behavior') return false;\n\n    if (prefix.js === 'ms') {\n      return prefix.css + \"scroll-chaining\";\n    }\n\n    return prop;\n  }\n};\n\nvar propMap = {\n  'flex-grow': 'flex-positive',\n  'flex-shrink': 'flex-negative',\n  'flex-basis': 'flex-preferred-size',\n  'justify-content': 'flex-pack',\n  order: 'flex-order',\n  'align-items': 'flex-align',\n  'align-content': 'flex-line-pack' // 'align-self' is handled by 'align-self' plugin.\n\n}; // Support old flex spec from 2012.\n\nvar flex2012 = {\n  supportedProperty: function supportedProperty(prop, style) {\n    var newProp = propMap[prop];\n    if (!newProp) return false;\n    return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n  }\n};\n\nvar propMap$1 = {\n  flex: 'box-flex',\n  'flex-grow': 'box-flex',\n  'flex-direction': ['box-orient', 'box-direction'],\n  order: 'box-ordinal-group',\n  'align-items': 'box-align',\n  'flex-flow': ['box-orient', 'box-direction'],\n  'justify-content': 'box-pack'\n};\nvar propKeys = Object.keys(propMap$1);\n\nvar prefixCss = function prefixCss(p) {\n  return prefix.css + p;\n}; // Support old flex spec from 2009.\n\n\nvar flex2009 = {\n  supportedProperty: function supportedProperty(prop, style, _ref) {\n    var multiple = _ref.multiple;\n\n    if (propKeys.indexOf(prop) > -1) {\n      var newProp = propMap$1[prop];\n\n      if (!Array.isArray(newProp)) {\n        return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n      }\n\n      if (!multiple) return false;\n\n      for (var i = 0; i < newProp.length; i++) {\n        if (!(prefix.js + pascalize(newProp[0]) in style)) {\n          return false;\n        }\n      }\n\n      return newProp.map(prefixCss);\n    }\n\n    return false;\n  }\n};\n\n// plugins = [\n//   ...plugins,\n//    breakPropsOld,\n//    inlineLogicalOld,\n//    unprefixed,\n//    prefixed,\n//    scrollSnap,\n//    flex2012,\n//    flex2009\n// ]\n// Plugins without 'noPrefill' value, going last.\n// 'flex-*' plugins should be at the bottom.\n// 'flex2009' going after 'flex2012'.\n// 'prefixed' going after 'unprefixed'\n\nvar plugins = [appearence, colorAdjust, mask, textOrientation, transform, transition, writingMode, userSelect, breakPropsOld, inlineLogicalOld, unprefixed, prefixed, scrollSnap, overscrollBehavior, flex2012, flex2009];\nvar propertyDetectors = plugins.filter(function (p) {\n  return p.supportedProperty;\n}).map(function (p) {\n  return p.supportedProperty;\n});\nvar noPrefill = plugins.filter(function (p) {\n  return p.noPrefill;\n}).reduce(function (a, p) {\n  a.push.apply(a, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(p.noPrefill));\n  return a;\n}, []);\n\nvar el;\nvar cache = {};\n\nif (is_in_browser__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n  el = document.createElement('p'); // We test every property on vendor prefix requirement.\n  // Once tested, result is cached. It gives us up to 70% perf boost.\n  // http://jsperf.com/element-style-object-access-vs-plain-object\n  //\n  // Prefill cache with known css properties to reduce amount of\n  // properties we need to feature test at runtime.\n  // http://davidwalsh.name/vendor-prefix\n\n  var computed = window.getComputedStyle(document.documentElement, '');\n\n  for (var key$1 in computed) {\n    // eslint-disable-next-line no-restricted-globals\n    if (!isNaN(key$1)) cache[computed[key$1]] = computed[key$1];\n  } // Properties that cannot be correctly detected using the\n  // cache prefill method.\n\n\n  noPrefill.forEach(function (x) {\n    return delete cache[x];\n  });\n}\n/**\n * Test if a property is supported, returns supported property with vendor\n * prefix if required. Returns `false` if not supported.\n *\n * @param {String} prop dash separated\n * @param {Object} [options]\n * @return {String|Boolean}\n * @api public\n */\n\n\nfunction supportedProperty(prop, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  // For server-side rendering.\n  if (!el) return prop; // Remove cache for benchmark tests or return property from the cache.\n\n  if ( true && cache[prop] != null) {\n    return cache[prop];\n  } // Check if 'transition' or 'transform' natively supported in browser.\n\n\n  if (prop === 'transition' || prop === 'transform') {\n    options[prop] = prop in el.style;\n  } // Find a plugin for current prefix property.\n\n\n  for (var i = 0; i < propertyDetectors.length; i++) {\n    cache[prop] = propertyDetectors[i](prop, el.style, options); // Break loop, if value found.\n\n    if (cache[prop]) break;\n  } // Reset styles for current property.\n  // Firefox can even throw an error for invalid properties, e.g., \"0\".\n\n\n  try {\n    el.style[prop] = '';\n  } catch (err) {\n    return false;\n  }\n\n  return cache[prop];\n}\n\nvar cache$1 = {};\nvar transitionProperties = {\n  transition: 1,\n  'transition-property': 1,\n  '-webkit-transition': 1,\n  '-webkit-transition-property': 1\n};\nvar transPropsRegExp = /(^\\s*[\\w-]+)|, (\\s*[\\w-]+)(?![^()]*\\))/g;\nvar el$1;\n/**\n * Returns prefixed value transition/transform if needed.\n *\n * @param {String} match\n * @param {String} p1\n * @param {String} p2\n * @return {String}\n * @api private\n */\n\nfunction prefixTransitionCallback(match, p1, p2) {\n  if (p1 === 'var') return 'var';\n  if (p1 === 'all') return 'all';\n  if (p2 === 'all') return ', all';\n  var prefixedValue = p1 ? supportedProperty(p1) : \", \" + supportedProperty(p2);\n  if (!prefixedValue) return p1 || p2;\n  return prefixedValue;\n}\n\nif (is_in_browser__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) el$1 = document.createElement('p');\n/**\n * Returns prefixed value if needed. Returns `false` if value is not supported.\n *\n * @param {String} property\n * @param {String} value\n * @return {String|Boolean}\n * @api public\n */\n\nfunction supportedValue(property, value) {\n  // For server-side rendering.\n  var prefixedValue = value;\n  if (!el$1 || property === 'content') return value; // It is a string or a number as a string like '1'.\n  // We want only prefixable values here.\n  // eslint-disable-next-line no-restricted-globals\n\n  if (typeof prefixedValue !== 'string' || !isNaN(parseInt(prefixedValue, 10))) {\n    return prefixedValue;\n  } // Create cache key for current value.\n\n\n  var cacheKey = property + prefixedValue; // Remove cache for benchmark tests or return value from cache.\n\n  if ( true && cache$1[cacheKey] != null) {\n    return cache$1[cacheKey];\n  } // IE can even throw an error in some cases, for e.g. style.content = 'bar'.\n\n\n  try {\n    // Test value as it is.\n    el$1.style[property] = prefixedValue;\n  } catch (err) {\n    // Return false if value not supported.\n    cache$1[cacheKey] = false;\n    return false;\n  } // If 'transition' or 'transition-property' property.\n\n\n  if (transitionProperties[property]) {\n    prefixedValue = prefixedValue.replace(transPropsRegExp, prefixTransitionCallback);\n  } else if (el$1.style[property] === '') {\n    // Value with a vendor prefix.\n    prefixedValue = prefix.css + prefixedValue; // Hardcode test to convert \"flex\" to \"-ms-flexbox\" for IE10.\n\n    if (prefixedValue === '-ms-flex') el$1.style[property] = '-ms-flexbox'; // Test prefixed value.\n\n    el$1.style[property] = prefixedValue; // Return false if value not supported.\n\n    if (el$1.style[property] === '') {\n      cache$1[cacheKey] = false;\n      return false;\n    }\n  } // Reset styles for current property.\n\n\n  el$1.style[property] = ''; // Write current value to cache.\n\n  cache$1[cacheKey] = prefixedValue;\n  return cache$1[cacheKey];\n}\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/css-vendor/dist/css-vendor.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/debug/src/browser.js":
/*!*******************************************************!*\
  !*** ./jaas-client/node_modules/debug/src/browser.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(process) {/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\nfunction log(...args) {\n\t// This hackery is required for IE8/9, where\n\t// the `console.log` function doesn't have 'apply'\n\treturn typeof console === 'object' &&\n\t\tconsole.log &&\n\t\tconsole.log(...args);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"./jaas-client/node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/debug/src/browser.js?");

/***/ }),

/***/ "./jaas-client/node_modules/debug/src/common.js":
/*!******************************************************!*\
  !*** ./jaas-client/node_modules/debug/src/common.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = __webpack_require__(/*! ms */ \"./jaas-client/node_modules/ms/index.js\");\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* Active `debug` instances.\n\t*/\n\tcreateDebug.instances = [];\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.enabled = createDebug.enabled(namespace);\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = selectColor(namespace);\n\t\tdebug.destroy = destroy;\n\t\tdebug.extend = extend;\n\t\t// Debug.formatArgs = formatArgs;\n\t\t// debug.rawLog = rawLog;\n\n\t\t// env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\tcreateDebug.instances.push(debug);\n\n\t\treturn debug;\n\t}\n\n\tfunction destroy() {\n\t\tconst index = createDebug.instances.indexOf(this);\n\t\tif (index !== -1) {\n\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\tconst instance = createDebug.instances[i];\n\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/debug/src/common.js?");

/***/ }),

/***/ "./jaas-client/node_modules/dom-helpers/esm/addClass.js":
/*!**************************************************************!*\
  !*** ./jaas-client/node_modules/dom-helpers/esm/addClass.js ***!
  \**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return addClass; });\n/* harmony import */ var _hasClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hasClass */ \"./jaas-client/node_modules/dom-helpers/esm/hasClass.js\");\n\nfunction addClass(element, className) {\n  if (element.classList) element.classList.add(className);else if (!Object(_hasClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/dom-helpers/esm/addClass.js?");

/***/ }),

/***/ "./jaas-client/node_modules/dom-helpers/esm/hasClass.js":
/*!**************************************************************!*\
  !*** ./jaas-client/node_modules/dom-helpers/esm/hasClass.js ***!
  \**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return hasClass; });\nfunction hasClass(element, className) {\n  if (element.classList) return !!className && element.classList.contains(className);\n  return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/dom-helpers/esm/hasClass.js?");

/***/ }),

/***/ "./jaas-client/node_modules/dom-helpers/esm/removeClass.js":
/*!*****************************************************************!*\
  !*** ./jaas-client/node_modules/dom-helpers/esm/removeClass.js ***!
  \*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return removeClass; });\nfunction replaceClassName(origClass, classToRemove) {\n  return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nfunction removeClass(element, className) {\n  if (element.classList) {\n    element.classList.remove(className);\n  } else if (typeof element.className === 'string') {\n    ;\n    element.className = replaceClassName(element.className, className);\n  } else {\n    element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n  }\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/dom-helpers/esm/removeClass.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/index.js":
/*!****************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/index.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\nmodule.exports = __webpack_require__(/*! ./socket */ \"./jaas-client/node_modules/engine.io-client/lib/socket.js\");\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/socket.js":
/*!*****************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/socket.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Module dependencies.\n */\n\nvar transports = __webpack_require__(/*! ./transports/index */ \"./jaas-client/node_modules/engine.io-client/lib/transports/index.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/component-emitter/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('engine.io-client:socket');\nvar index = __webpack_require__(/*! indexof */ \"./jaas-client/node_modules/indexof/index.js\");\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\nvar parseuri = __webpack_require__(/*! parseuri */ \"./jaas-client/node_modules/parseuri/index.js\");\nvar parseqs = __webpack_require__(/*! parseqs */ \"./jaas-client/node_modules/parseqs/index.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n  opts = opts || {};\n\n  if (uri && 'object' === typeof uri) {\n    opts = uri;\n    uri = null;\n  }\n\n  if (uri) {\n    uri = parseuri(uri);\n    opts.hostname = uri.host;\n    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n    opts.port = uri.port;\n    if (uri.query) opts.query = uri.query;\n  } else if (opts.host) {\n    opts.hostname = parseuri(opts.host).host;\n  }\n\n  this.secure = null != opts.secure ? opts.secure\n    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\n  if (opts.hostname && !opts.port) {\n    // if no port is specified manually, use the protocol default\n    opts.port = this.secure ? '443' : '80';\n  }\n\n  this.agent = opts.agent || false;\n  this.hostname = opts.hostname ||\n    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && location.port\n      ? location.port\n      : (this.secure ? 443 : 80));\n  this.query = opts.query || {};\n  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n  this.upgrade = false !== opts.upgrade;\n  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n  this.forceJSONP = !!opts.forceJSONP;\n  this.jsonp = false !== opts.jsonp;\n  this.forceBase64 = !!opts.forceBase64;\n  this.enablesXDR = !!opts.enablesXDR;\n  this.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\n  this.readyState = '';\n  this.writeBuffer = [];\n  this.prevBufferLen = 0;\n  this.policyPort = opts.policyPort || 843;\n  this.rememberUpgrade = opts.rememberUpgrade || false;\n  this.binaryType = null;\n  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n    this.perMessageDeflate.threshold = 1024;\n  }\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx || null;\n  this.key = opts.key || null;\n  this.passphrase = opts.passphrase || null;\n  this.cert = opts.cert || null;\n  this.ca = opts.ca || null;\n  this.ciphers = opts.ciphers || null;\n  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\n    }\n  }\n\n  // set on handshake\n  this.id = null;\n  this.upgrades = null;\n  this.pingInterval = null;\n  this.pingTimeout = null;\n\n  // set on heartbeat\n  this.pingIntervalTimer = null;\n  this.pingTimeoutTimer = null;\n\n  this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = __webpack_require__(/*! ./transport */ \"./jaas-client/node_modules/engine.io-client/lib/transport.js\");\nSocket.transports = __webpack_require__(/*! ./transports/index */ \"./jaas-client/node_modules/engine.io-client/lib/transports/index.js\");\nSocket.parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n  debug('creating transport \"%s\"', name);\n  var query = clone(this.query);\n\n  // append engine.io protocol identifier\n  query.EIO = parser.protocol;\n\n  // transport name\n  query.transport = name;\n\n  // per-transport options\n  var options = this.transportOptions[name] || {};\n\n  // session id if we already have one\n  if (this.id) query.sid = this.id;\n\n  var transport = new transports[name]({\n    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\n  });\n\n  return transport;\n};\n\nfunction clone (obj) {\n  var o = {};\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      o[i] = obj[i];\n    }\n  }\n  return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n  var transport;\n  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n    transport = 'websocket';\n  } else if (0 === this.transports.length) {\n    // Emit error on next tick so it can be listened to\n    var self = this;\n    setTimeout(function () {\n      self.emit('error', 'No transports available');\n    }, 0);\n    return;\n  } else {\n    transport = this.transports[0];\n  }\n  this.readyState = 'opening';\n\n  // Retry with the next transport if the transport is disabled (jsonp: false)\n  try {\n    transport = this.createTransport(transport);\n  } catch (e) {\n    this.transports.shift();\n    this.open();\n    return;\n  }\n\n  transport.open();\n  this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n  debug('setting transport %s', transport.name);\n  var self = this;\n\n  if (this.transport) {\n    debug('clearing existing transport %s', this.transport.name);\n    this.transport.removeAllListeners();\n  }\n\n  // set up transport\n  this.transport = transport;\n\n  // set up transport listeners\n  transport\n  .on('drain', function () {\n    self.onDrain();\n  })\n  .on('packet', function (packet) {\n    self.onPacket(packet);\n  })\n  .on('error', function (e) {\n    self.onError(e);\n  })\n  .on('close', function () {\n    self.onClose('transport close');\n  });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n  debug('probing transport \"%s\"', name);\n  var transport = this.createTransport(name, { probe: 1 });\n  var failed = false;\n  var self = this;\n\n  Socket.priorWebsocketSuccess = false;\n\n  function onTransportOpen () {\n    if (self.onlyBinaryUpgrades) {\n      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n      failed = failed || upgradeLosesBinary;\n    }\n    if (failed) return;\n\n    debug('probe transport \"%s\" opened', name);\n    transport.send([{ type: 'ping', data: 'probe' }]);\n    transport.once('packet', function (msg) {\n      if (failed) return;\n      if ('pong' === msg.type && 'probe' === msg.data) {\n        debug('probe transport \"%s\" pong', name);\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n        debug('pausing current transport \"%s\"', self.transport.name);\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n          debug('changing transport and sending upgrade packet');\n\n          cleanup();\n\n          self.setTransport(transport);\n          transport.send([{ type: 'upgrade' }]);\n          self.emit('upgrade', transport);\n          transport = null;\n          self.upgrading = false;\n          self.flush();\n        });\n      } else {\n        debug('probe transport \"%s\" failed', name);\n        var err = new Error('probe error');\n        err.transport = transport.name;\n        self.emit('upgradeError', err);\n      }\n    });\n  }\n\n  function freezeTransport () {\n    if (failed) return;\n\n    // Any callback called by transport should be ignored since now\n    failed = true;\n\n    cleanup();\n\n    transport.close();\n    transport = null;\n  }\n\n  // Handle any error that happens while probing\n  function onerror (err) {\n    var error = new Error('probe error: ' + err);\n    error.transport = transport.name;\n\n    freezeTransport();\n\n    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n    self.emit('upgradeError', error);\n  }\n\n  function onTransportClose () {\n    onerror('transport closed');\n  }\n\n  // When the socket is closed while we're probing\n  function onclose () {\n    onerror('socket closed');\n  }\n\n  // When the socket is upgraded while we're probing\n  function onupgrade (to) {\n    if (transport && to.name !== transport.name) {\n      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n      freezeTransport();\n    }\n  }\n\n  // Remove all listeners on the transport and on self\n  function cleanup () {\n    transport.removeListener('open', onTransportOpen);\n    transport.removeListener('error', onerror);\n    transport.removeListener('close', onTransportClose);\n    self.removeListener('close', onclose);\n    self.removeListener('upgrading', onupgrade);\n  }\n\n  transport.once('open', onTransportOpen);\n  transport.once('error', onerror);\n  transport.once('close', onTransportClose);\n\n  this.once('close', onclose);\n  this.once('upgrading', onupgrade);\n\n  transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n  debug('socket open');\n  this.readyState = 'open';\n  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n  this.emit('open');\n  this.flush();\n\n  // we check for `readyState` in case an `open`\n  // listener already closed the socket\n  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n    debug('starting upgrade probes');\n    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n      this.probe(this.upgrades[i]);\n    }\n  }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n  if ('opening' === this.readyState || 'open' === this.readyState ||\n      'closing' === this.readyState) {\n    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n    this.emit('packet', packet);\n\n    // Socket is live - any packet counts\n    this.emit('heartbeat');\n\n    switch (packet.type) {\n      case 'open':\n        this.onHandshake(JSON.parse(packet.data));\n        break;\n\n      case 'pong':\n        this.setPing();\n        this.emit('pong');\n        break;\n\n      case 'error':\n        var err = new Error('server error');\n        err.code = packet.data;\n        this.onError(err);\n        break;\n\n      case 'message':\n        this.emit('data', packet.data);\n        this.emit('message', packet.data);\n        break;\n    }\n  } else {\n    debug('packet received with socket readyState \"%s\"', this.readyState);\n  }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n  this.emit('handshake', data);\n  this.id = data.sid;\n  this.transport.query.sid = data.sid;\n  this.upgrades = this.filterUpgrades(data.upgrades);\n  this.pingInterval = data.pingInterval;\n  this.pingTimeout = data.pingTimeout;\n  this.onOpen();\n  // In case open handler closes socket\n  if ('closed' === this.readyState) return;\n  this.setPing();\n\n  // Prolong liveness of socket on heartbeat\n  this.removeListener('heartbeat', this.onHeartbeat);\n  this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n  clearTimeout(this.pingTimeoutTimer);\n  var self = this;\n  self.pingTimeoutTimer = setTimeout(function () {\n    if ('closed' === self.readyState) return;\n    self.onClose('ping timeout');\n  }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n  var self = this;\n  clearTimeout(self.pingIntervalTimer);\n  self.pingIntervalTimer = setTimeout(function () {\n    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n    self.ping();\n    self.onHeartbeat(self.pingTimeout);\n  }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n  var self = this;\n  this.sendPacket('ping', function () {\n    self.emit('ping');\n  });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n  this.writeBuffer.splice(0, this.prevBufferLen);\n\n  // setting prevBufferLen = 0 is very important\n  // for example, when upgrading, upgrade packet is sent over,\n  // and a nonzero prevBufferLen could cause problems on `drain`\n  this.prevBufferLen = 0;\n\n  if (0 === this.writeBuffer.length) {\n    this.emit('drain');\n  } else {\n    this.flush();\n  }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n  if ('closed' !== this.readyState && this.transport.writable &&\n    !this.upgrading && this.writeBuffer.length) {\n    debug('flushing %d packets in socket', this.writeBuffer.length);\n    this.transport.send(this.writeBuffer);\n    // keep track of current length of writeBuffer\n    // splice writeBuffer and callbackBuffer on `drain`\n    this.prevBufferLen = this.writeBuffer.length;\n    this.emit('flush');\n  }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n  this.sendPacket('message', msg, options, fn);\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n  if ('function' === typeof data) {\n    fn = data;\n    data = undefined;\n  }\n\n  if ('function' === typeof options) {\n    fn = options;\n    options = null;\n  }\n\n  if ('closing' === this.readyState || 'closed' === this.readyState) {\n    return;\n  }\n\n  options = options || {};\n  options.compress = false !== options.compress;\n\n  var packet = {\n    type: type,\n    data: data,\n    options: options\n  };\n  this.emit('packetCreate', packet);\n  this.writeBuffer.push(packet);\n  if (fn) this.once('flush', fn);\n  this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.readyState = 'closing';\n\n    var self = this;\n\n    if (this.writeBuffer.length) {\n      this.once('drain', function () {\n        if (this.upgrading) {\n          waitForUpgrade();\n        } else {\n          close();\n        }\n      });\n    } else if (this.upgrading) {\n      waitForUpgrade();\n    } else {\n      close();\n    }\n  }\n\n  function close () {\n    self.onClose('forced close');\n    debug('socket closing - telling transport to close');\n    self.transport.close();\n  }\n\n  function cleanupAndClose () {\n    self.removeListener('upgrade', cleanupAndClose);\n    self.removeListener('upgradeError', cleanupAndClose);\n    close();\n  }\n\n  function waitForUpgrade () {\n    // wait for upgrade to finish since we can't send packets while pausing a transport\n    self.once('upgrade', cleanupAndClose);\n    self.once('upgradeError', cleanupAndClose);\n  }\n\n  return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n  debug('socket error %j', err);\n  Socket.priorWebsocketSuccess = false;\n  this.emit('error', err);\n  this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n    debug('socket close with reason: \"%s\"', reason);\n    var self = this;\n\n    // clear timers\n    clearTimeout(this.pingIntervalTimer);\n    clearTimeout(this.pingTimeoutTimer);\n\n    // stop event from firing again for transport\n    this.transport.removeAllListeners('close');\n\n    // ensure transport won't stay open\n    this.transport.close();\n\n    // ignore further transport communication\n    this.transport.removeAllListeners();\n\n    // set ready state\n    this.readyState = 'closed';\n\n    // clear session id\n    this.id = null;\n\n    // emit close event\n    this.emit('close', reason, desc);\n\n    // clean buffers after, so users can still\n    // grab the buffers on `close` event\n    self.writeBuffer = [];\n    self.prevBufferLen = 0;\n  }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n  var filteredUpgrades = [];\n  for (var i = 0, j = upgrades.length; i < j; i++) {\n    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n  }\n  return filteredUpgrades;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/socket.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/transport.js":
/*!********************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/transport.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Module dependencies.\n */\n\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/component-emitter/index.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n  this.path = opts.path;\n  this.hostname = opts.hostname;\n  this.port = opts.port;\n  this.secure = opts.secure;\n  this.query = opts.query;\n  this.timestampParam = opts.timestampParam;\n  this.timestampRequests = opts.timestampRequests;\n  this.readyState = '';\n  this.agent = opts.agent || false;\n  this.socket = opts.socket;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n  var err = new Error(msg);\n  err.type = 'TransportError';\n  err.description = desc;\n  this.emit('error', err);\n  return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n  if ('closed' === this.readyState || '' === this.readyState) {\n    this.readyState = 'opening';\n    this.doOpen();\n  }\n\n  return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.doClose();\n    this.onClose();\n  }\n\n  return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n  if ('open' === this.readyState) {\n    this.write(packets);\n  } else {\n    throw new Error('Transport not open');\n  }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n  this.readyState = 'open';\n  this.writable = true;\n  this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n  var packet = parser.decodePacket(data, this.socket.binaryType);\n  this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n  this.readyState = 'closed';\n  this.emit('close');\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transport.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/index.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/index.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = __webpack_require__(/*! xmlhttprequest-ssl */ \"./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js\");\nvar XHR = __webpack_require__(/*! ./polling-xhr */ \"./jaas-client/node_modules/engine.io-client/lib/transports/polling-xhr.js\");\nvar JSONP = __webpack_require__(/*! ./polling-jsonp */ \"./jaas-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js\");\nvar websocket = __webpack_require__(/*! ./websocket */ \"./jaas-client/node_modules/engine.io-client/lib/transports/websocket.js\");\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n  var xhr;\n  var xd = false;\n  var xs = false;\n  var jsonp = false !== opts.jsonp;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    xd = opts.hostname !== location.hostname || port !== opts.port;\n    xs = opts.secure !== isSSL;\n  }\n\n  opts.xdomain = xd;\n  opts.xscheme = xs;\n  xhr = new XMLHttpRequest(opts);\n\n  if ('open' in xhr && !opts.forceJSONP) {\n    return new XHR(opts);\n  } else {\n    if (!jsonp) throw new Error('JSONP disabled');\n    return new JSONP(opts);\n  }\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Module requirements.\n */\n\nvar Polling = __webpack_require__(/*! ./polling */ \"./jaas-client/node_modules/engine.io-client/lib/transports/polling.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./jaas-client/node_modules/component-inherit/index.js\");\nvar globalThis = __webpack_require__(/*! ../globalThis */ \"./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n  Polling.call(this, opts);\n\n  this.query = this.query || {};\n\n  // define global callbacks array if not present\n  // we do this here (lazily) to avoid unneeded global pollution\n  if (!callbacks) {\n    // we need to consider multiple engines in the same page\n    callbacks = globalThis.___eio = (globalThis.___eio || []);\n  }\n\n  // callback identifier\n  this.index = callbacks.length;\n\n  // add callback to jsonp global\n  var self = this;\n  callbacks.push(function (msg) {\n    self.onData(msg);\n  });\n\n  // append to query string\n  this.query.j = this.index;\n\n  // prevent spurious errors from being emitted when the window is unloaded\n  if (typeof addEventListener === 'function') {\n    addEventListener('beforeunload', function () {\n      if (self.script) self.script.onerror = empty;\n    }, false);\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  if (this.form) {\n    this.form.parentNode.removeChild(this.form);\n    this.form = null;\n    this.iframe = null;\n  }\n\n  Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n  var self = this;\n  var script = document.createElement('script');\n\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  script.async = true;\n  script.src = this.uri();\n  script.onerror = function (e) {\n    self.onError('jsonp poll error', e);\n  };\n\n  var insertAt = document.getElementsByTagName('script')[0];\n  if (insertAt) {\n    insertAt.parentNode.insertBefore(script, insertAt);\n  } else {\n    (document.head || document.body).appendChild(script);\n  }\n  this.script = script;\n\n  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n  if (isUAgecko) {\n    setTimeout(function () {\n      var iframe = document.createElement('iframe');\n      document.body.appendChild(iframe);\n      document.body.removeChild(iframe);\n    }, 100);\n  }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n  var self = this;\n\n  if (!this.form) {\n    var form = document.createElement('form');\n    var area = document.createElement('textarea');\n    var id = this.iframeId = 'eio_iframe_' + this.index;\n    var iframe;\n\n    form.className = 'socketio';\n    form.style.position = 'absolute';\n    form.style.top = '-1000px';\n    form.style.left = '-1000px';\n    form.target = id;\n    form.method = 'POST';\n    form.setAttribute('accept-charset', 'utf-8');\n    area.name = 'd';\n    form.appendChild(area);\n    document.body.appendChild(form);\n\n    this.form = form;\n    this.area = area;\n  }\n\n  this.form.action = this.uri();\n\n  function complete () {\n    initIframe();\n    fn();\n  }\n\n  function initIframe () {\n    if (self.iframe) {\n      try {\n        self.form.removeChild(self.iframe);\n      } catch (e) {\n        self.onError('jsonp polling iframe removal error', e);\n      }\n    }\n\n    try {\n      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n      iframe = document.createElement(html);\n    } catch (e) {\n      iframe = document.createElement('iframe');\n      iframe.name = self.iframeId;\n      iframe.src = 'javascript:0';\n    }\n\n    iframe.id = self.iframeId;\n\n    self.form.appendChild(iframe);\n    self.iframe = iframe;\n  }\n\n  initIframe();\n\n  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n  data = data.replace(rEscapedNewline, '\\\\\\n');\n  this.area.value = data.replace(rNewline, '\\\\n');\n\n  try {\n    this.form.submit();\n  } catch (e) {}\n\n  if (this.iframe.attachEvent) {\n    this.iframe.onreadystatechange = function () {\n      if (self.iframe.readyState === 'complete') {\n        complete();\n      }\n    };\n  } else {\n    this.iframe.onload = complete;\n  }\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/polling-xhr.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/polling-xhr.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = __webpack_require__(/*! xmlhttprequest-ssl */ \"./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js\");\nvar Polling = __webpack_require__(/*! ./polling */ \"./jaas-client/node_modules/engine.io-client/lib/transports/polling.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/component-emitter/index.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./jaas-client/node_modules/component-inherit/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('engine.io-client:polling-xhr');\nvar globalThis = __webpack_require__(/*! ../globalThis */ \"./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n\n/**\n * Empty function\n */\n\nfunction empty () {}\n\n/**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction XHR (opts) {\n  Polling.call(this, opts);\n  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(XHR, Polling);\n\n/**\n * XHR supports binary\n */\n\nXHR.prototype.supportsBinary = true;\n\n/**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n\nXHR.prototype.request = function (opts) {\n  opts = opts || {};\n  opts.uri = this.uri();\n  opts.xd = this.xd;\n  opts.xs = this.xs;\n  opts.agent = this.agent || false;\n  opts.supportsBinary = this.supportsBinary;\n  opts.enablesXDR = this.enablesXDR;\n  opts.withCredentials = this.withCredentials;\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n  opts.requestTimeout = this.requestTimeout;\n\n  // other options for Node.js client\n  opts.extraHeaders = this.extraHeaders;\n\n  return new Request(opts);\n};\n\n/**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n\nXHR.prototype.doWrite = function (data, fn) {\n  var isBinary = typeof data !== 'string' && data !== undefined;\n  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n  var self = this;\n  req.on('success', fn);\n  req.on('error', function (err) {\n    self.onError('xhr post error', err);\n  });\n  this.sendXhr = req;\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nXHR.prototype.doPoll = function () {\n  debug('xhr poll');\n  var req = this.request();\n  var self = this;\n  req.on('data', function (data) {\n    self.onData(data);\n  });\n  req.on('error', function (err) {\n    self.onError('xhr poll error', err);\n  });\n  this.pollXhr = req;\n};\n\n/**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Request (opts) {\n  this.method = opts.method || 'GET';\n  this.uri = opts.uri;\n  this.xd = !!opts.xd;\n  this.xs = !!opts.xs;\n  this.async = false !== opts.async;\n  this.data = undefined !== opts.data ? opts.data : null;\n  this.agent = opts.agent;\n  this.isBinary = opts.isBinary;\n  this.supportsBinary = opts.supportsBinary;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n\n  this.create();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Request.prototype);\n\n/**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n\nRequest.prototype.create = function () {\n  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n\n  var xhr = this.xhr = new XMLHttpRequest(opts);\n  var self = this;\n\n  try {\n    debug('xhr open %s: %s', this.method, this.uri);\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n        for (var i in this.extraHeaders) {\n          if (this.extraHeaders.hasOwnProperty(i)) {\n            xhr.setRequestHeader(i, this.extraHeaders[i]);\n          }\n        }\n      }\n    } catch (e) {}\n\n    if ('POST' === this.method) {\n      try {\n        if (this.isBinary) {\n          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n        } else {\n          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n        }\n      } catch (e) {}\n    }\n\n    try {\n      xhr.setRequestHeader('Accept', '*/*');\n    } catch (e) {}\n\n    // ie6 check\n    if ('withCredentials' in xhr) {\n      xhr.withCredentials = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\n    }\n\n    if (this.hasXDR()) {\n      xhr.onload = function () {\n        self.onLoad();\n      };\n      xhr.onerror = function () {\n        self.onError(xhr.responseText);\n      };\n    } else {\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\n        if (4 !== xhr.readyState) return;\n        if (200 === xhr.status || 1223 === xhr.status) {\n          self.onLoad();\n        } else {\n          // make sure the `error` event handler that's user-set\n          // does not throw in the same tick and gets caught here\n          setTimeout(function () {\n            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n    debug('xhr data %s', this.data);\n    xhr.send(this.data);\n  } catch (e) {\n    // Need to defer since .create() is called directly fhrom the constructor\n    // and thus the 'error' event can only be only bound *after* this exception\n    // occurs.  Therefore, also, we cannot throw here at all.\n    setTimeout(function () {\n      self.onError(e);\n    }, 0);\n    return;\n  }\n\n  if (typeof document !== 'undefined') {\n    this.index = Request.requestsCount++;\n    Request.requests[this.index] = this;\n  }\n};\n\n/**\n * Called upon successful response.\n *\n * @api private\n */\n\nRequest.prototype.onSuccess = function () {\n  this.emit('success');\n  this.cleanup();\n};\n\n/**\n * Called if we have data.\n *\n * @api private\n */\n\nRequest.prototype.onData = function (data) {\n  this.emit('data', data);\n  this.onSuccess();\n};\n\n/**\n * Called upon error.\n *\n * @api private\n */\n\nRequest.prototype.onError = function (err) {\n  this.emit('error', err);\n  this.cleanup(true);\n};\n\n/**\n * Cleans up house.\n *\n * @api private\n */\n\nRequest.prototype.cleanup = function (fromError) {\n  if ('undefined' === typeof this.xhr || null === this.xhr) {\n    return;\n  }\n  // xmlhttprequest\n  if (this.hasXDR()) {\n    this.xhr.onload = this.xhr.onerror = empty;\n  } else {\n    this.xhr.onreadystatechange = empty;\n  }\n\n  if (fromError) {\n    try {\n      this.xhr.abort();\n    } catch (e) {}\n  }\n\n  if (typeof document !== 'undefined') {\n    delete Request.requests[this.index];\n  }\n\n  this.xhr = null;\n};\n\n/**\n * Called upon load.\n *\n * @api private\n */\n\nRequest.prototype.onLoad = function () {\n  var data;\n  try {\n    var contentType;\n    try {\n      contentType = this.xhr.getResponseHeader('Content-Type');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\n    }\n  } catch (e) {\n    this.onError(e);\n  }\n  if (null != data) {\n    this.onData(data);\n  }\n};\n\n/**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n\nRequest.prototype.hasXDR = function () {\n  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n};\n\n/**\n * Aborts the request.\n *\n * @api public\n */\n\nRequest.prototype.abort = function () {\n  this.cleanup();\n};\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, unloadHandler, false);\n  }\n}\n\nfunction unloadHandler () {\n  for (var i in Request.requests) {\n    if (Request.requests.hasOwnProperty(i)) {\n      Request.requests[i].abort();\n    }\n  }\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/polling-xhr.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/polling.js":
/*!*****************************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/polling.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Module dependencies.\n */\n\nvar Transport = __webpack_require__(/*! ../transport */ \"./jaas-client/node_modules/engine.io-client/lib/transport.js\");\nvar parseqs = __webpack_require__(/*! parseqs */ \"./jaas-client/node_modules/parseqs/index.js\");\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./jaas-client/node_modules/component-inherit/index.js\");\nvar yeast = __webpack_require__(/*! yeast */ \"./jaas-client/node_modules/yeast/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('engine.io-client:polling');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Polling;\n\n/**\n * Is XHR2 supported?\n */\n\nvar hasXHR2 = (function () {\n  var XMLHttpRequest = __webpack_require__(/*! xmlhttprequest-ssl */ \"./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js\");\n  var xhr = new XMLHttpRequest({ xdomain: false });\n  return null != xhr.responseType;\n})();\n\n/**\n * Polling interface.\n *\n * @param {Object} opts\n * @api private\n */\n\nfunction Polling (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (!hasXHR2 || forceBase64) {\n    this.supportsBinary = false;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(Polling, Transport);\n\n/**\n * Transport name.\n */\n\nPolling.prototype.name = 'polling';\n\n/**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n\nPolling.prototype.doOpen = function () {\n  this.poll();\n};\n\n/**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n\nPolling.prototype.pause = function (onPause) {\n  var self = this;\n\n  this.readyState = 'pausing';\n\n  function pause () {\n    debug('paused');\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n      debug('we are currently polling - waiting to pause');\n      total++;\n      this.once('pollComplete', function () {\n        debug('pre-pause polling complete');\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n      debug('we are currently writing - waiting to pause');\n      total++;\n      this.once('drain', function () {\n        debug('pre-pause writing complete');\n        --total || pause();\n      });\n    }\n  } else {\n    pause();\n  }\n};\n\n/**\n * Starts polling cycle.\n *\n * @api public\n */\n\nPolling.prototype.poll = function () {\n  debug('polling');\n  this.polling = true;\n  this.doPoll();\n  this.emit('poll');\n};\n\n/**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n\nPolling.prototype.onData = function (data) {\n  var self = this;\n  debug('polling got data %s', data);\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState) {\n      self.onOpen();\n    }\n\n    // if its a close packet, we close the ongoing requests\n    if ('close' === packet.type) {\n      self.onClose();\n      return false;\n    }\n\n    // otherwise bypass onData and handle the message\n    self.onPacket(packet);\n  };\n\n  // decode payload\n  parser.decodePayload(data, this.socket.binaryType, callback);\n\n  // if an event did not trigger closing\n  if ('closed' !== this.readyState) {\n    // if we got data we're not polling\n    this.polling = false;\n    this.emit('pollComplete');\n\n    if ('open' === this.readyState) {\n      this.poll();\n    } else {\n      debug('ignoring poll - transport state \"%s\"', this.readyState);\n    }\n  }\n};\n\n/**\n * For polling, send a close packet.\n *\n * @api private\n */\n\nPolling.prototype.doClose = function () {\n  var self = this;\n\n  function close () {\n    debug('writing close packet');\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n    debug('transport open - closing');\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n    debug('transport not open - deferring close');\n    this.once('open', close);\n  }\n};\n\n/**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n\nPolling.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n  var callbackfn = function () {\n    self.writable = true;\n    self.emit('drain');\n  };\n\n  parser.encodePayload(packets, this.supportsBinary, function (data) {\n    self.doWrite(data, callbackfn);\n  });\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nPolling.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'https' : 'http';\n  var port = '';\n\n  // cache busting is forced\n  if (false !== this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  if (!this.supportsBinary && !query.sid) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // avoid port if default for schema\n  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n     ('http' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/polling.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/websocket.js":
/*!*******************************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/websocket.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(Buffer) {/**\n * Module dependencies.\n */\n\nvar Transport = __webpack_require__(/*! ../transport */ \"./jaas-client/node_modules/engine.io-client/lib/transport.js\");\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\nvar parseqs = __webpack_require__(/*! parseqs */ \"./jaas-client/node_modules/parseqs/index.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./jaas-client/node_modules/component-inherit/index.js\");\nvar yeast = __webpack_require__(/*! yeast */ \"./jaas-client/node_modules/yeast/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = __webpack_require__(/*! ws */ 0);\n  } catch (e) { }\n}\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\nvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\n/**\n * Module exports.\n */\n\nmodule.exports = WS;\n\n/**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n\nfunction WS (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (forceBase64) {\n    this.supportsBinary = false;\n  }\n  this.perMessageDeflate = opts.perMessageDeflate;\n  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(WS, Transport);\n\n/**\n * Transport name.\n *\n * @api public\n */\n\nWS.prototype.name = 'websocket';\n\n/*\n * WebSockets support binary\n */\n\nWS.prototype.supportsBinary = true;\n\n/**\n * Opens socket.\n *\n * @api private\n */\n\nWS.prototype.doOpen = function () {\n  if (!this.check()) {\n    // let probe timeout\n    return;\n  }\n\n  var uri = this.uri();\n  var protocols = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\n\n    // SSL options for Node.js client\n    opts.pfx = this.pfx;\n    opts.key = this.key;\n    opts.passphrase = this.passphrase;\n    opts.cert = this.cert;\n    opts.ca = this.ca;\n    opts.ciphers = this.ciphers;\n    opts.rejectUnauthorized = this.rejectUnauthorized;\n  }\n\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(uri, protocols, opts);\n  } catch (err) {\n    return this.emit('error', err);\n  }\n\n  if (this.ws.binaryType === undefined) {\n    this.supportsBinary = false;\n  }\n\n  if (this.ws.supports && this.ws.supports.binary) {\n    this.supportsBinary = true;\n    this.ws.binaryType = 'nodebuffer';\n  } else {\n    this.ws.binaryType = 'arraybuffer';\n  }\n\n  this.addEventListeners();\n};\n\n/**\n * Adds event listeners to the socket\n *\n * @api private\n */\n\nWS.prototype.addEventListeners = function () {\n  var self = this;\n\n  this.ws.onopen = function () {\n    self.onOpen();\n  };\n  this.ws.onclose = function () {\n    self.onClose();\n  };\n  this.ws.onmessage = function (ev) {\n    self.onData(ev.data);\n  };\n  this.ws.onerror = function (e) {\n    self.onError('websocket error', e);\n  };\n};\n\n/**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n\nWS.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n\n  // encodePacket efficient as it uses WS framing\n  // no need for encodePayload\n  var total = packets.length;\n  for (var i = 0, l = total; i < l; i++) {\n    (function (packet) {\n      parser.encodePacket(packet, self.supportsBinary, function (data) {\n        if (!self.usingBrowserWebSocket) {\n          // always create a new object (GH-437)\n          var opts = {};\n          if (packet.options) {\n            opts.compress = packet.options.compress;\n          }\n\n          if (self.perMessageDeflate) {\n            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n            if (len < self.perMessageDeflate.threshold) {\n              opts.compress = false;\n            }\n          }\n        }\n\n        // Sometimes the websocket has already been closed but the browser didn't\n        // have a chance of informing us about it yet, in that case send will\n        // throw an error\n        try {\n          if (self.usingBrowserWebSocket) {\n            // TypeError is thrown when passing the second argument on Safari\n            self.ws.send(data);\n          } else {\n            self.ws.send(data, opts);\n          }\n        } catch (e) {\n          debug('websocket closed before onclose event');\n        }\n\n        --total || done();\n      });\n    })(packets[i]);\n  }\n\n  function done () {\n    self.emit('flush');\n\n    // fake drain\n    // defer to next tick to allow Socket to clear writeBuffer\n    setTimeout(function () {\n      self.writable = true;\n      self.emit('drain');\n    }, 0);\n  }\n};\n\n/**\n * Called upon close\n *\n * @api private\n */\n\nWS.prototype.onClose = function () {\n  Transport.prototype.onClose.call(this);\n};\n\n/**\n * Closes socket.\n *\n * @api private\n */\n\nWS.prototype.doClose = function () {\n  if (typeof this.ws !== 'undefined') {\n    this.ws.close();\n  }\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nWS.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'wss' : 'ws';\n  var port = '';\n\n  // avoid port if default for schema\n  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // append timestamp to URI\n  if (this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  // communicate binary support capabilities\n  if (!this.supportsBinary) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n/**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n\nWS.prototype.check = function () {\n  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../node_modules/buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/websocket.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// browser shim for xmlhttprequest module\n\nvar hasCORS = __webpack_require__(/*! has-cors */ \"./jaas-client/node_modules/has-cors/index.js\");\nvar globalThis = __webpack_require__(/*! ./globalThis */ \"./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js\");\n\nmodule.exports = function (opts) {\n  var xdomain = opts.xdomain;\n\n  // scheme must be same when usign XDomainRequest\n  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n  var xscheme = opts.xscheme;\n\n  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n  // https://github.com/Automattic/engine.io-client/pull/217\n  var enablesXDR = opts.enablesXDR;\n\n  // XMLHttpRequest can be disabled on IE\n  try {\n    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n      return new XMLHttpRequest();\n    }\n  } catch (e) { }\n\n  // Use XDomainRequest for IE8 if enablesXDR is true\n  // because loading bar keeps flashing when using jsonp-polling\n  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n  try {\n    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n      return new XDomainRequest();\n    }\n  } catch (e) { }\n\n  if (!xdomain) {\n    try {\n      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-parser/lib/browser.js":
/*!******************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-parser/lib/browser.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Module dependencies.\n */\n\nvar keys = __webpack_require__(/*! ./keys */ \"./jaas-client/node_modules/engine.io-parser/lib/keys.js\");\nvar hasBinary = __webpack_require__(/*! has-binary2 */ \"./jaas-client/node_modules/has-binary2/index.js\");\nvar sliceBuffer = __webpack_require__(/*! arraybuffer.slice */ \"./jaas-client/node_modules/arraybuffer.slice/index.js\");\nvar after = __webpack_require__(/*! after */ \"./jaas-client/node_modules/after/index.js\");\nvar utf8 = __webpack_require__(/*! ./utf8 */ \"./jaas-client/node_modules/engine.io-parser/lib/utf8.js\");\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = __webpack_require__(/*! base64-arraybuffer */ \"./jaas-client/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js\");\n}\n\n/**\n * Check if we are running an android browser. That requires us to use\n * ArrayBuffer with polling transports...\n *\n * http://ghinda.net/jpeg-blob-ajax-android/\n */\n\nvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\n/**\n * Check if we are running in PhantomJS.\n * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n * https://github.com/ariya/phantomjs/issues/11395\n * @type boolean\n */\nvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\n/**\n * When true, avoids using Blobs to encode payloads.\n * @type boolean\n */\nvar dontSendBlobs = isAndroid || isPhantomJS;\n\n/**\n * Current protocol version.\n */\n\nexports.protocol = 3;\n\n/**\n * Packet types.\n */\n\nvar packets = exports.packets = {\n    open:     0    // non-ws\n  , close:    1    // non-ws\n  , ping:     2\n  , pong:     3\n  , message:  4\n  , upgrade:  5\n  , noop:     6\n};\n\nvar packetslist = keys(packets);\n\n/**\n * Premade error packet.\n */\n\nvar err = { type: 'error', data: 'parser error' };\n\n/**\n * Create a blob api even for blob builder when vendor prefixes exist\n */\n\nvar Blob = __webpack_require__(/*! blob */ \"./jaas-client/node_modules/blob/index.js\");\n\n/**\n * Encodes a packet.\n *\n *     <packet type id> [ <data> ]\n *\n * Example:\n *\n *     5hello world\n *     3\n *     4\n *\n * Binary is encoded in an identical principle\n *\n * @api private\n */\n\nexports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\n    callback = utf8encode;\n    utf8encode = null;\n  }\n\n  var data = (packet.data === undefined)\n    ? undefined\n    : packet.data.buffer || packet.data;\n\n  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n    return encodeBlob(packet, supportsBinary, callback);\n  }\n\n  // might be an object with { base64: true, data: dataAsBase64String }\n  if (data && data.base64) {\n    return encodeBase64Object(packet, callback);\n  }\n\n  // Sending data as a utf-8 string\n  var encoded = packets[packet.type];\n\n  // data fragment is optional\n  if (undefined !== packet.data) {\n    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n  }\n\n  return callback('' + encoded);\n\n};\n\nfunction encodeBase64Object(packet, callback) {\n  // packet data is an object { base64: true, data: dataAsBase64String }\n  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n  return callback(message);\n}\n\n/**\n * Encode packet helpers for binary types\n */\n\nfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var data = packet.data;\n  var contentArray = new Uint8Array(data);\n  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\n  resultBuffer[0] = packets[packet.type];\n  for (var i = 0; i < contentArray.length; i++) {\n    resultBuffer[i+1] = contentArray[i];\n  }\n\n  return callback(resultBuffer.buffer);\n}\n\nfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var fr = new FileReader();\n  fr.onload = function() {\n    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n  };\n  return fr.readAsArrayBuffer(packet.data);\n}\n\nfunction encodeBlob(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  if (dontSendBlobs) {\n    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n  }\n\n  var length = new Uint8Array(1);\n  length[0] = packets[packet.type];\n  var blob = new Blob([length.buffer, packet.data]);\n\n  return callback(blob);\n}\n\n/**\n * Encodes a packet with binary data in a base64 string\n *\n * @param {Object} packet, has `type` and `data`\n * @return {String} base64 encoded message\n */\n\nexports.encodeBase64Packet = function(packet, callback) {\n  var message = 'b' + exports.packets[packet.type];\n  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n    var fr = new FileReader();\n    fr.onload = function() {\n      var b64 = fr.result.split(',')[1];\n      callback(message + b64);\n    };\n    return fr.readAsDataURL(packet.data);\n  }\n\n  var b64data;\n  try {\n    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n  } catch (e) {\n    // iPhone Safari doesn't let you apply with typed arrays\n    var typed = new Uint8Array(packet.data);\n    var basic = new Array(typed.length);\n    for (var i = 0; i < typed.length; i++) {\n      basic[i] = typed[i];\n    }\n    b64data = String.fromCharCode.apply(null, basic);\n  }\n  message += btoa(b64data);\n  return callback(message);\n};\n\n/**\n * Decodes a packet. Changes format to Blob if requested.\n *\n * @return {Object} with `type` and `data` (if any)\n * @api private\n */\n\nexports.decodePacket = function (data, binaryType, utf8decode) {\n  if (data === undefined) {\n    return err;\n  }\n  // String data\n  if (typeof data === 'string') {\n    if (data.charAt(0) === 'b') {\n      return exports.decodeBase64Packet(data.substr(1), binaryType);\n    }\n\n    if (utf8decode) {\n      data = tryDecode(data);\n      if (data === false) {\n        return err;\n      }\n    }\n    var type = data.charAt(0);\n\n    if (Number(type) != type || !packetslist[type]) {\n      return err;\n    }\n\n    if (data.length > 1) {\n      return { type: packetslist[type], data: data.substring(1) };\n    } else {\n      return { type: packetslist[type] };\n    }\n  }\n\n  var asArray = new Uint8Array(data);\n  var type = asArray[0];\n  var rest = sliceBuffer(data, 1);\n  if (Blob && binaryType === 'blob') {\n    rest = new Blob([rest]);\n  }\n  return { type: packetslist[type], data: rest };\n};\n\nfunction tryDecode(data) {\n  try {\n    data = utf8.decode(data, { strict: false });\n  } catch (e) {\n    return false;\n  }\n  return data;\n}\n\n/**\n * Decodes a packet encoded in a base64 string\n *\n * @param {String} base64 encoded message\n * @return {Object} with `type` and `data` (if any)\n */\n\nexports.decodeBase64Packet = function(msg, binaryType) {\n  var type = packetslist[msg.charAt(0)];\n  if (!base64encoder) {\n    return { type: type, data: { base64: true, data: msg.substr(1) } };\n  }\n\n  var data = base64encoder.decode(msg.substr(1));\n\n  if (binaryType === 'blob' && Blob) {\n    data = new Blob([data]);\n  }\n\n  return { type: type, data: data };\n};\n\n/**\n * Encodes multiple messages (payload).\n *\n *     <length>:data\n *\n * Example:\n *\n *     11:hello world2:hi\n *\n * If any contents are binary, they will be encoded as base64 strings. Base64\n * encoded strings are marked with a b before the length specifier\n *\n * @param {Array} packets\n * @api private\n */\n\nexports.encodePayload = function (packets, supportsBinary, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = null;\n  }\n\n  var isBinary = hasBinary(packets);\n\n  if (supportsBinary && isBinary) {\n    if (Blob && !dontSendBlobs) {\n      return exports.encodePayloadAsBlob(packets, callback);\n    }\n\n    return exports.encodePayloadAsArrayBuffer(packets, callback);\n  }\n\n  if (!packets.length) {\n    return callback('0:');\n  }\n\n  function setLengthHeader(message) {\n    return message.length + ':' + message;\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n      doneCallback(null, setLengthHeader(message));\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(results.join(''));\n  });\n};\n\n/**\n * Async array map using after\n */\n\nfunction map(ary, each, done) {\n  var result = new Array(ary.length);\n  var next = after(ary.length, done);\n\n  var eachWithIndex = function(i, el, cb) {\n    each(el, function(error, msg) {\n      result[i] = msg;\n      cb(error, result);\n    });\n  };\n\n  for (var i = 0; i < ary.length; i++) {\n    eachWithIndex(i, ary[i], next);\n  }\n}\n\n/*\n * Decodes data when a payload is maybe expected. Possible binary contents are\n * decoded from their base64 representation\n *\n * @param {String} data, callback method\n * @api public\n */\n\nexports.decodePayload = function (data, binaryType, callback) {\n  if (typeof data !== 'string') {\n    return exports.decodePayloadAsBinary(data, binaryType, callback);\n  }\n\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var packet;\n  if (data === '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n  var length = '', n, msg;\n\n  for (var i = 0, l = data.length; i < l; i++) {\n    var chr = data.charAt(i);\n\n    if (chr !== ':') {\n      length += chr;\n      continue;\n    }\n\n    if (length === '' || (length != (n = Number(length)))) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    msg = data.substr(i + 1, n);\n\n    if (length != msg.length) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    if (msg.length) {\n      packet = exports.decodePacket(msg, binaryType, false);\n\n      if (err.type === packet.type && err.data === packet.data) {\n        // parser error in individual packet - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      var ret = callback(packet, i + n, l);\n      if (false === ret) return;\n    }\n\n    // advance cursor\n    i += n;\n    length = '';\n  }\n\n  if (length !== '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n};\n\n/**\n * Encodes multiple messages (payload) as binary.\n *\n * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n * 255><data>\n *\n * Example:\n * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n *\n * @param {Array} packets\n * @return {ArrayBuffer} encoded payload\n * @api private\n */\n\nexports.encodePayloadAsArrayBuffer = function(packets, callback) {\n  if (!packets.length) {\n    return callback(new ArrayBuffer(0));\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(data) {\n      return doneCallback(null, data);\n    });\n  }\n\n  map(packets, encodeOne, function(err, encodedPackets) {\n    var totalLength = encodedPackets.reduce(function(acc, p) {\n      var len;\n      if (typeof p === 'string'){\n        len = p.length;\n      } else {\n        len = p.byteLength;\n      }\n      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n    }, 0);\n\n    var resultArray = new Uint8Array(totalLength);\n\n    var bufferIndex = 0;\n    encodedPackets.forEach(function(p) {\n      var isString = typeof p === 'string';\n      var ab = p;\n      if (isString) {\n        var view = new Uint8Array(p.length);\n        for (var i = 0; i < p.length; i++) {\n          view[i] = p.charCodeAt(i);\n        }\n        ab = view.buffer;\n      }\n\n      if (isString) { // not true binary\n        resultArray[bufferIndex++] = 0;\n      } else { // true binary\n        resultArray[bufferIndex++] = 1;\n      }\n\n      var lenStr = ab.byteLength.toString();\n      for (var i = 0; i < lenStr.length; i++) {\n        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n      }\n      resultArray[bufferIndex++] = 255;\n\n      var view = new Uint8Array(ab);\n      for (var i = 0; i < view.length; i++) {\n        resultArray[bufferIndex++] = view[i];\n      }\n    });\n\n    return callback(resultArray.buffer);\n  });\n};\n\n/**\n * Encode as Blob\n */\n\nexports.encodePayloadAsBlob = function(packets, callback) {\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(encoded) {\n      var binaryIdentifier = new Uint8Array(1);\n      binaryIdentifier[0] = 1;\n      if (typeof encoded === 'string') {\n        var view = new Uint8Array(encoded.length);\n        for (var i = 0; i < encoded.length; i++) {\n          view[i] = encoded.charCodeAt(i);\n        }\n        encoded = view.buffer;\n        binaryIdentifier[0] = 0;\n      }\n\n      var len = (encoded instanceof ArrayBuffer)\n        ? encoded.byteLength\n        : encoded.size;\n\n      var lenStr = len.toString();\n      var lengthAry = new Uint8Array(lenStr.length + 1);\n      for (var i = 0; i < lenStr.length; i++) {\n        lengthAry[i] = parseInt(lenStr[i]);\n      }\n      lengthAry[lenStr.length] = 255;\n\n      if (Blob) {\n        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n        doneCallback(null, blob);\n      }\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(new Blob(results));\n  });\n};\n\n/*\n * Decodes data when a payload is maybe expected. Strings are decoded by\n * interpreting each byte as a key code for entries marked to start with 0. See\n * description of encodePayloadAsBinary\n *\n * @param {ArrayBuffer} data, callback method\n * @api public\n */\n\nexports.decodePayloadAsBinary = function (data, binaryType, callback) {\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var bufferTail = data;\n  var buffers = [];\n\n  while (bufferTail.byteLength > 0) {\n    var tailArray = new Uint8Array(bufferTail);\n    var isString = tailArray[0] === 0;\n    var msgLength = '';\n\n    for (var i = 1; ; i++) {\n      if (tailArray[i] === 255) break;\n\n      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\n\n    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n    msgLength = parseInt(msgLength);\n\n    var msg = sliceBuffer(bufferTail, 0, msgLength);\n    if (isString) {\n      try {\n        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n      } catch (e) {\n        // iPhone Safari doesn't let you apply to typed arrays\n        var typed = new Uint8Array(msg);\n        msg = '';\n        for (var i = 0; i < typed.length; i++) {\n          msg += String.fromCharCode(typed[i]);\n        }\n      }\n    }\n\n    buffers.push(msg);\n    bufferTail = sliceBuffer(bufferTail, msgLength);\n  }\n\n  var total = buffers.length;\n  buffers.forEach(function(buffer, i) {\n    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n  });\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-parser/lib/browser.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-parser/lib/keys.js":
/*!***************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-parser/lib/keys.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("\n/**\n * Gets the keys for an object.\n *\n * @return {Array} keys\n * @api private\n */\n\nmodule.exports = Object.keys || function keys (obj){\n  var arr = [];\n  var has = Object.prototype.hasOwnProperty;\n\n  for (var i in obj) {\n    if (has.call(obj, i)) {\n      arr.push(i);\n    }\n  }\n  return arr;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-parser/lib/keys.js?");

/***/ }),

/***/ "./jaas-client/node_modules/engine.io-parser/lib/utf8.js":
/*!***************************************************************!*\
  !*** ./jaas-client/node_modules/engine.io-parser/lib/utf8.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-parser/lib/utf8.js?");

/***/ }),

/***/ "./jaas-client/node_modules/has-binary2/index.js":
/*!*******************************************************!*\
  !*** ./jaas-client/node_modules/has-binary2/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(Buffer) {/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = __webpack_require__(/*! isarray */ \"./jaas-client/node_modules/has-binary2/node_modules/isarray/index.js\");\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\n  }\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/has-binary2/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/has-binary2/node_modules/isarray/index.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/has-binary2/node_modules/isarray/index.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/has-binary2/node_modules/isarray/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/has-cors/index.js":
/*!****************************************************!*\
  !*** ./jaas-client/node_modules/has-cors/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n    'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n  // if XMLHttp support is disabled in IE then it will throw\n  // when trying to create\n  module.exports = false;\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/has-cors/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/history/esm/history.js":
/*!*********************************************************!*\
  !*** ./jaas-client/node_modules/history/esm/history.js ***!
  \*********************************************************/
/*! exports provided: createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createBrowserHistory\", function() { return createBrowserHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createHashHistory\", function() { return createHashHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createMemoryHistory\", function() { return createMemoryHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createLocation\", function() { return createLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"locationsAreEqual\", function() { return locationsAreEqual; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parsePath\", function() { return parsePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createPath\", function() { return createPath; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var resolve_pathname__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! resolve-pathname */ \"./jaas-client/node_modules/resolve-pathname/esm/resolve-pathname.js\");\n/* harmony import */ var value_equal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! value-equal */ \"./jaas-client/node_modules/value-equal/esm/value-equal.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tiny-invariant */ \"./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\n\n\n\n\n\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n  return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n  var hashIndex = pathname.indexOf('#');\n\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n}\nfunction createPath(location) {\n  var pathname = location.pathname,\n      search = location.search,\n      hash = location.hash;\n  var path = pathname || '/';\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n  return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n  var location;\n\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = parsePath(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, path);\n    if (location.pathname === undefined) location.pathname = '';\n\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n\n  if (key) location.key = key;\n\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = Object(resolve_pathname__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n\n  return location;\n}\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && Object(value_equal__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n  var prompt = null;\n\n  function setPrompt(nextPrompt) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(prompt == null, 'A history supports only one prompt at a time') : undefined;\n    prompt = nextPrompt;\n    return function () {\n      if (prompt === nextPrompt) prompt = null;\n    };\n  }\n\n  function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n    // TODO: If another transition starts while we're still confirming\n    // the previous one, we may end up in a weird state. Figure out the\n    // best way to handle this.\n    if (prompt != null) {\n      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n      if (typeof result === 'string') {\n        if (typeof getUserConfirmation === 'function') {\n          getUserConfirmation(result, callback);\n        } else {\n           true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : undefined;\n          callback(true);\n        }\n      } else {\n        // Return false from a transition hook to cancel the transition.\n        callback(result !== false);\n      }\n    } else {\n      callback(true);\n    }\n  }\n\n  var listeners = [];\n\n  function appendListener(fn) {\n    var isActive = true;\n\n    function listener() {\n      if (isActive) fn.apply(void 0, arguments);\n    }\n\n    listeners.push(listener);\n    return function () {\n      isActive = false;\n      listeners = listeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function notifyListeners() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    listeners.forEach(function (listener) {\n      return listener.apply(void 0, args);\n    });\n  }\n\n  return {\n    setPrompt: setPrompt,\n    confirmTransitionTo: confirmTransitionTo,\n    appendListener: appendListener,\n    notifyListeners: notifyListeners\n  };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n  callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = window.navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n  return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false, 'Browser history needs a DOM') : undefined : void 0;\n  var globalHistory = window.history;\n  var canUseHistory = supportsHistory();\n  var needsHashChangeListener = !supportsPopStateOnHashChange();\n  var _props = props,\n      _props$forceRefresh = _props.forceRefresh,\n      forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n  function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n        key = _ref.key,\n        state = _ref.state;\n\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n    var path = pathname + search + hash;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : undefined;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path, state, key);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if (isExtraneousPopstateEvent(event)) return;\n    handlePop(getDOMLocation(event.state));\n  }\n\n  function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  }\n\n  var forceNextPop = false;\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  }\n\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key]; // Public interface\n\n  function createHref(location) {\n    return basename + createPath(location);\n  }\n\n  function push(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.pushState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex + 1);\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n         true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : undefined;\n        window.location.href = href;\n      }\n    });\n  }\n\n  function replace(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.replaceState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n         true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : undefined;\n        window.location.replace(href);\n      }\n    });\n  }\n\n  function go(n) {\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n  hashbang: {\n    encodePath: function encodePath(path) {\n      return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n    },\n    decodePath: function decodePath(path) {\n      return path.charAt(0) === '!' ? path.substr(1) : path;\n    }\n  },\n  noslash: {\n    encodePath: stripLeadingSlash,\n    decodePath: addLeadingSlash\n  },\n  slash: {\n    encodePath: addLeadingSlash,\n    decodePath: addLeadingSlash\n  }\n};\n\nfunction stripHash(url) {\n  var hashIndex = url.indexOf('#');\n  return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var hashIndex = href.indexOf('#');\n  return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n  window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false, 'Hash history needs a DOM') : undefined : void 0;\n  var globalHistory = window.history;\n  var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n  var _props = props,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$hashType = _props.hashType,\n      hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n  var _HashPathCoders$hashT = HashPathCoders[hashType],\n      encodePath = _HashPathCoders$hashT.encodePath,\n      decodePath = _HashPathCoders$hashT.decodePath;\n\n  function getDOMLocation() {\n    var path = decodePath(getHashPath());\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : undefined;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  var forceNextPop = false;\n  var ignorePath = null;\n\n  function locationsAreEqual$$1(a, b) {\n    return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n  }\n\n  function handleHashChange() {\n    var path = getHashPath();\n    var encodedPath = encodePath(path);\n\n    if (path !== encodedPath) {\n      // Ensure we always have a properly-encoded hash.\n      replaceHashPath(encodedPath);\n    } else {\n      var location = getDOMLocation();\n      var prevLocation = history.location;\n      if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n      if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n      ignorePath = null;\n      handlePop(location);\n    }\n  }\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of paths we've seen in sessionStorage.\n    // Instead, we just default to 0 for paths we don't know.\n\n    var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  } // Ensure the hash is encoded properly before doing anything else.\n\n\n  var path = getHashPath();\n  var encodedPath = encodePath(path);\n  if (path !== encodedPath) replaceHashPath(encodedPath);\n  var initialLocation = getDOMLocation();\n  var allPaths = [createPath(initialLocation)]; // Public interface\n\n  function createHref(location) {\n    var baseTag = document.querySelector('base');\n    var href = '';\n\n    if (baseTag && baseTag.getAttribute('href')) {\n      href = stripHash(window.location.href);\n    }\n\n    return href + '#' + encodePath(basename + createPath(location));\n  }\n\n  function push(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Hash history cannot push state; it is ignored') : undefined;\n    var action = 'PUSH';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a PUSH, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        pushHashPath(encodedPath);\n        var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n        var nextPaths = allPaths.slice(0, prevIndex + 1);\n        nextPaths.push(path);\n        allPaths = nextPaths;\n        setState({\n          action: action,\n          location: location\n        });\n      } else {\n         true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : undefined;\n        setState();\n      }\n    });\n  }\n\n  function replace(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Hash history cannot replace state; it is ignored') : undefined;\n    var action = 'REPLACE';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        replaceHashPath(encodedPath);\n      }\n\n      var prevIndex = allPaths.indexOf(createPath(history.location));\n      if (prevIndex !== -1) allPaths[prevIndex] = path;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : undefined;\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(HashChangeEvent$1, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(HashChangeEvent$1, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n  return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  var _props = props,\n      getUserConfirmation = _props.getUserConfirmation,\n      _props$initialEntries = _props.initialEntries,\n      initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n      _props$initialIndex = _props.initialIndex,\n      initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n    history.length = history.entries.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var index = clamp(initialIndex, 0, initialEntries.length - 1);\n  var entries = initialEntries.map(function (entry) {\n    return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n  }); // Public interface\n\n  var createHref = createPath;\n\n  function push(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var prevIndex = history.index;\n      var nextIndex = prevIndex + 1;\n      var nextEntries = history.entries.slice(0);\n\n      if (nextEntries.length > nextIndex) {\n        nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n      } else {\n        nextEntries.push(location);\n      }\n\n      setState({\n        action: action,\n        location: location,\n        index: nextIndex,\n        entries: nextEntries\n      });\n    });\n  }\n\n  function replace(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      history.entries[history.index] = location;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n    var action = 'POP';\n    var location = history.entries[nextIndex];\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (ok) {\n        setState({\n          action: action,\n          location: location,\n          index: nextIndex\n        });\n      } else {\n        // Mimic the behavior of DOM histories by\n        // causing a render after a cancelled POP.\n        setState();\n      }\n    });\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function canGo(n) {\n    var nextIndex = history.index + n;\n    return nextIndex >= 0 && nextIndex < history.entries.length;\n  }\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    return transitionManager.setPrompt(prompt);\n  }\n\n  function listen(listener) {\n    return transitionManager.appendListener(listener);\n  }\n\n  var history = {\n    length: entries.length,\n    action: 'POP',\n    location: entries[index],\n    index: index,\n    entries: entries,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    canGo: canGo,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/history/esm/history.js?");

/***/ }),

/***/ "./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js":
/*!**********************************************************************************************!*\
  !*** ./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js ***!
  \**********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar reactIs = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js?");

/***/ }),

/***/ "./jaas-client/node_modules/hyphenate-style-name/index.js":
/*!****************************************************************!*\
  !*** ./jaas-client/node_modules/hyphenate-style-name/index.js ***!
  \****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n  if (cache.hasOwnProperty(name)) {\n    return cache[name]\n  }\n\n  var hName = name.replace(uppercasePattern, toHyphenLower)\n  return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hyphenateStyleName);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/hyphenate-style-name/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/indexof/index.js":
/*!***************************************************!*\
  !*** ./jaas-client/node_modules/indexof/index.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n\n//# sourceURL=webpack:///./jaas-client/node_modules/indexof/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/is-in-browser/dist/module.js":
/*!***************************************************************!*\
  !*** ./jaas-client/node_modules/is-in-browser/dist/module.js ***!
  \***************************************************************/
/*! exports provided: isBrowser, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isBrowser\", function() { return isBrowser; });\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar isBrowser = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" && (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === 'object' && document.nodeType === 9;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isBrowser);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/is-in-browser/dist/module.js?");

/***/ }),

/***/ "./jaas-client/node_modules/isarray/index.js":
/*!***************************************************!*\
  !*** ./jaas-client/node_modules/isarray/index.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/isarray/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js":
/*!******************************************************************************************!*\
  !*** ./jaas-client/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js ***!
  \******************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var hyphenate_style_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! hyphenate-style-name */ \"./jaas-client/node_modules/hyphenate-style-name/index.js\");\n\n\n/**\n * Convert camel cased property names to dash separated.\n *\n * @param {Object} style\n * @return {Object}\n */\n\nfunction convertCase(style) {\n  var converted = {};\n\n  for (var prop in style) {\n    var key = prop.indexOf('--') === 0 ? prop : Object(hyphenate_style_name__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(prop);\n    converted[key] = style[prop];\n  }\n\n  if (style.fallbacks) {\n    if (Array.isArray(style.fallbacks)) converted.fallbacks = style.fallbacks.map(convertCase);else converted.fallbacks = convertCase(style.fallbacks);\n  }\n\n  return converted;\n}\n/**\n * Allow camel cased property names by converting them back to dasherized.\n *\n * @param {Rule} rule\n */\n\n\nfunction camelCase() {\n  function onProcessStyle(style) {\n    if (Array.isArray(style)) {\n      // Handle rules like @font-face, which can have multiple styles in an array\n      for (var index = 0; index < style.length; index++) {\n        style[index] = convertCase(style[index]);\n      }\n\n      return style;\n    }\n\n    return convertCase(style);\n  }\n\n  function onChangeValue(value, prop, rule) {\n    if (prop.indexOf('--') === 0) {\n      return value;\n    }\n\n    var hyphenatedProp = Object(hyphenate_style_name__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(prop); // There was no camel case in place\n\n    if (prop === hyphenatedProp) return value;\n    rule.prop(hyphenatedProp, value); // Core will ignore that property value we set the proper one above.\n\n    return null;\n  }\n\n  return {\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (camelCase);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js":
/*!**********************************************************************************************!*\
  !*** ./jaas-client/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js ***!
  \**********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n\n\nvar px = jss__WEBPACK_IMPORTED_MODULE_0__[\"hasCSSTOMSupport\"] && CSS ? CSS.px : 'px';\nvar ms = jss__WEBPACK_IMPORTED_MODULE_0__[\"hasCSSTOMSupport\"] && CSS ? CSS.ms : 'ms';\nvar percent = jss__WEBPACK_IMPORTED_MODULE_0__[\"hasCSSTOMSupport\"] && CSS ? CSS.percent : '%';\n/**\n * Generated jss-plugin-default-unit CSS property units\n *\n * @type object\n */\n\nvar defaultUnits = {\n  // Animation properties\n  'animation-delay': ms,\n  'animation-duration': ms,\n  // Background properties\n  'background-position': px,\n  'background-position-x': px,\n  'background-position-y': px,\n  'background-size': px,\n  // Border Properties\n  border: px,\n  'border-bottom': px,\n  'border-bottom-left-radius': px,\n  'border-bottom-right-radius': px,\n  'border-bottom-width': px,\n  'border-left': px,\n  'border-left-width': px,\n  'border-radius': px,\n  'border-right': px,\n  'border-right-width': px,\n  'border-top': px,\n  'border-top-left-radius': px,\n  'border-top-right-radius': px,\n  'border-top-width': px,\n  'border-width': px,\n  // Margin properties\n  margin: px,\n  'margin-bottom': px,\n  'margin-left': px,\n  'margin-right': px,\n  'margin-top': px,\n  // Padding properties\n  padding: px,\n  'padding-bottom': px,\n  'padding-left': px,\n  'padding-right': px,\n  'padding-top': px,\n  // Mask properties\n  'mask-position-x': px,\n  'mask-position-y': px,\n  'mask-size': px,\n  // Width and height properties\n  height: px,\n  width: px,\n  'min-height': px,\n  'max-height': px,\n  'min-width': px,\n  'max-width': px,\n  // Position properties\n  bottom: px,\n  left: px,\n  top: px,\n  right: px,\n  // Shadow properties\n  'box-shadow': px,\n  'text-shadow': px,\n  // Column properties\n  'column-gap': px,\n  'column-rule': px,\n  'column-rule-width': px,\n  'column-width': px,\n  // Font and text properties\n  'font-size': px,\n  'font-size-delta': px,\n  'letter-spacing': px,\n  'text-indent': px,\n  'text-stroke': px,\n  'text-stroke-width': px,\n  'word-spacing': px,\n  // Motion properties\n  motion: px,\n  'motion-offset': px,\n  // Outline properties\n  outline: px,\n  'outline-offset': px,\n  'outline-width': px,\n  // Perspective properties\n  perspective: px,\n  'perspective-origin-x': percent,\n  'perspective-origin-y': percent,\n  // Transform properties\n  'transform-origin': percent,\n  'transform-origin-x': percent,\n  'transform-origin-y': percent,\n  'transform-origin-z': percent,\n  // Transition properties\n  'transition-delay': ms,\n  'transition-duration': ms,\n  // Alignment properties\n  'vertical-align': px,\n  'flex-basis': px,\n  // Some random properties\n  'shape-margin': px,\n  size: px,\n  // Grid properties\n  grid: px,\n  'grid-gap': px,\n  'grid-row-gap': px,\n  'grid-column-gap': px,\n  'grid-template-rows': px,\n  'grid-template-columns': px,\n  'grid-auto-rows': px,\n  'grid-auto-columns': px,\n  // Not existing properties.\n  // Used to avoid issues with jss-plugin-expand integration.\n  'box-shadow-x': px,\n  'box-shadow-y': px,\n  'box-shadow-blur': px,\n  'box-shadow-spread': px,\n  'font-line-height': px,\n  'text-shadow-x': px,\n  'text-shadow-y': px,\n  'text-shadow-blur': px\n};\n\n/**\n * Clones the object and adds a camel cased property version.\n */\nfunction addCamelCasedVersion(obj) {\n  var regExp = /(-[a-z])/g;\n\n  var replace = function replace(str) {\n    return str[1].toUpperCase();\n  };\n\n  var newObj = {};\n\n  for (var _key in obj) {\n    newObj[_key] = obj[_key];\n    newObj[_key.replace(regExp, replace)] = obj[_key];\n  }\n\n  return newObj;\n}\n\nvar units = addCamelCasedVersion(defaultUnits);\n/**\n * Recursive deep style passing function\n */\n\nfunction iterate(prop, value, options) {\n  if (!value) return value;\n\n  if (Array.isArray(value)) {\n    for (var i = 0; i < value.length; i++) {\n      value[i] = iterate(prop, value[i], options);\n    }\n  } else if (typeof value === 'object') {\n    if (prop === 'fallbacks') {\n      for (var innerProp in value) {\n        value[innerProp] = iterate(innerProp, value[innerProp], options);\n      }\n    } else {\n      for (var _innerProp in value) {\n        value[_innerProp] = iterate(prop + \"-\" + _innerProp, value[_innerProp], options);\n      }\n    }\n  } else if (typeof value === 'number') {\n    var unit = options[prop] || units[prop];\n\n    if (unit) {\n      return typeof unit === 'function' ? unit(value).toString() : \"\" + value + unit;\n    }\n\n    return value.toString();\n  }\n\n  return value;\n}\n/**\n * Add unit to numeric values.\n */\n\n\nfunction defaultUnit(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var camelCasedOptions = addCamelCasedVersion(options);\n\n  function onProcessStyle(style, rule) {\n    if (rule.type !== 'style') return style;\n\n    for (var prop in style) {\n      style[prop] = iterate(prop, style[prop], camelCasedOptions);\n    }\n\n    return style;\n  }\n\n  function onChangeValue(value, prop) {\n    return iterate(prop, value, camelCasedOptions);\n  }\n\n  return {\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (defaultUnit);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n\n\n\nvar at = '@global';\nvar atPrefix = '@global ';\n\nvar GlobalContainerRule =\n/*#__PURE__*/\nfunction () {\n  function GlobalContainerRule(key, styles, options) {\n    this.type = 'global';\n    this.at = at;\n    this.rules = void 0;\n    this.options = void 0;\n    this.key = void 0;\n    this.isProcessed = false;\n    this.key = key;\n    this.options = options;\n    this.rules = new jss__WEBPACK_IMPORTED_MODULE_1__[\"RuleList\"](Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      parent: this\n    }));\n\n    for (var selector in styles) {\n      this.rules.add(selector, styles[selector]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Get a rule.\n   */\n\n\n  var _proto = GlobalContainerRule.prototype;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Create and register rule, run plugins.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, style, options) {\n    var rule = this.rules.add(name, style, options);\n    this.options.jss.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString() {\n    return this.rules.toString();\n  };\n\n  return GlobalContainerRule;\n}();\n\nvar GlobalPrefixedRule =\n/*#__PURE__*/\nfunction () {\n  function GlobalPrefixedRule(key, style, options) {\n    this.type = 'global';\n    this.at = at;\n    this.options = void 0;\n    this.rule = void 0;\n    this.isProcessed = false;\n    this.key = void 0;\n    this.key = key;\n    this.options = options;\n    var selector = key.substr(atPrefix.length);\n    this.rule = options.jss.createRule(selector, style, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      parent: this\n    }));\n  }\n\n  var _proto2 = GlobalPrefixedRule.prototype;\n\n  _proto2.toString = function toString(options) {\n    return this.rule ? this.rule.toString(options) : '';\n  };\n\n  return GlobalPrefixedRule;\n}();\n\nvar separatorRegExp = /\\s*,\\s*/g;\n\nfunction addScope(selector, scope) {\n  var parts = selector.split(separatorRegExp);\n  var scoped = '';\n\n  for (var i = 0; i < parts.length; i++) {\n    scoped += scope + \" \" + parts[i].trim();\n    if (parts[i + 1]) scoped += ', ';\n  }\n\n  return scoped;\n}\n\nfunction handleNestedGlobalContainerRule(rule) {\n  var options = rule.options,\n      style = rule.style;\n  var rules = style ? style[at] : null;\n  if (!rules) return;\n\n  for (var name in rules) {\n    options.sheet.addRule(name, rules[name], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      selector: addScope(name, rule.selector)\n    }));\n  }\n\n  delete style[at];\n}\n\nfunction handlePrefixedGlobalRule(rule) {\n  var options = rule.options,\n      style = rule.style;\n\n  for (var prop in style) {\n    if (prop[0] !== '@' || prop.substr(0, at.length) !== at) continue;\n    var selector = addScope(prop.substr(at.length), rule.selector);\n    options.sheet.addRule(selector, style[prop], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      selector: selector\n    }));\n    delete style[prop];\n  }\n}\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\n\n\nfunction jssGlobal() {\n  function onCreateRule(name, styles, options) {\n    if (!name) return null;\n\n    if (name === at) {\n      return new GlobalContainerRule(name, styles, options);\n    }\n\n    if (name[0] === '@' && name.substr(0, atPrefix.length) === atPrefix) {\n      return new GlobalPrefixedRule(name, styles, options);\n    }\n\n    var parent = options.parent;\n\n    if (parent) {\n      if (parent.type === 'global' || parent.options.parent && parent.options.parent.type === 'global') {\n        options.scoped = false;\n      }\n    }\n\n    if (options.scoped === false) {\n      options.selector = name;\n    }\n\n    return null;\n  }\n\n  function onProcessRule(rule) {\n    if (rule.type !== 'style') return;\n    handleNestedGlobalContainerRule(rule);\n    handlePrefixedGlobalRule(rule);\n  }\n\n  return {\n    onCreateRule: onCreateRule,\n    onProcessRule: onProcessRule\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (jssGlobal);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n\n\n\nvar separatorRegExp = /\\s*,\\s*/g;\nvar parentRegExp = /&/g;\nvar refRegExp = /\\$([\\w-]+)/g;\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\n\nfunction jssNested() {\n  // Get a function to be used for $ref replacement.\n  function getReplaceRef(container, sheet) {\n    return function (match, key) {\n      var rule = container.getRule(key) || sheet && sheet.getRule(key);\n\n      if (rule) {\n        rule = rule;\n        return rule.selector;\n      }\n\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(false, \"[JSS] Could not find the referenced rule \\\"\" + key + \"\\\" in \\\"\" + (container.options.meta || container.toString()) + \"\\\".\") : undefined;\n      return key;\n    };\n  }\n\n  function replaceParentRefs(nestedProp, parentProp) {\n    var parentSelectors = parentProp.split(separatorRegExp);\n    var nestedSelectors = nestedProp.split(separatorRegExp);\n    var result = '';\n\n    for (var i = 0; i < parentSelectors.length; i++) {\n      var parent = parentSelectors[i];\n\n      for (var j = 0; j < nestedSelectors.length; j++) {\n        var nested = nestedSelectors[j];\n        if (result) result += ', '; // Replace all & by the parent or prefix & with the parent.\n\n        result += nested.indexOf('&') !== -1 ? nested.replace(parentRegExp, parent) : parent + \" \" + nested;\n      }\n    }\n\n    return result;\n  }\n\n  function getOptions(rule, container, prevOptions) {\n    // Options has been already created, now we only increase index.\n    if (prevOptions) return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, prevOptions, {\n      index: prevOptions.index + 1\n    });\n    var nestingLevel = rule.options.nestingLevel;\n    nestingLevel = nestingLevel === undefined ? 1 : nestingLevel + 1;\n\n    var options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, rule.options, {\n      nestingLevel: nestingLevel,\n      index: container.indexOf(rule) + 1 // We don't need the parent name to be set options for chlid.\n\n    });\n\n    delete options.name;\n    return options;\n  }\n\n  function onProcessStyle(style, rule, sheet) {\n    if (rule.type !== 'style') return style;\n    var styleRule = rule;\n    var container = styleRule.options.parent;\n    var options;\n    var replaceRef;\n\n    for (var prop in style) {\n      var isNested = prop.indexOf('&') !== -1;\n      var isNestedConditional = prop[0] === '@';\n      if (!isNested && !isNestedConditional) continue;\n      options = getOptions(styleRule, container, options);\n\n      if (isNested) {\n        var selector = replaceParentRefs(prop, styleRule.selector); // Lazily create the ref replacer function just once for\n        // all nested rules within the sheet.\n\n        if (!replaceRef) replaceRef = getReplaceRef(container, sheet); // Replace all $refs.\n\n        selector = selector.replace(refRegExp, replaceRef);\n        container.addRule(selector, style[prop], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n          selector: selector\n        }));\n      } else if (isNestedConditional) {\n        // Place conditional right after the parent rule to ensure right ordering.\n        container.addRule(prop, {}, options) // Flow expects more options but they aren't required\n        // And flow doesn't know this will always be a StyleRule which has the addRule method\n        // $FlowFixMe\n        .addRule(styleRule.key, style[prop], {\n          selector: styleRule.selector\n        });\n      }\n\n      delete style[prop];\n    }\n\n    return style;\n  }\n\n  return {\n    onProcessStyle: onProcessStyle\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (jssNested);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js":
/*!******************************************************************************************!*\
  !*** ./jaas-client/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js ***!
  \******************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Sort props by length.\n */\nfunction jssPropsSort() {\n  var sort = function sort(prop0, prop1) {\n    if (prop0.length === prop1.length) {\n      return prop0 > prop1 ? 1 : -1;\n    }\n\n    return prop0.length - prop1.length;\n  };\n\n  return {\n    onProcessStyle: function onProcessStyle(style, rule) {\n      if (rule.type !== 'style') return style;\n      var newStyle = {};\n      var props = Object.keys(style).sort(sort);\n\n      for (var i = 0; i < props.length; i++) {\n        newStyle[props[i]] = style[props[i]];\n      }\n\n      return newStyle;\n    }\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (jssPropsSort);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js":
/*!************************************************************************************************************!*\
  !*** ./jaas-client/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js ***!
  \************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n\n\n\nvar now = Date.now();\nvar fnValuesNs = \"fnValues\" + now;\nvar fnRuleNs = \"fnStyle\" + ++now;\nfunction functionPlugin() {\n  return {\n    onCreateRule: function onCreateRule(name, decl, options) {\n      if (typeof decl !== 'function') return null;\n      var rule = Object(jss__WEBPACK_IMPORTED_MODULE_1__[\"createRule\"])(name, {}, options);\n      rule[fnRuleNs] = decl;\n      return rule;\n    },\n    onProcessStyle: function onProcessStyle(style, rule) {\n      // We need to extract function values from the declaration, so that we can keep core unaware of them.\n      // We need to do that only once.\n      // We don't need to extract functions on each style update, since this can happen only once.\n      // We don't support function values inside of function rules.\n      if (fnValuesNs in rule || fnRuleNs in rule) return style;\n      var fnValues = {};\n\n      for (var prop in style) {\n        var value = style[prop];\n        if (typeof value !== 'function') continue;\n        delete style[prop];\n        fnValues[prop] = value;\n      } // $FlowFixMe\n\n\n      rule[fnValuesNs] = fnValues;\n      return style;\n    },\n    onUpdate: function onUpdate(data, rule, sheet, options) {\n      var styleRule = rule;\n      var fnRule = styleRule[fnRuleNs]; // If we have a style function, the entire rule is dynamic and style object\n      // will be returned from that function.\n\n      if (fnRule) {\n        // Empty object will remove all currently defined props\n        // in case function rule returns a falsy value.\n        styleRule.style = fnRule(data) || {};\n\n        if (true) {\n          for (var prop in styleRule.style) {\n            if (typeof styleRule.style[prop] === 'function') {\n               true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(false, '[JSS] Function values inside function rules are not supported.') : undefined;\n              break;\n            }\n          }\n        }\n      }\n\n      var fnValues = styleRule[fnValuesNs]; // If we have a fn values map, it is a rule with function values.\n\n      if (fnValues) {\n        for (var _prop in fnValues) {\n          styleRule.prop(_prop, fnValues[_prop](data), options);\n        }\n      }\n    }\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (functionPlugin);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js":
/*!****************************************************************************************************!*\
  !*** ./jaas-client/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js ***!
  \****************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var css_vendor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! css-vendor */ \"./jaas-client/node_modules/css-vendor/dist/css-vendor.esm.js\");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n\n\n\n/**\n * Add vendor prefix to a property name when needed.\n *\n * @api public\n */\n\nfunction jssVendorPrefixer() {\n  function onProcessRule(rule) {\n    if (rule.type === 'keyframes') {\n      var atRule = rule;\n      atRule.at = Object(css_vendor__WEBPACK_IMPORTED_MODULE_0__[\"supportedKeyframes\"])(atRule.at);\n    }\n  }\n\n  function prefixStyle(style) {\n    for (var prop in style) {\n      var value = style[prop];\n\n      if (prop === 'fallbacks' && Array.isArray(value)) {\n        style[prop] = value.map(prefixStyle);\n        continue;\n      }\n\n      var changeProp = false;\n      var supportedProp = Object(css_vendor__WEBPACK_IMPORTED_MODULE_0__[\"supportedProperty\"])(prop);\n      if (supportedProp && supportedProp !== prop) changeProp = true;\n      var changeValue = false;\n      var supportedValue$1 = Object(css_vendor__WEBPACK_IMPORTED_MODULE_0__[\"supportedValue\"])(supportedProp, Object(jss__WEBPACK_IMPORTED_MODULE_1__[\"toCssValue\"])(value));\n      if (supportedValue$1 && supportedValue$1 !== value) changeValue = true;\n\n      if (changeProp || changeValue) {\n        if (changeProp) delete style[prop];\n        style[supportedProp || prop] = supportedValue$1 || value;\n      }\n    }\n\n    return style;\n  }\n\n  function onProcessStyle(style, rule) {\n    if (rule.type !== 'style') return style;\n    return prefixStyle(style);\n  }\n\n  function onChangeValue(value, prop) {\n    return Object(css_vendor__WEBPACK_IMPORTED_MODULE_0__[\"supportedValue\"])(prop, Object(jss__WEBPACK_IMPORTED_MODULE_1__[\"toCssValue\"])(value)) || value;\n  }\n\n  return {\n    onProcessRule: onProcessRule,\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (jssVendorPrefixer);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/jss/dist/jss.esm.js":
/*!******************************************************!*\
  !*** ./jaas-client/node_modules/jss/dist/jss.esm.js ***!
  \******************************************************/
/*! exports provided: default, RuleList, SheetsManager, SheetsRegistry, create, createGenerateId, createRule, getDynamicStyles, hasCSSTOMSupport, sheets, toCssValue */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RuleList\", function() { return RuleList; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SheetsManager\", function() { return SheetsManager; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SheetsRegistry\", function() { return SheetsRegistry; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"create\", function() { return create; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createGenerateId\", function() { return createGenerateId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createRule\", function() { return createRule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getDynamicStyles\", function() { return getDynamicStyles; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hasCSSTOMSupport\", function() { return hasCSSTOMSupport; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sheets\", function() { return sheets; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"toCssValue\", function() { return toCssValue; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var is_in_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! is-in-browser */ \"./jaas-client/node_modules/is-in-browser/dist/module.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n\n\n\n\n\n\n\n\nvar plainObjectConstrurctor = {}.constructor;\nfunction cloneStyle(style) {\n  if (style == null || typeof style !== 'object') return style;\n  if (Array.isArray(style)) return style.map(cloneStyle);\n  if (style.constructor !== plainObjectConstrurctor) return style;\n  var newStyle = {};\n\n  for (var name in style) {\n    newStyle[name] = cloneStyle(style[name]);\n  }\n\n  return newStyle;\n}\n\n/**\n * Create a rule instance.\n */\n\nfunction createRule(name, decl, options) {\n  if (name === void 0) {\n    name = 'unnamed';\n  }\n\n  var jss = options.jss;\n  var declCopy = cloneStyle(decl);\n  var rule = jss.plugins.onCreateRule(name, declCopy, options);\n  if (rule) return rule; // It is an at-rule and it has no instance.\n\n  if (name[0] === '@') {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Unknown rule \" + name) : undefined;\n  }\n\n  return null;\n}\n\nvar join = function join(value, by) {\n  var result = '';\n\n  for (var i = 0; i < value.length; i++) {\n    // Remove !important from the value, it will be readded later.\n    if (value[i] === '!important') break;\n    if (result) result += by;\n    result += value[i];\n  }\n\n  return result;\n};\n/**\n * Converts array values to string.\n *\n * `margin: [['5px', '10px']]` > `margin: 5px 10px;`\n * `border: ['1px', '2px']` > `border: 1px, 2px;`\n * `margin: [['5px', '10px'], '!important']` > `margin: 5px 10px !important;`\n * `color: ['red', !important]` > `color: red !important;`\n */\n\n\nfunction toCssValue(value, ignoreImportant) {\n  if (ignoreImportant === void 0) {\n    ignoreImportant = false;\n  }\n\n  if (!Array.isArray(value)) return value;\n  var cssValue = ''; // Support space separated values via `[['5px', '10px']]`.\n\n  if (Array.isArray(value[0])) {\n    for (var i = 0; i < value.length; i++) {\n      if (value[i] === '!important') break;\n      if (cssValue) cssValue += ', ';\n      cssValue += join(value[i], ' ');\n    }\n  } else cssValue = join(value, ', '); // Add !important, because it was ignored.\n\n\n  if (!ignoreImportant && value[value.length - 1] === '!important') {\n    cssValue += ' !important';\n  }\n\n  return cssValue;\n}\n\n/**\n * Indent a string.\n * http://jsperf.com/array-join-vs-for\n */\nfunction indentStr(str, indent) {\n  var result = '';\n\n  for (var index = 0; index < indent; index++) {\n    result += '  ';\n  }\n\n  return result + str;\n}\n/**\n * Converts a Rule to CSS string.\n */\n\n\nfunction toCss(selector, style, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var result = '';\n  if (!style) return result;\n  var _options = options,\n      _options$indent = _options.indent,\n      indent = _options$indent === void 0 ? 0 : _options$indent;\n  var fallbacks = style.fallbacks;\n  if (selector) indent++; // Apply fallbacks first.\n\n  if (fallbacks) {\n    // Array syntax {fallbacks: [{prop: value}]}\n    if (Array.isArray(fallbacks)) {\n      for (var index = 0; index < fallbacks.length; index++) {\n        var fallback = fallbacks[index];\n\n        for (var prop in fallback) {\n          var value = fallback[prop];\n\n          if (value != null) {\n            if (result) result += '\\n';\n            result += \"\" + indentStr(prop + \": \" + toCssValue(value) + \";\", indent);\n          }\n        }\n      }\n    } else {\n      // Object syntax {fallbacks: {prop: value}}\n      for (var _prop in fallbacks) {\n        var _value = fallbacks[_prop];\n\n        if (_value != null) {\n          if (result) result += '\\n';\n          result += \"\" + indentStr(_prop + \": \" + toCssValue(_value) + \";\", indent);\n        }\n      }\n    }\n  }\n\n  for (var _prop2 in style) {\n    var _value2 = style[_prop2];\n\n    if (_value2 != null && _prop2 !== 'fallbacks') {\n      if (result) result += '\\n';\n      result += \"\" + indentStr(_prop2 + \": \" + toCssValue(_value2) + \";\", indent);\n    }\n  } // Allow empty style in this case, because properties will be added dynamically.\n\n\n  if (!result && !options.allowEmpty) return result; // When rule is being stringified before selector was defined.\n\n  if (!selector) return result;\n  indent--;\n  if (result) result = \"\\n\" + result + \"\\n\";\n  return indentStr(selector + \" {\" + result, indent) + indentStr('}', indent);\n}\n\nvar escapeRegex = /([[\\].#*$><+~=|^:(),\"'`\\s])/g;\nvar nativeEscape = typeof CSS !== 'undefined' && CSS.escape;\nvar escape = (function (str) {\n  return nativeEscape ? nativeEscape(str) : str.replace(escapeRegex, '\\\\$1');\n});\n\nvar BaseStyleRule =\n/*#__PURE__*/\nfunction () {\n  function BaseStyleRule(key, style, options) {\n    this.type = 'style';\n    this.key = void 0;\n    this.isProcessed = false;\n    this.style = void 0;\n    this.renderer = void 0;\n    this.renderable = void 0;\n    this.options = void 0;\n    var sheet = options.sheet,\n        Renderer = options.Renderer;\n    this.key = key;\n    this.options = options;\n    this.style = style;\n    if (sheet) this.renderer = sheet.renderer;else if (Renderer) this.renderer = new Renderer();\n  }\n  /**\n   * Get or set a style property.\n   */\n\n\n  var _proto = BaseStyleRule.prototype;\n\n  _proto.prop = function prop(name, value, options) {\n    // It's a getter.\n    if (value === undefined) return this.style[name]; // Don't do anything if the value has not changed.\n\n    var force = options ? options.force : false;\n    if (!force && this.style[name] === value) return this;\n    var newValue = value;\n\n    if (!options || options.process !== false) {\n      newValue = this.options.jss.plugins.onChangeValue(value, name, this);\n    }\n\n    var isEmpty = newValue == null || newValue === false;\n    var isDefined = name in this.style; // Value is empty and wasn't defined before.\n\n    if (isEmpty && !isDefined && !force) return this; // We are going to remove this value.\n\n    var remove = isEmpty && isDefined;\n    if (remove) delete this.style[name];else this.style[name] = newValue; // Renderable is defined if StyleSheet option `link` is true.\n\n    if (this.renderable && this.renderer) {\n      if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, newValue);\n      return this;\n    }\n\n    var sheet = this.options.sheet;\n\n    if (sheet && sheet.attached) {\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, '[JSS] Rule is not linked. Missing sheet option \"link: true\".') : undefined;\n    }\n\n    return this;\n  };\n\n  return BaseStyleRule;\n}();\nvar StyleRule =\n/*#__PURE__*/\nfunction (_BaseStyleRule) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(StyleRule, _BaseStyleRule);\n\n  function StyleRule(key, style, options) {\n    var _this;\n\n    _this = _BaseStyleRule.call(this, key, style, options) || this;\n    _this.selectorText = void 0;\n    _this.id = void 0;\n    _this.renderable = void 0;\n    var selector = options.selector,\n        scoped = options.scoped,\n        sheet = options.sheet,\n        generateId = options.generateId;\n\n    if (selector) {\n      _this.selectorText = selector;\n    } else if (scoped !== false) {\n      _this.id = generateId(Object(_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(Object(_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(_this)), sheet);\n      _this.selectorText = \".\" + escape(_this.id);\n    }\n\n    return _this;\n  }\n  /**\n   * Set selector string.\n   * Attention: use this with caution. Most browsers didn't implement\n   * selectorText setter, so this may result in rerendering of entire Style Sheet.\n   */\n\n\n  var _proto2 = StyleRule.prototype;\n\n  /**\n   * Apply rule to an element inline.\n   */\n  _proto2.applyTo = function applyTo(renderable) {\n    var renderer = this.renderer;\n\n    if (renderer) {\n      var json = this.toJSON();\n\n      for (var prop in json) {\n        renderer.setProperty(renderable, prop, json[prop]);\n      }\n    }\n\n    return this;\n  }\n  /**\n   * Returns JSON representation of the rule.\n   * Fallbacks are not supported.\n   * Useful for inline styles.\n   */\n  ;\n\n  _proto2.toJSON = function toJSON() {\n    var json = {};\n\n    for (var prop in this.style) {\n      var value = this.style[prop];\n      if (typeof value !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = toCssValue(value);\n    }\n\n    return json;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto2.toString = function toString(options) {\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n    var opts = link ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      allowEmpty: true\n    }) : options;\n    return toCss(this.selectorText, this.style, opts);\n  };\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(StyleRule, [{\n    key: \"selector\",\n    set: function set(selector) {\n      if (selector === this.selectorText) return;\n      this.selectorText = selector;\n      var renderer = this.renderer,\n          renderable = this.renderable;\n      if (!renderable || !renderer) return;\n      var hasChanged = renderer.setSelector(renderable, selector); // If selector setter is not implemented, rerender the rule.\n\n      if (!hasChanged) {\n        renderer.replaceRule(renderable, this);\n      }\n    }\n    /**\n     * Get selector string.\n     */\n    ,\n    get: function get() {\n      return this.selectorText;\n    }\n  }]);\n\n  return StyleRule;\n}(BaseStyleRule);\nvar pluginStyleRule = {\n  onCreateRule: function onCreateRule(name, style, options) {\n    if (name[0] === '@' || options.parent && options.parent.type === 'keyframes') {\n      return null;\n    }\n\n    return new StyleRule(name, style, options);\n  }\n};\n\nvar defaultToStringOptions = {\n  indent: 1,\n  children: true\n};\nvar atRegExp = /@([\\w-]+)/;\n/**\n * Conditional rule for @media, @supports\n */\n\nvar ConditionalRule =\n/*#__PURE__*/\nfunction () {\n  function ConditionalRule(key, styles, options) {\n    this.type = 'conditional';\n    this.at = void 0;\n    this.key = void 0;\n    this.query = void 0;\n    this.rules = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key; // Key might contain a unique suffix in case the `name` passed by user was duplicate.\n\n    this.query = options.name;\n    var atMatch = key.match(atRegExp);\n    this.at = atMatch ? atMatch[1] : 'unknown';\n    this.options = options;\n    this.rules = new RuleList(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      parent: this\n    }));\n\n    for (var name in styles) {\n      this.rules.add(name, styles[name]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Get a rule.\n   */\n\n\n  var _proto = ConditionalRule.prototype;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Create and register rule, run plugins.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, style, options) {\n    var rule = this.rules.add(name, style, options);\n    if (!rule) return null;\n    this.options.jss.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    if (options === void 0) {\n      options = defaultToStringOptions;\n    }\n\n    if (options.indent == null) options.indent = defaultToStringOptions.indent;\n    if (options.children == null) options.children = defaultToStringOptions.children;\n\n    if (options.children === false) {\n      return this.query + \" {}\";\n    }\n\n    var children = this.rules.toString(options);\n    return children ? this.query + \" {\\n\" + children + \"\\n}\" : '';\n  };\n\n  return ConditionalRule;\n}();\nvar keyRegExp = /@media|@supports\\s+/;\nvar pluginConditionalRule = {\n  onCreateRule: function onCreateRule(key, styles, options) {\n    return keyRegExp.test(key) ? new ConditionalRule(key, styles, options) : null;\n  }\n};\n\nvar defaultToStringOptions$1 = {\n  indent: 1,\n  children: true\n};\nvar nameRegExp = /@keyframes\\s+([\\w-]+)/;\n/**\n * Rule for @keyframes\n */\n\nvar KeyframesRule =\n/*#__PURE__*/\nfunction () {\n  function KeyframesRule(key, frames, options) {\n    this.type = 'keyframes';\n    this.at = '@keyframes';\n    this.key = void 0;\n    this.name = void 0;\n    this.id = void 0;\n    this.rules = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    var nameMatch = key.match(nameRegExp);\n\n    if (nameMatch && nameMatch[1]) {\n      this.name = nameMatch[1];\n    } else {\n      this.name = 'noname';\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Bad keyframes name \" + key) : undefined;\n    }\n\n    this.key = this.type + \"-\" + this.name;\n    this.options = options;\n    var scoped = options.scoped,\n        sheet = options.sheet,\n        generateId = options.generateId;\n    this.id = scoped === false ? this.name : escape(generateId(this, sheet));\n    this.rules = new RuleList(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      parent: this\n    }));\n\n    for (var name in frames) {\n      this.rules.add(name, frames[name], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n        parent: this\n      }));\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = KeyframesRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (options === void 0) {\n      options = defaultToStringOptions$1;\n    }\n\n    if (options.indent == null) options.indent = defaultToStringOptions$1.indent;\n    if (options.children == null) options.children = defaultToStringOptions$1.children;\n\n    if (options.children === false) {\n      return this.at + \" \" + this.id + \" {}\";\n    }\n\n    var children = this.rules.toString(options);\n    if (children) children = \"\\n\" + children + \"\\n\";\n    return this.at + \" \" + this.id + \" {\" + children + \"}\";\n  };\n\n  return KeyframesRule;\n}();\nvar keyRegExp$1 = /@keyframes\\s+/;\nvar refRegExp = /\\$([\\w-]+)/g;\n\nvar findReferencedKeyframe = function findReferencedKeyframe(val, keyframes) {\n  if (typeof val === 'string') {\n    return val.replace(refRegExp, function (match, name) {\n      if (name in keyframes) {\n        return keyframes[name];\n      }\n\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Referenced keyframes rule \\\"\" + name + \"\\\" is not defined.\") : undefined;\n      return match;\n    });\n  }\n\n  return val;\n};\n/**\n * Replace the reference for a animation name.\n */\n\n\nvar replaceRef = function replaceRef(style, prop, keyframes) {\n  var value = style[prop];\n  var refKeyframe = findReferencedKeyframe(value, keyframes);\n\n  if (refKeyframe !== value) {\n    style[prop] = refKeyframe;\n  }\n};\n\nvar plugin = {\n  onCreateRule: function onCreateRule(key, frames, options) {\n    return typeof key === 'string' && keyRegExp$1.test(key) ? new KeyframesRule(key, frames, options) : null;\n  },\n  // Animation name ref replacer.\n  onProcessStyle: function onProcessStyle(style, rule, sheet) {\n    if (rule.type !== 'style' || !sheet) return style;\n    if ('animation-name' in style) replaceRef(style, 'animation-name', sheet.keyframes);\n    if ('animation' in style) replaceRef(style, 'animation', sheet.keyframes);\n    return style;\n  },\n  onChangeValue: function onChangeValue(val, prop, rule) {\n    var sheet = rule.options.sheet;\n\n    if (!sheet) {\n      return val;\n    }\n\n    switch (prop) {\n      case 'animation':\n        return findReferencedKeyframe(val, sheet.keyframes);\n\n      case 'animation-name':\n        return findReferencedKeyframe(val, sheet.keyframes);\n\n      default:\n        return val;\n    }\n  }\n};\n\nvar KeyframeRule =\n/*#__PURE__*/\nfunction (_BaseStyleRule) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(KeyframeRule, _BaseStyleRule);\n\n  function KeyframeRule() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _BaseStyleRule.call.apply(_BaseStyleRule, [this].concat(args)) || this;\n    _this.renderable = void 0;\n    return _this;\n  }\n\n  var _proto = KeyframeRule.prototype;\n\n  /**\n   * Generates a CSS string.\n   */\n  _proto.toString = function toString(options) {\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n    var opts = link ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      allowEmpty: true\n    }) : options;\n    return toCss(this.key, this.style, opts);\n  };\n\n  return KeyframeRule;\n}(BaseStyleRule);\nvar pluginKeyframeRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    if (options.parent && options.parent.type === 'keyframes') {\n      return new KeyframeRule(key, style, options);\n    }\n\n    return null;\n  }\n};\n\nvar FontFaceRule =\n/*#__PURE__*/\nfunction () {\n  function FontFaceRule(key, style, options) {\n    this.type = 'font-face';\n    this.at = '@font-face';\n    this.key = void 0;\n    this.style = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    this.style = style;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = FontFaceRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (Array.isArray(this.style)) {\n      var str = '';\n\n      for (var index = 0; index < this.style.length; index++) {\n        str += toCss(this.at, this.style[index]);\n        if (this.style[index + 1]) str += '\\n';\n      }\n\n      return str;\n    }\n\n    return toCss(this.at, this.style, options);\n  };\n\n  return FontFaceRule;\n}();\nvar keyRegExp$2 = /@font-face/;\nvar pluginFontFaceRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    return keyRegExp$2.test(key) ? new FontFaceRule(key, style, options) : null;\n  }\n};\n\nvar ViewportRule =\n/*#__PURE__*/\nfunction () {\n  function ViewportRule(key, style, options) {\n    this.type = 'viewport';\n    this.at = '@viewport';\n    this.key = void 0;\n    this.style = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    this.style = style;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = ViewportRule.prototype;\n\n  _proto.toString = function toString(options) {\n    return toCss(this.key, this.style, options);\n  };\n\n  return ViewportRule;\n}();\nvar pluginViewportRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    return key === '@viewport' || key === '@-ms-viewport' ? new ViewportRule(key, style, options) : null;\n  }\n};\n\nvar SimpleRule =\n/*#__PURE__*/\nfunction () {\n  function SimpleRule(key, value, options) {\n    this.type = 'simple';\n    this.key = void 0;\n    this.value = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    this.value = value;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  // eslint-disable-next-line no-unused-vars\n\n\n  var _proto = SimpleRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (Array.isArray(this.value)) {\n      var str = '';\n\n      for (var index = 0; index < this.value.length; index++) {\n        str += this.key + \" \" + this.value[index] + \";\";\n        if (this.value[index + 1]) str += '\\n';\n      }\n\n      return str;\n    }\n\n    return this.key + \" \" + this.value + \";\";\n  };\n\n  return SimpleRule;\n}();\nvar keysMap = {\n  '@charset': true,\n  '@import': true,\n  '@namespace': true\n};\nvar pluginSimpleRule = {\n  onCreateRule: function onCreateRule(key, value, options) {\n    return key in keysMap ? new SimpleRule(key, value, options) : null;\n  }\n};\n\nvar plugins = [pluginStyleRule, pluginConditionalRule, plugin, pluginKeyframeRule, pluginFontFaceRule, pluginViewportRule, pluginSimpleRule];\n\nvar defaultUpdateOptions = {\n  process: true\n};\nvar forceUpdateOptions = {\n  force: true,\n  process: true\n  /**\n   * Contains rules objects and allows adding/removing etc.\n   * Is used for e.g. by `StyleSheet` or `ConditionalRule`.\n   */\n\n};\n\nvar RuleList =\n/*#__PURE__*/\nfunction () {\n  // Rules registry for access by .get() method.\n  // It contains the same rule registered by name and by selector.\n  // Original styles object.\n  // Used to ensure correct rules order.\n  function RuleList(options) {\n    this.map = {};\n    this.raw = {};\n    this.index = [];\n    this.counter = 0;\n    this.options = void 0;\n    this.classes = void 0;\n    this.keyframes = void 0;\n    this.options = options;\n    this.classes = options.classes;\n    this.keyframes = options.keyframes;\n  }\n  /**\n   * Create and register rule.\n   *\n   * Will not render after Style Sheet was rendered the first time.\n   */\n\n\n  var _proto = RuleList.prototype;\n\n  _proto.add = function add(name, decl, ruleOptions) {\n    var _this$options = this.options,\n        parent = _this$options.parent,\n        sheet = _this$options.sheet,\n        jss = _this$options.jss,\n        Renderer = _this$options.Renderer,\n        generateId = _this$options.generateId,\n        scoped = _this$options.scoped;\n\n    var options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      classes: this.classes,\n      parent: parent,\n      sheet: sheet,\n      jss: jss,\n      Renderer: Renderer,\n      generateId: generateId,\n      scoped: scoped,\n      name: name\n    }, ruleOptions); // When user uses .createStyleSheet(), duplicate names are not possible, but\n    // `sheet.addRule()` opens the door for any duplicate rule name. When this happens\n    // we need to make the key unique within this RuleList instance scope.\n\n\n    var key = name;\n\n    if (name in this.raw) {\n      key = name + \"-d\" + this.counter++;\n    } // We need to save the original decl before creating the rule\n    // because cache plugin needs to use it as a key to return a cached rule.\n\n\n    this.raw[key] = decl;\n\n    if (key in this.classes) {\n      // E.g. rules inside of @media container\n      options.selector = \".\" + escape(this.classes[key]);\n    }\n\n    var rule = createRule(key, decl, options);\n    if (!rule) return null;\n    this.register(rule);\n    var index = options.index === undefined ? this.index.length : options.index;\n    this.index.splice(index, 0, rule);\n    return rule;\n  }\n  /**\n   * Get a rule.\n   */\n  ;\n\n  _proto.get = function get(name) {\n    return this.map[name];\n  }\n  /**\n   * Delete a rule.\n   */\n  ;\n\n  _proto.remove = function remove(rule) {\n    this.unregister(rule);\n    delete this.raw[rule.key];\n    this.index.splice(this.index.indexOf(rule), 1);\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.index.indexOf(rule);\n  }\n  /**\n   * Run `onProcessRule()` plugins on every rule.\n   */\n  ;\n\n  _proto.process = function process() {\n    var plugins = this.options.jss.plugins; // We need to clone array because if we modify the index somewhere else during a loop\n    // we end up with very hard-to-track-down side effects.\n\n    this.index.slice(0).forEach(plugins.onProcessRule, plugins);\n  }\n  /**\n   * Register a rule in `.map`, `.classes` and `.keyframes` maps.\n   */\n  ;\n\n  _proto.register = function register(rule) {\n    this.map[rule.key] = rule;\n\n    if (rule instanceof StyleRule) {\n      this.map[rule.selector] = rule;\n      if (rule.id) this.classes[rule.key] = rule.id;\n    } else if (rule instanceof KeyframesRule && this.keyframes) {\n      this.keyframes[rule.name] = rule.id;\n    }\n  }\n  /**\n   * Unregister a rule.\n   */\n  ;\n\n  _proto.unregister = function unregister(rule) {\n    delete this.map[rule.key];\n\n    if (rule instanceof StyleRule) {\n      delete this.map[rule.selector];\n      delete this.classes[rule.key];\n    } else if (rule instanceof KeyframesRule) {\n      delete this.keyframes[rule.name];\n    }\n  }\n  /**\n   * Update the function values with a new data.\n   */\n  ;\n\n  _proto.update = function update() {\n    var name;\n    var data;\n    var options;\n\n    if (typeof (arguments.length <= 0 ? undefined : arguments[0]) === 'string') {\n      name = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe\n\n      data = arguments.length <= 1 ? undefined : arguments[1]; // $FlowFixMe\n\n      options = arguments.length <= 2 ? undefined : arguments[2];\n    } else {\n      data = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe\n\n      options = arguments.length <= 1 ? undefined : arguments[1];\n      name = null;\n    }\n\n    if (name) {\n      this.updateOne(this.map[name], data, options);\n    } else {\n      for (var index = 0; index < this.index.length; index++) {\n        this.updateOne(this.index[index], data, options);\n      }\n    }\n  }\n  /**\n   * Execute plugins, update rule props.\n   */\n  ;\n\n  _proto.updateOne = function updateOne(rule, data, options) {\n    if (options === void 0) {\n      options = defaultUpdateOptions;\n    }\n\n    var _this$options2 = this.options,\n        plugins = _this$options2.jss.plugins,\n        sheet = _this$options2.sheet; // It is a rules container like for e.g. ConditionalRule.\n\n    if (rule.rules instanceof RuleList) {\n      rule.rules.update(data, options);\n      return;\n    }\n\n    var styleRule = rule;\n    var style = styleRule.style;\n    plugins.onUpdate(data, rule, sheet, options); // We rely on a new `style` ref in case it was mutated during onUpdate hook.\n\n    if (options.process && style && style !== styleRule.style) {\n      // We need to run the plugins in case new `style` relies on syntax plugins.\n      plugins.onProcessStyle(styleRule.style, styleRule, sheet); // Update and add props.\n\n      for (var prop in styleRule.style) {\n        var nextValue = styleRule.style[prop];\n        var prevValue = style[prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.\n        // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.\n\n        if (nextValue !== prevValue) {\n          styleRule.prop(prop, nextValue, forceUpdateOptions);\n        }\n      } // Remove props.\n\n\n      for (var _prop in style) {\n        var _nextValue = styleRule.style[_prop];\n        var _prevValue = style[_prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.\n        // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.\n\n        if (_nextValue == null && _nextValue !== _prevValue) {\n          styleRule.prop(_prop, null, forceUpdateOptions);\n        }\n      }\n    }\n  }\n  /**\n   * Convert rules to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    var str = '';\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n\n    for (var index = 0; index < this.index.length; index++) {\n      var rule = this.index[index];\n      var css = rule.toString(options); // No need to render an empty rule.\n\n      if (!css && !link) continue;\n      if (str) str += '\\n';\n      str += css;\n    }\n\n    return str;\n  };\n\n  return RuleList;\n}();\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n  function StyleSheet(styles, options) {\n    this.options = void 0;\n    this.deployed = void 0;\n    this.attached = void 0;\n    this.rules = void 0;\n    this.renderer = void 0;\n    this.classes = void 0;\n    this.keyframes = void 0;\n    this.queue = void 0;\n    this.attached = false;\n    this.deployed = false;\n    this.classes = {};\n    this.keyframes = {};\n    this.options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      sheet: this,\n      parent: this,\n      classes: this.classes,\n      keyframes: this.keyframes\n    });\n\n    if (options.Renderer) {\n      this.renderer = new options.Renderer(this);\n    }\n\n    this.rules = new RuleList(this.options);\n\n    for (var name in styles) {\n      this.rules.add(name, styles[name]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Attach renderable to the render tree.\n   */\n\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.attach = function attach() {\n    if (this.attached) return this;\n    if (this.renderer) this.renderer.attach();\n    this.attached = true; // Order is important, because we can't use insertRule API if style element is not attached.\n\n    if (!this.deployed) this.deploy();\n    return this;\n  }\n  /**\n   * Remove renderable from render tree.\n   */\n  ;\n\n  _proto.detach = function detach() {\n    if (!this.attached) return this;\n    if (this.renderer) this.renderer.detach();\n    this.attached = false;\n    return this;\n  }\n  /**\n   * Add a rule to the current stylesheet.\n   * Will insert a rule also after the stylesheet has been rendered first time.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, decl, options) {\n    var queue = this.queue; // Plugins can create rules.\n    // In order to preserve the right order, we need to queue all `.addRule` calls,\n    // which happen after the first `rules.add()` call.\n\n    if (this.attached && !queue) this.queue = [];\n    var rule = this.rules.add(name, decl, options);\n    if (!rule) return null;\n    this.options.jss.plugins.onProcessRule(rule);\n\n    if (this.attached) {\n      if (!this.deployed) return rule; // Don't insert rule directly if there is no stringified version yet.\n      // It will be inserted all together when .attach is called.\n\n      if (queue) queue.push(rule);else {\n        this.insertRule(rule);\n\n        if (this.queue) {\n          this.queue.forEach(this.insertRule, this);\n          this.queue = undefined;\n        }\n      }\n      return rule;\n    } // We can't add rules to a detached style node.\n    // We will redeploy the sheet once user will attach it.\n\n\n    this.deployed = false;\n    return rule;\n  }\n  /**\n   * Insert rule into the StyleSheet\n   */\n  ;\n\n  _proto.insertRule = function insertRule(rule) {\n    if (this.renderer) {\n      this.renderer.insertRule(rule);\n    }\n  }\n  /**\n   * Create and add rules.\n   * Will render also after Style Sheet was rendered the first time.\n   */\n  ;\n\n  _proto.addRules = function addRules(styles, options) {\n    var added = [];\n\n    for (var name in styles) {\n      var rule = this.addRule(name, styles[name], options);\n      if (rule) added.push(rule);\n    }\n\n    return added;\n  }\n  /**\n   * Get a rule by name.\n   */\n  ;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Delete a rule by name.\n   * Returns `true`: if rule has been deleted from the DOM.\n   */\n  ;\n\n  _proto.deleteRule = function deleteRule(name) {\n    var rule = typeof name === 'object' ? name : this.rules.get(name);\n    if (!rule) return false;\n    this.rules.remove(rule);\n\n    if (this.attached && rule.renderable && this.renderer) {\n      return this.renderer.deleteRule(rule.renderable);\n    }\n\n    return true;\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Deploy pure CSS string to a renderable.\n   */\n  ;\n\n  _proto.deploy = function deploy() {\n    if (this.renderer) this.renderer.deploy();\n    this.deployed = true;\n    return this;\n  }\n  /**\n   * Update the function values with a new data.\n   */\n  ;\n\n  _proto.update = function update() {\n    var _this$rules;\n\n    (_this$rules = this.rules).update.apply(_this$rules, arguments);\n\n    return this;\n  }\n  /**\n   * Updates a single rule.\n   */\n  ;\n\n  _proto.updateOne = function updateOne(rule, data, options) {\n    this.rules.updateOne(rule, data, options);\n    return this;\n  }\n  /**\n   * Convert rules to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    return this.rules.toString(options);\n  };\n\n  return StyleSheet;\n}();\n\nvar PluginsRegistry =\n/*#__PURE__*/\nfunction () {\n  function PluginsRegistry() {\n    this.plugins = {\n      internal: [],\n      external: []\n    };\n    this.registry = void 0;\n  }\n\n  var _proto = PluginsRegistry.prototype;\n\n  /**\n   * Call `onCreateRule` hooks and return an object if returned by a hook.\n   */\n  _proto.onCreateRule = function onCreateRule(name, decl, options) {\n    for (var i = 0; i < this.registry.onCreateRule.length; i++) {\n      var rule = this.registry.onCreateRule[i](name, decl, options);\n      if (rule) return rule;\n    }\n\n    return null;\n  }\n  /**\n   * Call `onProcessRule` hooks.\n   */\n  ;\n\n  _proto.onProcessRule = function onProcessRule(rule) {\n    if (rule.isProcessed) return;\n    var sheet = rule.options.sheet;\n\n    for (var i = 0; i < this.registry.onProcessRule.length; i++) {\n      this.registry.onProcessRule[i](rule, sheet);\n    }\n\n    if (rule.style) this.onProcessStyle(rule.style, rule, sheet);\n    rule.isProcessed = true;\n  }\n  /**\n   * Call `onProcessStyle` hooks.\n   */\n  ;\n\n  _proto.onProcessStyle = function onProcessStyle(style, rule, sheet) {\n    for (var i = 0; i < this.registry.onProcessStyle.length; i++) {\n      // $FlowFixMe\n      rule.style = this.registry.onProcessStyle[i](rule.style, rule, sheet);\n    }\n  }\n  /**\n   * Call `onProcessSheet` hooks.\n   */\n  ;\n\n  _proto.onProcessSheet = function onProcessSheet(sheet) {\n    for (var i = 0; i < this.registry.onProcessSheet.length; i++) {\n      this.registry.onProcessSheet[i](sheet);\n    }\n  }\n  /**\n   * Call `onUpdate` hooks.\n   */\n  ;\n\n  _proto.onUpdate = function onUpdate(data, rule, sheet, options) {\n    for (var i = 0; i < this.registry.onUpdate.length; i++) {\n      this.registry.onUpdate[i](data, rule, sheet, options);\n    }\n  }\n  /**\n   * Call `onChangeValue` hooks.\n   */\n  ;\n\n  _proto.onChangeValue = function onChangeValue(value, prop, rule) {\n    var processedValue = value;\n\n    for (var i = 0; i < this.registry.onChangeValue.length; i++) {\n      processedValue = this.registry.onChangeValue[i](processedValue, prop, rule);\n    }\n\n    return processedValue;\n  }\n  /**\n   * Register a plugin.\n   */\n  ;\n\n  _proto.use = function use(newPlugin, options) {\n    if (options === void 0) {\n      options = {\n        queue: 'external'\n      };\n    }\n\n    var plugins = this.plugins[options.queue]; // Avoids applying same plugin twice, at least based on ref.\n\n    if (plugins.indexOf(newPlugin) !== -1) {\n      return;\n    }\n\n    plugins.push(newPlugin);\n    this.registry = [].concat(this.plugins.external, this.plugins.internal).reduce(function (registry, plugin) {\n      for (var name in plugin) {\n        if (name in registry) {\n          registry[name].push(plugin[name]);\n        } else {\n           true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Unknown hook \\\"\" + name + \"\\\".\") : undefined;\n        }\n      }\n\n      return registry;\n    }, {\n      onCreateRule: [],\n      onProcessRule: [],\n      onProcessStyle: [],\n      onProcessSheet: [],\n      onChangeValue: [],\n      onUpdate: []\n    });\n  };\n\n  return PluginsRegistry;\n}();\n\n/**\n * Sheets registry to access them all at one place.\n */\nvar SheetsRegistry =\n/*#__PURE__*/\nfunction () {\n  function SheetsRegistry() {\n    this.registry = [];\n  }\n\n  var _proto = SheetsRegistry.prototype;\n\n  /**\n   * Register a Style Sheet.\n   */\n  _proto.add = function add(sheet) {\n    var registry = this.registry;\n    var index = sheet.options.index;\n    if (registry.indexOf(sheet) !== -1) return;\n\n    if (registry.length === 0 || index >= this.index) {\n      registry.push(sheet);\n      return;\n    } // Find a position.\n\n\n    for (var i = 0; i < registry.length; i++) {\n      if (registry[i].options.index > index) {\n        registry.splice(i, 0, sheet);\n        return;\n      }\n    }\n  }\n  /**\n   * Reset the registry.\n   */\n  ;\n\n  _proto.reset = function reset() {\n    this.registry = [];\n  }\n  /**\n   * Remove a Style Sheet.\n   */\n  ;\n\n  _proto.remove = function remove(sheet) {\n    var index = this.registry.indexOf(sheet);\n    this.registry.splice(index, 1);\n  }\n  /**\n   * Convert all attached sheets to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        attached = _ref.attached,\n        options = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_ref, [\"attached\"]);\n\n    var css = '';\n\n    for (var i = 0; i < this.registry.length; i++) {\n      var sheet = this.registry[i];\n\n      if (attached != null && sheet.attached !== attached) {\n        continue;\n      }\n\n      if (css) css += '\\n';\n      css += sheet.toString(options);\n    }\n\n    return css;\n  };\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(SheetsRegistry, [{\n    key: \"index\",\n\n    /**\n     * Current highest index number.\n     */\n    get: function get() {\n      return this.registry.length === 0 ? 0 : this.registry[this.registry.length - 1].options.index;\n    }\n  }]);\n\n  return SheetsRegistry;\n}();\n\n/**\n * This is a global sheets registry. Only DomRenderer will add sheets to it.\n * On the server one should use an own SheetsRegistry instance and add the\n * sheets to it, because you need to make sure to create a new registry for\n * each request in order to not leak sheets across requests.\n */\n\nvar sheets = new SheetsRegistry();\n\n/* eslint-disable */\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar globalThis = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\n\nvar ns = '2f1acc6c3a606b082e5eef5e54414ffb';\nif (globalThis[ns] == null) globalThis[ns] = 0; // Bundle may contain multiple JSS versions at the same time. In order to identify\n// the current version with just one short number and use it for classes generation\n// we use a counter. Also it is more accurate, because user can manually reevaluate\n// the module.\n\nvar moduleId = globalThis[ns]++;\n\nvar maxRules = 1e10;\n\n/**\n * Returns a function which generates unique class names based on counters.\n * When new generator function is created, rule counter is reseted.\n * We need to reset the rule counter for SSR for each request.\n */\nvar createGenerateId = function createGenerateId(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var ruleCounter = 0;\n  return function (rule, sheet) {\n    ruleCounter += 1;\n\n    if (ruleCounter > maxRules) {\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] You might have a memory leak. Rule counter is at \" + ruleCounter + \".\") : undefined;\n    }\n\n    var jssId = '';\n    var prefix = '';\n\n    if (sheet) {\n      if (sheet.options.classNamePrefix) {\n        prefix = sheet.options.classNamePrefix;\n      }\n\n      if (sheet.options.jss.id != null) {\n        jssId = String(sheet.options.jss.id);\n      }\n    }\n\n    if (options.minify) {\n      // Using \"c\" because a number can't be the first char in a class name.\n      return \"\" + (prefix || 'c') + moduleId + jssId + ruleCounter;\n    }\n\n    return prefix + rule.key + \"-\" + moduleId + (jssId ? \"-\" + jssId : '') + \"-\" + ruleCounter;\n  };\n};\n\n/**\n * Cache the value from the first time a function is called.\n */\nvar memoize = function memoize(fn) {\n  var value;\n  return function () {\n    if (!value) value = fn();\n    return value;\n  };\n};\n/**\n * Get a style property value.\n */\n\n\nfunction getPropertyValue(cssRule, prop) {\n  try {\n    // Support CSSTOM.\n    if (cssRule.attributeStyleMap) {\n      return cssRule.attributeStyleMap.get(prop);\n    }\n\n    return cssRule.style.getPropertyValue(prop);\n  } catch (err) {\n    // IE may throw if property is unknown.\n    return '';\n  }\n}\n/**\n * Set a style property.\n */\n\n\nfunction setProperty(cssRule, prop, value) {\n  try {\n    var cssValue = value;\n\n    if (Array.isArray(value)) {\n      cssValue = toCssValue(value, true);\n\n      if (value[value.length - 1] === '!important') {\n        cssRule.style.setProperty(prop, cssValue, 'important');\n        return true;\n      }\n    } // Support CSSTOM.\n\n\n    if (cssRule.attributeStyleMap) {\n      cssRule.attributeStyleMap.set(prop, cssValue);\n    } else {\n      cssRule.style.setProperty(prop, cssValue);\n    }\n  } catch (err) {\n    // IE may throw if property is unknown.\n    return false;\n  }\n\n  return true;\n}\n/**\n * Remove a style property.\n */\n\n\nfunction removeProperty(cssRule, prop) {\n  try {\n    // Support CSSTOM.\n    if (cssRule.attributeStyleMap) {\n      cssRule.attributeStyleMap.delete(prop);\n    } else {\n      cssRule.style.removeProperty(prop);\n    }\n  } catch (err) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] DOMException \\\"\" + err.message + \"\\\" was thrown. Tried to remove property \\\"\" + prop + \"\\\".\") : undefined;\n  }\n}\n/**\n * Set the selector.\n */\n\n\nfunction setSelector(cssRule, selectorText) {\n  cssRule.selectorText = selectorText; // Return false if setter was not successful.\n  // Currently works in chrome only.\n\n  return cssRule.selectorText === selectorText;\n}\n/**\n * Gets the `head` element upon the first call and caches it.\n * We assume it can't be null.\n */\n\n\nvar getHead = memoize(function () {\n  return document.querySelector('head');\n});\n/**\n * Find attached sheet with an index higher than the passed one.\n */\n\nfunction findHigherSheet(registry, options) {\n  for (var i = 0; i < registry.length; i++) {\n    var sheet = registry[i];\n\n    if (sheet.attached && sheet.options.index > options.index && sheet.options.insertionPoint === options.insertionPoint) {\n      return sheet;\n    }\n  }\n\n  return null;\n}\n/**\n * Find attached sheet with the highest index.\n */\n\n\nfunction findHighestSheet(registry, options) {\n  for (var i = registry.length - 1; i >= 0; i--) {\n    var sheet = registry[i];\n\n    if (sheet.attached && sheet.options.insertionPoint === options.insertionPoint) {\n      return sheet;\n    }\n  }\n\n  return null;\n}\n/**\n * Find a comment with \"jss\" inside.\n */\n\n\nfunction findCommentNode(text) {\n  var head = getHead();\n\n  for (var i = 0; i < head.childNodes.length; i++) {\n    var node = head.childNodes[i];\n\n    if (node.nodeType === 8 && node.nodeValue.trim() === text) {\n      return node;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Find a node before which we can insert the sheet.\n */\nfunction findPrevNode(options) {\n  var registry = sheets.registry;\n\n  if (registry.length > 0) {\n    // Try to insert before the next higher sheet.\n    var sheet = findHigherSheet(registry, options);\n\n    if (sheet && sheet.renderer) {\n      return {\n        parent: sheet.renderer.element.parentNode,\n        node: sheet.renderer.element\n      };\n    } // Otherwise insert after the last attached.\n\n\n    sheet = findHighestSheet(registry, options);\n\n    if (sheet && sheet.renderer) {\n      return {\n        parent: sheet.renderer.element.parentNode,\n        node: sheet.renderer.element.nextSibling\n      };\n    }\n  } // Try to find a comment placeholder if registry is empty.\n\n\n  var insertionPoint = options.insertionPoint;\n\n  if (insertionPoint && typeof insertionPoint === 'string') {\n    var comment = findCommentNode(insertionPoint);\n\n    if (comment) {\n      return {\n        parent: comment.parentNode,\n        node: comment.nextSibling\n      };\n    } // If user specifies an insertion point and it can't be found in the document -\n    // bad specificity issues may appear.\n\n\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Insertion point \\\"\" + insertionPoint + \"\\\" not found.\") : undefined;\n  }\n\n  return false;\n}\n/**\n * Insert style element into the DOM.\n */\n\n\nfunction insertStyle(style, options) {\n  var insertionPoint = options.insertionPoint;\n  var nextNode = findPrevNode(options);\n\n  if (nextNode !== false && nextNode.parent) {\n    nextNode.parent.insertBefore(style, nextNode.node);\n    return;\n  } // Works with iframes and any node types.\n\n\n  if (insertionPoint && typeof insertionPoint.nodeType === 'number') {\n    // https://stackoverflow.com/questions/41328728/force-casting-in-flow\n    var insertionPointElement = insertionPoint;\n    var parentNode = insertionPointElement.parentNode;\n    if (parentNode) parentNode.insertBefore(style, insertionPointElement.nextSibling);else  true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, '[JSS] Insertion point is not in the DOM.') : undefined;\n    return;\n  }\n\n  getHead().appendChild(style);\n}\n/**\n * Read jss nonce setting from the page if the user has set it.\n */\n\n\nvar getNonce = memoize(function () {\n  var node = document.querySelector('meta[property=\"csp-nonce\"]');\n  return node ? node.getAttribute('content') : null;\n});\n\nvar _insertRule = function insertRule(container, rule, index) {\n  var maxIndex = container.cssRules.length; // In case previous insertion fails, passed index might be wrong\n\n  if (index === undefined || index > maxIndex) {\n    // eslint-disable-next-line no-param-reassign\n    index = maxIndex;\n  }\n\n  try {\n    if ('insertRule' in container) {\n      var c = container;\n      c.insertRule(rule, index);\n    } // Keyframes rule.\n    else if ('appendRule' in container) {\n        var _c = container;\n\n        _c.appendRule(rule);\n      }\n  } catch (err) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] \" + err.message) : undefined;\n    return false;\n  }\n\n  return container.cssRules[index];\n};\n\nvar createStyle = function createStyle() {\n  var el = document.createElement('style'); // Without it, IE will have a broken source order specificity if we\n  // insert rules after we insert the style tag.\n  // It seems to kick-off the source order specificity algorithm.\n\n  el.textContent = '\\n';\n  return el;\n};\n\nvar DomRenderer =\n/*#__PURE__*/\nfunction () {\n  // HTMLStyleElement needs fixing https://github.com/facebook/flow/issues/2696\n  function DomRenderer(sheet) {\n    this.getPropertyValue = getPropertyValue;\n    this.setProperty = setProperty;\n    this.removeProperty = removeProperty;\n    this.setSelector = setSelector;\n    this.element = void 0;\n    this.sheet = void 0;\n    this.hasInsertedRules = false;\n    // There is no sheet when the renderer is used from a standalone StyleRule.\n    if (sheet) sheets.add(sheet);\n    this.sheet = sheet;\n\n    var _ref = this.sheet ? this.sheet.options : {},\n        media = _ref.media,\n        meta = _ref.meta,\n        element = _ref.element;\n\n    this.element = element || createStyle();\n    this.element.setAttribute('data-jss', '');\n    if (media) this.element.setAttribute('media', media);\n    if (meta) this.element.setAttribute('data-meta', meta);\n    var nonce = getNonce();\n    if (nonce) this.element.setAttribute('nonce', nonce);\n  }\n  /**\n   * Insert style element into render tree.\n   */\n\n\n  var _proto = DomRenderer.prototype;\n\n  _proto.attach = function attach() {\n    // In the case the element node is external and it is already in the DOM.\n    if (this.element.parentNode || !this.sheet) return;\n    insertStyle(this.element, this.sheet.options); // When rules are inserted using `insertRule` API, after `sheet.detach().attach()`\n    // most browsers create a new CSSStyleSheet, except of all IEs.\n\n    var deployed = Boolean(this.sheet && this.sheet.deployed);\n\n    if (this.hasInsertedRules && deployed) {\n      this.hasInsertedRules = false;\n      this.deploy();\n    }\n  }\n  /**\n   * Remove style element from render tree.\n   */\n  ;\n\n  _proto.detach = function detach() {\n    var parentNode = this.element.parentNode;\n    if (parentNode) parentNode.removeChild(this.element);\n  }\n  /**\n   * Inject CSS string into element.\n   */\n  ;\n\n  _proto.deploy = function deploy() {\n    var sheet = this.sheet;\n    if (!sheet) return;\n\n    if (sheet.options.link) {\n      this.insertRules(sheet.rules);\n      return;\n    }\n\n    this.element.textContent = \"\\n\" + sheet.toString() + \"\\n\";\n  }\n  /**\n   * Insert RuleList into an element.\n   */\n  ;\n\n  _proto.insertRules = function insertRules(rules, nativeParent) {\n    for (var i = 0; i < rules.index.length; i++) {\n      this.insertRule(rules.index[i], i, nativeParent);\n    }\n  }\n  /**\n   * Insert a rule into element.\n   */\n  ;\n\n  _proto.insertRule = function insertRule(rule, index, nativeParent) {\n    if (nativeParent === void 0) {\n      nativeParent = this.element.sheet;\n    }\n\n    if (rule.rules) {\n      var parent = rule;\n      var latestNativeParent = nativeParent;\n\n      if (rule.type === 'conditional' || rule.type === 'keyframes') {\n        // We need to render the container without children first.\n        latestNativeParent = _insertRule(nativeParent, parent.toString({\n          children: false\n        }), index);\n\n        if (latestNativeParent === false) {\n          return false;\n        }\n      }\n\n      this.insertRules(parent.rules, latestNativeParent);\n      return latestNativeParent;\n    } // IE keeps the CSSStyleSheet after style node has been reattached,\n    // so we need to check if the `renderable` reference the right style sheet and not\n    // rerender those rules.\n\n\n    if (rule.renderable && rule.renderable.parentStyleSheet === this.element.sheet) {\n      return rule.renderable;\n    }\n\n    var ruleStr = rule.toString();\n    if (!ruleStr) return false;\n\n    var nativeRule = _insertRule(nativeParent, ruleStr, index);\n\n    if (nativeRule === false) {\n      return false;\n    }\n\n    this.hasInsertedRules = true;\n    rule.renderable = nativeRule;\n    return nativeRule;\n  }\n  /**\n   * Delete a rule.\n   */\n  ;\n\n  _proto.deleteRule = function deleteRule(cssRule) {\n    var sheet = this.element.sheet;\n    var index = this.indexOf(cssRule);\n    if (index === -1) return false;\n    sheet.deleteRule(index);\n    return true;\n  }\n  /**\n   * Get index of a CSS Rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(cssRule) {\n    var cssRules = this.element.sheet.cssRules;\n\n    for (var index = 0; index < cssRules.length; index++) {\n      if (cssRule === cssRules[index]) return index;\n    }\n\n    return -1;\n  }\n  /**\n   * Generate a new CSS rule and replace the existing one.\n   *\n   * Only used for some old browsers because they can't set a selector.\n   */\n  ;\n\n  _proto.replaceRule = function replaceRule(cssRule, rule) {\n    var index = this.indexOf(cssRule);\n    if (index === -1) return false;\n    this.element.sheet.deleteRule(index);\n    return this.insertRule(rule, index);\n  }\n  /**\n   * Get all rules elements.\n   */\n  ;\n\n  _proto.getRules = function getRules() {\n    return this.element.sheet.cssRules;\n  };\n\n  return DomRenderer;\n}();\n\nvar instanceCounter = 0;\n\nvar Jss =\n/*#__PURE__*/\nfunction () {\n  function Jss(options) {\n    this.id = instanceCounter++;\n    this.version = \"10.3.0\";\n    this.plugins = new PluginsRegistry();\n    this.options = {\n      id: {\n        minify: false\n      },\n      createGenerateId: createGenerateId,\n      Renderer: is_in_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ? DomRenderer : null,\n      plugins: []\n    };\n    this.generateId = createGenerateId({\n      minify: false\n    });\n\n    for (var i = 0; i < plugins.length; i++) {\n      this.plugins.use(plugins[i], {\n        queue: 'internal'\n      });\n    }\n\n    this.setup(options);\n  }\n  /**\n   * Prepares various options, applies plugins.\n   * Should not be used twice on the same instance, because there is no plugins\n   * deduplication logic.\n   */\n\n\n  var _proto = Jss.prototype;\n\n  _proto.setup = function setup(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    if (options.createGenerateId) {\n      this.options.createGenerateId = options.createGenerateId;\n    }\n\n    if (options.id) {\n      this.options.id = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, this.options.id, options.id);\n    }\n\n    if (options.createGenerateId || options.id) {\n      this.generateId = this.options.createGenerateId(this.options.id);\n    }\n\n    if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint;\n\n    if ('Renderer' in options) {\n      this.options.Renderer = options.Renderer;\n    } // eslint-disable-next-line prefer-spread\n\n\n    if (options.plugins) this.use.apply(this, options.plugins);\n    return this;\n  }\n  /**\n   * Create a Style Sheet.\n   */\n  ;\n\n  _proto.createStyleSheet = function createStyleSheet(styles, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        index = _options.index;\n\n    if (typeof index !== 'number') {\n      index = sheets.index === 0 ? 0 : sheets.index + 1;\n    }\n\n    var sheet = new StyleSheet(styles, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      jss: this,\n      generateId: options.generateId || this.generateId,\n      insertionPoint: this.options.insertionPoint,\n      Renderer: this.options.Renderer,\n      index: index\n    }));\n    this.plugins.onProcessSheet(sheet);\n    return sheet;\n  }\n  /**\n   * Detach the Style Sheet and remove it from the registry.\n   */\n  ;\n\n  _proto.removeStyleSheet = function removeStyleSheet(sheet) {\n    sheet.detach();\n    sheets.remove(sheet);\n    return this;\n  }\n  /**\n   * Create a rule without a Style Sheet.\n   * [Deprecated] will be removed in the next major version.\n   */\n  ;\n\n  _proto.createRule = function createRule$1(name, style, options) {\n    if (style === void 0) {\n      style = {};\n    }\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    // Enable rule without name for inline styles.\n    if (typeof name === 'object') {\n      return this.createRule(undefined, name, style);\n    }\n\n    var ruleOptions = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      name: name,\n      jss: this,\n      Renderer: this.options.Renderer\n    });\n\n    if (!ruleOptions.generateId) ruleOptions.generateId = this.generateId;\n    if (!ruleOptions.classes) ruleOptions.classes = {};\n    if (!ruleOptions.keyframes) ruleOptions.keyframes = {};\n\n    var rule = createRule(name, style, ruleOptions);\n\n    if (rule) this.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Register plugin. Passed function will be invoked with a rule instance.\n   */\n  ;\n\n  _proto.use = function use() {\n    var _this = this;\n\n    for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n      plugins[_key] = arguments[_key];\n    }\n\n    plugins.forEach(function (plugin) {\n      _this.plugins.use(plugin);\n    });\n    return this;\n  };\n\n  return Jss;\n}();\n\n/**\n * Extracts a styles object with only props that contain function values.\n */\nfunction getDynamicStyles(styles) {\n  var to = null;\n\n  for (var key in styles) {\n    var value = styles[key];\n    var type = typeof value;\n\n    if (type === 'function') {\n      if (!to) to = {};\n      to[key] = value;\n    } else if (type === 'object' && value !== null && !Array.isArray(value)) {\n      var extracted = getDynamicStyles(value);\n\n      if (extracted) {\n        if (!to) to = {};\n        to[key] = extracted;\n      }\n    }\n  }\n\n  return to;\n}\n\n/**\n * SheetsManager is like a WeakMap which is designed to count StyleSheet\n * instances and attach/detach automatically.\n */\nvar SheetsManager =\n/*#__PURE__*/\nfunction () {\n  function SheetsManager() {\n    this.length = 0;\n    this.sheets = new WeakMap();\n  }\n\n  var _proto = SheetsManager.prototype;\n\n  _proto.get = function get(key) {\n    var entry = this.sheets.get(key);\n    return entry && entry.sheet;\n  };\n\n  _proto.add = function add(key, sheet) {\n    if (this.sheets.has(key)) return;\n    this.length++;\n    this.sheets.set(key, {\n      sheet: sheet,\n      refs: 0\n    });\n  };\n\n  _proto.manage = function manage(key) {\n    var entry = this.sheets.get(key);\n\n    if (entry) {\n      if (entry.refs === 0) {\n        entry.sheet.attach();\n      }\n\n      entry.refs++;\n      return entry.sheet;\n    }\n\n    Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] SheetsManager: can't find sheet to manage\");\n    return undefined;\n  };\n\n  _proto.unmanage = function unmanage(key) {\n    var entry = this.sheets.get(key);\n\n    if (entry) {\n      if (entry.refs > 0) {\n        entry.refs--;\n        if (entry.refs === 0) entry.sheet.detach();\n      }\n    } else {\n      Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"SheetsManager: can't find sheet to unmanage\");\n    }\n  };\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(SheetsManager, [{\n    key: \"size\",\n    get: function get() {\n      return this.length;\n    }\n  }]);\n\n  return SheetsManager;\n}();\n\n/**\n * A better abstraction over CSS.\n *\n * @copyright Oleg Isonen (Slobodskoi) / Isonen 2014-present\n * @website https://github.com/cssinjs/jss\n * @license MIT\n */\n\n/**\n * Export a constant indicating if this browser has CSSTOM support.\n * https://developers.google.com/web/updates/2018/03/cssom\n */\nvar hasCSSTOMSupport = typeof CSS !== 'undefined' && CSS && 'number' in CSS;\n/**\n * Creates a new instance of Jss.\n */\n\nvar create = function create(options) {\n  return new Jss(options);\n};\n/**\n * A global Jss instance.\n */\n\nvar index = create();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss/dist/jss.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/mini-create-react-context/dist/esm/index.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/mini-create-react-context/dist/esm/index.js ***!
  \******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n\n\n\n\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n  var key = '__global_unique_id__';\n  return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nfunction createEventEmitter(value) {\n  var handlers = [];\n  return {\n    on: function on(handler) {\n      handlers.push(handler);\n    },\n    off: function off(handler) {\n      handlers = handlers.filter(function (h) {\n        return h !== handler;\n      });\n    },\n    get: function get() {\n      return value;\n    },\n    set: function set(newValue, changedBits) {\n      value = newValue;\n      handlers.forEach(function (handler) {\n        return handler(value, changedBits);\n      });\n    }\n  };\n}\n\nfunction onlyChild(children) {\n  return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n  var _Provider$childContex, _Consumer$contextType;\n\n  var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n  var Provider = /*#__PURE__*/function (_Component) {\n    Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Provider, _Component);\n\n    function Provider() {\n      var _this;\n\n      _this = _Component.apply(this, arguments) || this;\n      _this.emitter = createEventEmitter(_this.props.value);\n      return _this;\n    }\n\n    var _proto = Provider.prototype;\n\n    _proto.getChildContext = function getChildContext() {\n      var _ref;\n\n      return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n    };\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      if (this.props.value !== nextProps.value) {\n        var oldValue = this.props.value;\n        var newValue = nextProps.value;\n        var changedBits;\n\n        if (objectIs(oldValue, newValue)) {\n          changedBits = 0;\n        } else {\n          changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n          if (true) {\n            Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n          }\n\n          changedBits |= 0;\n\n          if (changedBits !== 0) {\n            this.emitter.set(nextProps.value, changedBits);\n          }\n        }\n      }\n    };\n\n    _proto.render = function render() {\n      return this.props.children;\n    };\n\n    return Provider;\n  }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n  Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object.isRequired, _Provider$childContex);\n\n  var Consumer = /*#__PURE__*/function (_Component2) {\n    Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Consumer, _Component2);\n\n    function Consumer() {\n      var _this2;\n\n      _this2 = _Component2.apply(this, arguments) || this;\n      _this2.state = {\n        value: _this2.getValue()\n      };\n\n      _this2.onUpdate = function (newValue, changedBits) {\n        var observedBits = _this2.observedBits | 0;\n\n        if ((observedBits & changedBits) !== 0) {\n          _this2.setState({\n            value: _this2.getValue()\n          });\n        }\n      };\n\n      return _this2;\n    }\n\n    var _proto2 = Consumer.prototype;\n\n    _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var observedBits = nextProps.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentDidMount = function componentDidMount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].on(this.onUpdate);\n      }\n\n      var observedBits = this.props.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentWillUnmount = function componentWillUnmount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].off(this.onUpdate);\n      }\n    };\n\n    _proto2.getValue = function getValue() {\n      if (this.context[contextProp]) {\n        return this.context[contextProp].get();\n      } else {\n        return defaultValue;\n      }\n    };\n\n    _proto2.render = function render() {\n      return onlyChild(this.props.children)(this.state.value);\n    };\n\n    return Consumer;\n  }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n  Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object, _Consumer$contextType);\n  return {\n    Provider: Provider,\n    Consumer: Consumer\n  };\n}\n\nvar index = react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext || createReactContext;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/mini-create-react-context/dist/esm/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/ms/index.js":
/*!**********************************************!*\
  !*** ./jaas-client/node_modules/ms/index.js ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/ms/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/object-assign/index.js":
/*!*********************************************************!*\
  !*** ./jaas-client/node_modules/object-assign/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/object-assign/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/parseqs/index.js":
/*!***************************************************!*\
  !*** ./jaas-client/node_modules/parseqs/index.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/parseqs/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/parseuri/index.js":
/*!****************************************************!*\
  !*** ./jaas-client/node_modules/parseuri/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/parseuri/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/path-to-regexp/index.js":
/*!**********************************************************!*\
  !*** ./jaas-client/node_modules/path-to-regexp/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var isarray = __webpack_require__(/*! isarray */ \"./jaas-client/node_modules/isarray/index.js\")\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = options && options.delimiter || '/'\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      continue\n    }\n\n    var next = str[index]\n    var prefix = res[2]\n    var name = res[3]\n    var capture = res[4]\n    var group = res[5]\n    var modifier = res[6]\n    var asterisk = res[7]\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n    }\n\n    var partial = prefix != null && next != null && next !== prefix\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var delimiter = res[2] || defaultDelimiter\n    var pattern = capture || group\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n    })\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path += str.substr(index)\n  }\n\n  // If the path exists, push it onto the end.\n  if (path) {\n    tokens.push(path)\n  }\n\n  return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n    }\n  }\n\n  return function (obj, opts) {\n    var path = ''\n    var data = obj || {}\n    var options = opts || {}\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n\n        continue\n      }\n\n      var value = data[token.name]\n      var segment\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path += token.prefix\n          }\n\n          continue\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined')\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j])\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n      }\n\n      path += token.prefix + segment\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n  re.keys = keys\n  return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      })\n    }\n  }\n\n  return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n  return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  var strict = options.strict\n  var end = options.end !== false\n  var route = ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var prefix = escapeString(token.prefix)\n      var capture = '(?:' + token.pattern + ')'\n\n      keys.push(token)\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*'\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?'\n        } else {\n          capture = prefix + '(' + capture + ')?'\n        }\n      } else {\n        capture = prefix + '(' + capture + ')'\n      }\n\n      route += capture\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/')\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n  }\n\n  if (end) {\n    route += '$'\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, /** @type {!Array} */ (keys))\n  }\n\n  if (isarray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/path-to-regexp/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/prop-types/checkPropTypes.js":
/*!***************************************************************!*\
  !*** ./jaas-client/node_modules/prop-types/checkPropTypes.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar printWarning = function() {};\n\nif (true) {\n  var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n  var loggedTypeFailures = {};\n  var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n  if (true) {\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error;\n        // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            var err = Error(\n              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n            );\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error && !(error instanceof Error)) {\n          printWarning(\n            (componentName || 'React class') + ': type specification of ' +\n            location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n            'You may have forgotten to pass an argument to the type checker ' +\n            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n            'shape all require an argument).'\n          );\n        }\n        if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error.message] = true;\n\n          var stack = getStack ? getStack() : '';\n\n          printWarning(\n            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n          );\n        }\n      }\n    }\n  }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n  if (true) {\n    loggedTypeFailures = {};\n  }\n}\n\nmodule.exports = checkPropTypes;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/prop-types/checkPropTypes.js?");

/***/ }),

/***/ "./jaas-client/node_modules/prop-types/factoryWithTypeCheckers.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/prop-types/factoryWithTypeCheckers.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactIs = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\nvar assign = __webpack_require__(/*! object-assign */ \"./jaas-client/node_modules/object-assign/index.js\");\n\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js\");\nvar checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ \"./jaas-client/node_modules/prop-types/checkPropTypes.js\");\n\nvar has = Function.call.bind(Object.prototype.hasOwnProperty);\nvar printWarning = function() {};\n\nif (true) {\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n  return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n  /* global Symbol */\n  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n  /**\n   * Returns the iterator method function contained on the iterable object.\n   *\n   * Be sure to invoke the function with the iterable as context:\n   *\n   *     var iteratorFn = getIteratorFn(myIterable);\n   *     if (iteratorFn) {\n   *       var iterator = iteratorFn.call(myIterable);\n   *       ...\n   *     }\n   *\n   * @param {?object} maybeIterable\n   * @return {?function}\n   */\n  function getIteratorFn(maybeIterable) {\n    var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n    if (typeof iteratorFn === 'function') {\n      return iteratorFn;\n    }\n  }\n\n  /**\n   * Collection of methods that allow declaration and validation of props that are\n   * supplied to React components. Example usage:\n   *\n   *   var Props = require('ReactPropTypes');\n   *   var MyArticle = React.createClass({\n   *     propTypes: {\n   *       // An optional string prop named \"description\".\n   *       description: Props.string,\n   *\n   *       // A required enum prop named \"category\".\n   *       category: Props.oneOf(['News','Photos']).isRequired,\n   *\n   *       // A prop named \"dialog\" that requires an instance of Dialog.\n   *       dialog: Props.instanceOf(Dialog).isRequired\n   *     },\n   *     render: function() { ... }\n   *   });\n   *\n   * A more formal specification of how these methods are used:\n   *\n   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n   *   decl := ReactPropTypes.{type}(.isRequired)?\n   *\n   * Each and every declaration produces a function with the same signature. This\n   * allows the creation of custom validation functions. For example:\n   *\n   *  var MyLink = React.createClass({\n   *    propTypes: {\n   *      // An optional string or URI prop named \"href\".\n   *      href: function(props, propName, componentName) {\n   *        var propValue = props[propName];\n   *        if (propValue != null && typeof propValue !== 'string' &&\n   *            !(propValue instanceof URI)) {\n   *          return new Error(\n   *            'Expected a string or an URI for ' + propName + ' in ' +\n   *            componentName\n   *          );\n   *        }\n   *      }\n   *    },\n   *    render: function() {...}\n   *  });\n   *\n   * @internal\n   */\n\n  var ANONYMOUS = '<<anonymous>>';\n\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n  var ReactPropTypes = {\n    array: createPrimitiveTypeChecker('array'),\n    bool: createPrimitiveTypeChecker('boolean'),\n    func: createPrimitiveTypeChecker('function'),\n    number: createPrimitiveTypeChecker('number'),\n    object: createPrimitiveTypeChecker('object'),\n    string: createPrimitiveTypeChecker('string'),\n    symbol: createPrimitiveTypeChecker('symbol'),\n\n    any: createAnyTypeChecker(),\n    arrayOf: createArrayOfTypeChecker,\n    element: createElementTypeChecker(),\n    elementType: createElementTypeTypeChecker(),\n    instanceOf: createInstanceTypeChecker,\n    node: createNodeChecker(),\n    objectOf: createObjectOfTypeChecker,\n    oneOf: createEnumTypeChecker,\n    oneOfType: createUnionTypeChecker,\n    shape: createShapeTypeChecker,\n    exact: createStrictShapeTypeChecker,\n  };\n\n  /**\n   * inlined Object.is polyfill to avoid requiring consumers ship their own\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n   */\n  /*eslint-disable no-self-compare*/\n  function is(x, y) {\n    // SameValue algorithm\n    if (x === y) {\n      // Steps 1-5, 7-10\n      // Steps 6.b-6.e: +0 != -0\n      return x !== 0 || 1 / x === 1 / y;\n    } else {\n      // Step 6.a: NaN == NaN\n      return x !== x && y !== y;\n    }\n  }\n  /*eslint-enable no-self-compare*/\n\n  /**\n   * We use an Error-like object for backward compatibility as people may call\n   * PropTypes directly and inspect their output. However, we don't use real\n   * Errors anymore. We don't inspect their stack anyway, and creating them\n   * is prohibitively expensive if they are created too often, such as what\n   * happens in oneOfType() for any type before the one that matched.\n   */\n  function PropTypeError(message) {\n    this.message = message;\n    this.stack = '';\n  }\n  // Make `instanceof Error` still work for returned errors.\n  PropTypeError.prototype = Error.prototype;\n\n  function createChainableTypeChecker(validate) {\n    if (true) {\n      var manualPropTypeCallCache = {};\n      var manualPropTypeWarningCount = 0;\n    }\n    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n      componentName = componentName || ANONYMOUS;\n      propFullName = propFullName || propName;\n\n      if (secret !== ReactPropTypesSecret) {\n        if (throwOnDirectAccess) {\n          // New behavior only for users of `prop-types` package\n          var err = new Error(\n            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n            'Use `PropTypes.checkPropTypes()` to call them. ' +\n            'Read more at http://fb.me/use-check-prop-types'\n          );\n          err.name = 'Invariant Violation';\n          throw err;\n        } else if ( true && typeof console !== 'undefined') {\n          // Old behavior for people using React.PropTypes\n          var cacheKey = componentName + ':' + propName;\n          if (\n            !manualPropTypeCallCache[cacheKey] &&\n            // Avoid spamming the console because they are often not actionable except for lib authors\n            manualPropTypeWarningCount < 3\n          ) {\n            printWarning(\n              'You are manually calling a React.PropTypes validation ' +\n              'function for the `' + propFullName + '` prop on `' + componentName  + '`. This is deprecated ' +\n              'and will throw in the standalone `prop-types` package. ' +\n              'You may be seeing this warning due to a third-party PropTypes ' +\n              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n            );\n            manualPropTypeCallCache[cacheKey] = true;\n            manualPropTypeWarningCount++;\n          }\n        }\n      }\n      if (props[propName] == null) {\n        if (isRequired) {\n          if (props[propName] === null) {\n            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n          }\n          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n        }\n        return null;\n      } else {\n        return validate(props, propName, componentName, location, propFullName);\n      }\n    }\n\n    var chainedCheckType = checkType.bind(null, false);\n    chainedCheckType.isRequired = checkType.bind(null, true);\n\n    return chainedCheckType;\n  }\n\n  function createPrimitiveTypeChecker(expectedType) {\n    function validate(props, propName, componentName, location, propFullName, secret) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== expectedType) {\n        // `propValue` being instance of, say, date/regexp, pass the 'object'\n        // check, but we can offer a more precise error message here rather than\n        // 'of type `object`'.\n        var preciseType = getPreciseType(propValue);\n\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createAnyTypeChecker() {\n    return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n  }\n\n  function createArrayOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n      }\n      var propValue = props[propName];\n      if (!Array.isArray(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n      }\n      for (var i = 0; i < propValue.length; i++) {\n        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!isValidElement(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!ReactIs.isValidElementType(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createInstanceTypeChecker(expectedClass) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!(props[propName] instanceof expectedClass)) {\n        var expectedClassName = expectedClass.name || ANONYMOUS;\n        var actualClassName = getClassName(props[propName]);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createEnumTypeChecker(expectedValues) {\n    if (!Array.isArray(expectedValues)) {\n      if (true) {\n        if (arguments.length > 1) {\n          printWarning(\n            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n          );\n        } else {\n          printWarning('Invalid argument supplied to oneOf, expected an array.');\n        }\n      }\n      return emptyFunctionThatReturnsNull;\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      for (var i = 0; i < expectedValues.length; i++) {\n        if (is(propValue, expectedValues[i])) {\n          return null;\n        }\n      }\n\n      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n        var type = getPreciseType(value);\n        if (type === 'symbol') {\n          return String(value);\n        }\n        return value;\n      });\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createObjectOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n      }\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n      }\n      for (var key in propValue) {\n        if (has(propValue, key)) {\n          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n          if (error instanceof Error) {\n            return error;\n          }\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createUnionTypeChecker(arrayOfTypeCheckers) {\n    if (!Array.isArray(arrayOfTypeCheckers)) {\n       true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : undefined;\n      return emptyFunctionThatReturnsNull;\n    }\n\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (typeof checker !== 'function') {\n        printWarning(\n          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n        );\n        return emptyFunctionThatReturnsNull;\n      }\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n        var checker = arrayOfTypeCheckers[i];\n        if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n          return null;\n        }\n      }\n\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createNodeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!isNode(props[propName])) {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      for (var key in shapeTypes) {\n        var checker = shapeTypes[key];\n        if (!checker) {\n          continue;\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createStrictShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      // We need to check all keys in case some are required but missing from\n      // props.\n      var allKeys = assign({}, props[propName], shapeTypes);\n      for (var key in allKeys) {\n        var checker = shapeTypes[key];\n        if (!checker) {\n          return new PropTypeError(\n            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n            '\\nBad object: ' + JSON.stringify(props[propName], null, '  ') +\n            '\\nValid keys: ' +  JSON.stringify(Object.keys(shapeTypes), null, '  ')\n          );\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n\n    return createChainableTypeChecker(validate);\n  }\n\n  function isNode(propValue) {\n    switch (typeof propValue) {\n      case 'number':\n      case 'string':\n      case 'undefined':\n        return true;\n      case 'boolean':\n        return !propValue;\n      case 'object':\n        if (Array.isArray(propValue)) {\n          return propValue.every(isNode);\n        }\n        if (propValue === null || isValidElement(propValue)) {\n          return true;\n        }\n\n        var iteratorFn = getIteratorFn(propValue);\n        if (iteratorFn) {\n          var iterator = iteratorFn.call(propValue);\n          var step;\n          if (iteratorFn !== propValue.entries) {\n            while (!(step = iterator.next()).done) {\n              if (!isNode(step.value)) {\n                return false;\n              }\n            }\n          } else {\n            // Iterator will provide entry [k,v] tuples rather than values.\n            while (!(step = iterator.next()).done) {\n              var entry = step.value;\n              if (entry) {\n                if (!isNode(entry[1])) {\n                  return false;\n                }\n              }\n            }\n          }\n        } else {\n          return false;\n        }\n\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  function isSymbol(propType, propValue) {\n    // Native Symbol.\n    if (propType === 'symbol') {\n      return true;\n    }\n\n    // falsy value can't be a Symbol\n    if (!propValue) {\n      return false;\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue['@@toStringTag'] === 'Symbol') {\n      return true;\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n      return true;\n    }\n\n    return false;\n  }\n\n  // Equivalent of `typeof` but with special handling for array and regexp.\n  function getPropType(propValue) {\n    var propType = typeof propValue;\n    if (Array.isArray(propValue)) {\n      return 'array';\n    }\n    if (propValue instanceof RegExp) {\n      // Old webkits (at least until Android 4.0) return 'function' rather than\n      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n      // passes PropTypes.object.\n      return 'object';\n    }\n    if (isSymbol(propType, propValue)) {\n      return 'symbol';\n    }\n    return propType;\n  }\n\n  // This handles more types than `getPropType`. Only used for error messages.\n  // See `createPrimitiveTypeChecker`.\n  function getPreciseType(propValue) {\n    if (typeof propValue === 'undefined' || propValue === null) {\n      return '' + propValue;\n    }\n    var propType = getPropType(propValue);\n    if (propType === 'object') {\n      if (propValue instanceof Date) {\n        return 'date';\n      } else if (propValue instanceof RegExp) {\n        return 'regexp';\n      }\n    }\n    return propType;\n  }\n\n  // Returns a string that is postfixed to a warning about an invalid type.\n  // For example, \"undefined\" or \"of type array\"\n  function getPostfixForTypeWarning(value) {\n    var type = getPreciseType(value);\n    switch (type) {\n      case 'array':\n      case 'object':\n        return 'an ' + type;\n      case 'boolean':\n      case 'date':\n      case 'regexp':\n        return 'a ' + type;\n      default:\n        return type;\n    }\n  }\n\n  // Returns class name of the object, if any.\n  function getClassName(propValue) {\n    if (!propValue.constructor || !propValue.constructor.name) {\n      return ANONYMOUS;\n    }\n    return propValue.constructor.name;\n  }\n\n  ReactPropTypes.checkPropTypes = checkPropTypes;\n  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/prop-types/factoryWithTypeCheckers.js?");

/***/ }),

/***/ "./jaas-client/node_modules/prop-types/index.js":
/*!******************************************************!*\
  !*** ./jaas-client/node_modules/prop-types/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (true) {\n  var ReactIs = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ \"./jaas-client/node_modules/prop-types/factoryWithTypeCheckers.js\")(ReactIs.isElement, throwOnDirectAccess);\n} else {}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/prop-types/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-dom/cjs/react-dom.development.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/react-dom/cjs/react-dom.development.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/** @license React v16.13.1\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\nvar _assign = __webpack_require__(/*! object-assign */ \"./jaas-client/node_modules/object-assign/index.js\");\nvar Scheduler = __webpack_require__(/*! scheduler */ \"./jaas-client/node_modules/scheduler/index.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./jaas-client/node_modules/prop-types/checkPropTypes.js\");\nvar tracing = __webpack_require__(/*! scheduler/tracing */ \"./jaas-client/node_modules/scheduler/tracing.js\");\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.\n// Current owner and dispatcher used to share the same ref,\n// but PR #14548 split them out to better support the react-debug-tools package.\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {\n  ReactSharedInternals.ReactCurrentDispatcher = {\n    current: null\n  };\n}\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {\n  ReactSharedInternals.ReactCurrentBatchConfig = {\n    suspense: null\n  };\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n  {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    printWarning('warn', format, args);\n  }\n}\nfunction error(format) {\n  {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    printWarning('error', format, args);\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n    in') === 0;\n\n    if (!hasExistingStack) {\n      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n      var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n      if (stack !== '') {\n        format += '%s';\n        args = args.concat([stack]);\n      }\n    }\n\n    var argsWithFormat = args.map(function (item) {\n      return '' + item;\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      var argIndex = 0;\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      });\n      throw new Error(message);\n    } catch (x) {}\n  }\n}\n\nif (!React) {\n  {\n    throw Error( \"ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.\" );\n  }\n}\n\nvar invokeGuardedCallbackImpl = function (name, func, context, a, b, c, d, e, f) {\n  var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n  try {\n    func.apply(context, funcArgs);\n  } catch (error) {\n    this.onError(error);\n  }\n};\n\n{\n  // In DEV mode, we swap out invokeGuardedCallback for a special version\n  // that plays more nicely with the browser's DevTools. The idea is to preserve\n  // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n  // functions in invokeGuardedCallback, and the production version of\n  // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n  // like caught exceptions, and the DevTools won't pause unless the developer\n  // takes the extra step of enabling pause on caught exceptions. This is\n  // unintuitive, though, because even though React has caught the error, from\n  // the developer's perspective, the error is uncaught.\n  //\n  // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n  // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n  // DOM node, and call the user-provided callback from inside an event handler\n  // for that fake event. If the callback throws, the error is \"captured\" using\n  // a global event handler. But because the error happens in a different\n  // event loop context, it does not interrupt the normal program flow.\n  // Effectively, this gives us try-catch behavior without actually using\n  // try-catch. Neat!\n  // Check that the browser supports the APIs we need to implement our special\n  // DEV version of invokeGuardedCallback\n  if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n    var fakeNode = document.createElement('react');\n\n    var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) {\n      // If document doesn't exist we know for sure we will crash in this method\n      // when we call document.createEvent(). However this can cause confusing\n      // errors: https://github.com/facebookincubator/create-react-app/issues/3482\n      // So we preemptively throw with a better message instead.\n      if (!(typeof document !== 'undefined')) {\n        {\n          throw Error( \"The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.\" );\n        }\n      }\n\n      var evt = document.createEvent('Event'); // Keeps track of whether the user-provided callback threw an error. We\n      // set this to true at the beginning, then set it to false right after\n      // calling the function. If the function errors, `didError` will never be\n      // set to false. This strategy works even if the browser is flaky and\n      // fails to call our global error handler, because it doesn't rely on\n      // the error event at all.\n\n      var didError = true; // Keeps track of the value of window.event so that we can reset it\n      // during the callback to let user code access window.event in the\n      // browsers that support it.\n\n      var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n      // dispatching: https://github.com/facebook/react/issues/13688\n\n      var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event'); // Create an event handler for our fake event. We will synchronously\n      // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n      // call the user-provided callback.\n\n      var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n      function callCallback() {\n        // We immediately remove the callback from event listeners so that\n        // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n        // nested call would trigger the fake event handlers of any call higher\n        // in the stack.\n        fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n        // window.event assignment in both IE <= 10 as they throw an error\n        // \"Member not found\" in strict mode, and in Firefox which does not\n        // support window.event.\n\n        if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n          window.event = windowEvent;\n        }\n\n        func.apply(context, funcArgs);\n        didError = false;\n      } // Create a global error event handler. We use this to capture the value\n      // that was thrown. It's possible that this error handler will fire more\n      // than once; for example, if non-React code also calls `dispatchEvent`\n      // and a handler for that event throws. We should be resilient to most of\n      // those cases. Even if our error event handler fires more than once, the\n      // last error event is always used. If the callback actually does error,\n      // we know that the last error event is the correct one, because it's not\n      // possible for anything else to have happened in between our callback\n      // erroring and the code that follows the `dispatchEvent` call below. If\n      // the callback doesn't error, but the error event was fired, we know to\n      // ignore it because `didError` will be false, as described above.\n\n\n      var error; // Use this to track whether the error event is ever called.\n\n      var didSetError = false;\n      var isCrossOriginError = false;\n\n      function handleWindowError(event) {\n        error = event.error;\n        didSetError = true;\n\n        if (error === null && event.colno === 0 && event.lineno === 0) {\n          isCrossOriginError = true;\n        }\n\n        if (event.defaultPrevented) {\n          // Some other error handler has prevented default.\n          // Browsers silence the error report if this happens.\n          // We'll remember this to later decide whether to log it or not.\n          if (error != null && typeof error === 'object') {\n            try {\n              error._suppressLogging = true;\n            } catch (inner) {// Ignore.\n            }\n          }\n        }\n      } // Create a fake event type.\n\n\n      var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n      window.addEventListener('error', handleWindowError);\n      fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n      // errors, it will trigger our global error handler.\n\n      evt.initEvent(evtType, false, false);\n      fakeNode.dispatchEvent(evt);\n\n      if (windowEventDescriptor) {\n        Object.defineProperty(window, 'event', windowEventDescriptor);\n      }\n\n      if (didError) {\n        if (!didSetError) {\n          // The callback errored, but the error event never fired.\n          error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n        } else if (isCrossOriginError) {\n          error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.');\n        }\n\n        this.onError(error);\n      } // Remove our event listeners\n\n\n      window.removeEventListener('error', handleWindowError);\n    };\n\n    invokeGuardedCallbackImpl = invokeGuardedCallbackDev;\n  }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n  onError: function (error) {\n    hasError = true;\n    caughtError = error;\n  }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n  hasError = false;\n  caughtError = null;\n  invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n  invokeGuardedCallback.apply(this, arguments);\n\n  if (hasError) {\n    var error = clearCaughtError();\n\n    if (!hasRethrowError) {\n      hasRethrowError = true;\n      rethrowError = error;\n    }\n  }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n  if (hasRethrowError) {\n    var error = rethrowError;\n    hasRethrowError = false;\n    rethrowError = null;\n    throw error;\n  }\n}\nfunction hasCaughtError() {\n  return hasError;\n}\nfunction clearCaughtError() {\n  if (hasError) {\n    var error = caughtError;\n    hasError = false;\n    caughtError = null;\n    return error;\n  } else {\n    {\n      {\n        throw Error( \"clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n  }\n}\n\nvar getFiberCurrentPropsFromNode = null;\nvar getInstanceFromNode = null;\nvar getNodeFromInstance = null;\nfunction setComponentTree(getFiberCurrentPropsFromNodeImpl, getInstanceFromNodeImpl, getNodeFromInstanceImpl) {\n  getFiberCurrentPropsFromNode = getFiberCurrentPropsFromNodeImpl;\n  getInstanceFromNode = getInstanceFromNodeImpl;\n  getNodeFromInstance = getNodeFromInstanceImpl;\n\n  {\n    if (!getNodeFromInstance || !getInstanceFromNode) {\n      error('EventPluginUtils.setComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.');\n    }\n  }\n}\nvar validateEventDispatches;\n\n{\n  validateEventDispatches = function (event) {\n    var dispatchListeners = event._dispatchListeners;\n    var dispatchInstances = event._dispatchInstances;\n    var listenersIsArr = Array.isArray(dispatchListeners);\n    var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n    var instancesIsArr = Array.isArray(dispatchInstances);\n    var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n    if (instancesIsArr !== listenersIsArr || instancesLen !== listenersLen) {\n      error('EventPluginUtils: Invalid `event`.');\n    }\n  };\n}\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\n\n\nfunction executeDispatch(event, listener, inst) {\n  var type = event.type || 'unknown-event';\n  event.currentTarget = getNodeFromInstance(inst);\n  invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n  event.currentTarget = null;\n}\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\n\nfunction executeDispatchesInOrder(event) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchInstances = event._dispatchInstances;\n\n  {\n    validateEventDispatches(event);\n  }\n\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      } // Listeners and Instances are two parallel arrays that are always in sync.\n\n\n      executeDispatch(event, dispatchListeners[i], dispatchInstances[i]);\n    }\n  } else if (dispatchListeners) {\n    executeDispatch(event, dispatchListeners, dispatchInstances);\n  }\n\n  event._dispatchListeners = null;\n  event._dispatchInstances = null;\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar FundamentalComponent = 20;\nvar ScopeComponent = 21;\nvar Block = 22;\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n/**\n * Injectable mapping from names to event plugin modules.\n */\n\nvar namesToPlugins = {};\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\n\nfunction recomputePluginOrdering() {\n  if (!eventPluginOrder) {\n    // Wait until an `eventPluginOrder` is injected.\n    return;\n  }\n\n  for (var pluginName in namesToPlugins) {\n    var pluginModule = namesToPlugins[pluginName];\n    var pluginIndex = eventPluginOrder.indexOf(pluginName);\n\n    if (!(pluginIndex > -1)) {\n      {\n        throw Error( \"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `\" + pluginName + \"`.\" );\n      }\n    }\n\n    if (plugins[pluginIndex]) {\n      continue;\n    }\n\n    if (!pluginModule.extractEvents) {\n      {\n        throw Error( \"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `\" + pluginName + \"` does not.\" );\n      }\n    }\n\n    plugins[pluginIndex] = pluginModule;\n    var publishedEvents = pluginModule.eventTypes;\n\n    for (var eventName in publishedEvents) {\n      if (!publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName)) {\n        {\n          throw Error( \"EventPluginRegistry: Failed to publish event `\" + eventName + \"` for plugin `\" + pluginName + \"`.\" );\n        }\n      }\n    }\n  }\n}\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\n\n\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n  if (!!eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n    {\n      throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same event name, `\" + eventName + \"`.\" );\n    }\n  }\n\n  eventNameDispatchConfigs[eventName] = dispatchConfig;\n  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n\n  if (phasedRegistrationNames) {\n    for (var phaseName in phasedRegistrationNames) {\n      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n        var phasedRegistrationName = phasedRegistrationNames[phaseName];\n        publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n      }\n    }\n\n    return true;\n  } else if (dispatchConfig.registrationName) {\n    publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n    return true;\n  }\n\n  return false;\n}\n/**\n * Publishes a registration name that is used to identify dispatched events.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\n\n\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n  if (!!registrationNameModules[registrationName]) {\n    {\n      throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same registration name, `\" + registrationName + \"`.\" );\n    }\n  }\n\n  registrationNameModules[registrationName] = pluginModule;\n  registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n  {\n    var lowerCasedName = registrationName.toLowerCase();\n    possibleRegistrationNames[lowerCasedName] = registrationName;\n\n    if (registrationName === 'onDoubleClick') {\n      possibleRegistrationNames.ondblclick = registrationName;\n    }\n  }\n}\n/**\n * Registers plugins so that they can extract and dispatch events.\n */\n\n/**\n * Ordered list of injected plugins.\n */\n\n\nvar plugins = [];\n/**\n * Mapping from event name to dispatch config\n */\n\nvar eventNameDispatchConfigs = {};\n/**\n * Mapping from registration name to plugin module\n */\n\nvar registrationNameModules = {};\n/**\n * Mapping from registration name to event name\n */\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\nvar possibleRegistrationNames =  {} ; // Trust the developer to only use possibleRegistrationNames in true\n\n/**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n */\n\nfunction injectEventPluginOrder(injectedEventPluginOrder) {\n  if (!!eventPluginOrder) {\n    {\n      throw Error( \"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.\" );\n    }\n  } // Clone the ordering so it cannot be dynamically mutated.\n\n\n  eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n  recomputePluginOrdering();\n}\n/**\n * Injects plugins to be used by plugin event system. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n */\n\nfunction injectEventPluginsByName(injectedNamesToPlugins) {\n  var isOrderingDirty = false;\n\n  for (var pluginName in injectedNamesToPlugins) {\n    if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n      continue;\n    }\n\n    var pluginModule = injectedNamesToPlugins[pluginName];\n\n    if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n      if (!!namesToPlugins[pluginName]) {\n        {\n          throw Error( \"EventPluginRegistry: Cannot inject two different event plugins using the same name, `\" + pluginName + \"`.\" );\n        }\n      }\n\n      namesToPlugins[pluginName] = pluginModule;\n      isOrderingDirty = true;\n    }\n  }\n\n  if (isOrderingDirty) {\n    recomputePluginOrdering();\n  }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar PLUGIN_EVENT_SYSTEM = 1;\nvar IS_REPLAYED = 1 << 5;\nvar IS_FIRST_ANCESTOR = 1 << 6;\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n  // We perform this translation at the end of the event loop so that we\n  // always receive the correct fiber here\n  var internalInstance = getInstanceFromNode(target);\n\n  if (!internalInstance) {\n    // Unmounted\n    return;\n  }\n\n  if (!(typeof restoreImpl === 'function')) {\n    {\n      throw Error( \"setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n\n  var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.\n\n  if (stateNode) {\n    var _props = getFiberCurrentPropsFromNode(stateNode);\n\n    restoreImpl(internalInstance.stateNode, internalInstance.type, _props);\n  }\n}\n\nfunction setRestoreImplementation(impl) {\n  restoreImpl = impl;\n}\nfunction enqueueStateRestore(target) {\n  if (restoreTarget) {\n    if (restoreQueue) {\n      restoreQueue.push(target);\n    } else {\n      restoreQueue = [target];\n    }\n  } else {\n    restoreTarget = target;\n  }\n}\nfunction needsStateRestore() {\n  return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n  if (!restoreTarget) {\n    return;\n  }\n\n  var target = restoreTarget;\n  var queuedTargets = restoreQueue;\n  restoreTarget = null;\n  restoreQueue = null;\n  restoreStateOfTarget(target);\n\n  if (queuedTargets) {\n    for (var i = 0; i < queuedTargets.length; i++) {\n      restoreStateOfTarget(queuedTargets[i]);\n    }\n  }\n}\n\nvar enableProfilerTimer = true; // Trace which interactions trigger each commit.\n\nvar enableDeprecatedFlareAPI = false; // Experimental Host Component support.\n\nvar enableFundamentalAPI = false; // Experimental Scope support.\nvar warnAboutStringRefs = false;\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n// Defaults\n\nvar batchedUpdatesImpl = function (fn, bookkeeping) {\n  return fn(bookkeeping);\n};\n\nvar discreteUpdatesImpl = function (fn, a, b, c, d) {\n  return fn(a, b, c, d);\n};\n\nvar flushDiscreteUpdatesImpl = function () {};\n\nvar batchedEventUpdatesImpl = batchedUpdatesImpl;\nvar isInsideEventHandler = false;\nvar isBatchingEventUpdates = false;\n\nfunction finishEventHandler() {\n  // Here we wait until all updates have propagated, which is important\n  // when using controlled components within layers:\n  // https://github.com/facebook/react/issues/1698\n  // Then we restore state of any controlled component.\n  var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n  if (controlledComponentsHavePendingUpdates) {\n    // If a controlled event was fired, we may need to restore the state of\n    // the DOM node back to the controlled value. This is necessary when React\n    // bails out of the update without touching the DOM.\n    flushDiscreteUpdatesImpl();\n    restoreStateIfNeeded();\n  }\n}\n\nfunction batchedUpdates(fn, bookkeeping) {\n  if (isInsideEventHandler) {\n    // If we are currently inside another batch, we need to wait until it\n    // fully completes before restoring state.\n    return fn(bookkeeping);\n  }\n\n  isInsideEventHandler = true;\n\n  try {\n    return batchedUpdatesImpl(fn, bookkeeping);\n  } finally {\n    isInsideEventHandler = false;\n    finishEventHandler();\n  }\n}\nfunction batchedEventUpdates(fn, a, b) {\n  if (isBatchingEventUpdates) {\n    // If we are currently inside another batch, we need to wait until it\n    // fully completes before restoring state.\n    return fn(a, b);\n  }\n\n  isBatchingEventUpdates = true;\n\n  try {\n    return batchedEventUpdatesImpl(fn, a, b);\n  } finally {\n    isBatchingEventUpdates = false;\n    finishEventHandler();\n  }\n} // This is for the React Flare event system\nfunction discreteUpdates(fn, a, b, c, d) {\n  var prevIsInsideEventHandler = isInsideEventHandler;\n  isInsideEventHandler = true;\n\n  try {\n    return discreteUpdatesImpl(fn, a, b, c, d);\n  } finally {\n    isInsideEventHandler = prevIsInsideEventHandler;\n\n    if (!isInsideEventHandler) {\n      finishEventHandler();\n    }\n  }\n}\nfunction flushDiscreteUpdatesIfNeeded(timeStamp) {\n  // event.timeStamp isn't overly reliable due to inconsistencies in\n  // how different browsers have historically provided the time stamp.\n  // Some browsers provide high-resolution time stamps for all events,\n  // some provide low-resolution time stamps for all events. FF < 52\n  // even mixes both time stamps together. Some browsers even report\n  // negative time stamps or time stamps that are 0 (iOS9) in some cases.\n  // Given we are only comparing two time stamps with equality (!==),\n  // we are safe from the resolution differences. If the time stamp is 0\n  // we bail-out of preventing the flush, which can affect semantics,\n  // such as if an earlier flush removes or adds event listeners that\n  // are fired in the subsequent flush. However, this is the same\n  // behaviour as we had before this change, so the risks are low.\n  if (!isInsideEventHandler && (!enableDeprecatedFlareAPI  )) {\n    flushDiscreteUpdatesImpl();\n  }\n}\nfunction setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventUpdatesImpl) {\n  batchedUpdatesImpl = _batchedUpdatesImpl;\n  discreteUpdatesImpl = _discreteUpdatesImpl;\n  flushDiscreteUpdatesImpl = _flushDiscreteUpdatesImpl;\n  batchedEventUpdatesImpl = _batchedEventUpdatesImpl;\n}\n\nvar DiscreteEvent = 0;\nvar UserBlockingEvent = 1;\nvar ContinuousEvent = 2;\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the whitelist are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar ROOT_ATTRIBUTE_NAME = 'data-reactroot';\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n    return true;\n  }\n\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n    return false;\n  }\n\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n    validatedAttributeNameCache[attributeName] = true;\n    return true;\n  }\n\n  illegalAttributeNameCache[attributeName] = true;\n\n  {\n    error('Invalid attribute name: `%s`', attributeName);\n  }\n\n  return false;\n}\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n  if (propertyInfo !== null) {\n    return propertyInfo.type === RESERVED;\n  }\n\n  if (isCustomComponentTag) {\n    return false;\n  }\n\n  if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n    return true;\n  }\n\n  return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n  if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n    return false;\n  }\n\n  switch (typeof value) {\n    case 'function': // $FlowIssue symbol is perfectly valid here\n\n    case 'symbol':\n      // eslint-disable-line\n      return true;\n\n    case 'boolean':\n      {\n        if (isCustomComponentTag) {\n          return false;\n        }\n\n        if (propertyInfo !== null) {\n          return !propertyInfo.acceptsBooleans;\n        } else {\n          var prefix = name.toLowerCase().slice(0, 5);\n          return prefix !== 'data-' && prefix !== 'aria-';\n        }\n      }\n\n    default:\n      return false;\n  }\n}\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n  if (value === null || typeof value === 'undefined') {\n    return true;\n  }\n\n  if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n    return true;\n  }\n\n  if (isCustomComponentTag) {\n    return false;\n  }\n\n  if (propertyInfo !== null) {\n    switch (propertyInfo.type) {\n      case BOOLEAN:\n        return !value;\n\n      case OVERLOADED_BOOLEAN:\n        return value === false;\n\n      case NUMERIC:\n        return isNaN(value);\n\n      case POSITIVE_NUMERIC:\n        return isNaN(value) || value < 1;\n    }\n  }\n\n  return false;\n}\nfunction getPropertyInfo(name) {\n  return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL) {\n  this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n  this.attributeName = attributeName;\n  this.attributeNamespace = attributeNamespace;\n  this.mustUseProperty = mustUseProperty;\n  this.propertyName = name;\n  this.type = type;\n  this.sanitizeURL = sanitizeURL;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n  var name = _ref[0],\n      attributeName = _ref[1];\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n  return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML whitelist.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, null, // attributeNamespace\n  false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/1999/xlink', false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/XML/1998/namespace', false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  true);\n});\n\nvar ReactDebugCurrentFrame = null;\n\n{\n  ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n} // A javascript: URL can contain leading C0 control or \\u0020 SPACE,\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n  {\n    if (!didWarn && isJavaScriptProtocol.test(url)) {\n      didWarn = true;\n\n      error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n    }\n  }\n}\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n  {\n    if (propertyInfo.mustUseProperty) {\n      var propertyName = propertyInfo.propertyName;\n      return node[propertyName];\n    } else {\n      if ( propertyInfo.sanitizeURL) {\n        // If we haven't fully disabled javascript: URLs, and if\n        // the hydration is successful of a javascript: URL, we\n        // still want to warn on the client.\n        sanitizeURL('' + expected);\n      }\n\n      var attributeName = propertyInfo.attributeName;\n      var stringValue = null;\n\n      if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n        if (node.hasAttribute(attributeName)) {\n          var value = node.getAttribute(attributeName);\n\n          if (value === '') {\n            return true;\n          }\n\n          if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n            return value;\n          }\n\n          if (value === '' + expected) {\n            return expected;\n          }\n\n          return value;\n        }\n      } else if (node.hasAttribute(attributeName)) {\n        if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n          // We had an attribute but shouldn't have had one, so read it\n          // for the error message.\n          return node.getAttribute(attributeName);\n        }\n\n        if (propertyInfo.type === BOOLEAN) {\n          // If this was a boolean, it doesn't matter what the value is\n          // the fact that we have it is the same as the expected.\n          return expected;\n        } // Even if this property uses a namespace we use getAttribute\n        // because we assume its namespaced name is the same as our config.\n        // To use getAttributeNS we need the local name which we don't have\n        // in our config atm.\n\n\n        stringValue = node.getAttribute(attributeName);\n      }\n\n      if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n        return stringValue === null ? expected : stringValue;\n      } else if (stringValue === '' + expected) {\n        return expected;\n      } else {\n        return stringValue;\n      }\n    }\n  }\n}\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected) {\n  {\n    if (!isAttributeNameSafe(name)) {\n      return;\n    }\n\n    if (!node.hasAttribute(name)) {\n      return expected === undefined ? undefined : null;\n    }\n\n    var value = node.getAttribute(name);\n\n    if (value === '' + expected) {\n      return expected;\n    }\n\n    return value;\n  }\n}\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n  var propertyInfo = getPropertyInfo(name);\n\n  if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n    return;\n  }\n\n  if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n    value = null;\n  } // If the prop isn't in the special list, treat it as a simple attribute.\n\n\n  if (isCustomComponentTag || propertyInfo === null) {\n    if (isAttributeNameSafe(name)) {\n      var _attributeName = name;\n\n      if (value === null) {\n        node.removeAttribute(_attributeName);\n      } else {\n        node.setAttribute(_attributeName,  '' + value);\n      }\n    }\n\n    return;\n  }\n\n  var mustUseProperty = propertyInfo.mustUseProperty;\n\n  if (mustUseProperty) {\n    var propertyName = propertyInfo.propertyName;\n\n    if (value === null) {\n      var type = propertyInfo.type;\n      node[propertyName] = type === BOOLEAN ? false : '';\n    } else {\n      // Contrary to `setAttribute`, object properties are properly\n      // `toString`ed by IE8/9.\n      node[propertyName] = value;\n    }\n\n    return;\n  } // The rest are treated as attributes with special cases.\n\n\n  var attributeName = propertyInfo.attributeName,\n      attributeNamespace = propertyInfo.attributeNamespace;\n\n  if (value === null) {\n    node.removeAttribute(attributeName);\n  } else {\n    var _type = propertyInfo.type;\n    var attributeValue;\n\n    if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n      // If attribute type is boolean, we know for sure it won't be an execution sink\n      // and we won't require Trusted Type here.\n      attributeValue = '';\n    } else {\n      // `setAttribute` with objects becomes only `[object]` in IE8/9,\n      // ('' + value) makes it output the correct toString()-value.\n      {\n        attributeValue = '' + value;\n      }\n\n      if (propertyInfo.sanitizeURL) {\n        sanitizeURL(attributeValue.toString());\n      }\n    }\n\n    if (attributeNamespace) {\n      node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n    } else {\n      node.setAttribute(attributeName, attributeValue);\n    }\n  }\n}\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n  var sourceInfo = '';\n\n  if (source) {\n    var path = source.fileName;\n    var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n    {\n      // In DEV, include code for a common special case:\n      // prefer \"folder/index.js\" instead of just \"index.js\".\n      if (/^index\\./.test(fileName)) {\n        var match = path.match(BEFORE_SLASH_RE);\n\n        if (match) {\n          var pathBeforeSlash = match[1];\n\n          if (pathBeforeSlash) {\n            var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n            fileName = folderName + '/' + fileName;\n          }\n        }\n      }\n    }\n\n    sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n  } else if (ownerName) {\n    sourceInfo = ' (created by ' + ownerName + ')';\n  }\n\n  return '\\n    in ' + (name || 'Unknown') + sourceInfo;\n}\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\nfunction refineResolvedLazyComponent(lazyComponent) {\n  return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\nfunction initializeLazyComponentType(lazyComponent) {\n  if (lazyComponent._status === Uninitialized) {\n    lazyComponent._status = Pending;\n    var ctor = lazyComponent._ctor;\n    var thenable = ctor();\n    lazyComponent._result = thenable;\n    thenable.then(function (moduleObject) {\n      if (lazyComponent._status === Pending) {\n        var defaultExport = moduleObject.default;\n\n        {\n          if (defaultExport === undefined) {\n            error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n  ' + \"const MyComponent = lazy(() => import('./MyComponent'))\", moduleObject);\n          }\n        }\n\n        lazyComponent._status = Resolved;\n        lazyComponent._result = defaultExport;\n      }\n    }, function (error) {\n      if (lazyComponent._status === Pending) {\n        lazyComponent._status = Rejected;\n        lazyComponent._result = error;\n      }\n    });\n  }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var functionName = innerType.displayName || innerType.name || '';\n  return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        return 'Context.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        return 'Context.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        return getComponentName(type.type);\n\n      case REACT_BLOCK_TYPE:\n        return getComponentName(type.render);\n\n      case REACT_LAZY_TYPE:\n        {\n          var thenable = type;\n          var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n          if (resolvedThenable) {\n            return getComponentName(resolvedThenable);\n          }\n\n          break;\n        }\n    }\n  }\n\n  return null;\n}\n\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction describeFiber(fiber) {\n  switch (fiber.tag) {\n    case HostRoot:\n    case HostPortal:\n    case HostText:\n    case Fragment:\n    case ContextProvider:\n    case ContextConsumer:\n      return '';\n\n    default:\n      var owner = fiber._debugOwner;\n      var source = fiber._debugSource;\n      var name = getComponentName(fiber.type);\n      var ownerName = null;\n\n      if (owner) {\n        ownerName = getComponentName(owner.type);\n      }\n\n      return describeComponentFrame(name, source, ownerName);\n  }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  var info = '';\n  var node = workInProgress;\n\n  do {\n    info += describeFiber(node);\n    node = node.return;\n  } while (node);\n\n  return info;\n}\nvar current = null;\nvar isRendering = false;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n  {\n    if (current === null) {\n      return null;\n    }\n\n    var owner = current._debugOwner;\n\n    if (owner !== null && typeof owner !== 'undefined') {\n      return getComponentName(owner.type);\n    }\n  }\n\n  return null;\n}\nfunction getCurrentFiberStackInDev() {\n  {\n    if (current === null) {\n      return '';\n    } // Safe because if current fiber exists, we are reconciling,\n    // and it is guaranteed to be the work-in-progress version.\n\n\n    return getStackByFiberInDevAndProd(current);\n  }\n}\nfunction resetCurrentFiber() {\n  {\n    ReactDebugCurrentFrame$1.getCurrentStack = null;\n    current = null;\n    isRendering = false;\n  }\n}\nfunction setCurrentFiber(fiber) {\n  {\n    ReactDebugCurrentFrame$1.getCurrentStack = getCurrentFiberStackInDev;\n    current = fiber;\n    isRendering = false;\n  }\n}\nfunction setIsRendering(rendering) {\n  {\n    isRendering = rendering;\n  }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n  return '' + value;\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case 'boolean':\n    case 'number':\n    case 'object':\n    case 'string':\n    case 'undefined':\n      return value;\n\n    default:\n      // function, symbol are assigned as empty strings\n      return '';\n  }\n}\n\nvar ReactDebugCurrentFrame$2 = null;\nvar ReactControlledValuePropTypes = {\n  checkPropTypes: null\n};\n\n{\n  ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;\n  var hasReadOnlyValue = {\n    button: true,\n    checkbox: true,\n    image: true,\n    hidden: true,\n    radio: true,\n    reset: true,\n    submit: true\n  };\n  var propTypes = {\n    value: function (props, propName, componentName) {\n      if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n        return null;\n      }\n\n      return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n    },\n    checked: function (props, propName, componentName) {\n      if (props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n        return null;\n      }\n\n      return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n    }\n  };\n  /**\n   * Provide a linked `value` attribute for controlled forms. You should not use\n   * this outside of the ReactDOM controlled form components.\n   */\n\n  ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {\n    checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$2.getStackAddendum);\n  };\n}\n\nfunction isCheckable(elem) {\n  var type = elem.type;\n  var nodeName = elem.nodeName;\n  return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n  return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n  node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n  var value = '';\n\n  if (!node) {\n    return value;\n  }\n\n  if (isCheckable(node)) {\n    value = node.checked ? 'true' : 'false';\n  } else {\n    value = node.value;\n  }\n\n  return value;\n}\n\nfunction trackValueOnNode(node) {\n  var valueField = isCheckable(node) ? 'checked' : 'value';\n  var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n  var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n  // and don't track value will cause over reporting of changes,\n  // but it's better then a hard failure\n  // (needed for certain tests that spyOn input values and Safari)\n\n  if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n    return;\n  }\n\n  var get = descriptor.get,\n      set = descriptor.set;\n  Object.defineProperty(node, valueField, {\n    configurable: true,\n    get: function () {\n      return get.call(this);\n    },\n    set: function (value) {\n      currentValue = '' + value;\n      set.call(this, value);\n    }\n  }); // We could've passed this the first time\n  // but it triggers a bug in IE11 and Edge 14/15.\n  // Calling defineProperty() again should be equivalent.\n  // https://github.com/facebook/react/issues/11768\n\n  Object.defineProperty(node, valueField, {\n    enumerable: descriptor.enumerable\n  });\n  var tracker = {\n    getValue: function () {\n      return currentValue;\n    },\n    setValue: function (value) {\n      currentValue = '' + value;\n    },\n    stopTracking: function () {\n      detachTracker(node);\n      delete node[valueField];\n    }\n  };\n  return tracker;\n}\n\nfunction track(node) {\n  if (getTracker(node)) {\n    return;\n  } // TODO: Once it's just Fiber we can move this to node._wrapperState\n\n\n  node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n  if (!node) {\n    return false;\n  }\n\n  var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n  // that trying again will succeed\n\n  if (!tracker) {\n    return true;\n  }\n\n  var lastValue = tracker.getValue();\n  var nextValue = getValueFromNode(node);\n\n  if (nextValue !== lastValue) {\n    tracker.setValue(nextValue);\n    return true;\n  }\n\n  return false;\n}\n\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n  var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n  return usesChecked ? props.checked != null : props.value != null;\n}\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n  var node = element;\n  var checked = props.checked;\n\n  var hostProps = _assign({}, props, {\n    defaultChecked: undefined,\n    defaultValue: undefined,\n    value: undefined,\n    checked: checked != null ? checked : node._wrapperState.initialChecked\n  });\n\n  return hostProps;\n}\nfunction initWrapperState(element, props) {\n  {\n    ReactControlledValuePropTypes.checkPropTypes('input', props);\n\n    if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n      error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n      didWarnCheckedDefaultChecked = true;\n    }\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n      error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n      didWarnValueDefaultValue = true;\n    }\n  }\n\n  var node = element;\n  var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n  node._wrapperState = {\n    initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n    initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n    controlled: isControlled(props)\n  };\n}\nfunction updateChecked(element, props) {\n  var node = element;\n  var checked = props.checked;\n\n  if (checked != null) {\n    setValueForProperty(node, 'checked', checked, false);\n  }\n}\nfunction updateWrapper(element, props) {\n  var node = element;\n\n  {\n    var controlled = isControlled(props);\n\n    if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n      error('A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n      didWarnUncontrolledToControlled = true;\n    }\n\n    if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n      error('A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n      didWarnControlledToUncontrolled = true;\n    }\n  }\n\n  updateChecked(element, props);\n  var value = getToStringValue(props.value);\n  var type = props.type;\n\n  if (value != null) {\n    if (type === 'number') {\n      if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n      // eslint-disable-next-line\n      node.value != value) {\n        node.value = toString(value);\n      }\n    } else if (node.value !== toString(value)) {\n      node.value = toString(value);\n    }\n  } else if (type === 'submit' || type === 'reset') {\n    // Submit/reset inputs need the attribute removed completely to avoid\n    // blank-text buttons.\n    node.removeAttribute('value');\n    return;\n  }\n\n  {\n    // When syncing the value attribute, the value comes from a cascade of\n    // properties:\n    //  1. The value React property\n    //  2. The defaultValue React property\n    //  3. Otherwise there should be no change\n    if (props.hasOwnProperty('value')) {\n      setDefaultValue(node, props.type, value);\n    } else if (props.hasOwnProperty('defaultValue')) {\n      setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n    }\n  }\n\n  {\n    // When syncing the checked attribute, it only changes when it needs\n    // to be removed, such as transitioning from a checkbox into a text input\n    if (props.checked == null && props.defaultChecked != null) {\n      node.defaultChecked = !!props.defaultChecked;\n    }\n  }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n  var node = element; // Do not assign value if it is already set. This prevents user text input\n  // from being lost during SSR hydration.\n\n  if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n    var type = props.type;\n    var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n    // default value provided by the browser. See: #12872\n\n    if (isButton && (props.value === undefined || props.value === null)) {\n      return;\n    }\n\n    var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n    // from being lost during SSR hydration.\n\n    if (!isHydrating) {\n      {\n        // When syncing the value attribute, the value property should use\n        // the wrapperState._initialValue property. This uses:\n        //\n        //   1. The value React property when present\n        //   2. The defaultValue React property when present\n        //   3. An empty string\n        if (initialValue !== node.value) {\n          node.value = initialValue;\n        }\n      }\n    }\n\n    {\n      // Otherwise, the value attribute is synchronized to the property,\n      // so we assign defaultValue to the same thing as the value property\n      // assignment step above.\n      node.defaultValue = initialValue;\n    }\n  } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n  // this is needed to work around a chrome bug where setting defaultChecked\n  // will sometimes influence the value of checked (even after detachment).\n  // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n  // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n  var name = node.name;\n\n  if (name !== '') {\n    node.name = '';\n  }\n\n  {\n    // When syncing the checked attribute, both the checked property and\n    // attribute are assigned at the same time using defaultChecked. This uses:\n    //\n    //   1. The checked React property when present\n    //   2. The defaultChecked React property when present\n    //   3. Otherwise, false\n    node.defaultChecked = !node.defaultChecked;\n    node.defaultChecked = !!node._wrapperState.initialChecked;\n  }\n\n  if (name !== '') {\n    node.name = name;\n  }\n}\nfunction restoreControlledState(element, props) {\n  var node = element;\n  updateWrapper(node, props);\n  updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n  var name = props.name;\n\n  if (props.type === 'radio' && name != null) {\n    var queryRoot = rootNode;\n\n    while (queryRoot.parentNode) {\n      queryRoot = queryRoot.parentNode;\n    } // If `rootNode.form` was non-null, then we could try `form.elements`,\n    // but that sometimes behaves strangely in IE8. We could also try using\n    // `form.getElementsByName`, but that will only return direct children\n    // and won't include inputs that use the HTML5 `form=` attribute. Since\n    // the input might not even be in a form. It might not even be in the\n    // document. Let's just use the local `querySelectorAll` to ensure we don't\n    // miss anything.\n\n\n    var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n    for (var i = 0; i < group.length; i++) {\n      var otherNode = group[i];\n\n      if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n        continue;\n      } // This will throw if radio buttons rendered by different copies of React\n      // and the same name are rendered into the same form (same as #1939).\n      // That's probably okay; we don't support it just as we don't support\n      // mixing React radio buttons with non-React ones.\n\n\n      var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n\n      if (!otherProps) {\n        {\n          throw Error( \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\" );\n        }\n      } // We need update the tracked value on the named cousin since the value\n      // was changed but the input saw no event or value set\n\n\n      updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n      // was previously checked to update will cause it to be come re-checked\n      // as appropriate.\n\n      updateWrapper(otherNode, otherProps);\n    }\n  }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value <x> is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n  if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n  type !== 'number' || node.ownerDocument.activeElement !== node) {\n    if (value == null) {\n      node.defaultValue = toString(node._wrapperState.initialValue);\n    } else if (node.defaultValue !== toString(value)) {\n      node.defaultValue = toString(value);\n    }\n  }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\n\nfunction flattenChildren(children) {\n  var content = ''; // Flatten children. We'll warn if they are invalid\n  // during validateProps() which runs for hydration too.\n  // Note that this would throw on non-element objects.\n  // Elements are stringified (which is normally irrelevant\n  // but matters for <fbt>).\n\n  React.Children.forEach(children, function (child) {\n    if (child == null) {\n      return;\n    }\n\n    content += child; // Note: we don't warn about invalid children here.\n    // Instead, this is done separately below so that\n    // it happens during the hydration codepath too.\n  });\n  return content;\n}\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\n\n\nfunction validateProps(element, props) {\n  {\n    // This mirrors the codepath above, but runs for hydration too.\n    // Warn about invalid children here so that client and hydration are consistent.\n    // TODO: this seems like it could cause a DEV-only throw for hydration\n    // if children contains a non-element object. We should try to avoid that.\n    if (typeof props.children === 'object' && props.children !== null) {\n      React.Children.forEach(props.children, function (child) {\n        if (child == null) {\n          return;\n        }\n\n        if (typeof child === 'string' || typeof child === 'number') {\n          return;\n        }\n\n        if (typeof child.type !== 'string') {\n          return;\n        }\n\n        if (!didWarnInvalidChild) {\n          didWarnInvalidChild = true;\n\n          error('Only strings and numbers are supported as <option> children.');\n        }\n      });\n    } // TODO: Remove support for `selected` in <option>.\n\n\n    if (props.selected != null && !didWarnSelectedSetOnOption) {\n      error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n\n      didWarnSelectedSetOnOption = true;\n    }\n  }\n}\nfunction postMountWrapper$1(element, props) {\n  // value=\"\" should make a value attribute (#6219)\n  if (props.value != null) {\n    element.setAttribute('value', toString(getToStringValue(props.value)));\n  }\n}\nfunction getHostProps$1(element, props) {\n  var hostProps = _assign({\n    children: undefined\n  }, props);\n\n  var content = flattenChildren(props.children);\n\n  if (content) {\n    hostProps.children = content;\n  }\n\n  return hostProps;\n}\n\nvar didWarnValueDefaultValue$1;\n\n{\n  didWarnValueDefaultValue$1 = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n  var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n  if (ownerName) {\n    return '\\n\\nCheck the render method of `' + ownerName + '`.';\n  }\n\n  return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n/**\n * Validation function for `value` and `defaultValue`.\n */\n\nfunction checkSelectPropTypes(props) {\n  {\n    ReactControlledValuePropTypes.checkPropTypes('select', props);\n\n    for (var i = 0; i < valuePropNames.length; i++) {\n      var propName = valuePropNames[i];\n\n      if (props[propName] == null) {\n        continue;\n      }\n\n      var isArray = Array.isArray(props[propName]);\n\n      if (props.multiple && !isArray) {\n        error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());\n      } else if (!props.multiple && isArray) {\n        error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());\n      }\n    }\n  }\n}\n\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  var options = node.options;\n\n  if (multiple) {\n    var selectedValues = propValue;\n    var selectedValue = {};\n\n    for (var i = 0; i < selectedValues.length; i++) {\n      // Prefix to avoid chaos with special keys.\n      selectedValue['$' + selectedValues[i]] = true;\n    }\n\n    for (var _i = 0; _i < options.length; _i++) {\n      var selected = selectedValue.hasOwnProperty('$' + options[_i].value);\n\n      if (options[_i].selected !== selected) {\n        options[_i].selected = selected;\n      }\n\n      if (selected && setDefaultSelected) {\n        options[_i].defaultSelected = true;\n      }\n    }\n  } else {\n    // Do not set `select.value` as exact behavior isn't consistent across all\n    // browsers for all cases.\n    var _selectedValue = toString(getToStringValue(propValue));\n\n    var defaultSelected = null;\n\n    for (var _i2 = 0; _i2 < options.length; _i2++) {\n      if (options[_i2].value === _selectedValue) {\n        options[_i2].selected = true;\n\n        if (setDefaultSelected) {\n          options[_i2].defaultSelected = true;\n        }\n\n        return;\n      }\n\n      if (defaultSelected === null && !options[_i2].disabled) {\n        defaultSelected = options[_i2];\n      }\n    }\n\n    if (defaultSelected !== null) {\n      defaultSelected.selected = true;\n    }\n  }\n}\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\n\n\nfunction getHostProps$2(element, props) {\n  return _assign({}, props, {\n    value: undefined\n  });\n}\nfunction initWrapperState$1(element, props) {\n  var node = element;\n\n  {\n    checkSelectPropTypes(props);\n  }\n\n  node._wrapperState = {\n    wasMultiple: !!props.multiple\n  };\n\n  {\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {\n      error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components');\n\n      didWarnValueDefaultValue$1 = true;\n    }\n  }\n}\nfunction postMountWrapper$2(element, props) {\n  var node = element;\n  node.multiple = !!props.multiple;\n  var value = props.value;\n\n  if (value != null) {\n    updateOptions(node, !!props.multiple, value, false);\n  } else if (props.defaultValue != null) {\n    updateOptions(node, !!props.multiple, props.defaultValue, true);\n  }\n}\nfunction postUpdateWrapper(element, props) {\n  var node = element;\n  var wasMultiple = node._wrapperState.wasMultiple;\n  node._wrapperState.wasMultiple = !!props.multiple;\n  var value = props.value;\n\n  if (value != null) {\n    updateOptions(node, !!props.multiple, value, false);\n  } else if (wasMultiple !== !!props.multiple) {\n    // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n    if (props.defaultValue != null) {\n      updateOptions(node, !!props.multiple, props.defaultValue, true);\n    } else {\n      // Revert the select back to its default unselected state.\n      updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);\n    }\n  }\n}\nfunction restoreControlledState$1(element, props) {\n  var node = element;\n  var value = props.value;\n\n  if (value != null) {\n    updateOptions(node, !!props.multiple, value, false);\n  }\n}\n\nvar didWarnValDefaultVal = false;\n\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nfunction getHostProps$3(element, props) {\n  var node = element;\n\n  if (!(props.dangerouslySetInnerHTML == null)) {\n    {\n      throw Error( \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\" );\n    }\n  } // Always set children to the same thing. In IE9, the selection range will\n  // get reset if `textContent` is mutated.  We could add a check in setTextContent\n  // to only set the value if/when the value differs from the node value (which would\n  // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this\n  // solution. The value can be a boolean or object so that's why it's forced\n  // to be a string.\n\n\n  var hostProps = _assign({}, props, {\n    value: undefined,\n    defaultValue: undefined,\n    children: toString(node._wrapperState.initialValue)\n  });\n\n  return hostProps;\n}\nfunction initWrapperState$2(element, props) {\n  var node = element;\n\n  {\n    ReactControlledValuePropTypes.checkPropTypes('textarea', props);\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n      error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n\n      didWarnValDefaultVal = true;\n    }\n  }\n\n  var initialValue = props.value; // Only bother fetching default value if we're going to use it\n\n  if (initialValue == null) {\n    var children = props.children,\n        defaultValue = props.defaultValue;\n\n    if (children != null) {\n      {\n        error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n      }\n\n      {\n        if (!(defaultValue == null)) {\n          {\n            throw Error( \"If you supply `defaultValue` on a <textarea>, do not pass children.\" );\n          }\n        }\n\n        if (Array.isArray(children)) {\n          if (!(children.length <= 1)) {\n            {\n              throw Error( \"<textarea> can only have at most one child.\" );\n            }\n          }\n\n          children = children[0];\n        }\n\n        defaultValue = children;\n      }\n    }\n\n    if (defaultValue == null) {\n      defaultValue = '';\n    }\n\n    initialValue = defaultValue;\n  }\n\n  node._wrapperState = {\n    initialValue: getToStringValue(initialValue)\n  };\n}\nfunction updateWrapper$1(element, props) {\n  var node = element;\n  var value = getToStringValue(props.value);\n  var defaultValue = getToStringValue(props.defaultValue);\n\n  if (value != null) {\n    // Cast `value` to a string to ensure the value is set correctly. While\n    // browsers typically do this as necessary, jsdom doesn't.\n    var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed\n\n    if (newValue !== node.value) {\n      node.value = newValue;\n    }\n\n    if (props.defaultValue == null && node.defaultValue !== newValue) {\n      node.defaultValue = newValue;\n    }\n  }\n\n  if (defaultValue != null) {\n    node.defaultValue = toString(defaultValue);\n  }\n}\nfunction postMountWrapper$3(element, props) {\n  var node = element; // This is in postMount because we need access to the DOM node, which is not\n  // available until after the component has mounted.\n\n  var textContent = node.textContent; // Only set node.value if textContent is equal to the expected\n  // initial value. In IE10/IE11 there is a bug where the placeholder attribute\n  // will populate textContent as well.\n  // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/\n\n  if (textContent === node._wrapperState.initialValue) {\n    if (textContent !== '' && textContent !== null) {\n      node.value = textContent;\n    }\n  }\n}\nfunction restoreControlledState$2(element, props) {\n  // DOM component is still mounted; update\n  updateWrapper$1(element, props);\n}\n\nvar HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nvar MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nvar Namespaces = {\n  html: HTML_NAMESPACE,\n  mathml: MATH_NAMESPACE,\n  svg: SVG_NAMESPACE\n}; // Assumes there is no parent namespace.\n\nfunction getIntrinsicNamespace(type) {\n  switch (type) {\n    case 'svg':\n      return SVG_NAMESPACE;\n\n    case 'math':\n      return MATH_NAMESPACE;\n\n    default:\n      return HTML_NAMESPACE;\n  }\n}\nfunction getChildNamespace(parentNamespace, type) {\n  if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {\n    // No (or default) parent namespace: potential entry point.\n    return getIntrinsicNamespace(type);\n  }\n\n  if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {\n    // We're leaving SVG.\n    return HTML_NAMESPACE;\n  } // By default, pass namespace below.\n\n\n  return parentNamespace;\n}\n\n/* globals MSApp */\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n  if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n    return function (arg0, arg1, arg2, arg3) {\n      MSApp.execUnsafeLocalFunction(function () {\n        return func(arg0, arg1, arg2, arg3);\n      });\n    };\n  } else {\n    return func;\n  }\n};\n\nvar reusableSVGContainer;\n/**\n * Set the innerHTML property of a node\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\n\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n  if (node.namespaceURI === Namespaces.svg) {\n\n    if (!('innerHTML' in node)) {\n      // IE does not have innerHTML for SVG nodes, so instead we inject the\n      // new markup in a temp node and then move the child nodes across into\n      // the target node\n      reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n      reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';\n      var svgNode = reusableSVGContainer.firstChild;\n\n      while (node.firstChild) {\n        node.removeChild(node.firstChild);\n      }\n\n      while (svgNode.firstChild) {\n        node.appendChild(svgNode.firstChild);\n      }\n\n      return;\n    }\n  }\n\n  node.innerHTML = html;\n});\n\n/**\n * HTML nodeType values that represent the type of the node\n */\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Set the textContent property of a node. For text updates, it's faster\n * to set the `nodeValue` of the Text node directly instead of using\n * `.textContent` which will remove the existing node and create a new one.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\n\nvar setTextContent = function (node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n\n    if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n\n  node.textContent = text;\n};\n\n// Do not use the below two methods directly!\n// Instead use constants exported from DOMTopLevelEventTypes in ReactDOM.\n// (It is the only module that is allowed to access these methods.)\nfunction unsafeCastStringToDOMTopLevelType(topLevelType) {\n  return topLevelType;\n}\nfunction unsafeCastDOMTopLevelTypeToString(topLevelType) {\n  return topLevelType;\n}\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\n\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n  prefixes['Moz' + styleProp] = 'moz' + eventName;\n  return prefixes;\n}\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\n\n\nvar vendorPrefixes = {\n  animationend: makePrefixMap('Animation', 'AnimationEnd'),\n  animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n  animationstart: makePrefixMap('Animation', 'AnimationStart'),\n  transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\n\nvar prefixedEventNames = {};\n/**\n * Element to check for prefixes on.\n */\n\nvar style = {};\n/**\n * Bootstrap if a DOM exists.\n */\n\nif (canUseDOM) {\n  style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,\n  // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n  // style object but the events that fire will still be prefixed, so we need\n  // to check if the un-prefixed events are usable, and if not remove them from the map.\n\n  if (!('AnimationEvent' in window)) {\n    delete vendorPrefixes.animationend.animation;\n    delete vendorPrefixes.animationiteration.animation;\n    delete vendorPrefixes.animationstart.animation;\n  } // Same as above\n\n\n  if (!('TransitionEvent' in window)) {\n    delete vendorPrefixes.transitionend.transition;\n  }\n}\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\n\n\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) {\n    return prefixedEventNames[eventName];\n  } else if (!vendorPrefixes[eventName]) {\n    return eventName;\n  }\n\n  var prefixMap = vendorPrefixes[eventName];\n\n  for (var styleProp in prefixMap) {\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n      return prefixedEventNames[eventName] = prefixMap[styleProp];\n    }\n  }\n\n  return eventName;\n}\n\n/**\n * To identify top level events in ReactDOM, we use constants defined by this\n * module. This is the only module that uses the unsafe* methods to express\n * that the constants actually correspond to the browser event names. This lets\n * us save some bundle size by avoiding a top level type -> event name map.\n * The rest of ReactDOM code should import top level types from this file.\n */\n\nvar TOP_ABORT = unsafeCastStringToDOMTopLevelType('abort');\nvar TOP_ANIMATION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationend'));\nvar TOP_ANIMATION_ITERATION = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationiteration'));\nvar TOP_ANIMATION_START = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationstart'));\nvar TOP_BLUR = unsafeCastStringToDOMTopLevelType('blur');\nvar TOP_CAN_PLAY = unsafeCastStringToDOMTopLevelType('canplay');\nvar TOP_CAN_PLAY_THROUGH = unsafeCastStringToDOMTopLevelType('canplaythrough');\nvar TOP_CANCEL = unsafeCastStringToDOMTopLevelType('cancel');\nvar TOP_CHANGE = unsafeCastStringToDOMTopLevelType('change');\nvar TOP_CLICK = unsafeCastStringToDOMTopLevelType('click');\nvar TOP_CLOSE = unsafeCastStringToDOMTopLevelType('close');\nvar TOP_COMPOSITION_END = unsafeCastStringToDOMTopLevelType('compositionend');\nvar TOP_COMPOSITION_START = unsafeCastStringToDOMTopLevelType('compositionstart');\nvar TOP_COMPOSITION_UPDATE = unsafeCastStringToDOMTopLevelType('compositionupdate');\nvar TOP_CONTEXT_MENU = unsafeCastStringToDOMTopLevelType('contextmenu');\nvar TOP_COPY = unsafeCastStringToDOMTopLevelType('copy');\nvar TOP_CUT = unsafeCastStringToDOMTopLevelType('cut');\nvar TOP_DOUBLE_CLICK = unsafeCastStringToDOMTopLevelType('dblclick');\nvar TOP_AUX_CLICK = unsafeCastStringToDOMTopLevelType('auxclick');\nvar TOP_DRAG = unsafeCastStringToDOMTopLevelType('drag');\nvar TOP_DRAG_END = unsafeCastStringToDOMTopLevelType('dragend');\nvar TOP_DRAG_ENTER = unsafeCastStringToDOMTopLevelType('dragenter');\nvar TOP_DRAG_EXIT = unsafeCastStringToDOMTopLevelType('dragexit');\nvar TOP_DRAG_LEAVE = unsafeCastStringToDOMTopLevelType('dragleave');\nvar TOP_DRAG_OVER = unsafeCastStringToDOMTopLevelType('dragover');\nvar TOP_DRAG_START = unsafeCastStringToDOMTopLevelType('dragstart');\nvar TOP_DROP = unsafeCastStringToDOMTopLevelType('drop');\nvar TOP_DURATION_CHANGE = unsafeCastStringToDOMTopLevelType('durationchange');\nvar TOP_EMPTIED = unsafeCastStringToDOMTopLevelType('emptied');\nvar TOP_ENCRYPTED = unsafeCastStringToDOMTopLevelType('encrypted');\nvar TOP_ENDED = unsafeCastStringToDOMTopLevelType('ended');\nvar TOP_ERROR = unsafeCastStringToDOMTopLevelType('error');\nvar TOP_FOCUS = unsafeCastStringToDOMTopLevelType('focus');\nvar TOP_GOT_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('gotpointercapture');\nvar TOP_INPUT = unsafeCastStringToDOMTopLevelType('input');\nvar TOP_INVALID = unsafeCastStringToDOMTopLevelType('invalid');\nvar TOP_KEY_DOWN = unsafeCastStringToDOMTopLevelType('keydown');\nvar TOP_KEY_PRESS = unsafeCastStringToDOMTopLevelType('keypress');\nvar TOP_KEY_UP = unsafeCastStringToDOMTopLevelType('keyup');\nvar TOP_LOAD = unsafeCastStringToDOMTopLevelType('load');\nvar TOP_LOAD_START = unsafeCastStringToDOMTopLevelType('loadstart');\nvar TOP_LOADED_DATA = unsafeCastStringToDOMTopLevelType('loadeddata');\nvar TOP_LOADED_METADATA = unsafeCastStringToDOMTopLevelType('loadedmetadata');\nvar TOP_LOST_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('lostpointercapture');\nvar TOP_MOUSE_DOWN = unsafeCastStringToDOMTopLevelType('mousedown');\nvar TOP_MOUSE_MOVE = unsafeCastStringToDOMTopLevelType('mousemove');\nvar TOP_MOUSE_OUT = unsafeCastStringToDOMTopLevelType('mouseout');\nvar TOP_MOUSE_OVER = unsafeCastStringToDOMTopLevelType('mouseover');\nvar TOP_MOUSE_UP = unsafeCastStringToDOMTopLevelType('mouseup');\nvar TOP_PASTE = unsafeCastStringToDOMTopLevelType('paste');\nvar TOP_PAUSE = unsafeCastStringToDOMTopLevelType('pause');\nvar TOP_PLAY = unsafeCastStringToDOMTopLevelType('play');\nvar TOP_PLAYING = unsafeCastStringToDOMTopLevelType('playing');\nvar TOP_POINTER_CANCEL = unsafeCastStringToDOMTopLevelType('pointercancel');\nvar TOP_POINTER_DOWN = unsafeCastStringToDOMTopLevelType('pointerdown');\nvar TOP_POINTER_MOVE = unsafeCastStringToDOMTopLevelType('pointermove');\nvar TOP_POINTER_OUT = unsafeCastStringToDOMTopLevelType('pointerout');\nvar TOP_POINTER_OVER = unsafeCastStringToDOMTopLevelType('pointerover');\nvar TOP_POINTER_UP = unsafeCastStringToDOMTopLevelType('pointerup');\nvar TOP_PROGRESS = unsafeCastStringToDOMTopLevelType('progress');\nvar TOP_RATE_CHANGE = unsafeCastStringToDOMTopLevelType('ratechange');\nvar TOP_RESET = unsafeCastStringToDOMTopLevelType('reset');\nvar TOP_SCROLL = unsafeCastStringToDOMTopLevelType('scroll');\nvar TOP_SEEKED = unsafeCastStringToDOMTopLevelType('seeked');\nvar TOP_SEEKING = unsafeCastStringToDOMTopLevelType('seeking');\nvar TOP_SELECTION_CHANGE = unsafeCastStringToDOMTopLevelType('selectionchange');\nvar TOP_STALLED = unsafeCastStringToDOMTopLevelType('stalled');\nvar TOP_SUBMIT = unsafeCastStringToDOMTopLevelType('submit');\nvar TOP_SUSPEND = unsafeCastStringToDOMTopLevelType('suspend');\nvar TOP_TEXT_INPUT = unsafeCastStringToDOMTopLevelType('textInput');\nvar TOP_TIME_UPDATE = unsafeCastStringToDOMTopLevelType('timeupdate');\nvar TOP_TOGGLE = unsafeCastStringToDOMTopLevelType('toggle');\nvar TOP_TOUCH_CANCEL = unsafeCastStringToDOMTopLevelType('touchcancel');\nvar TOP_TOUCH_END = unsafeCastStringToDOMTopLevelType('touchend');\nvar TOP_TOUCH_MOVE = unsafeCastStringToDOMTopLevelType('touchmove');\nvar TOP_TOUCH_START = unsafeCastStringToDOMTopLevelType('touchstart');\nvar TOP_TRANSITION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('transitionend'));\nvar TOP_VOLUME_CHANGE = unsafeCastStringToDOMTopLevelType('volumechange');\nvar TOP_WAITING = unsafeCastStringToDOMTopLevelType('waiting');\nvar TOP_WHEEL = unsafeCastStringToDOMTopLevelType('wheel'); // List of events that need to be individually attached to media elements.\n// Note that events in this list will *not* be listened to at the top level\n// unless they're explicitly whitelisted in `ReactBrowserEventEmitter.listenTo`.\n\nvar mediaEventTypes = [TOP_ABORT, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_VOLUME_CHANGE, TOP_WAITING];\nfunction getRawEventName(topLevelType) {\n  return unsafeCastDOMTopLevelTypeToString(topLevelType);\n}\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // prettier-ignore\n\nvar elementListenerMap = new PossiblyWeakMap();\nfunction getListenerMapForElement(element) {\n  var listenerMap = elementListenerMap.get(element);\n\n  if (listenerMap === undefined) {\n    listenerMap = new Map();\n    elementListenerMap.set(element, listenerMap);\n  }\n\n  return listenerMap;\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\nfunction get(key) {\n  return key._reactInternalFiber;\n}\nfunction has(key) {\n  return key._reactInternalFiber !== undefined;\n}\nfunction set(key, value) {\n  key._reactInternalFiber = value;\n}\n\n// Don't change these two values. They're used by React Dev Tools.\nvar NoEffect =\n/*              */\n0;\nvar PerformedWork =\n/*         */\n1; // You can change the rest (and add more).\n\nvar Placement =\n/*             */\n2;\nvar Update =\n/*                */\n4;\nvar PlacementAndUpdate =\n/*    */\n6;\nvar Deletion =\n/*              */\n8;\nvar ContentReset =\n/*          */\n16;\nvar Callback =\n/*              */\n32;\nvar DidCapture =\n/*            */\n64;\nvar Ref =\n/*                   */\n128;\nvar Snapshot =\n/*              */\n256;\nvar Passive =\n/*               */\n512;\nvar Hydrating =\n/*             */\n1024;\nvar HydratingAndUpdate =\n/*    */\n1028; // Passive & Update & Callback & Ref & Snapshot\n\nvar LifecycleEffectMask =\n/*   */\n932; // Union of all host effects\n\nvar HostEffectMask =\n/*        */\n2047;\nvar Incomplete =\n/*            */\n2048;\nvar ShouldCapture =\n/*         */\n4096;\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber;\n  var nearestMounted = fiber;\n\n  if (!fiber.alternate) {\n    // If there is no alternate, this might be a new tree that isn't inserted\n    // yet. If it is, then it will have a pending insertion effect on it.\n    var nextNode = node;\n\n    do {\n      node = nextNode;\n\n      if ((node.effectTag & (Placement | Hydrating)) !== NoEffect) {\n        // This is an insertion or in-progress hydration. The nearest possible\n        // mounted fiber is the parent but we need to continue to figure out\n        // if that one is still mounted.\n        nearestMounted = node.return;\n      }\n\n      nextNode = node.return;\n    } while (nextNode);\n  } else {\n    while (node.return) {\n      node = node.return;\n    }\n  }\n\n  if (node.tag === HostRoot) {\n    // TODO: Check if this was a nested HostRoot when used with\n    // renderContainerIntoSubtree.\n    return nearestMounted;\n  } // If we didn't hit the root, that means that we're in an disconnected tree\n  // that has been unmounted.\n\n\n  return null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (fiber.tag === SuspenseComponent) {\n    var suspenseState = fiber.memoizedState;\n\n    if (suspenseState === null) {\n      var current = fiber.alternate;\n\n      if (current !== null) {\n        suspenseState = current.memoizedState;\n      }\n    }\n\n    if (suspenseState !== null) {\n      return suspenseState.dehydrated;\n    }\n  }\n\n  return null;\n}\nfunction getContainerFromFiber(fiber) {\n  return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;\n}\nfunction isFiberMounted(fiber) {\n  return getNearestMountedFiber(fiber) === fiber;\n}\nfunction isMounted(component) {\n  {\n    var owner = ReactCurrentOwner.current;\n\n    if (owner !== null && owner.tag === ClassComponent) {\n      var ownerFiber = owner;\n      var instance = ownerFiber.stateNode;\n\n      if (!instance._warnedAboutRefsInRender) {\n        error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber.type) || 'A component');\n      }\n\n      instance._warnedAboutRefsInRender = true;\n    }\n  }\n\n  var fiber = get(component);\n\n  if (!fiber) {\n    return false;\n  }\n\n  return getNearestMountedFiber(fiber) === fiber;\n}\n\nfunction assertIsMounted(fiber) {\n  if (!(getNearestMountedFiber(fiber) === fiber)) {\n    {\n      throw Error( \"Unable to find node on an unmounted component.\" );\n    }\n  }\n}\n\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n\n  if (!alternate) {\n    // If there is no alternate, then we only need to check if it is mounted.\n    var nearestMounted = getNearestMountedFiber(fiber);\n\n    if (!(nearestMounted !== null)) {\n      {\n        throw Error( \"Unable to find node on an unmounted component.\" );\n      }\n    }\n\n    if (nearestMounted !== fiber) {\n      return null;\n    }\n\n    return fiber;\n  } // If we have two possible branches, we'll walk backwards up to the root\n  // to see what path the root points to. On the way we may hit one of the\n  // special cases and we'll deal with them.\n\n\n  var a = fiber;\n  var b = alternate;\n\n  while (true) {\n    var parentA = a.return;\n\n    if (parentA === null) {\n      // We're at the root.\n      break;\n    }\n\n    var parentB = parentA.alternate;\n\n    if (parentB === null) {\n      // There is no alternate. This is an unusual case. Currently, it only\n      // happens when a Suspense component is hidden. An extra fragment fiber\n      // is inserted in between the Suspense fiber and its children. Skip\n      // over this extra fragment fiber and proceed to the next parent.\n      var nextParent = parentA.return;\n\n      if (nextParent !== null) {\n        a = b = nextParent;\n        continue;\n      } // If there's no parent, we're at the root.\n\n\n      break;\n    } // If both copies of the parent fiber point to the same child, we can\n    // assume that the child is current. This happens when we bailout on low\n    // priority: the bailed out fiber's child reuses the current child.\n\n\n    if (parentA.child === parentB.child) {\n      var child = parentA.child;\n\n      while (child) {\n        if (child === a) {\n          // We've determined that A is the current branch.\n          assertIsMounted(parentA);\n          return fiber;\n        }\n\n        if (child === b) {\n          // We've determined that B is the current branch.\n          assertIsMounted(parentA);\n          return alternate;\n        }\n\n        child = child.sibling;\n      } // We should never have an alternate for any mounting node. So the only\n      // way this could possibly happen is if this was unmounted, if at all.\n\n\n      {\n        {\n          throw Error( \"Unable to find node on an unmounted component.\" );\n        }\n      }\n    }\n\n    if (a.return !== b.return) {\n      // The return pointer of A and the return pointer of B point to different\n      // fibers. We assume that return pointers never criss-cross, so A must\n      // belong to the child set of A.return, and B must belong to the child\n      // set of B.return.\n      a = parentA;\n      b = parentB;\n    } else {\n      // The return pointers point to the same fiber. We'll have to use the\n      // default, slow path: scan the child sets of each parent alternate to see\n      // which child belongs to which set.\n      //\n      // Search parent A's child set\n      var didFindChild = false;\n      var _child = parentA.child;\n\n      while (_child) {\n        if (_child === a) {\n          didFindChild = true;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n\n        if (_child === b) {\n          didFindChild = true;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n\n        _child = _child.sibling;\n      }\n\n      if (!didFindChild) {\n        // Search parent B's child set\n        _child = parentB.child;\n\n        while (_child) {\n          if (_child === a) {\n            didFindChild = true;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n\n          if (_child === b) {\n            didFindChild = true;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n\n          _child = _child.sibling;\n        }\n\n        if (!didFindChild) {\n          {\n            throw Error( \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\" );\n          }\n        }\n      }\n    }\n\n    if (!(a.alternate === b)) {\n      {\n        throw Error( \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n  } // If the root is not a host container, we're in a disconnected tree. I.e.\n  // unmounted.\n\n\n  if (!(a.tag === HostRoot)) {\n    {\n      throw Error( \"Unable to find node on an unmounted component.\" );\n    }\n  }\n\n  if (a.stateNode.current === a) {\n    // We've determined that A is the current branch.\n    return fiber;\n  } // Otherwise B has to be current branch.\n\n\n  return alternate;\n}\nfunction findCurrentHostFiber(parent) {\n  var currentParent = findCurrentFiberUsingSlowPath(parent);\n\n  if (!currentParent) {\n    return null;\n  } // Next we'll drill down this component to find the first HostComponent/Text.\n\n\n  var node = currentParent;\n\n  while (true) {\n    if (node.tag === HostComponent || node.tag === HostText) {\n      return node;\n    } else if (node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === currentParent) {\n      return null;\n    }\n\n    while (!node.sibling) {\n      if (!node.return || node.return === currentParent) {\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  } // Flow needs the return null here, but ESLint complains about it.\n  // eslint-disable-next-line no-unreachable\n\n\n  return null;\n}\nfunction findCurrentHostFiberWithNoPortals(parent) {\n  var currentParent = findCurrentFiberUsingSlowPath(parent);\n\n  if (!currentParent) {\n    return null;\n  } // Next we'll drill down this component to find the first HostComponent/Text.\n\n\n  var node = currentParent;\n\n  while (true) {\n    if (node.tag === HostComponent || node.tag === HostText || enableFundamentalAPI ) {\n      return node;\n    } else if (node.child && node.tag !== HostPortal) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === currentParent) {\n      return null;\n    }\n\n    while (!node.sibling) {\n      if (!node.return || node.return === currentParent) {\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  } // Flow needs the return null here, but ESLint complains about it.\n  // eslint-disable-next-line no-unreachable\n\n\n  return null;\n}\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n  if (!(next != null)) {\n    {\n      throw Error( \"accumulateInto(...): Accumulated items must not be null or undefined.\" );\n    }\n  }\n\n  if (current == null) {\n    return next;\n  } // Both are not empty. Warning: Never call x.concat(y) when you are not\n  // certain that x is an Array (x could be a string with concat method).\n\n\n  if (Array.isArray(current)) {\n    if (Array.isArray(next)) {\n      current.push.apply(current, next);\n      return current;\n    }\n\n    current.push(next);\n    return current;\n  }\n\n  if (Array.isArray(next)) {\n    // A bit too dangerous to mutate `next`.\n    return [current].concat(next);\n  }\n\n  return [current, next];\n}\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n * @param {function} cb Callback invoked with each element or a collection.\n * @param {?} [scope] Scope used as `this` in a callback.\n */\nfunction forEachAccumulated(arr, cb, scope) {\n  if (Array.isArray(arr)) {\n    arr.forEach(cb, scope);\n  } else if (arr) {\n    cb.call(scope, arr);\n  }\n}\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\n\nvar eventQueue = null;\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @private\n */\n\nvar executeDispatchesAndRelease = function (event) {\n  if (event) {\n    executeDispatchesInOrder(event);\n\n    if (!event.isPersistent()) {\n      event.constructor.release(event);\n    }\n  }\n};\n\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n  return executeDispatchesAndRelease(e);\n};\n\nfunction runEventsInBatch(events) {\n  if (events !== null) {\n    eventQueue = accumulateInto(eventQueue, events);\n  } // Set `eventQueue` to null before processing it so that we can tell if more\n  // events get enqueued while processing.\n\n\n  var processingEventQueue = eventQueue;\n  eventQueue = null;\n\n  if (!processingEventQueue) {\n    return;\n  }\n\n  forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n\n  if (!!eventQueue) {\n    {\n      throw Error( \"processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.\" );\n    }\n  } // This would be a good time to rethrow if any of the event handlers threw.\n\n\n  rethrowCaughtError();\n}\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n  // Fallback to nativeEvent.srcElement for IE9\n  // https://github.com/facebook/react/issues/12506\n  var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963\n\n  if (target.correspondingUseElement) {\n    target = target.correspondingUseElement;\n  } // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n  // @see http://www.quirksmode.org/js/events_properties.html\n\n\n  return target.nodeType === TEXT_NODE ? target.parentNode : target;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\n\nfunction isEventSupported(eventNameSuffix) {\n  if (!canUseDOM) {\n    return false;\n  }\n\n  var eventName = 'on' + eventNameSuffix;\n  var isSupported = eventName in document;\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  return isSupported;\n}\n\n/**\n * Summary of `DOMEventPluginSystem` event handling:\n *\n *  - Top-level delegation is used to trap most native browser events. This\n *    may only occur in the main thread and is the responsibility of\n *    ReactDOMEventListener, which is injected and can therefore support\n *    pluggable event sources. This is the only work that occurs in the main\n *    thread.\n *\n *  - We normalize and de-duplicate events to account for browser quirks. This\n *    may be done in the worker thread.\n *\n *  - Forward these native events (with the associated top-level type used to\n *    trap it) to `EventPluginRegistry`, which in turn will ask plugins if they want\n *    to extract any synthetic events.\n *\n *  - The `EventPluginRegistry` will then process each event by annotating them with\n *    \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n *  - The `EventPluginRegistry` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+    .\n * |    DOM     |    .\n * +------------+    .\n *       |           .\n *       v           .\n * +------------+    .\n * | ReactEvent |    .\n * |  Listener  |    .\n * +------------+    .                         +-----------+\n *       |           .               +--------+|SimpleEvent|\n *       |           .               |         |Plugin     |\n * +-----|------+    .               v         +-----------+\n * |     |      |    .    +--------------+                    +------------+\n * |     +-----------.--->|PluginRegistry|                    |    Event   |\n * |            |    .    |              |     +-----------+  | Propagators|\n * | ReactEvent |    .    |              |     |TapEvent   |  |------------|\n * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|\n * |            |    .    |              |     +-----------+  |  utilities |\n * |     +-----------.--->|              |                    +------------+\n * |     |      |    .    +--------------+\n * +-----|------+    .                ^        +-----------+\n *       |           .                |        |Enter/Leave|\n *       +           .                +-------+|Plugin     |\n * +-------------+   .                         +-----------+\n * | application |   .\n * |-------------|   .\n * |             |   .\n * |             |   .\n * +-------------+   .\n *                   .\n *    React Core     .  General Purpose Event Plugin System\n */\n\nvar CALLBACK_BOOKKEEPING_POOL_SIZE = 10;\nvar callbackBookkeepingPool = [];\n\nfunction releaseTopLevelCallbackBookKeeping(instance) {\n  instance.topLevelType = null;\n  instance.nativeEvent = null;\n  instance.targetInst = null;\n  instance.ancestors.length = 0;\n\n  if (callbackBookkeepingPool.length < CALLBACK_BOOKKEEPING_POOL_SIZE) {\n    callbackBookkeepingPool.push(instance);\n  }\n} // Used to store ancestor hierarchy in top level callback\n\n\nfunction getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst, eventSystemFlags) {\n  if (callbackBookkeepingPool.length) {\n    var instance = callbackBookkeepingPool.pop();\n    instance.topLevelType = topLevelType;\n    instance.eventSystemFlags = eventSystemFlags;\n    instance.nativeEvent = nativeEvent;\n    instance.targetInst = targetInst;\n    return instance;\n  }\n\n  return {\n    topLevelType: topLevelType,\n    eventSystemFlags: eventSystemFlags,\n    nativeEvent: nativeEvent,\n    targetInst: targetInst,\n    ancestors: []\n  };\n}\n/**\n * Find the deepest React component completely containing the root of the\n * passed-in instance (for use when entire React trees are nested within each\n * other). If React trees are not nested, returns null.\n */\n\n\nfunction findRootContainerNode(inst) {\n  if (inst.tag === HostRoot) {\n    return inst.stateNode.containerInfo;\n  } // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n  // traversal, but caching is difficult to do correctly without using a\n  // mutation observer to listen for all DOM changes.\n\n\n  while (inst.return) {\n    inst = inst.return;\n  }\n\n  if (inst.tag !== HostRoot) {\n    // This can happen if we're in a detached tree.\n    return null;\n  }\n\n  return inst.stateNode.containerInfo;\n}\n/**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n\n\nfunction extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n  var events = null;\n\n  for (var i = 0; i < plugins.length; i++) {\n    // Not every plugin in the ordering may be loaded at runtime.\n    var possiblePlugin = plugins[i];\n\n    if (possiblePlugin) {\n      var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n\n      if (extractedEvents) {\n        events = accumulateInto(events, extractedEvents);\n      }\n    }\n  }\n\n  return events;\n}\n\nfunction runExtractedPluginEventsInBatch(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n  var events = extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n  runEventsInBatch(events);\n}\n\nfunction handleTopLevel(bookKeeping) {\n  var targetInst = bookKeeping.targetInst; // Loop through the hierarchy, in case there's any nested components.\n  // It's important that we build the array of ancestors before calling any\n  // event handlers, because event handlers can modify the DOM, leading to\n  // inconsistencies with ReactMount's node cache. See #1105.\n\n  var ancestor = targetInst;\n\n  do {\n    if (!ancestor) {\n      var ancestors = bookKeeping.ancestors;\n      ancestors.push(ancestor);\n      break;\n    }\n\n    var root = findRootContainerNode(ancestor);\n\n    if (!root) {\n      break;\n    }\n\n    var tag = ancestor.tag;\n\n    if (tag === HostComponent || tag === HostText) {\n      bookKeeping.ancestors.push(ancestor);\n    }\n\n    ancestor = getClosestInstanceFromNode(root);\n  } while (ancestor);\n\n  for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n    targetInst = bookKeeping.ancestors[i];\n    var eventTarget = getEventTarget(bookKeeping.nativeEvent);\n    var topLevelType = bookKeeping.topLevelType;\n    var nativeEvent = bookKeeping.nativeEvent;\n    var eventSystemFlags = bookKeeping.eventSystemFlags; // If this is the first ancestor, we mark it on the system flags\n\n    if (i === 0) {\n      eventSystemFlags |= IS_FIRST_ANCESTOR;\n    }\n\n    runExtractedPluginEventsInBatch(topLevelType, targetInst, nativeEvent, eventTarget, eventSystemFlags);\n  }\n}\n\nfunction dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, targetInst) {\n  var bookKeeping = getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst, eventSystemFlags);\n\n  try {\n    // Event queue being processed in the same cycle allows\n    // `preventDefault`.\n    batchedEventUpdates(handleTopLevel, bookKeeping);\n  } finally {\n    releaseTopLevelCallbackBookKeeping(bookKeeping);\n  }\n}\n/**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} mountAt Container where to mount the listener\n */\n\nfunction legacyListenToEvent(registrationName, mountAt) {\n  var listenerMap = getListenerMapForElement(mountAt);\n  var dependencies = registrationNameDependencies[registrationName];\n\n  for (var i = 0; i < dependencies.length; i++) {\n    var dependency = dependencies[i];\n    legacyListenToTopLevelEvent(dependency, mountAt, listenerMap);\n  }\n}\nfunction legacyListenToTopLevelEvent(topLevelType, mountAt, listenerMap) {\n  if (!listenerMap.has(topLevelType)) {\n    switch (topLevelType) {\n      case TOP_SCROLL:\n        trapCapturedEvent(TOP_SCROLL, mountAt);\n        break;\n\n      case TOP_FOCUS:\n      case TOP_BLUR:\n        trapCapturedEvent(TOP_FOCUS, mountAt);\n        trapCapturedEvent(TOP_BLUR, mountAt); // We set the flag for a single dependency later in this function,\n        // but this ensures we mark both as attached rather than just one.\n\n        listenerMap.set(TOP_BLUR, null);\n        listenerMap.set(TOP_FOCUS, null);\n        break;\n\n      case TOP_CANCEL:\n      case TOP_CLOSE:\n        if (isEventSupported(getRawEventName(topLevelType))) {\n          trapCapturedEvent(topLevelType, mountAt);\n        }\n\n        break;\n\n      case TOP_INVALID:\n      case TOP_SUBMIT:\n      case TOP_RESET:\n        // We listen to them on the target DOM elements.\n        // Some of them bubble so we don't want them to fire twice.\n        break;\n\n      default:\n        // By default, listen on the top level to all non-media events.\n        // Media events don't bubble so adding the listener wouldn't do anything.\n        var isMediaEvent = mediaEventTypes.indexOf(topLevelType) !== -1;\n\n        if (!isMediaEvent) {\n          trapBubbledEvent(topLevelType, mountAt);\n        }\n\n        break;\n    }\n\n    listenerMap.set(topLevelType, null);\n  }\n}\nfunction isListeningToAllDependencies(registrationName, mountAt) {\n  var listenerMap = getListenerMapForElement(mountAt);\n  var dependencies = registrationNameDependencies[registrationName];\n\n  for (var i = 0; i < dependencies.length; i++) {\n    var dependency = dependencies[i];\n\n    if (!listenerMap.has(dependency)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nvar attemptUserBlockingHydration;\nfunction setAttemptUserBlockingHydration(fn) {\n  attemptUserBlockingHydration = fn;\n}\nvar attemptContinuousHydration;\nfunction setAttemptContinuousHydration(fn) {\n  attemptContinuousHydration = fn;\n}\nvar attemptHydrationAtCurrentPriority;\nfunction setAttemptHydrationAtCurrentPriority(fn) {\n  attemptHydrationAtCurrentPriority = fn;\n} // TODO: Upgrade this definition once we're on a newer version of Flow that\nvar hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed.\n\nvar queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout.\n// if the last target was dehydrated.\n\nvar queuedFocus = null;\nvar queuedDrag = null;\nvar queuedMouse = null; // For pointer events there can be one latest event per pointerId.\n\nvar queuedPointers = new Map();\nvar queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.\n\nvar queuedExplicitHydrationTargets = [];\nfunction hasQueuedDiscreteEvents() {\n  return queuedDiscreteEvents.length > 0;\n}\nvar discreteReplayableEvents = [TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_TOUCH_CANCEL, TOP_TOUCH_END, TOP_TOUCH_START, TOP_AUX_CLICK, TOP_DOUBLE_CLICK, TOP_POINTER_CANCEL, TOP_POINTER_DOWN, TOP_POINTER_UP, TOP_DRAG_END, TOP_DRAG_START, TOP_DROP, TOP_COMPOSITION_END, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_INPUT, TOP_TEXT_INPUT, TOP_CLOSE, TOP_CANCEL, TOP_COPY, TOP_CUT, TOP_PASTE, TOP_CLICK, TOP_CHANGE, TOP_CONTEXT_MENU, TOP_RESET, TOP_SUBMIT];\nvar continuousReplayableEvents = [TOP_FOCUS, TOP_BLUR, TOP_DRAG_ENTER, TOP_DRAG_LEAVE, TOP_MOUSE_OVER, TOP_MOUSE_OUT, TOP_POINTER_OVER, TOP_POINTER_OUT, TOP_GOT_POINTER_CAPTURE, TOP_LOST_POINTER_CAPTURE];\nfunction isReplayableDiscreteEvent(eventType) {\n  return discreteReplayableEvents.indexOf(eventType) > -1;\n}\n\nfunction trapReplayableEventForDocument(topLevelType, document, listenerMap) {\n  legacyListenToTopLevelEvent(topLevelType, document, listenerMap);\n}\n\nfunction eagerlyTrapReplayableEvents(container, document) {\n  var listenerMapForDoc = getListenerMapForElement(document); // Discrete\n\n  discreteReplayableEvents.forEach(function (topLevelType) {\n    trapReplayableEventForDocument(topLevelType, document, listenerMapForDoc);\n  }); // Continuous\n\n  continuousReplayableEvents.forEach(function (topLevelType) {\n    trapReplayableEventForDocument(topLevelType, document, listenerMapForDoc);\n  });\n}\n\nfunction createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n  return {\n    blockedOn: blockedOn,\n    topLevelType: topLevelType,\n    eventSystemFlags: eventSystemFlags | IS_REPLAYED,\n    nativeEvent: nativeEvent,\n    container: container\n  };\n}\n\nfunction queueDiscreteEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n  var queuedEvent = createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n  queuedDiscreteEvents.push(queuedEvent);\n} // Resets the replaying for this type of continuous event to no event.\n\nfunction clearIfContinuousEvent(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case TOP_FOCUS:\n    case TOP_BLUR:\n      queuedFocus = null;\n      break;\n\n    case TOP_DRAG_ENTER:\n    case TOP_DRAG_LEAVE:\n      queuedDrag = null;\n      break;\n\n    case TOP_MOUSE_OVER:\n    case TOP_MOUSE_OUT:\n      queuedMouse = null;\n      break;\n\n    case TOP_POINTER_OVER:\n    case TOP_POINTER_OUT:\n      {\n        var pointerId = nativeEvent.pointerId;\n        queuedPointers.delete(pointerId);\n        break;\n      }\n\n    case TOP_GOT_POINTER_CAPTURE:\n    case TOP_LOST_POINTER_CAPTURE:\n      {\n        var _pointerId = nativeEvent.pointerId;\n        queuedPointerCaptures.delete(_pointerId);\n        break;\n      }\n  }\n}\n\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n  if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {\n    var queuedEvent = createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n\n    if (blockedOn !== null) {\n      var _fiber2 = getInstanceFromNode$1(blockedOn);\n\n      if (_fiber2 !== null) {\n        // Attempt to increase the priority of this target.\n        attemptContinuousHydration(_fiber2);\n      }\n    }\n\n    return queuedEvent;\n  } // If we have already queued this exact event, then it's because\n  // the different event systems have different DOM event listeners.\n  // We can accumulate the flags and store a single event to be\n  // replayed.\n\n\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  return existingQueuedEvent;\n}\n\nfunction queueIfContinuousEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n  // These set relatedTarget to null because the replayed event will be treated as if we\n  // moved from outside the window (no target) onto the target once it hydrates.\n  // Instead of mutating we could clone the event.\n  switch (topLevelType) {\n    case TOP_FOCUS:\n      {\n        var focusEvent = nativeEvent;\n        queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, topLevelType, eventSystemFlags, container, focusEvent);\n        return true;\n      }\n\n    case TOP_DRAG_ENTER:\n      {\n        var dragEvent = nativeEvent;\n        queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, topLevelType, eventSystemFlags, container, dragEvent);\n        return true;\n      }\n\n    case TOP_MOUSE_OVER:\n      {\n        var mouseEvent = nativeEvent;\n        queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, topLevelType, eventSystemFlags, container, mouseEvent);\n        return true;\n      }\n\n    case TOP_POINTER_OVER:\n      {\n        var pointerEvent = nativeEvent;\n        var pointerId = pointerEvent.pointerId;\n        queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, topLevelType, eventSystemFlags, container, pointerEvent));\n        return true;\n      }\n\n    case TOP_GOT_POINTER_CAPTURE:\n      {\n        var _pointerEvent = nativeEvent;\n        var _pointerId2 = _pointerEvent.pointerId;\n        queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, topLevelType, eventSystemFlags, container, _pointerEvent));\n        return true;\n      }\n  }\n\n  return false;\n} // Check if this target is unblocked. Returns true if it's unblocked.\n\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  // TODO: This function shares a lot of logic with attemptToDispatchEvent.\n  // Try to unify them. It's a bit tricky since it would require two return\n  // values.\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n\n  if (targetInst !== null) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n\n    if (nearestMounted !== null) {\n      var tag = nearestMounted.tag;\n\n      if (tag === SuspenseComponent) {\n        var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n        if (instance !== null) {\n          // We're blocked on hydrating this boundary.\n          // Increase its priority.\n          queuedTarget.blockedOn = instance;\n          Scheduler.unstable_runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (tag === HostRoot) {\n        var root = nearestMounted.stateNode;\n\n        if (root.hydrate) {\n          queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of\n          // a root other than sync.\n\n          return;\n        }\n      }\n    }\n  }\n\n  queuedTarget.blockedOn = null;\n}\n\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (queuedEvent.blockedOn !== null) {\n    return false;\n  }\n\n  var nextBlockedOn = attemptToDispatchEvent(queuedEvent.topLevelType, queuedEvent.eventSystemFlags, queuedEvent.container, queuedEvent.nativeEvent);\n\n  if (nextBlockedOn !== null) {\n    // We're still blocked. Try again later.\n    var _fiber3 = getInstanceFromNode$1(nextBlockedOn);\n\n    if (_fiber3 !== null) {\n      attemptContinuousHydration(_fiber3);\n    }\n\n    queuedEvent.blockedOn = nextBlockedOn;\n    return false;\n  }\n\n  return true;\n}\n\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  if (attemptReplayContinuousQueuedEvent(queuedEvent)) {\n    map.delete(key);\n  }\n}\n\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = false; // First replay discrete events.\n\n  while (queuedDiscreteEvents.length > 0) {\n    var nextDiscreteEvent = queuedDiscreteEvents[0];\n\n    if (nextDiscreteEvent.blockedOn !== null) {\n      // We're still blocked.\n      // Increase the priority of this boundary to unblock\n      // the next discrete event.\n      var _fiber4 = getInstanceFromNode$1(nextDiscreteEvent.blockedOn);\n\n      if (_fiber4 !== null) {\n        attemptUserBlockingHydration(_fiber4);\n      }\n\n      break;\n    }\n\n    var nextBlockedOn = attemptToDispatchEvent(nextDiscreteEvent.topLevelType, nextDiscreteEvent.eventSystemFlags, nextDiscreteEvent.container, nextDiscreteEvent.nativeEvent);\n\n    if (nextBlockedOn !== null) {\n      // We're still blocked. Try again later.\n      nextDiscreteEvent.blockedOn = nextBlockedOn;\n    } else {\n      // We've successfully replayed the first event. Let's try the next one.\n      queuedDiscreteEvents.shift();\n    }\n  } // Next replay any continuous events.\n\n\n  if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {\n    queuedFocus = null;\n  }\n\n  if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {\n    queuedDrag = null;\n  }\n\n  if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {\n    queuedMouse = null;\n  }\n\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\n\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  if (queuedEvent.blockedOn === unblocked) {\n    queuedEvent.blockedOn = null;\n\n    if (!hasScheduledReplayAttempt) {\n      hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are\n      // now unblocked. This first might not actually be unblocked yet.\n      // We could check it early to avoid scheduling an unnecessary callback.\n\n      Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, replayUnblockedEvents);\n    }\n  }\n}\n\nfunction retryIfBlockedOn(unblocked) {\n  // Mark anything that was blocked on this as no longer blocked\n  // and eligible for a replay.\n  if (queuedDiscreteEvents.length > 0) {\n    scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's\n    // worth it because we expect very few discrete events to queue up and once\n    // we are actually fully unblocked it will be fast to replay them.\n\n    for (var i = 1; i < queuedDiscreteEvents.length; i++) {\n      var queuedEvent = queuedDiscreteEvents[i];\n\n      if (queuedEvent.blockedOn === unblocked) {\n        queuedEvent.blockedOn = null;\n      }\n    }\n  }\n\n  if (queuedFocus !== null) {\n    scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  }\n\n  if (queuedDrag !== null) {\n    scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  }\n\n  if (queuedMouse !== null) {\n    scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  }\n\n  var unblock = function (queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  };\n\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n\n  for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[_i];\n\n    if (queuedTarget.blockedOn === unblocked) {\n      queuedTarget.blockedOn = null;\n    }\n  }\n\n  while (queuedExplicitHydrationTargets.length > 0) {\n    var nextExplicitTarget = queuedExplicitHydrationTargets[0];\n\n    if (nextExplicitTarget.blockedOn !== null) {\n      // We're still blocked.\n      break;\n    } else {\n      attemptExplicitHydrationTarget(nextExplicitTarget);\n\n      if (nextExplicitTarget.blockedOn === null) {\n        // We're unblocked.\n        queuedExplicitHydrationTargets.shift();\n      }\n    }\n  }\n}\n\nfunction addEventBubbleListener(element, eventType, listener) {\n  element.addEventListener(eventType, listener, false);\n}\nfunction addEventCaptureListener(element, eventType, listener) {\n  element.addEventListener(eventType, listener, true);\n}\n\n// do it in two places, which duplicates logic\n// and increases the bundle size, we do it all\n// here once. If we remove or refactor the\n// SimpleEventPlugin, we should also remove or\n// update the below line.\n\nvar simpleEventPluginEventTypes = {};\nvar topLevelEventsToDispatchConfig = new Map();\nvar eventPriorities = new Map(); // We store most of the events in this module in pairs of two strings so we can re-use\n// the code required to apply the same logic for event prioritization and that of the\n// SimpleEventPlugin. This complicates things slightly, but the aim is to reduce code\n// duplication (for which there would be quite a bit). For the events that are not needed\n// for the SimpleEventPlugin (otherDiscreteEvents) we process them separately as an\n// array of top level events.\n// Lastly, we ignore prettier so we can keep the formatting sane.\n// prettier-ignore\n\nvar discreteEventPairsForSimpleEventPlugin = [TOP_BLUR, 'blur', TOP_CANCEL, 'cancel', TOP_CLICK, 'click', TOP_CLOSE, 'close', TOP_CONTEXT_MENU, 'contextMenu', TOP_COPY, 'copy', TOP_CUT, 'cut', TOP_AUX_CLICK, 'auxClick', TOP_DOUBLE_CLICK, 'doubleClick', TOP_DRAG_END, 'dragEnd', TOP_DRAG_START, 'dragStart', TOP_DROP, 'drop', TOP_FOCUS, 'focus', TOP_INPUT, 'input', TOP_INVALID, 'invalid', TOP_KEY_DOWN, 'keyDown', TOP_KEY_PRESS, 'keyPress', TOP_KEY_UP, 'keyUp', TOP_MOUSE_DOWN, 'mouseDown', TOP_MOUSE_UP, 'mouseUp', TOP_PASTE, 'paste', TOP_PAUSE, 'pause', TOP_PLAY, 'play', TOP_POINTER_CANCEL, 'pointerCancel', TOP_POINTER_DOWN, 'pointerDown', TOP_POINTER_UP, 'pointerUp', TOP_RATE_CHANGE, 'rateChange', TOP_RESET, 'reset', TOP_SEEKED, 'seeked', TOP_SUBMIT, 'submit', TOP_TOUCH_CANCEL, 'touchCancel', TOP_TOUCH_END, 'touchEnd', TOP_TOUCH_START, 'touchStart', TOP_VOLUME_CHANGE, 'volumeChange'];\nvar otherDiscreteEvents = [TOP_CHANGE, TOP_SELECTION_CHANGE, TOP_TEXT_INPUT, TOP_COMPOSITION_START, TOP_COMPOSITION_END, TOP_COMPOSITION_UPDATE]; // prettier-ignore\n\nvar userBlockingPairsForSimpleEventPlugin = [TOP_DRAG, 'drag', TOP_DRAG_ENTER, 'dragEnter', TOP_DRAG_EXIT, 'dragExit', TOP_DRAG_LEAVE, 'dragLeave', TOP_DRAG_OVER, 'dragOver', TOP_MOUSE_MOVE, 'mouseMove', TOP_MOUSE_OUT, 'mouseOut', TOP_MOUSE_OVER, 'mouseOver', TOP_POINTER_MOVE, 'pointerMove', TOP_POINTER_OUT, 'pointerOut', TOP_POINTER_OVER, 'pointerOver', TOP_SCROLL, 'scroll', TOP_TOGGLE, 'toggle', TOP_TOUCH_MOVE, 'touchMove', TOP_WHEEL, 'wheel']; // prettier-ignore\n\nvar continuousPairsForSimpleEventPlugin = [TOP_ABORT, 'abort', TOP_ANIMATION_END, 'animationEnd', TOP_ANIMATION_ITERATION, 'animationIteration', TOP_ANIMATION_START, 'animationStart', TOP_CAN_PLAY, 'canPlay', TOP_CAN_PLAY_THROUGH, 'canPlayThrough', TOP_DURATION_CHANGE, 'durationChange', TOP_EMPTIED, 'emptied', TOP_ENCRYPTED, 'encrypted', TOP_ENDED, 'ended', TOP_ERROR, 'error', TOP_GOT_POINTER_CAPTURE, 'gotPointerCapture', TOP_LOAD, 'load', TOP_LOADED_DATA, 'loadedData', TOP_LOADED_METADATA, 'loadedMetadata', TOP_LOAD_START, 'loadStart', TOP_LOST_POINTER_CAPTURE, 'lostPointerCapture', TOP_PLAYING, 'playing', TOP_PROGRESS, 'progress', TOP_SEEKING, 'seeking', TOP_STALLED, 'stalled', TOP_SUSPEND, 'suspend', TOP_TIME_UPDATE, 'timeUpdate', TOP_TRANSITION_END, 'transitionEnd', TOP_WAITING, 'waiting'];\n/**\n * Turns\n * ['abort', ...]\n * into\n * eventTypes = {\n *   'abort': {\n *     phasedRegistrationNames: {\n *       bubbled: 'onAbort',\n *       captured: 'onAbortCapture',\n *     },\n *     dependencies: [TOP_ABORT],\n *   },\n *   ...\n * };\n * topLevelEventsToDispatchConfig = new Map([\n *   [TOP_ABORT, { sameConfig }],\n * ]);\n */\n\nfunction processSimpleEventPluginPairsByPriority(eventTypes, priority) {\n  // As the event types are in pairs of two, we need to iterate\n  // through in twos. The events are in pairs of two to save code\n  // and improve init perf of processing this array, as it will\n  // result in far fewer object allocations and property accesses\n  // if we only use three arrays to process all the categories of\n  // instead of tuples.\n  for (var i = 0; i < eventTypes.length; i += 2) {\n    var topEvent = eventTypes[i];\n    var event = eventTypes[i + 1];\n    var capitalizedEvent = event[0].toUpperCase() + event.slice(1);\n    var onEvent = 'on' + capitalizedEvent;\n    var config = {\n      phasedRegistrationNames: {\n        bubbled: onEvent,\n        captured: onEvent + 'Capture'\n      },\n      dependencies: [topEvent],\n      eventPriority: priority\n    };\n    eventPriorities.set(topEvent, priority);\n    topLevelEventsToDispatchConfig.set(topEvent, config);\n    simpleEventPluginEventTypes[event] = config;\n  }\n}\n\nfunction processTopEventPairsByPriority(eventTypes, priority) {\n  for (var i = 0; i < eventTypes.length; i++) {\n    eventPriorities.set(eventTypes[i], priority);\n  }\n} // SimpleEventPlugin\n\n\nprocessSimpleEventPluginPairsByPriority(discreteEventPairsForSimpleEventPlugin, DiscreteEvent);\nprocessSimpleEventPluginPairsByPriority(userBlockingPairsForSimpleEventPlugin, UserBlockingEvent);\nprocessSimpleEventPluginPairsByPriority(continuousPairsForSimpleEventPlugin, ContinuousEvent); // Not used by SimpleEventPlugin\n\nprocessTopEventPairsByPriority(otherDiscreteEvents, DiscreteEvent);\nfunction getEventPriorityForPluginSystem(topLevelType) {\n  var priority = eventPriorities.get(topLevelType); // Default to a ContinuousEvent. Note: we might\n  // want to warn if we can't detect the priority\n  // for the event.\n\n  return priority === undefined ? ContinuousEvent : priority;\n}\n\n// Intentionally not named imports because Rollup would use dynamic dispatch for\nvar UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n    runWithPriority = Scheduler.unstable_runWithPriority; // TODO: can we stop exporting these?\n\nvar _enabled = true;\nfunction setEnabled(enabled) {\n  _enabled = !!enabled;\n}\nfunction isEnabled() {\n  return _enabled;\n}\nfunction trapBubbledEvent(topLevelType, element) {\n  trapEventForPluginEventSystem(element, topLevelType, false);\n}\nfunction trapCapturedEvent(topLevelType, element) {\n  trapEventForPluginEventSystem(element, topLevelType, true);\n}\n\nfunction trapEventForPluginEventSystem(container, topLevelType, capture) {\n  var listener;\n\n  switch (getEventPriorityForPluginSystem(topLevelType)) {\n    case DiscreteEvent:\n      listener = dispatchDiscreteEvent.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n      break;\n\n    case UserBlockingEvent:\n      listener = dispatchUserBlockingUpdate.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n      break;\n\n    case ContinuousEvent:\n    default:\n      listener = dispatchEvent.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n      break;\n  }\n\n  var rawEventName = getRawEventName(topLevelType);\n\n  if (capture) {\n    addEventCaptureListener(container, rawEventName, listener);\n  } else {\n    addEventBubbleListener(container, rawEventName, listener);\n  }\n}\n\nfunction dispatchDiscreteEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n  flushDiscreteUpdatesIfNeeded(nativeEvent.timeStamp);\n  discreteUpdates(dispatchEvent, topLevelType, eventSystemFlags, container, nativeEvent);\n}\n\nfunction dispatchUserBlockingUpdate(topLevelType, eventSystemFlags, container, nativeEvent) {\n  runWithPriority(UserBlockingPriority, dispatchEvent.bind(null, topLevelType, eventSystemFlags, container, nativeEvent));\n}\n\nfunction dispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n  if (!_enabled) {\n    return;\n  }\n\n  if (hasQueuedDiscreteEvents() && isReplayableDiscreteEvent(topLevelType)) {\n    // If we already have a queue of discrete events, and this is another discrete\n    // event, then we can't dispatch it regardless of its target, since they\n    // need to dispatch in order.\n    queueDiscreteEvent(null, // Flags that we're not actually blocked on anything as far as we know.\n    topLevelType, eventSystemFlags, container, nativeEvent);\n    return;\n  }\n\n  var blockedOn = attemptToDispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent);\n\n  if (blockedOn === null) {\n    // We successfully dispatched this event.\n    clearIfContinuousEvent(topLevelType, nativeEvent);\n    return;\n  }\n\n  if (isReplayableDiscreteEvent(topLevelType)) {\n    // This this to be replayed later once the target is available.\n    queueDiscreteEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n    return;\n  }\n\n  if (queueIfContinuousEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent)) {\n    return;\n  } // We need to clear only if we didn't queue because\n  // queueing is accummulative.\n\n\n  clearIfContinuousEvent(topLevelType, nativeEvent); // This is not replayable so we'll invoke it but without a target,\n  // in case the event system needs to trace it.\n\n  {\n    dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, null);\n  }\n} // Attempt dispatching an event. Returns a SuspenseInstance or Container if it's blocked.\n\nfunction attemptToDispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n  // TODO: Warn if _enabled is false.\n  var nativeEventTarget = getEventTarget(nativeEvent);\n  var targetInst = getClosestInstanceFromNode(nativeEventTarget);\n\n  if (targetInst !== null) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n\n    if (nearestMounted === null) {\n      // This tree has been unmounted already. Dispatch without a target.\n      targetInst = null;\n    } else {\n      var tag = nearestMounted.tag;\n\n      if (tag === SuspenseComponent) {\n        var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n        if (instance !== null) {\n          // Queue the event to be replayed later. Abort dispatching since we\n          // don't want this event dispatched twice through the event system.\n          // TODO: If this is the first discrete event in the queue. Schedule an increased\n          // priority for this boundary.\n          return instance;\n        } // This shouldn't happen, something went wrong but to avoid blocking\n        // the whole system, dispatch the event without a target.\n        // TODO: Warn.\n\n\n        targetInst = null;\n      } else if (tag === HostRoot) {\n        var root = nearestMounted.stateNode;\n\n        if (root.hydrate) {\n          // If this happens during a replay something went wrong and it might block\n          // the whole system.\n          return getContainerFromFiber(nearestMounted);\n        }\n\n        targetInst = null;\n      } else if (nearestMounted !== targetInst) {\n        // If we get an event (ex: img onload) before committing that\n        // component's mount, ignore it for now (that is, treat it as if it was an\n        // event on a non-React tree). We might also consider queueing events and\n        // dispatching them after the mount.\n        targetInst = null;\n      }\n    }\n  }\n\n  {\n    dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, targetInst);\n  } // We're not blocked on anything.\n\n\n  return null;\n}\n\n// List derived from Gecko source code:\n// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js\nvar shorthandToLonghand = {\n  animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],\n  background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],\n  backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n  border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n  borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],\n  borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],\n  borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],\n  borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],\n  borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],\n  borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],\n  borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],\n  borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],\n  borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],\n  borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],\n  borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],\n  borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n  borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],\n  columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],\n  columns: ['columnCount', 'columnWidth'],\n  flex: ['flexBasis', 'flexGrow', 'flexShrink'],\n  flexFlow: ['flexDirection', 'flexWrap'],\n  font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],\n  fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],\n  gap: ['columnGap', 'rowGap'],\n  grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n  gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],\n  gridColumn: ['gridColumnEnd', 'gridColumnStart'],\n  gridColumnGap: ['columnGap'],\n  gridGap: ['columnGap', 'rowGap'],\n  gridRow: ['gridRowEnd', 'gridRowStart'],\n  gridRowGap: ['rowGap'],\n  gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n  listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],\n  margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],\n  marker: ['markerEnd', 'markerMid', 'markerStart'],\n  mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],\n  maskPosition: ['maskPositionX', 'maskPositionY'],\n  outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],\n  overflow: ['overflowX', 'overflowY'],\n  padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],\n  placeContent: ['alignContent', 'justifyContent'],\n  placeItems: ['alignItems', 'justifyItems'],\n  placeSelf: ['alignSelf', 'justifySelf'],\n  textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],\n  textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],\n  transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],\n  wordWrap: ['overflowWrap']\n};\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  columns: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridArea: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowSpan: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnSpan: true,\n  gridColumnStart: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\n\nfunction prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\n\n\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\n\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\n\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n\n  if (isEmpty) {\n    return '';\n  }\n\n  if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n    return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n  }\n\n  return ('' + value).trim();\n}\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\nfunction hyphenateStyleName(name) {\n  return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n}\n\nvar warnValidStyle = function () {};\n\n{\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n  var msPattern$1 = /^-ms-/;\n  var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n  var warnedForNaNValue = false;\n  var warnedForInfinityValue = false;\n\n  var camelize = function (string) {\n    return string.replace(hyphenPattern, function (_, character) {\n      return character.toUpperCase();\n    });\n  };\n\n  var warnHyphenatedStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n    // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n    // is converted to lowercase `ms`.\n    camelize(name.replace(msPattern$1, 'ms-')));\n  };\n\n  var warnBadVendoredStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n  };\n\n  var warnStyleValueWithSemicolon = function (name, value) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n\n    error(\"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n  };\n\n  var warnStyleValueIsNaN = function (name, value) {\n    if (warnedForNaNValue) {\n      return;\n    }\n\n    warnedForNaNValue = true;\n\n    error('`NaN` is an invalid value for the `%s` css style property.', name);\n  };\n\n  var warnStyleValueIsInfinity = function (name, value) {\n    if (warnedForInfinityValue) {\n      return;\n    }\n\n    warnedForInfinityValue = true;\n\n    error('`Infinity` is an invalid value for the `%s` css style property.', name);\n  };\n\n  warnValidStyle = function (name, value) {\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value);\n    }\n\n    if (typeof value === 'number') {\n      if (isNaN(value)) {\n        warnStyleValueIsNaN(name, value);\n      } else if (!isFinite(value)) {\n        warnStyleValueIsInfinity(name, value);\n      }\n    }\n  };\n}\n\nvar warnValidStyle$1 = warnValidStyle;\n\n/**\n * Operations for dealing with CSS properties.\n */\n\n/**\n * This creates a string that is expected to be equivalent to the style\n * attribute generated by server-side rendering. It by-passes warnings and\n * security checks so it's not safe to use this value for anything other than\n * comparison. It is only used in DEV for SSR validation.\n */\n\nfunction createDangerousStringForStyles(styles) {\n  {\n    var serialized = '';\n    var delimiter = '';\n\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n\n      var styleValue = styles[styleName];\n\n      if (styleValue != null) {\n        var isCustomProperty = styleName.indexOf('--') === 0;\n        serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':';\n        serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);\n        delimiter = ';';\n      }\n    }\n\n    return serialized || null;\n  }\n}\n/**\n * Sets the value for multiple styles on a node.  If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\n\nfunction setValueForStyles(node, styles) {\n  var style = node.style;\n\n  for (var styleName in styles) {\n    if (!styles.hasOwnProperty(styleName)) {\n      continue;\n    }\n\n    var isCustomProperty = styleName.indexOf('--') === 0;\n\n    {\n      if (!isCustomProperty) {\n        warnValidStyle$1(styleName, styles[styleName]);\n      }\n    }\n\n    var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n\n    if (styleName === 'float') {\n      styleName = 'cssFloat';\n    }\n\n    if (isCustomProperty) {\n      style.setProperty(styleName, styleValue);\n    } else {\n      style[styleName] = styleValue;\n    }\n  }\n}\n\nfunction isValueEmpty(value) {\n  return value == null || typeof value === 'boolean' || value === '';\n}\n/**\n * Given {color: 'red', overflow: 'hidden'} returns {\n *   color: 'color',\n *   overflowX: 'overflow',\n *   overflowY: 'overflow',\n * }. This can be read as \"the overflowY property was set by the overflow\n * shorthand\". That is, the values are the property that each was derived from.\n */\n\n\nfunction expandShorthandMap(styles) {\n  var expanded = {};\n\n  for (var key in styles) {\n    var longhands = shorthandToLonghand[key] || [key];\n\n    for (var i = 0; i < longhands.length; i++) {\n      expanded[longhands[i]] = key;\n    }\n  }\n\n  return expanded;\n}\n/**\n * When mixing shorthand and longhand property names, we warn during updates if\n * we expect an incorrect result to occur. In particular, we warn for:\n *\n * Updating a shorthand property (longhand gets overwritten):\n *   {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}\n *   becomes .style.font = 'baz'\n * Removing a shorthand property (longhand gets lost too):\n *   {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}\n *   becomes .style.font = ''\n * Removing a longhand property (should revert to shorthand; doesn't):\n *   {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}\n *   becomes .style.fontVariant = ''\n */\n\n\nfunction validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {\n  {\n\n    if (!nextStyles) {\n      return;\n    }\n\n    var expandedUpdates = expandShorthandMap(styleUpdates);\n    var expandedStyles = expandShorthandMap(nextStyles);\n    var warnedAbout = {};\n\n    for (var key in expandedUpdates) {\n      var originalKey = expandedUpdates[key];\n      var correctOriginalKey = expandedStyles[key];\n\n      if (correctOriginalKey && originalKey !== correctOriginalKey) {\n        var warningKey = originalKey + ',' + correctOriginalKey;\n\n        if (warnedAbout[warningKey]) {\n          continue;\n        }\n\n        warnedAbout[warningKey] = true;\n\n        error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + \"avoid this, don't mix shorthand and non-shorthand properties \" + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);\n      }\n    }\n  }\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\nvar omittedCloseTags = {\n  area: true,\n  base: true,\n  br: true,\n  col: true,\n  embed: true,\n  hr: true,\n  img: true,\n  input: true,\n  keygen: true,\n  link: true,\n  meta: true,\n  param: true,\n  source: true,\n  track: true,\n  wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.\n\n};\n\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = _assign({\n  menuitem: true\n}, omittedCloseTags);\n\nvar HTML = '__html';\nvar ReactDebugCurrentFrame$3 = null;\n\n{\n  ReactDebugCurrentFrame$3 = ReactSharedInternals.ReactDebugCurrentFrame;\n}\n\nfunction assertValidProps(tag, props) {\n  if (!props) {\n    return;\n  } // Note the use of `==` which checks for null or undefined.\n\n\n  if (voidElementTags[tag]) {\n    if (!(props.children == null && props.dangerouslySetInnerHTML == null)) {\n      {\n        throw Error( tag + \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\" + ( ReactDebugCurrentFrame$3.getStackAddendum() ) );\n      }\n    }\n  }\n\n  if (props.dangerouslySetInnerHTML != null) {\n    if (!(props.children == null)) {\n      {\n        throw Error( \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\" );\n      }\n    }\n\n    if (!(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML)) {\n      {\n        throw Error( \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.\" );\n      }\n    }\n  }\n\n  {\n    if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {\n      error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');\n    }\n  }\n\n  if (!(props.style == null || typeof props.style === 'object')) {\n    {\n      throw Error( \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\" + ( ReactDebugCurrentFrame$3.getStackAddendum() ) );\n    }\n  }\n}\n\nfunction isCustomComponent(tagName, props) {\n  if (tagName.indexOf('-') === -1) {\n    return typeof props.is === 'string';\n  }\n\n  switch (tagName) {\n    // These are reserved SVG and MathML elements.\n    // We don't mind this whitelist too much because we expect it to never grow.\n    // The alternative is to track the namespace in a few places which is convoluted.\n    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n    case 'annotation-xml':\n    case 'color-profile':\n    case 'font-face':\n    case 'font-face-src':\n    case 'font-face-uri':\n    case 'font-face-format':\n    case 'font-face-name':\n    case 'missing-glyph':\n      return false;\n\n    default:\n      return true;\n  }\n}\n\n// When adding attributes to the HTML or SVG whitelist, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n  // HTML\n  accept: 'accept',\n  acceptcharset: 'acceptCharset',\n  'accept-charset': 'acceptCharset',\n  accesskey: 'accessKey',\n  action: 'action',\n  allowfullscreen: 'allowFullScreen',\n  alt: 'alt',\n  as: 'as',\n  async: 'async',\n  autocapitalize: 'autoCapitalize',\n  autocomplete: 'autoComplete',\n  autocorrect: 'autoCorrect',\n  autofocus: 'autoFocus',\n  autoplay: 'autoPlay',\n  autosave: 'autoSave',\n  capture: 'capture',\n  cellpadding: 'cellPadding',\n  cellspacing: 'cellSpacing',\n  challenge: 'challenge',\n  charset: 'charSet',\n  checked: 'checked',\n  children: 'children',\n  cite: 'cite',\n  class: 'className',\n  classid: 'classID',\n  classname: 'className',\n  cols: 'cols',\n  colspan: 'colSpan',\n  content: 'content',\n  contenteditable: 'contentEditable',\n  contextmenu: 'contextMenu',\n  controls: 'controls',\n  controlslist: 'controlsList',\n  coords: 'coords',\n  crossorigin: 'crossOrigin',\n  dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n  data: 'data',\n  datetime: 'dateTime',\n  default: 'default',\n  defaultchecked: 'defaultChecked',\n  defaultvalue: 'defaultValue',\n  defer: 'defer',\n  dir: 'dir',\n  disabled: 'disabled',\n  disablepictureinpicture: 'disablePictureInPicture',\n  download: 'download',\n  draggable: 'draggable',\n  enctype: 'encType',\n  for: 'htmlFor',\n  form: 'form',\n  formmethod: 'formMethod',\n  formaction: 'formAction',\n  formenctype: 'formEncType',\n  formnovalidate: 'formNoValidate',\n  formtarget: 'formTarget',\n  frameborder: 'frameBorder',\n  headers: 'headers',\n  height: 'height',\n  hidden: 'hidden',\n  high: 'high',\n  href: 'href',\n  hreflang: 'hrefLang',\n  htmlfor: 'htmlFor',\n  httpequiv: 'httpEquiv',\n  'http-equiv': 'httpEquiv',\n  icon: 'icon',\n  id: 'id',\n  innerhtml: 'innerHTML',\n  inputmode: 'inputMode',\n  integrity: 'integrity',\n  is: 'is',\n  itemid: 'itemID',\n  itemprop: 'itemProp',\n  itemref: 'itemRef',\n  itemscope: 'itemScope',\n  itemtype: 'itemType',\n  keyparams: 'keyParams',\n  keytype: 'keyType',\n  kind: 'kind',\n  label: 'label',\n  lang: 'lang',\n  list: 'list',\n  loop: 'loop',\n  low: 'low',\n  manifest: 'manifest',\n  marginwidth: 'marginWidth',\n  marginheight: 'marginHeight',\n  max: 'max',\n  maxlength: 'maxLength',\n  media: 'media',\n  mediagroup: 'mediaGroup',\n  method: 'method',\n  min: 'min',\n  minlength: 'minLength',\n  multiple: 'multiple',\n  muted: 'muted',\n  name: 'name',\n  nomodule: 'noModule',\n  nonce: 'nonce',\n  novalidate: 'noValidate',\n  open: 'open',\n  optimum: 'optimum',\n  pattern: 'pattern',\n  placeholder: 'placeholder',\n  playsinline: 'playsInline',\n  poster: 'poster',\n  preload: 'preload',\n  profile: 'profile',\n  radiogroup: 'radioGroup',\n  readonly: 'readOnly',\n  referrerpolicy: 'referrerPolicy',\n  rel: 'rel',\n  required: 'required',\n  reversed: 'reversed',\n  role: 'role',\n  rows: 'rows',\n  rowspan: 'rowSpan',\n  sandbox: 'sandbox',\n  scope: 'scope',\n  scoped: 'scoped',\n  scrolling: 'scrolling',\n  seamless: 'seamless',\n  selected: 'selected',\n  shape: 'shape',\n  size: 'size',\n  sizes: 'sizes',\n  span: 'span',\n  spellcheck: 'spellCheck',\n  src: 'src',\n  srcdoc: 'srcDoc',\n  srclang: 'srcLang',\n  srcset: 'srcSet',\n  start: 'start',\n  step: 'step',\n  style: 'style',\n  summary: 'summary',\n  tabindex: 'tabIndex',\n  target: 'target',\n  title: 'title',\n  type: 'type',\n  usemap: 'useMap',\n  value: 'value',\n  width: 'width',\n  wmode: 'wmode',\n  wrap: 'wrap',\n  // SVG\n  about: 'about',\n  accentheight: 'accentHeight',\n  'accent-height': 'accentHeight',\n  accumulate: 'accumulate',\n  additive: 'additive',\n  alignmentbaseline: 'alignmentBaseline',\n  'alignment-baseline': 'alignmentBaseline',\n  allowreorder: 'allowReorder',\n  alphabetic: 'alphabetic',\n  amplitude: 'amplitude',\n  arabicform: 'arabicForm',\n  'arabic-form': 'arabicForm',\n  ascent: 'ascent',\n  attributename: 'attributeName',\n  attributetype: 'attributeType',\n  autoreverse: 'autoReverse',\n  azimuth: 'azimuth',\n  basefrequency: 'baseFrequency',\n  baselineshift: 'baselineShift',\n  'baseline-shift': 'baselineShift',\n  baseprofile: 'baseProfile',\n  bbox: 'bbox',\n  begin: 'begin',\n  bias: 'bias',\n  by: 'by',\n  calcmode: 'calcMode',\n  capheight: 'capHeight',\n  'cap-height': 'capHeight',\n  clip: 'clip',\n  clippath: 'clipPath',\n  'clip-path': 'clipPath',\n  clippathunits: 'clipPathUnits',\n  cliprule: 'clipRule',\n  'clip-rule': 'clipRule',\n  color: 'color',\n  colorinterpolation: 'colorInterpolation',\n  'color-interpolation': 'colorInterpolation',\n  colorinterpolationfilters: 'colorInterpolationFilters',\n  'color-interpolation-filters': 'colorInterpolationFilters',\n  colorprofile: 'colorProfile',\n  'color-profile': 'colorProfile',\n  colorrendering: 'colorRendering',\n  'color-rendering': 'colorRendering',\n  contentscripttype: 'contentScriptType',\n  contentstyletype: 'contentStyleType',\n  cursor: 'cursor',\n  cx: 'cx',\n  cy: 'cy',\n  d: 'd',\n  datatype: 'datatype',\n  decelerate: 'decelerate',\n  descent: 'descent',\n  diffuseconstant: 'diffuseConstant',\n  direction: 'direction',\n  display: 'display',\n  divisor: 'divisor',\n  dominantbaseline: 'dominantBaseline',\n  'dominant-baseline': 'dominantBaseline',\n  dur: 'dur',\n  dx: 'dx',\n  dy: 'dy',\n  edgemode: 'edgeMode',\n  elevation: 'elevation',\n  enablebackground: 'enableBackground',\n  'enable-background': 'enableBackground',\n  end: 'end',\n  exponent: 'exponent',\n  externalresourcesrequired: 'externalResourcesRequired',\n  fill: 'fill',\n  fillopacity: 'fillOpacity',\n  'fill-opacity': 'fillOpacity',\n  fillrule: 'fillRule',\n  'fill-rule': 'fillRule',\n  filter: 'filter',\n  filterres: 'filterRes',\n  filterunits: 'filterUnits',\n  floodopacity: 'floodOpacity',\n  'flood-opacity': 'floodOpacity',\n  floodcolor: 'floodColor',\n  'flood-color': 'floodColor',\n  focusable: 'focusable',\n  fontfamily: 'fontFamily',\n  'font-family': 'fontFamily',\n  fontsize: 'fontSize',\n  'font-size': 'fontSize',\n  fontsizeadjust: 'fontSizeAdjust',\n  'font-size-adjust': 'fontSizeAdjust',\n  fontstretch: 'fontStretch',\n  'font-stretch': 'fontStretch',\n  fontstyle: 'fontStyle',\n  'font-style': 'fontStyle',\n  fontvariant: 'fontVariant',\n  'font-variant': 'fontVariant',\n  fontweight: 'fontWeight',\n  'font-weight': 'fontWeight',\n  format: 'format',\n  from: 'from',\n  fx: 'fx',\n  fy: 'fy',\n  g1: 'g1',\n  g2: 'g2',\n  glyphname: 'glyphName',\n  'glyph-name': 'glyphName',\n  glyphorientationhorizontal: 'glyphOrientationHorizontal',\n  'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n  glyphorientationvertical: 'glyphOrientationVertical',\n  'glyph-orientation-vertical': 'glyphOrientationVertical',\n  glyphref: 'glyphRef',\n  gradienttransform: 'gradientTransform',\n  gradientunits: 'gradientUnits',\n  hanging: 'hanging',\n  horizadvx: 'horizAdvX',\n  'horiz-adv-x': 'horizAdvX',\n  horizoriginx: 'horizOriginX',\n  'horiz-origin-x': 'horizOriginX',\n  ideographic: 'ideographic',\n  imagerendering: 'imageRendering',\n  'image-rendering': 'imageRendering',\n  in2: 'in2',\n  in: 'in',\n  inlist: 'inlist',\n  intercept: 'intercept',\n  k1: 'k1',\n  k2: 'k2',\n  k3: 'k3',\n  k4: 'k4',\n  k: 'k',\n  kernelmatrix: 'kernelMatrix',\n  kernelunitlength: 'kernelUnitLength',\n  kerning: 'kerning',\n  keypoints: 'keyPoints',\n  keysplines: 'keySplines',\n  keytimes: 'keyTimes',\n  lengthadjust: 'lengthAdjust',\n  letterspacing: 'letterSpacing',\n  'letter-spacing': 'letterSpacing',\n  lightingcolor: 'lightingColor',\n  'lighting-color': 'lightingColor',\n  limitingconeangle: 'limitingConeAngle',\n  local: 'local',\n  markerend: 'markerEnd',\n  'marker-end': 'markerEnd',\n  markerheight: 'markerHeight',\n  markermid: 'markerMid',\n  'marker-mid': 'markerMid',\n  markerstart: 'markerStart',\n  'marker-start': 'markerStart',\n  markerunits: 'markerUnits',\n  markerwidth: 'markerWidth',\n  mask: 'mask',\n  maskcontentunits: 'maskContentUnits',\n  maskunits: 'maskUnits',\n  mathematical: 'mathematical',\n  mode: 'mode',\n  numoctaves: 'numOctaves',\n  offset: 'offset',\n  opacity: 'opacity',\n  operator: 'operator',\n  order: 'order',\n  orient: 'orient',\n  orientation: 'orientation',\n  origin: 'origin',\n  overflow: 'overflow',\n  overlineposition: 'overlinePosition',\n  'overline-position': 'overlinePosition',\n  overlinethickness: 'overlineThickness',\n  'overline-thickness': 'overlineThickness',\n  paintorder: 'paintOrder',\n  'paint-order': 'paintOrder',\n  panose1: 'panose1',\n  'panose-1': 'panose1',\n  pathlength: 'pathLength',\n  patterncontentunits: 'patternContentUnits',\n  patterntransform: 'patternTransform',\n  patternunits: 'patternUnits',\n  pointerevents: 'pointerEvents',\n  'pointer-events': 'pointerEvents',\n  points: 'points',\n  pointsatx: 'pointsAtX',\n  pointsaty: 'pointsAtY',\n  pointsatz: 'pointsAtZ',\n  prefix: 'prefix',\n  preservealpha: 'preserveAlpha',\n  preserveaspectratio: 'preserveAspectRatio',\n  primitiveunits: 'primitiveUnits',\n  property: 'property',\n  r: 'r',\n  radius: 'radius',\n  refx: 'refX',\n  refy: 'refY',\n  renderingintent: 'renderingIntent',\n  'rendering-intent': 'renderingIntent',\n  repeatcount: 'repeatCount',\n  repeatdur: 'repeatDur',\n  requiredextensions: 'requiredExtensions',\n  requiredfeatures: 'requiredFeatures',\n  resource: 'resource',\n  restart: 'restart',\n  result: 'result',\n  results: 'results',\n  rotate: 'rotate',\n  rx: 'rx',\n  ry: 'ry',\n  scale: 'scale',\n  security: 'security',\n  seed: 'seed',\n  shaperendering: 'shapeRendering',\n  'shape-rendering': 'shapeRendering',\n  slope: 'slope',\n  spacing: 'spacing',\n  specularconstant: 'specularConstant',\n  specularexponent: 'specularExponent',\n  speed: 'speed',\n  spreadmethod: 'spreadMethod',\n  startoffset: 'startOffset',\n  stddeviation: 'stdDeviation',\n  stemh: 'stemh',\n  stemv: 'stemv',\n  stitchtiles: 'stitchTiles',\n  stopcolor: 'stopColor',\n  'stop-color': 'stopColor',\n  stopopacity: 'stopOpacity',\n  'stop-opacity': 'stopOpacity',\n  strikethroughposition: 'strikethroughPosition',\n  'strikethrough-position': 'strikethroughPosition',\n  strikethroughthickness: 'strikethroughThickness',\n  'strikethrough-thickness': 'strikethroughThickness',\n  string: 'string',\n  stroke: 'stroke',\n  strokedasharray: 'strokeDasharray',\n  'stroke-dasharray': 'strokeDasharray',\n  strokedashoffset: 'strokeDashoffset',\n  'stroke-dashoffset': 'strokeDashoffset',\n  strokelinecap: 'strokeLinecap',\n  'stroke-linecap': 'strokeLinecap',\n  strokelinejoin: 'strokeLinejoin',\n  'stroke-linejoin': 'strokeLinejoin',\n  strokemiterlimit: 'strokeMiterlimit',\n  'stroke-miterlimit': 'strokeMiterlimit',\n  strokewidth: 'strokeWidth',\n  'stroke-width': 'strokeWidth',\n  strokeopacity: 'strokeOpacity',\n  'stroke-opacity': 'strokeOpacity',\n  suppresscontenteditablewarning: 'suppressContentEditableWarning',\n  suppresshydrationwarning: 'suppressHydrationWarning',\n  surfacescale: 'surfaceScale',\n  systemlanguage: 'systemLanguage',\n  tablevalues: 'tableValues',\n  targetx: 'targetX',\n  targety: 'targetY',\n  textanchor: 'textAnchor',\n  'text-anchor': 'textAnchor',\n  textdecoration: 'textDecoration',\n  'text-decoration': 'textDecoration',\n  textlength: 'textLength',\n  textrendering: 'textRendering',\n  'text-rendering': 'textRendering',\n  to: 'to',\n  transform: 'transform',\n  typeof: 'typeof',\n  u1: 'u1',\n  u2: 'u2',\n  underlineposition: 'underlinePosition',\n  'underline-position': 'underlinePosition',\n  underlinethickness: 'underlineThickness',\n  'underline-thickness': 'underlineThickness',\n  unicode: 'unicode',\n  unicodebidi: 'unicodeBidi',\n  'unicode-bidi': 'unicodeBidi',\n  unicoderange: 'unicodeRange',\n  'unicode-range': 'unicodeRange',\n  unitsperem: 'unitsPerEm',\n  'units-per-em': 'unitsPerEm',\n  unselectable: 'unselectable',\n  valphabetic: 'vAlphabetic',\n  'v-alphabetic': 'vAlphabetic',\n  values: 'values',\n  vectoreffect: 'vectorEffect',\n  'vector-effect': 'vectorEffect',\n  version: 'version',\n  vertadvy: 'vertAdvY',\n  'vert-adv-y': 'vertAdvY',\n  vertoriginx: 'vertOriginX',\n  'vert-origin-x': 'vertOriginX',\n  vertoriginy: 'vertOriginY',\n  'vert-origin-y': 'vertOriginY',\n  vhanging: 'vHanging',\n  'v-hanging': 'vHanging',\n  videographic: 'vIdeographic',\n  'v-ideographic': 'vIdeographic',\n  viewbox: 'viewBox',\n  viewtarget: 'viewTarget',\n  visibility: 'visibility',\n  vmathematical: 'vMathematical',\n  'v-mathematical': 'vMathematical',\n  vocab: 'vocab',\n  widths: 'widths',\n  wordspacing: 'wordSpacing',\n  'word-spacing': 'wordSpacing',\n  writingmode: 'writingMode',\n  'writing-mode': 'writingMode',\n  x1: 'x1',\n  x2: 'x2',\n  x: 'x',\n  xchannelselector: 'xChannelSelector',\n  xheight: 'xHeight',\n  'x-height': 'xHeight',\n  xlinkactuate: 'xlinkActuate',\n  'xlink:actuate': 'xlinkActuate',\n  xlinkarcrole: 'xlinkArcrole',\n  'xlink:arcrole': 'xlinkArcrole',\n  xlinkhref: 'xlinkHref',\n  'xlink:href': 'xlinkHref',\n  xlinkrole: 'xlinkRole',\n  'xlink:role': 'xlinkRole',\n  xlinkshow: 'xlinkShow',\n  'xlink:show': 'xlinkShow',\n  xlinktitle: 'xlinkTitle',\n  'xlink:title': 'xlinkTitle',\n  xlinktype: 'xlinkType',\n  'xlink:type': 'xlinkType',\n  xmlbase: 'xmlBase',\n  'xml:base': 'xmlBase',\n  xmllang: 'xmlLang',\n  'xml:lang': 'xmlLang',\n  xmlns: 'xmlns',\n  'xml:space': 'xmlSpace',\n  xmlnsxlink: 'xmlnsXlink',\n  'xmlns:xlink': 'xmlnsXlink',\n  xmlspace: 'xmlSpace',\n  y1: 'y1',\n  y2: 'y2',\n  y: 'y',\n  ychannelselector: 'yChannelSelector',\n  z: 'z',\n  zoomandpan: 'zoomAndPan'\n};\n\nvar ariaProperties = {\n  'aria-current': 0,\n  // state\n  'aria-details': 0,\n  'aria-disabled': 0,\n  // state\n  'aria-hidden': 0,\n  // state\n  'aria-invalid': 0,\n  // state\n  'aria-keyshortcuts': 0,\n  'aria-label': 0,\n  'aria-roledescription': 0,\n  // Widget Attributes\n  'aria-autocomplete': 0,\n  'aria-checked': 0,\n  'aria-expanded': 0,\n  'aria-haspopup': 0,\n  'aria-level': 0,\n  'aria-modal': 0,\n  'aria-multiline': 0,\n  'aria-multiselectable': 0,\n  'aria-orientation': 0,\n  'aria-placeholder': 0,\n  'aria-pressed': 0,\n  'aria-readonly': 0,\n  'aria-required': 0,\n  'aria-selected': 0,\n  'aria-sort': 0,\n  'aria-valuemax': 0,\n  'aria-valuemin': 0,\n  'aria-valuenow': 0,\n  'aria-valuetext': 0,\n  // Live Region Attributes\n  'aria-atomic': 0,\n  'aria-busy': 0,\n  'aria-live': 0,\n  'aria-relevant': 0,\n  // Drag-and-Drop Attributes\n  'aria-dropeffect': 0,\n  'aria-grabbed': 0,\n  // Relationship Attributes\n  'aria-activedescendant': 0,\n  'aria-colcount': 0,\n  'aria-colindex': 0,\n  'aria-colspan': 0,\n  'aria-controls': 0,\n  'aria-describedby': 0,\n  'aria-errormessage': 0,\n  'aria-flowto': 0,\n  'aria-labelledby': 0,\n  'aria-owns': 0,\n  'aria-posinset': 0,\n  'aria-rowcount': 0,\n  'aria-rowindex': 0,\n  'aria-rowspan': 0,\n  'aria-setsize': 0\n};\n\nvar warnedProperties = {};\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\nfunction validateProperty(tagName, name) {\n  {\n    if (hasOwnProperty$1.call(warnedProperties, name) && warnedProperties[name]) {\n      return true;\n    }\n\n    if (rARIACamel.test(name)) {\n      var ariaName = 'aria-' + name.slice(4).toLowerCase();\n      var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (correctName == null) {\n        error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n\n        warnedProperties[name] = true;\n        return true;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== correctName) {\n        error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n\n    if (rARIA.test(name)) {\n      var lowerCasedName = name.toLowerCase();\n      var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (standardName == null) {\n        warnedProperties[name] = true;\n        return false;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== standardName) {\n        error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n  }\n\n  return true;\n}\n\nfunction warnInvalidARIAProps(type, props) {\n  {\n    var invalidProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty(type, key);\n\n      if (!isValid) {\n        invalidProps.push(key);\n      }\n    }\n\n    var unknownPropString = invalidProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (invalidProps.length === 1) {\n      error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n    } else if (invalidProps.length > 1) {\n      error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n    }\n  }\n}\n\nfunction validateProperties(type, props) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnInvalidARIAProps(type, props);\n}\n\nvar didWarnValueNull = false;\nfunction validateProperties$1(type, props) {\n  {\n    if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n      return;\n    }\n\n    if (props != null && props.value === null && !didWarnValueNull) {\n      didWarnValueNull = true;\n\n      if (type === 'select' && props.multiple) {\n        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n      } else {\n        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n      }\n    }\n  }\n}\n\nvar validateProperty$1 = function () {};\n\n{\n  var warnedProperties$1 = {};\n  var _hasOwnProperty = Object.prototype.hasOwnProperty;\n  var EVENT_NAME_REGEX = /^on./;\n  var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n  var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n  var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n  validateProperty$1 = function (tagName, name, value, canUseEventSystem) {\n    if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n      return true;\n    }\n\n    var lowerCasedName = name.toLowerCase();\n\n    if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n      error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // We can't rely on the event system being injected on the server.\n\n\n    if (canUseEventSystem) {\n      if (registrationNameModules.hasOwnProperty(name)) {\n        return true;\n      }\n\n      var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n      if (registrationName != null) {\n        error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n\n      if (EVENT_NAME_REGEX.test(name)) {\n        error('Unknown event handler property `%s`. It will be ignored.', name);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (EVENT_NAME_REGEX.test(name)) {\n      // If no event plugins have been injected, we are in a server environment.\n      // So we can't tell if the event name is correct for sure, but we can filter\n      // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n      if (INVALID_EVENT_NAME_REGEX.test(name)) {\n        error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Let the ARIA attribute hook validate ARIA attributes\n\n\n    if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n      return true;\n    }\n\n    if (lowerCasedName === 'innerhtml') {\n      error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'aria') {\n      error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n      error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'number' && isNaN(value)) {\n      error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    var propertyInfo = getPropertyInfo(name);\n    var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.\n\n    if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n      var standardName = possibleStandardNames[lowerCasedName];\n\n      if (standardName !== name) {\n        error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (!isReserved && name !== lowerCasedName) {\n      // Unknown attributes should have lowercase casing since that's how they\n      // will be cased anyway with server rendering.\n      error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      if (value) {\n        error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n      } else {\n        error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Now that we've validated casing, do not validate\n    // data types for reserved props\n\n\n    if (isReserved) {\n      return true;\n    } // Warn when a known attribute is a bad type\n\n\n    if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      warnedProperties$1[name] = true;\n      return false;\n    } // Warn when passing the strings 'false' or 'true' into a boolean prop\n\n\n    if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n      error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    return true;\n  };\n}\n\nvar warnUnknownProperties = function (type, props, canUseEventSystem) {\n  {\n    var unknownProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty$1(type, key, props[key], canUseEventSystem);\n\n      if (!isValid) {\n        unknownProps.push(key);\n      }\n    }\n\n    var unknownPropString = unknownProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (unknownProps.length === 1) {\n      error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n    } else if (unknownProps.length > 1) {\n      error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n    }\n  }\n};\n\nfunction validateProperties$2(type, props, canUseEventSystem) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnUnknownProperties(type, props, canUseEventSystem);\n}\n\nvar didWarnInvalidHydration = false;\nvar DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';\nvar SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';\nvar SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';\nvar AUTOFOCUS = 'autoFocus';\nvar CHILDREN = 'children';\nvar STYLE = 'style';\nvar HTML$1 = '__html';\nvar HTML_NAMESPACE$1 = Namespaces.html;\nvar warnedUnknownTags;\nvar suppressHydrationWarning;\nvar validatePropertiesInDevelopment;\nvar warnForTextDifference;\nvar warnForPropDifference;\nvar warnForExtraAttributes;\nvar warnForInvalidEventListener;\nvar canDiffStyleForHydrationWarning;\nvar normalizeMarkupForTextOrAttribute;\nvar normalizeHTML;\n\n{\n  warnedUnknownTags = {\n    // Chrome is the only major browser not shipping <time>. But as of July\n    // 2017 it intends to ship it due to widespread usage. We intentionally\n    // *don't* warn for <time> even if it's unrecognized by Chrome because\n    // it soon will be, and many apps have been using it anyway.\n    time: true,\n    // There are working polyfills for <dialog>. Let people use it.\n    dialog: true,\n    // Electron ships a custom <webview> tag to display external web content in\n    // an isolated frame and process.\n    // This tag is not present in non Electron environments such as JSDom which\n    // is often used for testing purposes.\n    // @see https://electronjs.org/docs/api/webview-tag\n    webview: true\n  };\n\n  validatePropertiesInDevelopment = function (type, props) {\n    validateProperties(type, props);\n    validateProperties$1(type, props);\n    validateProperties$2(type, props,\n    /* canUseEventSystem */\n    true);\n  }; // IE 11 parses & normalizes the style attribute as opposed to other\n  // browsers. It adds spaces and sorts the properties in some\n  // non-alphabetical order. Handling that would require sorting CSS\n  // properties in the client & server versions or applying\n  // `expectedStyle` to a temporary DOM node to read its `style` attribute\n  // normalized. Since it only affects IE, we're skipping style warnings\n  // in that browser completely in favor of doing all that work.\n  // See https://github.com/facebook/react/issues/11807\n\n\n  canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode; // HTML parsing normalizes CR and CRLF to LF.\n  // It also can turn \\u0000 into \\uFFFD inside attributes.\n  // https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream\n  // If we have a mismatch, it might be caused by that.\n  // We will still patch up in this case but not fire the warning.\n\n  var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g;\n  var NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\n\n  normalizeMarkupForTextOrAttribute = function (markup) {\n    var markupString = typeof markup === 'string' ? markup : '' + markup;\n    return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');\n  };\n\n  warnForTextDifference = function (serverText, clientText) {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);\n    var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);\n\n    if (normalizedServerText === normalizedClientText) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Text content did not match. Server: \"%s\" Client: \"%s\"', normalizedServerText, normalizedClientText);\n  };\n\n  warnForPropDifference = function (propName, serverValue, clientValue) {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);\n    var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);\n\n    if (normalizedServerValue === normalizedClientValue) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));\n  };\n\n  warnForExtraAttributes = function (attributeNames) {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n    var names = [];\n    attributeNames.forEach(function (name) {\n      names.push(name);\n    });\n\n    error('Extra attributes from the server: %s', names);\n  };\n\n  warnForInvalidEventListener = function (registrationName, listener) {\n    if (listener === false) {\n      error('Expected `%s` listener to be a function, instead got `false`.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);\n    } else {\n      error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);\n    }\n  }; // Parse the HTML and read it back to normalize the HTML string so that it\n  // can be used for comparison.\n\n\n  normalizeHTML = function (parent, html) {\n    // We could have created a separate document here to avoid\n    // re-initializing custom elements if they exist. But this breaks\n    // how <noscript> is being handled. So we use the same document.\n    // See the discussion in https://github.com/facebook/react/pull/11157.\n    var testElement = parent.namespaceURI === HTML_NAMESPACE$1 ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);\n    testElement.innerHTML = html;\n    return testElement.innerHTML;\n  };\n}\n\nfunction ensureListeningTo(rootContainerElement, registrationName) {\n  var isDocumentOrFragment = rootContainerElement.nodeType === DOCUMENT_NODE || rootContainerElement.nodeType === DOCUMENT_FRAGMENT_NODE;\n  var doc = isDocumentOrFragment ? rootContainerElement : rootContainerElement.ownerDocument;\n  legacyListenToEvent(registrationName, doc);\n}\n\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n}\n\nfunction noop() {}\n\nfunction trapClickOnNonInteractiveElement(node) {\n  // Mobile Safari does not fire properly bubble click events on\n  // non-interactive elements, which means delegated click listeners do not\n  // fire. The workaround for this bug involves attaching an empty click\n  // listener on the target node.\n  // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n  // Just set it using the onclick property so that we don't have to manage any\n  // bookkeeping for it. Not sure if we need to clear it when the listener is\n  // removed.\n  // TODO: Only do this for the relevant Safaris maybe?\n  node.onclick = noop;\n}\n\nfunction setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {\n  for (var propKey in nextProps) {\n    if (!nextProps.hasOwnProperty(propKey)) {\n      continue;\n    }\n\n    var nextProp = nextProps[propKey];\n\n    if (propKey === STYLE) {\n      {\n        if (nextProp) {\n          // Freeze the next style object so that we can assume it won't be\n          // mutated. We have already warned for this in the past.\n          Object.freeze(nextProp);\n        }\n      } // Relies on `updateStylesByID` not mutating `styleUpdates`.\n\n\n      setValueForStyles(domElement, nextProp);\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n      var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n\n      if (nextHtml != null) {\n        setInnerHTML(domElement, nextHtml);\n      }\n    } else if (propKey === CHILDREN) {\n      if (typeof nextProp === 'string') {\n        // Avoid setting initial textContent when the text is empty. In IE11 setting\n        // textContent on a <textarea> will cause the placeholder to not\n        // show within the <textarea> until it has been focused and blurred again.\n        // https://github.com/facebook/react/issues/6731#issuecomment-254874553\n        var canSetTextContent = tag !== 'textarea' || nextProp !== '';\n\n        if (canSetTextContent) {\n          setTextContent(domElement, nextProp);\n        }\n      } else if (typeof nextProp === 'number') {\n        setTextContent(domElement, '' + nextProp);\n      }\n    } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n      if (nextProp != null) {\n        if ( typeof nextProp !== 'function') {\n          warnForInvalidEventListener(propKey, nextProp);\n        }\n\n        ensureListeningTo(rootContainerElement, propKey);\n      }\n    } else if (nextProp != null) {\n      setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);\n    }\n  }\n}\n\nfunction updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {\n  // TODO: Handle wasCustomComponentTag\n  for (var i = 0; i < updatePayload.length; i += 2) {\n    var propKey = updatePayload[i];\n    var propValue = updatePayload[i + 1];\n\n    if (propKey === STYLE) {\n      setValueForStyles(domElement, propValue);\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n      setInnerHTML(domElement, propValue);\n    } else if (propKey === CHILDREN) {\n      setTextContent(domElement, propValue);\n    } else {\n      setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);\n    }\n  }\n}\n\nfunction createElement(type, props, rootContainerElement, parentNamespace) {\n  var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML\n  // tags get no namespace.\n\n  var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);\n  var domElement;\n  var namespaceURI = parentNamespace;\n\n  if (namespaceURI === HTML_NAMESPACE$1) {\n    namespaceURI = getIntrinsicNamespace(type);\n  }\n\n  if (namespaceURI === HTML_NAMESPACE$1) {\n    {\n      isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to\n      // allow <SVG> or <mATH>.\n\n      if (!isCustomComponentTag && type !== type.toLowerCase()) {\n        error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);\n      }\n    }\n\n    if (type === 'script') {\n      // Create the script via .innerHTML so its \"parser-inserted\" flag is\n      // set to true and it does not execute\n      var div = ownerDocument.createElement('div');\n\n      div.innerHTML = '<script><' + '/script>'; // eslint-disable-line\n      // This is guaranteed to yield a script element.\n\n      var firstChild = div.firstChild;\n      domElement = div.removeChild(firstChild);\n    } else if (typeof props.is === 'string') {\n      // $FlowIssue `createElement` should be updated for Web Components\n      domElement = ownerDocument.createElement(type, {\n        is: props.is\n      });\n    } else {\n      // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.\n      // See discussion in https://github.com/facebook/react/pull/6896\n      // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n      domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`\n      // attributes on `select`s needs to be added before `option`s are inserted.\n      // This prevents:\n      // - a bug where the `select` does not scroll to the correct option because singular\n      //  `select` elements automatically pick the first item #13222\n      // - a bug where the `select` set the first item as selected despite the `size` attribute #14239\n      // See https://github.com/facebook/react/issues/13222\n      // and https://github.com/facebook/react/issues/14239\n\n      if (type === 'select') {\n        var node = domElement;\n\n        if (props.multiple) {\n          node.multiple = true;\n        } else if (props.size) {\n          // Setting a size greater than 1 causes a select to behave like `multiple=true`, where\n          // it is possible that no option is selected.\n          //\n          // This is only necessary when a select in \"single selection mode\".\n          node.size = props.size;\n        }\n      }\n    }\n  } else {\n    domElement = ownerDocument.createElementNS(namespaceURI, type);\n  }\n\n  {\n    if (namespaceURI === HTML_NAMESPACE$1) {\n      if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !Object.prototype.hasOwnProperty.call(warnedUnknownTags, type)) {\n        warnedUnknownTags[type] = true;\n\n        error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);\n      }\n    }\n  }\n\n  return domElement;\n}\nfunction createTextNode(text, rootContainerElement) {\n  return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);\n}\nfunction setInitialProperties(domElement, tag, rawProps, rootContainerElement) {\n  var isCustomComponentTag = isCustomComponent(tag, rawProps);\n\n  {\n    validatePropertiesInDevelopment(tag, rawProps);\n  } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n  var props;\n\n  switch (tag) {\n    case 'iframe':\n    case 'object':\n    case 'embed':\n      trapBubbledEvent(TOP_LOAD, domElement);\n      props = rawProps;\n      break;\n\n    case 'video':\n    case 'audio':\n      // Create listener for each media event\n      for (var i = 0; i < mediaEventTypes.length; i++) {\n        trapBubbledEvent(mediaEventTypes[i], domElement);\n      }\n\n      props = rawProps;\n      break;\n\n    case 'source':\n      trapBubbledEvent(TOP_ERROR, domElement);\n      props = rawProps;\n      break;\n\n    case 'img':\n    case 'image':\n    case 'link':\n      trapBubbledEvent(TOP_ERROR, domElement);\n      trapBubbledEvent(TOP_LOAD, domElement);\n      props = rawProps;\n      break;\n\n    case 'form':\n      trapBubbledEvent(TOP_RESET, domElement);\n      trapBubbledEvent(TOP_SUBMIT, domElement);\n      props = rawProps;\n      break;\n\n    case 'details':\n      trapBubbledEvent(TOP_TOGGLE, domElement);\n      props = rawProps;\n      break;\n\n    case 'input':\n      initWrapperState(domElement, rawProps);\n      props = getHostProps(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    case 'option':\n      validateProps(domElement, rawProps);\n      props = getHostProps$1(domElement, rawProps);\n      break;\n\n    case 'select':\n      initWrapperState$1(domElement, rawProps);\n      props = getHostProps$2(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    case 'textarea':\n      initWrapperState$2(domElement, rawProps);\n      props = getHostProps$3(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    default:\n      props = rawProps;\n  }\n\n  assertValidProps(tag, props);\n  setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);\n\n  switch (tag) {\n    case 'input':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper(domElement, rawProps, false);\n      break;\n\n    case 'textarea':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper$3(domElement);\n      break;\n\n    case 'option':\n      postMountWrapper$1(domElement, rawProps);\n      break;\n\n    case 'select':\n      postMountWrapper$2(domElement, rawProps);\n      break;\n\n    default:\n      if (typeof props.onClick === 'function') {\n        // TODO: This cast may not be sound for SVG, MathML or custom elements.\n        trapClickOnNonInteractiveElement(domElement);\n      }\n\n      break;\n  }\n} // Calculate the diff between the two objects.\n\nfunction diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {\n  {\n    validatePropertiesInDevelopment(tag, nextRawProps);\n  }\n\n  var updatePayload = null;\n  var lastProps;\n  var nextProps;\n\n  switch (tag) {\n    case 'input':\n      lastProps = getHostProps(domElement, lastRawProps);\n      nextProps = getHostProps(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    case 'option':\n      lastProps = getHostProps$1(domElement, lastRawProps);\n      nextProps = getHostProps$1(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    case 'select':\n      lastProps = getHostProps$2(domElement, lastRawProps);\n      nextProps = getHostProps$2(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    case 'textarea':\n      lastProps = getHostProps$3(domElement, lastRawProps);\n      nextProps = getHostProps$3(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    default:\n      lastProps = lastRawProps;\n      nextProps = nextRawProps;\n\n      if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {\n        // TODO: This cast may not be sound for SVG, MathML or custom elements.\n        trapClickOnNonInteractiveElement(domElement);\n      }\n\n      break;\n  }\n\n  assertValidProps(tag, nextProps);\n  var propKey;\n  var styleName;\n  var styleUpdates = null;\n\n  for (propKey in lastProps) {\n    if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n      continue;\n    }\n\n    if (propKey === STYLE) {\n      var lastStyle = lastProps[propKey];\n\n      for (styleName in lastStyle) {\n        if (lastStyle.hasOwnProperty(styleName)) {\n          if (!styleUpdates) {\n            styleUpdates = {};\n          }\n\n          styleUpdates[styleName] = '';\n        }\n      }\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n      // This is a special case. If any listener updates we need to ensure\n      // that the \"current\" fiber pointer gets updated so we need a commit\n      // to update this element.\n      if (!updatePayload) {\n        updatePayload = [];\n      }\n    } else {\n      // For all other deleted properties we add it to the queue. We use\n      // the whitelist in the commit phase instead.\n      (updatePayload = updatePayload || []).push(propKey, null);\n    }\n  }\n\n  for (propKey in nextProps) {\n    var nextProp = nextProps[propKey];\n    var lastProp = lastProps != null ? lastProps[propKey] : undefined;\n\n    if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n      continue;\n    }\n\n    if (propKey === STYLE) {\n      {\n        if (nextProp) {\n          // Freeze the next style object so that we can assume it won't be\n          // mutated. We have already warned for this in the past.\n          Object.freeze(nextProp);\n        }\n      }\n\n      if (lastProp) {\n        // Unset styles on `lastProp` but not on `nextProp`.\n        for (styleName in lastProp) {\n          if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n            if (!styleUpdates) {\n              styleUpdates = {};\n            }\n\n            styleUpdates[styleName] = '';\n          }\n        } // Update styles that changed since `lastProp`.\n\n\n        for (styleName in nextProp) {\n          if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n            if (!styleUpdates) {\n              styleUpdates = {};\n            }\n\n            styleUpdates[styleName] = nextProp[styleName];\n          }\n        }\n      } else {\n        // Relies on `updateStylesByID` not mutating `styleUpdates`.\n        if (!styleUpdates) {\n          if (!updatePayload) {\n            updatePayload = [];\n          }\n\n          updatePayload.push(propKey, styleUpdates);\n        }\n\n        styleUpdates = nextProp;\n      }\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n      var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n      var lastHtml = lastProp ? lastProp[HTML$1] : undefined;\n\n      if (nextHtml != null) {\n        if (lastHtml !== nextHtml) {\n          (updatePayload = updatePayload || []).push(propKey, nextHtml);\n        }\n      }\n    } else if (propKey === CHILDREN) {\n      if (lastProp !== nextProp && (typeof nextProp === 'string' || typeof nextProp === 'number')) {\n        (updatePayload = updatePayload || []).push(propKey, '' + nextProp);\n      }\n    } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n      if (nextProp != null) {\n        // We eagerly listen to this even though we haven't committed yet.\n        if ( typeof nextProp !== 'function') {\n          warnForInvalidEventListener(propKey, nextProp);\n        }\n\n        ensureListeningTo(rootContainerElement, propKey);\n      }\n\n      if (!updatePayload && lastProp !== nextProp) {\n        // This is a special case. If any listener updates we need to ensure\n        // that the \"current\" props pointer gets updated so we need a commit\n        // to update this element.\n        updatePayload = [];\n      }\n    } else {\n      // For any other property we always add it to the queue and then we\n      // filter it out using the whitelist during the commit.\n      (updatePayload = updatePayload || []).push(propKey, nextProp);\n    }\n  }\n\n  if (styleUpdates) {\n    {\n      validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);\n    }\n\n    (updatePayload = updatePayload || []).push(STYLE, styleUpdates);\n  }\n\n  return updatePayload;\n} // Apply the diff.\n\nfunction updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {\n  // Update checked *before* name.\n  // In the middle of an update, it is possible to have multiple checked.\n  // When a checked radio tries to change name, browser makes another radio's checked false.\n  if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {\n    updateChecked(domElement, nextRawProps);\n  }\n\n  var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);\n  var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.\n\n  updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props\n  // changed.\n\n  switch (tag) {\n    case 'input':\n      // Update the wrapper around inputs *after* updating props. This has to\n      // happen after `updateDOMProperties`. Otherwise HTML5 input validations\n      // raise warnings and prevent the new value from being assigned.\n      updateWrapper(domElement, nextRawProps);\n      break;\n\n    case 'textarea':\n      updateWrapper$1(domElement, nextRawProps);\n      break;\n\n    case 'select':\n      // <select> value update needs to occur after <option> children\n      // reconciliation\n      postUpdateWrapper(domElement, nextRawProps);\n      break;\n  }\n}\n\nfunction getPossibleStandardName(propName) {\n  {\n    var lowerCasedName = propName.toLowerCase();\n\n    if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n      return null;\n    }\n\n    return possibleStandardNames[lowerCasedName] || null;\n  }\n}\n\nfunction diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement) {\n  var isCustomComponentTag;\n  var extraAttributeNames;\n\n  {\n    suppressHydrationWarning = rawProps[SUPPRESS_HYDRATION_WARNING] === true;\n    isCustomComponentTag = isCustomComponent(tag, rawProps);\n    validatePropertiesInDevelopment(tag, rawProps);\n  } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n  switch (tag) {\n    case 'iframe':\n    case 'object':\n    case 'embed':\n      trapBubbledEvent(TOP_LOAD, domElement);\n      break;\n\n    case 'video':\n    case 'audio':\n      // Create listener for each media event\n      for (var i = 0; i < mediaEventTypes.length; i++) {\n        trapBubbledEvent(mediaEventTypes[i], domElement);\n      }\n\n      break;\n\n    case 'source':\n      trapBubbledEvent(TOP_ERROR, domElement);\n      break;\n\n    case 'img':\n    case 'image':\n    case 'link':\n      trapBubbledEvent(TOP_ERROR, domElement);\n      trapBubbledEvent(TOP_LOAD, domElement);\n      break;\n\n    case 'form':\n      trapBubbledEvent(TOP_RESET, domElement);\n      trapBubbledEvent(TOP_SUBMIT, domElement);\n      break;\n\n    case 'details':\n      trapBubbledEvent(TOP_TOGGLE, domElement);\n      break;\n\n    case 'input':\n      initWrapperState(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    case 'option':\n      validateProps(domElement, rawProps);\n      break;\n\n    case 'select':\n      initWrapperState$1(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    case 'textarea':\n      initWrapperState$2(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n  }\n\n  assertValidProps(tag, rawProps);\n\n  {\n    extraAttributeNames = new Set();\n    var attributes = domElement.attributes;\n\n    for (var _i = 0; _i < attributes.length; _i++) {\n      var name = attributes[_i].name.toLowerCase();\n\n      switch (name) {\n        // Built-in SSR attribute is whitelisted\n        case 'data-reactroot':\n          break;\n        // Controlled attributes are not validated\n        // TODO: Only ignore them on controlled tags.\n\n        case 'value':\n          break;\n\n        case 'checked':\n          break;\n\n        case 'selected':\n          break;\n\n        default:\n          // Intentionally use the original name.\n          // See discussion in https://github.com/facebook/react/pull/10676.\n          extraAttributeNames.add(attributes[_i].name);\n      }\n    }\n  }\n\n  var updatePayload = null;\n\n  for (var propKey in rawProps) {\n    if (!rawProps.hasOwnProperty(propKey)) {\n      continue;\n    }\n\n    var nextProp = rawProps[propKey];\n\n    if (propKey === CHILDREN) {\n      // For text content children we compare against textContent. This\n      // might match additional HTML that is hidden when we read it using\n      // textContent. E.g. \"foo\" will match \"f<span>oo</span>\" but that still\n      // satisfies our requirement. Our requirement is not to produce perfect\n      // HTML and attributes. Ideally we should preserve structure but it's\n      // ok not to if the visible content is still enough to indicate what\n      // even listeners these nodes might be wired up to.\n      // TODO: Warn if there is more than a single textNode as a child.\n      // TODO: Should we use domElement.firstChild.nodeValue to compare?\n      if (typeof nextProp === 'string') {\n        if (domElement.textContent !== nextProp) {\n          if ( !suppressHydrationWarning) {\n            warnForTextDifference(domElement.textContent, nextProp);\n          }\n\n          updatePayload = [CHILDREN, nextProp];\n        }\n      } else if (typeof nextProp === 'number') {\n        if (domElement.textContent !== '' + nextProp) {\n          if ( !suppressHydrationWarning) {\n            warnForTextDifference(domElement.textContent, nextProp);\n          }\n\n          updatePayload = [CHILDREN, '' + nextProp];\n        }\n      }\n    } else if (registrationNameModules.hasOwnProperty(propKey)) {\n      if (nextProp != null) {\n        if ( typeof nextProp !== 'function') {\n          warnForInvalidEventListener(propKey, nextProp);\n        }\n\n        ensureListeningTo(rootContainerElement, propKey);\n      }\n    } else if ( // Convince Flow we've calculated it (it's DEV-only in this method.)\n    typeof isCustomComponentTag === 'boolean') {\n      // Validate that the properties correspond to their expected values.\n      var serverValue = void 0;\n      var propertyInfo = getPropertyInfo(propKey);\n\n      if (suppressHydrationWarning) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated\n      // TODO: Only ignore them on controlled tags.\n      propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n        var serverHTML = domElement.innerHTML;\n        var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n        var expectedHTML = normalizeHTML(domElement, nextHtml != null ? nextHtml : '');\n\n        if (expectedHTML !== serverHTML) {\n          warnForPropDifference(propKey, serverHTML, expectedHTML);\n        }\n      } else if (propKey === STYLE) {\n        // $FlowFixMe - Should be inferred as not undefined.\n        extraAttributeNames.delete(propKey);\n\n        if (canDiffStyleForHydrationWarning) {\n          var expectedStyle = createDangerousStringForStyles(nextProp);\n          serverValue = domElement.getAttribute('style');\n\n          if (expectedStyle !== serverValue) {\n            warnForPropDifference(propKey, serverValue, expectedStyle);\n          }\n        }\n      } else if (isCustomComponentTag) {\n        // $FlowFixMe - Should be inferred as not undefined.\n        extraAttributeNames.delete(propKey.toLowerCase());\n        serverValue = getValueForAttribute(domElement, propKey, nextProp);\n\n        if (nextProp !== serverValue) {\n          warnForPropDifference(propKey, serverValue, nextProp);\n        }\n      } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {\n        var isMismatchDueToBadCasing = false;\n\n        if (propertyInfo !== null) {\n          // $FlowFixMe - Should be inferred as not undefined.\n          extraAttributeNames.delete(propertyInfo.attributeName);\n          serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);\n        } else {\n          var ownNamespace = parentNamespace;\n\n          if (ownNamespace === HTML_NAMESPACE$1) {\n            ownNamespace = getIntrinsicNamespace(tag);\n          }\n\n          if (ownNamespace === HTML_NAMESPACE$1) {\n            // $FlowFixMe - Should be inferred as not undefined.\n            extraAttributeNames.delete(propKey.toLowerCase());\n          } else {\n            var standardName = getPossibleStandardName(propKey);\n\n            if (standardName !== null && standardName !== propKey) {\n              // If an SVG prop is supplied with bad casing, it will\n              // be successfully parsed from HTML, but will produce a mismatch\n              // (and would be incorrectly rendered on the client).\n              // However, we already warn about bad casing elsewhere.\n              // So we'll skip the misleading extra mismatch warning in this case.\n              isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined.\n\n              extraAttributeNames.delete(standardName);\n            } // $FlowFixMe - Should be inferred as not undefined.\n\n\n            extraAttributeNames.delete(propKey);\n          }\n\n          serverValue = getValueForAttribute(domElement, propKey, nextProp);\n        }\n\n        if (nextProp !== serverValue && !isMismatchDueToBadCasing) {\n          warnForPropDifference(propKey, serverValue, nextProp);\n        }\n      }\n    }\n  }\n\n  {\n    // $FlowFixMe - Should be inferred as not undefined.\n    if (extraAttributeNames.size > 0 && !suppressHydrationWarning) {\n      // $FlowFixMe - Should be inferred as not undefined.\n      warnForExtraAttributes(extraAttributeNames);\n    }\n  }\n\n  switch (tag) {\n    case 'input':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper(domElement, rawProps, true);\n      break;\n\n    case 'textarea':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper$3(domElement);\n      break;\n\n    case 'select':\n    case 'option':\n      // For input and textarea we current always set the value property at\n      // post mount to force it to diverge from attributes. However, for\n      // option and select we don't quite do the same thing and select\n      // is not resilient to the DOM state changing so we don't do that here.\n      // TODO: Consider not doing this for input and textarea.\n      break;\n\n    default:\n      if (typeof rawProps.onClick === 'function') {\n        // TODO: This cast may not be sound for SVG, MathML or custom elements.\n        trapClickOnNonInteractiveElement(domElement);\n      }\n\n      break;\n  }\n\n  return updatePayload;\n}\nfunction diffHydratedText(textNode, text) {\n  var isDifferent = textNode.nodeValue !== text;\n  return isDifferent;\n}\nfunction warnForUnmatchedText(textNode, text) {\n  {\n    warnForTextDifference(textNode.nodeValue, text);\n  }\n}\nfunction warnForDeletedHydratableElement(parentNode, child) {\n  {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());\n  }\n}\nfunction warnForDeletedHydratableText(parentNode, child) {\n  {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Did not expect server HTML to contain the text node \"%s\" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());\n  }\n}\nfunction warnForInsertedHydratedElement(parentNode, tag, props) {\n  {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());\n  }\n}\nfunction warnForInsertedHydratedText(parentNode, text) {\n  {\n    if (text === '') {\n      // We expect to insert empty text nodes since they're not represented in\n      // the HTML.\n      // TODO: Remove this special case if we can just avoid inserting empty\n      // text nodes.\n      return;\n    }\n\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Expected server HTML to contain a matching text node for \"%s\" in <%s>.', text, parentNode.nodeName.toLowerCase());\n  }\n}\nfunction restoreControlledState$3(domElement, tag, props) {\n  switch (tag) {\n    case 'input':\n      restoreControlledState(domElement, props);\n      return;\n\n    case 'textarea':\n      restoreControlledState$2(domElement, props);\n      return;\n\n    case 'select':\n      restoreControlledState$1(domElement, props);\n      return;\n  }\n}\n\nfunction getActiveElement(doc) {\n  doc = doc || (typeof document !== 'undefined' ? document : undefined);\n\n  if (typeof doc === 'undefined') {\n    return null;\n  }\n\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n  while (node && node.firstChild) {\n    node = node.firstChild;\n  }\n\n  return node;\n}\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\n\n\nfunction getSiblingNode(node) {\n  while (node) {\n    if (node.nextSibling) {\n      return node.nextSibling;\n    }\n\n    node = node.parentNode;\n  }\n}\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\n\n\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  var nodeStart = 0;\n  var nodeEnd = 0;\n\n  while (node) {\n    if (node.nodeType === TEXT_NODE) {\n      nodeEnd = nodeStart + node.textContent.length;\n\n      if (nodeStart <= offset && nodeEnd >= offset) {\n        return {\n          node: node,\n          offset: offset - nodeStart\n        };\n      }\n\n      nodeStart = nodeEnd;\n    }\n\n    node = getLeafNode(getSiblingNode(node));\n  }\n}\n\n/**\n * @param {DOMElement} outerNode\n * @return {?object}\n */\n\nfunction getOffsets(outerNode) {\n  var ownerDocument = outerNode.ownerDocument;\n  var win = ownerDocument && ownerDocument.defaultView || window;\n  var selection = win.getSelection && win.getSelection();\n\n  if (!selection || selection.rangeCount === 0) {\n    return null;\n  }\n\n  var anchorNode = selection.anchorNode,\n      anchorOffset = selection.anchorOffset,\n      focusNode = selection.focusNode,\n      focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be \"anonymous divs\", e.g. the\n  // up/down buttons on an <input type=\"number\">. Anonymous divs do not seem to\n  // expose properties, triggering a \"Permission denied error\" if any of its\n  // properties are accessed. The only seemingly possible way to avoid erroring\n  // is to access a property that typically works for non-anonymous divs and\n  // catch any error that may otherwise arise. See\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n\n  try {\n    /* eslint-disable no-unused-expressions */\n    anchorNode.nodeType;\n    focusNode.nodeType;\n    /* eslint-enable no-unused-expressions */\n  } catch (e) {\n    return null;\n  }\n\n  return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);\n}\n/**\n * Returns {start, end} where `start` is the character/codepoint index of\n * (anchorNode, anchorOffset) within the textContent of `outerNode`, and\n * `end` is the index of (focusNode, focusOffset).\n *\n * Returns null if you pass in garbage input but we should probably just crash.\n *\n * Exported only for testing.\n */\n\nfunction getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {\n  var length = 0;\n  var start = -1;\n  var end = -1;\n  var indexWithinAnchor = 0;\n  var indexWithinFocus = 0;\n  var node = outerNode;\n  var parentNode = null;\n\n  outer: while (true) {\n    var next = null;\n\n    while (true) {\n      if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {\n        start = length + anchorOffset;\n      }\n\n      if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {\n        end = length + focusOffset;\n      }\n\n      if (node.nodeType === TEXT_NODE) {\n        length += node.nodeValue.length;\n      }\n\n      if ((next = node.firstChild) === null) {\n        break;\n      } // Moving from `node` to its first child `next`.\n\n\n      parentNode = node;\n      node = next;\n    }\n\n    while (true) {\n      if (node === outerNode) {\n        // If `outerNode` has children, this is always the second time visiting\n        // it. If it has no children, this is still the first loop, and the only\n        // valid selection is anchorNode and focusNode both equal to this node\n        // and both offsets 0, in which case we will have handled above.\n        break outer;\n      }\n\n      if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {\n        start = length;\n      }\n\n      if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {\n        end = length;\n      }\n\n      if ((next = node.nextSibling) !== null) {\n        break;\n      }\n\n      node = parentNode;\n      parentNode = node.parentNode;\n    } // Moving from `node` to its next sibling `next`.\n\n\n    node = next;\n  }\n\n  if (start === -1 || end === -1) {\n    // This should never happen. (Would happen if the anchor/focus nodes aren't\n    // actually inside the passed-in node.)\n    return null;\n  }\n\n  return {\n    start: start,\n    end: end\n  };\n}\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n\nfunction setOffsets(node, offsets) {\n  var doc = node.ownerDocument || document;\n  var win = doc && doc.defaultView || window; // Edge fails with \"Object expected\" in some scenarios.\n  // (For instance: TinyMCE editor used in a list component that supports pasting to add more,\n  // fails when pasting 100+ items)\n\n  if (!win.getSelection) {\n    return;\n  }\n\n  var selection = win.getSelection();\n  var length = node.textContent.length;\n  var start = Math.min(offsets.start, length);\n  var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.\n  // Flip backward selections, so we can set with a single range.\n\n  if (!selection.extend && start > end) {\n    var temp = end;\n    end = start;\n    start = temp;\n  }\n\n  var startMarker = getNodeForCharacterOffset(node, start);\n  var endMarker = getNodeForCharacterOffset(node, end);\n\n  if (startMarker && endMarker) {\n    if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {\n      return;\n    }\n\n    var range = doc.createRange();\n    range.setStart(startMarker.node, startMarker.offset);\n    selection.removeAllRanges();\n\n    if (start > end) {\n      selection.addRange(range);\n      selection.extend(endMarker.node, endMarker.offset);\n    } else {\n      range.setEnd(endMarker.node, endMarker.offset);\n      selection.addRange(range);\n    }\n  }\n}\n\nfunction isTextNode(node) {\n  return node && node.nodeType === TEXT_NODE;\n}\n\nfunction containsNode(outerNode, innerNode) {\n  if (!outerNode || !innerNode) {\n    return false;\n  } else if (outerNode === innerNode) {\n    return true;\n  } else if (isTextNode(outerNode)) {\n    return false;\n  } else if (isTextNode(innerNode)) {\n    return containsNode(outerNode, innerNode.parentNode);\n  } else if ('contains' in outerNode) {\n    return outerNode.contains(innerNode);\n  } else if (outerNode.compareDocumentPosition) {\n    return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n  } else {\n    return false;\n  }\n}\n\nfunction isInDocument(node) {\n  return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);\n}\n\nfunction isSameOriginFrame(iframe) {\n  try {\n    // Accessing the contentDocument of a HTMLIframeElement can cause the browser\n    // to throw, e.g. if it has a cross-origin src attribute.\n    // Safari will show an error in the console when the access results in \"Blocked a frame with origin\". e.g:\n    // iframe.contentDocument.defaultView;\n    // A safety way is to access one of the cross origin properties: Window or Location\n    // Which might result in \"SecurityError\" DOM Exception and it is compatible to Safari.\n    // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl\n    return typeof iframe.contentWindow.location.href === 'string';\n  } catch (err) {\n    return false;\n  }\n}\n\nfunction getActiveElementDeep() {\n  var win = window;\n  var element = getActiveElement();\n\n  while (element instanceof win.HTMLIFrameElement) {\n    if (isSameOriginFrame(element)) {\n      win = element.contentWindow;\n    } else {\n      return element;\n    }\n\n    element = getActiveElement(win.document);\n  }\n\n  return element;\n}\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\n\n/**\n * @hasSelectionCapabilities: we get the element types that support selection\n * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`\n * and `selectionEnd` rows.\n */\n\n\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');\n}\nfunction getSelectionInformation() {\n  var focusedElem = getActiveElementDeep();\n  return {\n    // Used by Flare\n    activeElementDetached: null,\n    focusedElem: focusedElem,\n    selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null\n  };\n}\n/**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n\nfunction restoreSelection(priorSelectionInformation) {\n  var curFocusedElem = getActiveElementDeep();\n  var priorFocusedElem = priorSelectionInformation.focusedElem;\n  var priorSelectionRange = priorSelectionInformation.selectionRange;\n\n  if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n    if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {\n      setSelection(priorFocusedElem, priorSelectionRange);\n    } // Focusing a node can change the scroll position, which is undesirable\n\n\n    var ancestors = [];\n    var ancestor = priorFocusedElem;\n\n    while (ancestor = ancestor.parentNode) {\n      if (ancestor.nodeType === ELEMENT_NODE) {\n        ancestors.push({\n          element: ancestor,\n          left: ancestor.scrollLeft,\n          top: ancestor.scrollTop\n        });\n      }\n    }\n\n    if (typeof priorFocusedElem.focus === 'function') {\n      priorFocusedElem.focus();\n    }\n\n    for (var i = 0; i < ancestors.length; i++) {\n      var info = ancestors[i];\n      info.element.scrollLeft = info.left;\n      info.element.scrollTop = info.top;\n    }\n  }\n}\n/**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n\nfunction getSelection(input) {\n  var selection;\n\n  if ('selectionStart' in input) {\n    // Modern browser with input or textarea.\n    selection = {\n      start: input.selectionStart,\n      end: input.selectionEnd\n    };\n  } else {\n    // Content editable or old IE textarea.\n    selection = getOffsets(input);\n  }\n\n  return selection || {\n    start: 0,\n    end: 0\n  };\n}\n/**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input     Set selection bounds of this input or textarea\n * -@offsets   Object of same form that is returned from get*\n */\n\nfunction setSelection(input, offsets) {\n  var start = offsets.start,\n      end = offsets.end;\n\n  if (end === undefined) {\n    end = start;\n  }\n\n  if ('selectionStart' in input) {\n    input.selectionStart = start;\n    input.selectionEnd = Math.min(end, input.value.length);\n  } else {\n    setOffsets(input, offsets);\n  }\n}\n\nvar validateDOMNesting = function () {};\n\nvar updatedAncestorInfo = function () {};\n\n{\n  // This validation code was written based on the HTML5 parsing spec:\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  //\n  // Note: this does not catch all invalid nesting, nor does it try to (as it's\n  // not clear what practical benefit doing so provides); instead, we warn only\n  // for cases where the parser will give a parse tree differing from what React\n  // intended. For example, <b><div></div></b> is invalid but we don't warn\n  // because it still parses correctly; we do warn for other cases like nested\n  // <p> tags where the beginning of the second element implicitly closes the\n  // first, causing a confusing mess.\n  // https://html.spec.whatwg.org/multipage/syntax.html#special\n  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n\n  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n  // TODO: Distinguish by namespace here -- for <title>, including it here\n  // errs on the side of fewer warnings\n  'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n\n  var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n\n  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n  var emptyAncestorInfo = {\n    current: null,\n    formTag: null,\n    aTagInScope: null,\n    buttonTagInScope: null,\n    nobrTagInScope: null,\n    pTagInButtonScope: null,\n    listItemTagAutoclosing: null,\n    dlItemTagAutoclosing: null\n  };\n\n  updatedAncestorInfo = function (oldInfo, tag) {\n    var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n\n    var info = {\n      tag: tag\n    };\n\n    if (inScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.aTagInScope = null;\n      ancestorInfo.buttonTagInScope = null;\n      ancestorInfo.nobrTagInScope = null;\n    }\n\n    if (buttonScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.pTagInButtonScope = null;\n    } // See rules for 'li', 'dd', 'dt' start tags in\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n      ancestorInfo.listItemTagAutoclosing = null;\n      ancestorInfo.dlItemTagAutoclosing = null;\n    }\n\n    ancestorInfo.current = info;\n\n    if (tag === 'form') {\n      ancestorInfo.formTag = info;\n    }\n\n    if (tag === 'a') {\n      ancestorInfo.aTagInScope = info;\n    }\n\n    if (tag === 'button') {\n      ancestorInfo.buttonTagInScope = info;\n    }\n\n    if (tag === 'nobr') {\n      ancestorInfo.nobrTagInScope = info;\n    }\n\n    if (tag === 'p') {\n      ancestorInfo.pTagInButtonScope = info;\n    }\n\n    if (tag === 'li') {\n      ancestorInfo.listItemTagAutoclosing = info;\n    }\n\n    if (tag === 'dd' || tag === 'dt') {\n      ancestorInfo.dlItemTagAutoclosing = info;\n    }\n\n    return ancestorInfo;\n  };\n  /**\n   * Returns whether\n   */\n\n\n  var isTagValidWithParent = function (tag, parentTag) {\n    // First, let's check if we're in an unusual parsing mode...\n    switch (parentTag) {\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n      case 'select':\n        return tag === 'option' || tag === 'optgroup' || tag === '#text';\n\n      case 'optgroup':\n        return tag === 'option' || tag === '#text';\n      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n      // but\n\n      case 'option':\n        return tag === '#text';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n      // No special behavior since these rules fall back to \"in body\" mode for\n      // all except special table nodes which cause bad parsing behavior anyway.\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n\n      case 'tr':\n        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n\n      case 'tbody':\n      case 'thead':\n      case 'tfoot':\n        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n\n      case 'colgroup':\n        return tag === 'col' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n\n      case 'table':\n        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n\n      case 'head':\n        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n\n      case 'html':\n        return tag === 'head' || tag === 'body' || tag === 'frameset';\n\n      case 'frameset':\n        return tag === 'frame';\n\n      case '#document':\n        return tag === 'html';\n    } // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n    // where the parsing rules cause implicit opens or closes to be added.\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n    switch (tag) {\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n      case 'rp':\n      case 'rt':\n        return impliedEndTags.indexOf(parentTag) === -1;\n\n      case 'body':\n      case 'caption':\n      case 'col':\n      case 'colgroup':\n      case 'frameset':\n      case 'frame':\n      case 'head':\n      case 'html':\n      case 'tbody':\n      case 'td':\n      case 'tfoot':\n      case 'th':\n      case 'thead':\n      case 'tr':\n        // These tags are only valid with a few parents that have special child\n        // parsing rules -- if we're down here, then none of those matched and\n        // so we allow it only if we don't know what the parent is, as all other\n        // cases are invalid.\n        return parentTag == null;\n    }\n\n    return true;\n  };\n  /**\n   * Returns whether\n   */\n\n\n  var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n    switch (tag) {\n      case 'address':\n      case 'article':\n      case 'aside':\n      case 'blockquote':\n      case 'center':\n      case 'details':\n      case 'dialog':\n      case 'dir':\n      case 'div':\n      case 'dl':\n      case 'fieldset':\n      case 'figcaption':\n      case 'figure':\n      case 'footer':\n      case 'header':\n      case 'hgroup':\n      case 'main':\n      case 'menu':\n      case 'nav':\n      case 'ol':\n      case 'p':\n      case 'section':\n      case 'summary':\n      case 'ul':\n      case 'pre':\n      case 'listing':\n      case 'table':\n      case 'hr':\n      case 'xmp':\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return ancestorInfo.pTagInButtonScope;\n\n      case 'form':\n        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n      case 'li':\n        return ancestorInfo.listItemTagAutoclosing;\n\n      case 'dd':\n      case 'dt':\n        return ancestorInfo.dlItemTagAutoclosing;\n\n      case 'button':\n        return ancestorInfo.buttonTagInScope;\n\n      case 'a':\n        // Spec says something about storing a list of markers, but it sounds\n        // equivalent to this check.\n        return ancestorInfo.aTagInScope;\n\n      case 'nobr':\n        return ancestorInfo.nobrTagInScope;\n    }\n\n    return null;\n  };\n\n  var didWarn$1 = {};\n\n  validateDOMNesting = function (childTag, childText, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.current;\n    var parentTag = parentInfo && parentInfo.tag;\n\n    if (childText != null) {\n      if (childTag != null) {\n        error('validateDOMNesting: when childText is passed, childTag should be null');\n      }\n\n      childTag = '#text';\n    }\n\n    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n    var invalidParentOrAncestor = invalidParent || invalidAncestor;\n\n    if (!invalidParentOrAncestor) {\n      return;\n    }\n\n    var ancestorTag = invalidParentOrAncestor.tag;\n    var addendum = getCurrentFiberStackInDev();\n    var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + addendum;\n\n    if (didWarn$1[warnKey]) {\n      return;\n    }\n\n    didWarn$1[warnKey] = true;\n    var tagDisplayName = childTag;\n    var whitespaceInfo = '';\n\n    if (childTag === '#text') {\n      if (/\\S/.test(childText)) {\n        tagDisplayName = 'Text nodes';\n      } else {\n        tagDisplayName = 'Whitespace text nodes';\n        whitespaceInfo = \" Make sure you don't have any extra whitespace between tags on \" + 'each line of your source code.';\n      }\n    } else {\n      tagDisplayName = '<' + childTag + '>';\n    }\n\n    if (invalidParent) {\n      var info = '';\n\n      if (ancestorTag === 'table' && childTag === 'tr') {\n        info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';\n      }\n\n      error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info);\n    } else {\n      error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);\n    }\n  };\n}\n\nvar SUPPRESS_HYDRATION_WARNING$1;\n\n{\n  SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';\n}\n\nvar SUSPENSE_START_DATA = '$';\nvar SUSPENSE_END_DATA = '/$';\nvar SUSPENSE_PENDING_START_DATA = '$?';\nvar SUSPENSE_FALLBACK_START_DATA = '$!';\nvar STYLE$1 = 'style';\nvar eventsEnabled = null;\nvar selectionInformation = null;\n\nfunction shouldAutoFocusHostComponent(type, props) {\n  switch (type) {\n    case 'button':\n    case 'input':\n    case 'select':\n    case 'textarea':\n      return !!props.autoFocus;\n  }\n\n  return false;\n}\nfunction getRootHostContext(rootContainerInstance) {\n  var type;\n  var namespace;\n  var nodeType = rootContainerInstance.nodeType;\n\n  switch (nodeType) {\n    case DOCUMENT_NODE:\n    case DOCUMENT_FRAGMENT_NODE:\n      {\n        type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';\n        var root = rootContainerInstance.documentElement;\n        namespace = root ? root.namespaceURI : getChildNamespace(null, '');\n        break;\n      }\n\n    default:\n      {\n        var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;\n        var ownNamespace = container.namespaceURI || null;\n        type = container.tagName;\n        namespace = getChildNamespace(ownNamespace, type);\n        break;\n      }\n  }\n\n  {\n    var validatedTag = type.toLowerCase();\n    var ancestorInfo = updatedAncestorInfo(null, validatedTag);\n    return {\n      namespace: namespace,\n      ancestorInfo: ancestorInfo\n    };\n  }\n}\nfunction getChildHostContext(parentHostContext, type, rootContainerInstance) {\n  {\n    var parentHostContextDev = parentHostContext;\n    var namespace = getChildNamespace(parentHostContextDev.namespace, type);\n    var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);\n    return {\n      namespace: namespace,\n      ancestorInfo: ancestorInfo\n    };\n  }\n}\nfunction getPublicInstance(instance) {\n  return instance;\n}\nfunction prepareForCommit(containerInfo) {\n  eventsEnabled = isEnabled();\n  selectionInformation = getSelectionInformation();\n  setEnabled(false);\n}\nfunction resetAfterCommit(containerInfo) {\n  restoreSelection(selectionInformation);\n  setEnabled(eventsEnabled);\n  eventsEnabled = null;\n\n  selectionInformation = null;\n}\nfunction createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n  var parentNamespace;\n\n  {\n    // TODO: take namespace into account when validating.\n    var hostContextDev = hostContext;\n    validateDOMNesting(type, null, hostContextDev.ancestorInfo);\n\n    if (typeof props.children === 'string' || typeof props.children === 'number') {\n      var string = '' + props.children;\n      var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n      validateDOMNesting(null, string, ownAncestorInfo);\n    }\n\n    parentNamespace = hostContextDev.namespace;\n  }\n\n  var domElement = createElement(type, props, rootContainerInstance, parentNamespace);\n  precacheFiberNode(internalInstanceHandle, domElement);\n  updateFiberProps(domElement, props);\n  return domElement;\n}\nfunction appendInitialChild(parentInstance, child) {\n  parentInstance.appendChild(child);\n}\nfunction finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {\n  setInitialProperties(domElement, type, props, rootContainerInstance);\n  return shouldAutoFocusHostComponent(type, props);\n}\nfunction prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {\n  {\n    var hostContextDev = hostContext;\n\n    if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {\n      var string = '' + newProps.children;\n      var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n      validateDOMNesting(null, string, ownAncestorInfo);\n    }\n  }\n\n  return diffProperties(domElement, type, oldProps, newProps, rootContainerInstance);\n}\nfunction shouldSetTextContent(type, props) {\n  return type === 'textarea' || type === 'option' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;\n}\nfunction shouldDeprioritizeSubtree(type, props) {\n  return !!props.hidden;\n}\nfunction createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {\n  {\n    var hostContextDev = hostContext;\n    validateDOMNesting(null, text, hostContextDev.ancestorInfo);\n  }\n\n  var textNode = createTextNode(text, rootContainerInstance);\n  precacheFiberNode(internalInstanceHandle, textNode);\n  return textNode;\n}\n// if a component just imports ReactDOM (e.g. for findDOMNode).\n// Some environments might not have setTimeout or clearTimeout.\n\nvar scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;\nvar cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;\nvar noTimeout = -1; // -------------------\nfunction commitMount(domElement, type, newProps, internalInstanceHandle) {\n  // Despite the naming that might imply otherwise, this method only\n  // fires if there is an `Update` effect scheduled during mounting.\n  // This happens if `finalizeInitialChildren` returns `true` (which it\n  // does to implement the `autoFocus` attribute on the client). But\n  // there are also other cases when this might happen (such as patching\n  // up text content during hydration mismatch). So we'll check this again.\n  if (shouldAutoFocusHostComponent(type, newProps)) {\n    domElement.focus();\n  }\n}\nfunction commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {\n  // Update the props handle so that we know which props are the ones with\n  // with current event handlers.\n  updateFiberProps(domElement, newProps); // Apply the diff to the DOM node.\n\n  updateProperties(domElement, updatePayload, type, oldProps, newProps);\n}\nfunction resetTextContent(domElement) {\n  setTextContent(domElement, '');\n}\nfunction commitTextUpdate(textInstance, oldText, newText) {\n  textInstance.nodeValue = newText;\n}\nfunction appendChild(parentInstance, child) {\n  parentInstance.appendChild(child);\n}\nfunction appendChildToContainer(container, child) {\n  var parentNode;\n\n  if (container.nodeType === COMMENT_NODE) {\n    parentNode = container.parentNode;\n    parentNode.insertBefore(child, container);\n  } else {\n    parentNode = container;\n    parentNode.appendChild(child);\n  } // This container might be used for a portal.\n  // If something inside a portal is clicked, that click should bubble\n  // through the React tree. However, on Mobile Safari the click would\n  // never bubble through the *DOM* tree unless an ancestor with onclick\n  // event exists. So we wouldn't see it and dispatch it.\n  // This is why we ensure that non React root containers have inline onclick\n  // defined.\n  // https://github.com/facebook/react/issues/11918\n\n\n  var reactRootContainer = container._reactRootContainer;\n\n  if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {\n    // TODO: This cast may not be sound for SVG, MathML or custom elements.\n    trapClickOnNonInteractiveElement(parentNode);\n  }\n}\nfunction insertBefore(parentInstance, child, beforeChild) {\n  parentInstance.insertBefore(child, beforeChild);\n}\nfunction insertInContainerBefore(container, child, beforeChild) {\n  if (container.nodeType === COMMENT_NODE) {\n    container.parentNode.insertBefore(child, beforeChild);\n  } else {\n    container.insertBefore(child, beforeChild);\n  }\n}\nfunction removeChild(parentInstance, child) {\n  parentInstance.removeChild(child);\n}\nfunction removeChildFromContainer(container, child) {\n  if (container.nodeType === COMMENT_NODE) {\n    container.parentNode.removeChild(child);\n  } else {\n    container.removeChild(child);\n  }\n}\n\nfunction hideInstance(instance) {\n  // pass host context to this method?\n\n\n  instance = instance;\n  var style = instance.style;\n\n  if (typeof style.setProperty === 'function') {\n    style.setProperty('display', 'none', 'important');\n  } else {\n    style.display = 'none';\n  }\n}\nfunction hideTextInstance(textInstance) {\n  textInstance.nodeValue = '';\n}\nfunction unhideInstance(instance, props) {\n  instance = instance;\n  var styleProp = props[STYLE$1];\n  var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;\n  instance.style.display = dangerousStyleValue('display', display);\n}\nfunction unhideTextInstance(textInstance, text) {\n  textInstance.nodeValue = text;\n} // -------------------\nfunction canHydrateInstance(instance, type, props) {\n  if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {\n    return null;\n  } // This has now been refined to an element node.\n\n\n  return instance;\n}\nfunction canHydrateTextInstance(instance, text) {\n  if (text === '' || instance.nodeType !== TEXT_NODE) {\n    // Empty strings are not parsed by HTML so there won't be a correct match here.\n    return null;\n  } // This has now been refined to a text node.\n\n\n  return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n  return instance.data === SUSPENSE_PENDING_START_DATA;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return instance.data === SUSPENSE_FALLBACK_START_DATA;\n}\n\nfunction getNextHydratable(node) {\n  // Skip non-hydratable nodes.\n  for (; node != null; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n\n    if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {\n      break;\n    }\n  }\n\n  return node;\n}\n\nfunction getNextHydratableSibling(instance) {\n  return getNextHydratable(instance.nextSibling);\n}\nfunction getFirstHydratableChild(parentInstance) {\n  return getNextHydratable(parentInstance.firstChild);\n}\nfunction hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n  precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events\n  // get attached.\n\n  updateFiberProps(instance, props);\n  var parentNamespace;\n\n  {\n    var hostContextDev = hostContext;\n    parentNamespace = hostContextDev.namespace;\n  }\n\n  return diffHydratedProperties(instance, type, props, parentNamespace, rootContainerInstance);\n}\nfunction hydrateTextInstance(textInstance, text, internalInstanceHandle) {\n  precacheFiberNode(internalInstanceHandle, textInstance);\n  return diffHydratedText(textInstance, text);\n}\nfunction getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n  var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.\n  // There might be nested nodes so we need to keep track of how\n  // deep we are and only break out when we're back on top.\n\n  var depth = 0;\n\n  while (node) {\n    if (node.nodeType === COMMENT_NODE) {\n      var data = node.data;\n\n      if (data === SUSPENSE_END_DATA) {\n        if (depth === 0) {\n          return getNextHydratableSibling(node);\n        } else {\n          depth--;\n        }\n      } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n        depth++;\n      }\n    }\n\n    node = node.nextSibling;\n  } // TODO: Warn, we didn't find the end comment boundary.\n\n\n  return null;\n} // Returns the SuspenseInstance if this node is a direct child of a\n// SuspenseInstance. I.e. if its previous sibling is a Comment with\n// SUSPENSE_x_START_DATA. Otherwise, null.\n\nfunction getParentSuspenseInstance(targetInstance) {\n  var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.\n  // There might be nested nodes so we need to keep track of how\n  // deep we are and only break out when we're back on top.\n\n  var depth = 0;\n\n  while (node) {\n    if (node.nodeType === COMMENT_NODE) {\n      var data = node.data;\n\n      if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n        if (depth === 0) {\n          return node;\n        } else {\n          depth--;\n        }\n      } else if (data === SUSPENSE_END_DATA) {\n        depth++;\n      }\n    }\n\n    node = node.previousSibling;\n  }\n\n  return null;\n}\nfunction commitHydratedContainer(container) {\n  // Retry if any event replaying was blocked on this.\n  retryIfBlockedOn(container);\n}\nfunction commitHydratedSuspenseInstance(suspenseInstance) {\n  // Retry if any event replaying was blocked on this.\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text) {\n  {\n    warnForUnmatchedText(textInstance, text);\n  }\n}\nfunction didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n    warnForUnmatchedText(textInstance, text);\n  }\n}\nfunction didNotHydrateContainerInstance(parentContainer, instance) {\n  {\n    if (instance.nodeType === ELEMENT_NODE) {\n      warnForDeletedHydratableElement(parentContainer, instance);\n    } else if (instance.nodeType === COMMENT_NODE) ; else {\n      warnForDeletedHydratableText(parentContainer, instance);\n    }\n  }\n}\nfunction didNotHydrateInstance(parentType, parentProps, parentInstance, instance) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n    if (instance.nodeType === ELEMENT_NODE) {\n      warnForDeletedHydratableElement(parentInstance, instance);\n    } else if (instance.nodeType === COMMENT_NODE) ; else {\n      warnForDeletedHydratableText(parentInstance, instance);\n    }\n  }\n}\nfunction didNotFindHydratableContainerInstance(parentContainer, type, props) {\n  {\n    warnForInsertedHydratedElement(parentContainer, type);\n  }\n}\nfunction didNotFindHydratableContainerTextInstance(parentContainer, text) {\n  {\n    warnForInsertedHydratedText(parentContainer, text);\n  }\n}\nfunction didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n    warnForInsertedHydratedElement(parentInstance, type);\n  }\n}\nfunction didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n    warnForInsertedHydratedText(parentInstance, text);\n  }\n}\nfunction didNotFindHydratableSuspenseInstance(parentType, parentProps, parentInstance) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) ;\n}\n\nvar randomKey = Math.random().toString(36).slice(2);\nvar internalInstanceKey = '__reactInternalInstance$' + randomKey;\nvar internalEventHandlersKey = '__reactEventHandlers$' + randomKey;\nvar internalContainerInstanceKey = '__reactContainere$' + randomKey;\nfunction precacheFiberNode(hostInst, node) {\n  node[internalInstanceKey] = hostInst;\n}\nfunction markContainerAsRoot(hostRoot, node) {\n  node[internalContainerInstanceKey] = hostRoot;\n}\nfunction unmarkContainerAsRoot(node) {\n  node[internalContainerInstanceKey] = null;\n}\nfunction isContainerMarkedAsRoot(node) {\n  return !!node[internalContainerInstanceKey];\n} // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.\n// If the target node is part of a hydrated or not yet rendered subtree, then\n// this may also return a SuspenseComponent or HostRoot to indicate that.\n// Conceptually the HostRoot fiber is a child of the Container node. So if you\n// pass the Container node as the targetNode, you will not actually get the\n// HostRoot back. To get to the HostRoot, you need to pass a child of it.\n// The same thing applies to Suspense boundaries.\n\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n\n  if (targetInst) {\n    // Don't return HostRoot or SuspenseComponent here.\n    return targetInst;\n  } // If the direct event target isn't a React owned DOM node, we need to look\n  // to see if one of its parents is a React owned DOM node.\n\n\n  var parentNode = targetNode.parentNode;\n\n  while (parentNode) {\n    // We'll check if this is a container root that could include\n    // React nodes in the future. We need to check this first because\n    // if we're a child of a dehydrated container, we need to first\n    // find that inner container before moving on to finding the parent\n    // instance. Note that we don't check this field on  the targetNode\n    // itself because the fibers are conceptually between the container\n    // node and the first child. It isn't surrounding the container node.\n    // If it's not a container, we check if it's an instance.\n    targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];\n\n    if (targetInst) {\n      // Since this wasn't the direct target of the event, we might have\n      // stepped past dehydrated DOM nodes to get here. However they could\n      // also have been non-React nodes. We need to answer which one.\n      // If we the instance doesn't have any children, then there can't be\n      // a nested suspense boundary within it. So we can use this as a fast\n      // bailout. Most of the time, when people add non-React children to\n      // the tree, it is using a ref to a child-less DOM node.\n      // Normally we'd only need to check one of the fibers because if it\n      // has ever gone from having children to deleting them or vice versa\n      // it would have deleted the dehydrated boundary nested inside already.\n      // However, since the HostRoot starts out with an alternate it might\n      // have one on the alternate so we need to check in case this was a\n      // root.\n      var alternate = targetInst.alternate;\n\n      if (targetInst.child !== null || alternate !== null && alternate.child !== null) {\n        // Next we need to figure out if the node that skipped past is\n        // nested within a dehydrated boundary and if so, which one.\n        var suspenseInstance = getParentSuspenseInstance(targetNode);\n\n        while (suspenseInstance !== null) {\n          // We found a suspense instance. That means that we haven't\n          // hydrated it yet. Even though we leave the comments in the\n          // DOM after hydrating, and there are boundaries in the DOM\n          // that could already be hydrated, we wouldn't have found them\n          // through this pass since if the target is hydrated it would\n          // have had an internalInstanceKey on it.\n          // Let's get the fiber associated with the SuspenseComponent\n          // as the deepest instance.\n          var targetSuspenseInst = suspenseInstance[internalInstanceKey];\n\n          if (targetSuspenseInst) {\n            return targetSuspenseInst;\n          } // If we don't find a Fiber on the comment, it might be because\n          // we haven't gotten to hydrate it yet. There might still be a\n          // parent boundary that hasn't above this one so we need to find\n          // the outer most that is known.\n\n\n          suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent\n          // host component also hasn't hydrated yet. We can return it\n          // below since it will bail out on the isMounted check later.\n        }\n      }\n\n      return targetInst;\n    }\n\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n\n  return null;\n}\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\n\nfunction getInstanceFromNode$1(node) {\n  var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];\n\n  if (inst) {\n    if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) {\n      return inst;\n    } else {\n      return null;\n    }\n  }\n\n  return null;\n}\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\n\nfunction getNodeFromInstance$1(inst) {\n  if (inst.tag === HostComponent || inst.tag === HostText) {\n    // In Fiber this, is just the state node right now. We assume it will be\n    // a host component or host text.\n    return inst.stateNode;\n  } // Without this first invariant, passing a non-DOM-component triggers the next\n  // invariant for a missing parent, which is super confusing.\n\n\n  {\n    {\n      throw Error( \"getNodeFromInstance: Invalid argument.\" );\n    }\n  }\n}\nfunction getFiberCurrentPropsFromNode$1(node) {\n  return node[internalEventHandlersKey] || null;\n}\nfunction updateFiberProps(node, props) {\n  node[internalEventHandlersKey] = props;\n}\n\nfunction getParent(inst) {\n  do {\n    inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.\n    // That is depending on if we want nested subtrees (layers) to bubble\n    // events to their parent. We could also go through parentNode on the\n    // host node but that wouldn't work for React Native and doesn't let us\n    // do the portal feature.\n  } while (inst && inst.tag !== HostComponent);\n\n  if (inst) {\n    return inst;\n  }\n\n  return null;\n}\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\n\n\nfunction getLowestCommonAncestor(instA, instB) {\n  var depthA = 0;\n\n  for (var tempA = instA; tempA; tempA = getParent(tempA)) {\n    depthA++;\n  }\n\n  var depthB = 0;\n\n  for (var tempB = instB; tempB; tempB = getParent(tempB)) {\n    depthB++;\n  } // If A is deeper, crawl up.\n\n\n  while (depthA - depthB > 0) {\n    instA = getParent(instA);\n    depthA--;\n  } // If B is deeper, crawl up.\n\n\n  while (depthB - depthA > 0) {\n    instB = getParent(instB);\n    depthB--;\n  } // Walk in lockstep until we find a match.\n\n\n  var depth = depthA;\n\n  while (depth--) {\n    if (instA === instB || instA === instB.alternate) {\n      return instA;\n    }\n\n    instA = getParent(instA);\n    instB = getParent(instB);\n  }\n\n  return null;\n}\n/**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n */\n\nfunction traverseTwoPhase(inst, fn, arg) {\n  var path = [];\n\n  while (inst) {\n    path.push(inst);\n    inst = getParent(inst);\n  }\n\n  var i;\n\n  for (i = path.length; i-- > 0;) {\n    fn(path[i], 'captured', arg);\n  }\n\n  for (i = 0; i < path.length; i++) {\n    fn(path[i], 'bubbled', arg);\n  }\n}\n/**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * Does not invoke the callback on the nearest common ancestor because nothing\n * \"entered\" or \"left\" that element.\n */\n\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\n  var common = from && to ? getLowestCommonAncestor(from, to) : null;\n  var pathFrom = [];\n\n  while (true) {\n    if (!from) {\n      break;\n    }\n\n    if (from === common) {\n      break;\n    }\n\n    var alternate = from.alternate;\n\n    if (alternate !== null && alternate === common) {\n      break;\n    }\n\n    pathFrom.push(from);\n    from = getParent(from);\n  }\n\n  var pathTo = [];\n\n  while (true) {\n    if (!to) {\n      break;\n    }\n\n    if (to === common) {\n      break;\n    }\n\n    var _alternate = to.alternate;\n\n    if (_alternate !== null && _alternate === common) {\n      break;\n    }\n\n    pathTo.push(to);\n    to = getParent(to);\n  }\n\n  for (var i = 0; i < pathFrom.length; i++) {\n    fn(pathFrom[i], 'bubbled', argFrom);\n  }\n\n  for (var _i = pathTo.length; _i-- > 0;) {\n    fn(pathTo[_i], 'captured', argTo);\n  }\n}\n\nfunction isInteractive(tag) {\n  return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n  switch (name) {\n    case 'onClick':\n    case 'onClickCapture':\n    case 'onDoubleClick':\n    case 'onDoubleClickCapture':\n    case 'onMouseDown':\n    case 'onMouseDownCapture':\n    case 'onMouseMove':\n    case 'onMouseMoveCapture':\n    case 'onMouseUp':\n    case 'onMouseUpCapture':\n    case 'onMouseEnter':\n      return !!(props.disabled && isInteractive(type));\n\n    default:\n      return false;\n  }\n}\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n\n\nfunction getListener(inst, registrationName) {\n  var listener; // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not\n  // live here; needs to be moved to a better place soon\n\n  var stateNode = inst.stateNode;\n\n  if (!stateNode) {\n    // Work in progress (ex: onload events in incremental mode).\n    return null;\n  }\n\n  var props = getFiberCurrentPropsFromNode(stateNode);\n\n  if (!props) {\n    // Work in progress.\n    return null;\n  }\n\n  listener = props[registrationName];\n\n  if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n    return null;\n  }\n\n  if (!(!listener || typeof listener === 'function')) {\n    {\n      throw Error( \"Expected `\" + registrationName + \"` listener to be a function, instead got a value of `\" + typeof listener + \"` type.\" );\n    }\n  }\n\n  return listener;\n}\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n  var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n  return getListener(inst, registrationName);\n}\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing even a\n * single one.\n */\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\n\n\nfunction accumulateDirectionalDispatches(inst, phase, event) {\n  {\n    if (!inst) {\n      error('Dispatching inst must not be null');\n    }\n  }\n\n  var listener = listenerAtPhase(inst, event, phase);\n\n  if (listener) {\n    event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n    event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n  }\n}\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory.  We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\n\n\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n  }\n}\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\n\n\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n  if (inst && event && event.dispatchConfig.registrationName) {\n    var registrationName = event.dispatchConfig.registrationName;\n    var listener = getListener(inst, registrationName);\n\n    if (listener) {\n      event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n      event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n    }\n  }\n}\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\n\n\nfunction accumulateDirectDispatchesSingle(event) {\n  if (event && event.dispatchConfig.registrationName) {\n    accumulateDispatches(event._targetInst, null, event);\n  }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n  traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\nfunction accumulateDirectDispatches(events) {\n  forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\nvar root = null;\nvar startText = null;\nvar fallbackText = null;\nfunction initialize(nativeEventTarget) {\n  root = nativeEventTarget;\n  startText = getText();\n  return true;\n}\nfunction reset() {\n  root = null;\n  startText = null;\n  fallbackText = null;\n}\nfunction getData() {\n  if (fallbackText) {\n    return fallbackText;\n  }\n\n  var start;\n  var startValue = startText;\n  var startLength = startValue.length;\n  var end;\n  var endValue = getText();\n  var endLength = endValue.length;\n\n  for (start = 0; start < startLength; start++) {\n    if (startValue[start] !== endValue[start]) {\n      break;\n    }\n  }\n\n  var minEnd = startLength - start;\n\n  for (end = 1; end <= minEnd; end++) {\n    if (startValue[startLength - end] !== endValue[endLength - end]) {\n      break;\n    }\n  }\n\n  var sliceTail = end > 1 ? 1 - end : undefined;\n  fallbackText = endValue.slice(start, sliceTail);\n  return fallbackText;\n}\nfunction getText() {\n  if ('value' in root) {\n    return root.value;\n  }\n\n  return root.textContent;\n}\n\nvar EVENT_POOL_SIZE = 10;\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar EventInterface = {\n  type: null,\n  target: null,\n  // currentTarget is set when dispatching; no use in copying it here\n  currentTarget: function () {\n    return null;\n  },\n  eventPhase: null,\n  bubbles: null,\n  cancelable: null,\n  timeStamp: function (event) {\n    return event.timeStamp || Date.now();\n  },\n  defaultPrevented: null,\n  isTrusted: null\n};\n\nfunction functionThatReturnsTrue() {\n  return true;\n}\n\nfunction functionThatReturnsFalse() {\n  return false;\n}\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\n\n\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n  {\n    // these have a getter/setter for warnings\n    delete this.nativeEvent;\n    delete this.preventDefault;\n    delete this.stopPropagation;\n    delete this.isDefaultPrevented;\n    delete this.isPropagationStopped;\n  }\n\n  this.dispatchConfig = dispatchConfig;\n  this._targetInst = targetInst;\n  this.nativeEvent = nativeEvent;\n  var Interface = this.constructor.Interface;\n\n  for (var propName in Interface) {\n    if (!Interface.hasOwnProperty(propName)) {\n      continue;\n    }\n\n    {\n      delete this[propName]; // this has a getter/setter for warnings\n    }\n\n    var normalize = Interface[propName];\n\n    if (normalize) {\n      this[propName] = normalize(nativeEvent);\n    } else {\n      if (propName === 'target') {\n        this.target = nativeEventTarget;\n      } else {\n        this[propName] = nativeEvent[propName];\n      }\n    }\n  }\n\n  var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n\n  if (defaultPrevented) {\n    this.isDefaultPrevented = functionThatReturnsTrue;\n  } else {\n    this.isDefaultPrevented = functionThatReturnsFalse;\n  }\n\n  this.isPropagationStopped = functionThatReturnsFalse;\n  return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n  preventDefault: function () {\n    this.defaultPrevented = true;\n    var event = this.nativeEvent;\n\n    if (!event) {\n      return;\n    }\n\n    if (event.preventDefault) {\n      event.preventDefault();\n    } else if (typeof event.returnValue !== 'unknown') {\n      event.returnValue = false;\n    }\n\n    this.isDefaultPrevented = functionThatReturnsTrue;\n  },\n  stopPropagation: function () {\n    var event = this.nativeEvent;\n\n    if (!event) {\n      return;\n    }\n\n    if (event.stopPropagation) {\n      event.stopPropagation();\n    } else if (typeof event.cancelBubble !== 'unknown') {\n      // The ChangeEventPlugin registers a \"propertychange\" event for\n      // IE. This event does not support bubbling or cancelling, and\n      // any references to cancelBubble throw \"Member not found\".  A\n      // typeof check of \"unknown\" circumvents this issue (and is also\n      // IE specific).\n      event.cancelBubble = true;\n    }\n\n    this.isPropagationStopped = functionThatReturnsTrue;\n  },\n\n  /**\n   * We release all dispatched `SyntheticEvent`s after each event loop, adding\n   * them back into the pool. This allows a way to hold onto a reference that\n   * won't be added back into the pool.\n   */\n  persist: function () {\n    this.isPersistent = functionThatReturnsTrue;\n  },\n\n  /**\n   * Checks if this event should be released back into the pool.\n   *\n   * @return {boolean} True if this should not be released, false otherwise.\n   */\n  isPersistent: functionThatReturnsFalse,\n\n  /**\n   * `PooledClass` looks for `destructor` on each instance it releases.\n   */\n  destructor: function () {\n    var Interface = this.constructor.Interface;\n\n    for (var propName in Interface) {\n      {\n        Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n      }\n    }\n\n    this.dispatchConfig = null;\n    this._targetInst = null;\n    this.nativeEvent = null;\n    this.isDefaultPrevented = functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    this._dispatchListeners = null;\n    this._dispatchInstances = null;\n\n    {\n      Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n      Object.defineProperty(this, 'isDefaultPrevented', getPooledWarningPropertyDefinition('isDefaultPrevented', functionThatReturnsFalse));\n      Object.defineProperty(this, 'isPropagationStopped', getPooledWarningPropertyDefinition('isPropagationStopped', functionThatReturnsFalse));\n      Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', function () {}));\n      Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', function () {}));\n    }\n  }\n});\n\nSyntheticEvent.Interface = EventInterface;\n/**\n * Helper to reduce boilerplate when creating subclasses.\n */\n\nSyntheticEvent.extend = function (Interface) {\n  var Super = this;\n\n  var E = function () {};\n\n  E.prototype = Super.prototype;\n  var prototype = new E();\n\n  function Class() {\n    return Super.apply(this, arguments);\n  }\n\n  _assign(prototype, Class.prototype);\n\n  Class.prototype = prototype;\n  Class.prototype.constructor = Class;\n  Class.Interface = _assign({}, Super.Interface, Interface);\n  Class.extend = Super.extend;\n  addEventPoolingTo(Class);\n  return Class;\n};\n\naddEventPoolingTo(SyntheticEvent);\n/**\n * Helper to nullify syntheticEvent instance properties when destructing\n *\n * @param {String} propName\n * @param {?object} getVal\n * @return {object} defineProperty object\n */\n\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n  var isFunction = typeof getVal === 'function';\n  return {\n    configurable: true,\n    set: set,\n    get: get\n  };\n\n  function set(val) {\n    var action = isFunction ? 'setting the method' : 'setting the property';\n    warn(action, 'This is effectively a no-op');\n    return val;\n  }\n\n  function get() {\n    var action = isFunction ? 'accessing the method' : 'accessing the property';\n    var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n    warn(action, result);\n    return getVal;\n  }\n\n  function warn(action, result) {\n    {\n      error(\"This synthetic event is reused for performance reasons. If you're seeing this, \" + \"you're %s `%s` on a released/nullified synthetic event. %s. \" + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result);\n    }\n  }\n}\n\nfunction getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeInst) {\n  var EventConstructor = this;\n\n  if (EventConstructor.eventPool.length) {\n    var instance = EventConstructor.eventPool.pop();\n    EventConstructor.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);\n    return instance;\n  }\n\n  return new EventConstructor(dispatchConfig, targetInst, nativeEvent, nativeInst);\n}\n\nfunction releasePooledEvent(event) {\n  var EventConstructor = this;\n\n  if (!(event instanceof EventConstructor)) {\n    {\n      throw Error( \"Trying to release an event instance into a pool of a different type.\" );\n    }\n  }\n\n  event.destructor();\n\n  if (EventConstructor.eventPool.length < EVENT_POOL_SIZE) {\n    EventConstructor.eventPool.push(event);\n  }\n}\n\nfunction addEventPoolingTo(EventConstructor) {\n  EventConstructor.eventPool = [];\n  EventConstructor.getPooled = getPooledEvent;\n  EventConstructor.release = releasePooledEvent;\n}\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\n\nvar SyntheticCompositionEvent = SyntheticEvent.extend({\n  data: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n *      /#events-inputevents\n */\n\nvar SyntheticInputEvent = SyntheticEvent.extend({\n  data: null\n});\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\n\nvar START_KEYCODE = 229;\nvar canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;\nvar documentMode = null;\n\nif (canUseDOM && 'documentMode' in document) {\n  documentMode = document.documentMode;\n} // Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\n\n\nvar canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\n\nvar useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE); // Events and their corresponding property names.\n\nvar eventTypes = {\n  beforeInput: {\n    phasedRegistrationNames: {\n      bubbled: 'onBeforeInput',\n      captured: 'onBeforeInputCapture'\n    },\n    dependencies: [TOP_COMPOSITION_END, TOP_KEY_PRESS, TOP_TEXT_INPUT, TOP_PASTE]\n  },\n  compositionEnd: {\n    phasedRegistrationNames: {\n      bubbled: 'onCompositionEnd',\n      captured: 'onCompositionEndCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_COMPOSITION_END, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n  },\n  compositionStart: {\n    phasedRegistrationNames: {\n      bubbled: 'onCompositionStart',\n      captured: 'onCompositionStartCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n  },\n  compositionUpdate: {\n    phasedRegistrationNames: {\n      bubbled: 'onCompositionUpdate',\n      captured: 'onCompositionUpdateCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_COMPOSITION_UPDATE, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n  }\n}; // Track whether we've ever handled a keypress on the space key.\n\nvar hasSpaceKeypress = false;\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\n\nfunction isKeypressCommand(nativeEvent) {\n  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n  !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\n\n\nfunction getCompositionEventType(topLevelType) {\n  switch (topLevelType) {\n    case TOP_COMPOSITION_START:\n      return eventTypes.compositionStart;\n\n    case TOP_COMPOSITION_END:\n      return eventTypes.compositionEnd;\n\n    case TOP_COMPOSITION_UPDATE:\n      return eventTypes.compositionUpdate;\n  }\n}\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n  return topLevelType === TOP_KEY_DOWN && nativeEvent.keyCode === START_KEYCODE;\n}\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case TOP_KEY_UP:\n      // Command keys insert or clear IME input.\n      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n\n    case TOP_KEY_DOWN:\n      // Expect IME keyCode on each keydown. If we get any other\n      // code we must have exited earlier.\n      return nativeEvent.keyCode !== START_KEYCODE;\n\n    case TOP_KEY_PRESS:\n    case TOP_MOUSE_DOWN:\n    case TOP_BLUR:\n      // Events are not possible without cancelling IME.\n      return true;\n\n    default:\n      return false;\n  }\n}\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\n\n\nfunction getDataFromCustomEvent(nativeEvent) {\n  var detail = nativeEvent.detail;\n\n  if (typeof detail === 'object' && 'data' in detail) {\n    return detail.data;\n  }\n\n  return null;\n}\n/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isUsingKoreanIME(nativeEvent) {\n  return nativeEvent.locale === 'ko';\n} // Track the current IME composition status, if any.\n\n\nvar isComposing = false;\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\n\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n  var eventType;\n  var fallbackData;\n\n  if (canUseCompositionEvent) {\n    eventType = getCompositionEventType(topLevelType);\n  } else if (!isComposing) {\n    if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n      eventType = eventTypes.compositionStart;\n    }\n  } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n    eventType = eventTypes.compositionEnd;\n  }\n\n  if (!eventType) {\n    return null;\n  }\n\n  if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {\n    // The current composition is stored statically and must not be\n    // overwritten while composition continues.\n    if (!isComposing && eventType === eventTypes.compositionStart) {\n      isComposing = initialize(nativeEventTarget);\n    } else if (eventType === eventTypes.compositionEnd) {\n      if (isComposing) {\n        fallbackData = getData();\n      }\n    }\n  }\n\n  var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n  if (fallbackData) {\n    // Inject data generated from fallback path into the synthetic event.\n    // This matches the property of native CompositionEventInterface.\n    event.data = fallbackData;\n  } else {\n    var customData = getDataFromCustomEvent(nativeEvent);\n\n    if (customData !== null) {\n      event.data = customData;\n    }\n  }\n\n  accumulateTwoPhaseDispatches(event);\n  return event;\n}\n/**\n * @param {TopLevelType} topLevelType Number from `TopLevelType`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\n\n\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case TOP_COMPOSITION_END:\n      return getDataFromCustomEvent(nativeEvent);\n\n    case TOP_KEY_PRESS:\n      /**\n       * If native `textInput` events are available, our goal is to make\n       * use of them. However, there is a special case: the spacebar key.\n       * In Webkit, preventing default on a spacebar `textInput` event\n       * cancels character insertion, but it *also* causes the browser\n       * to fall back to its default spacebar behavior of scrolling the\n       * page.\n       *\n       * Tracking at:\n       * https://code.google.com/p/chromium/issues/detail?id=355103\n       *\n       * To avoid this issue, use the keypress event as if no `textInput`\n       * event is available.\n       */\n      var which = nativeEvent.which;\n\n      if (which !== SPACEBAR_CODE) {\n        return null;\n      }\n\n      hasSpaceKeypress = true;\n      return SPACEBAR_CHAR;\n\n    case TOP_TEXT_INPUT:\n      // Record the characters to be added to the DOM.\n      var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled\n      // it at the keypress level and bail immediately. Android Chrome\n      // doesn't give us keycodes, so we need to ignore it.\n\n      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n        return null;\n      }\n\n      return chars;\n\n    default:\n      // For other native event types, do nothing.\n      return null;\n  }\n}\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {number} topLevelType Number from `TopLevelEventTypes`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\n\n\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n  // If we are currently composing (IME) and using a fallback to do so,\n  // try to extract the composed characters from the fallback object.\n  // If composition event is available, we extract a string only at\n  // compositionevent, otherwise extract it at fallback events.\n  if (isComposing) {\n    if (topLevelType === TOP_COMPOSITION_END || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n      var chars = getData();\n      reset();\n      isComposing = false;\n      return chars;\n    }\n\n    return null;\n  }\n\n  switch (topLevelType) {\n    case TOP_PASTE:\n      // If a paste event occurs after a keypress, throw out the input\n      // chars. Paste events should not lead to BeforeInput events.\n      return null;\n\n    case TOP_KEY_PRESS:\n      /**\n       * As of v27, Firefox may fire keypress events even when no character\n       * will be inserted. A few possibilities:\n       *\n       * - `which` is `0`. Arrow keys, Esc key, etc.\n       *\n       * - `which` is the pressed key code, but no char is available.\n       *   Ex: 'AltGr + d` in Polish. There is no modified character for\n       *   this key combination and no character is inserted into the\n       *   document, but FF fires the keypress for char code `100` anyway.\n       *   No `input` event will occur.\n       *\n       * - `which` is the pressed key code, but a command combination is\n       *   being used. Ex: `Cmd+C`. No character is inserted, and no\n       *   `input` event will occur.\n       */\n      if (!isKeypressCommand(nativeEvent)) {\n        // IE fires the `keypress` event when a user types an emoji via\n        // Touch keyboard of Windows.  In such a case, the `char` property\n        // holds an emoji character like `\\uD83D\\uDE0A`.  Because its length\n        // is 2, the property `which` does not represent an emoji correctly.\n        // In such a case, we directly return the `char` property instead of\n        // using `which`.\n        if (nativeEvent.char && nativeEvent.char.length > 1) {\n          return nativeEvent.char;\n        } else if (nativeEvent.which) {\n          return String.fromCharCode(nativeEvent.which);\n        }\n      }\n\n      return null;\n\n    case TOP_COMPOSITION_END:\n      return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;\n\n    default:\n      return null;\n  }\n}\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\n\n\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n  var chars;\n\n  if (canUseTextInputEvent) {\n    chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n  } else {\n    chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n  } // If no characters are being inserted, no BeforeInput event should\n  // be fired.\n\n\n  if (!chars) {\n    return null;\n  }\n\n  var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n  event.data = chars;\n  accumulateTwoPhaseDispatches(event);\n  return event;\n}\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\n\n\nvar BeforeInputEventPlugin = {\n  eventTypes: eventTypes,\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n    var composition = extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n    var beforeInput = extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n\n    if (composition === null) {\n      return beforeInput;\n    }\n\n    if (beforeInput === null) {\n      return composition;\n    }\n\n    return [composition, beforeInput];\n  }\n};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n  color: true,\n  date: true,\n  datetime: true,\n  'datetime-local': true,\n  email: true,\n  month: true,\n  number: true,\n  password: true,\n  range: true,\n  search: true,\n  tel: true,\n  text: true,\n  time: true,\n  url: true,\n  week: true\n};\n\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n  if (nodeName === 'input') {\n    return !!supportedInputTypes[elem.type];\n  }\n\n  if (nodeName === 'textarea') {\n    return true;\n  }\n\n  return false;\n}\n\nvar eventTypes$1 = {\n  change: {\n    phasedRegistrationNames: {\n      bubbled: 'onChange',\n      captured: 'onChangeCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_CHANGE, TOP_CLICK, TOP_FOCUS, TOP_INPUT, TOP_KEY_DOWN, TOP_KEY_UP, TOP_SELECTION_CHANGE]\n  }\n};\n\nfunction createAndAccumulateChangeEvent(inst, nativeEvent, target) {\n  var event = SyntheticEvent.getPooled(eventTypes$1.change, inst, nativeEvent, target);\n  event.type = 'change'; // Flag this event loop as needing state restore.\n\n  enqueueStateRestore(target);\n  accumulateTwoPhaseDispatches(event);\n  return event;\n}\n/**\n * For IE shims\n */\n\n\nvar activeElement = null;\nvar activeElementInst = null;\n/**\n * SECTION: handle `change` event\n */\n\nfunction shouldUseChangeEvent(elem) {\n  var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n  var event = createAndAccumulateChangeEvent(activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the\n  // other events and have it go through ReactBrowserEventEmitter. Since it\n  // doesn't, we manually listen for the events and so we have to enqueue and\n  // process the abstract event manually.\n  //\n  // Batching is necessary here in order to ensure that all event handlers run\n  // before the next rerender (including event handlers attached to ancestor\n  // elements instead of directly on the input). Without this, controlled\n  // components don't work properly in conjunction with event bubbling because\n  // the component is rerendered and the value reverted before all the event\n  // handlers can run. See https://github.com/facebook/react/issues/708.\n\n  batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n  runEventsInBatch(event);\n}\n\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance$1(targetInst);\n\n  if (updateValueIfChanged(targetNode)) {\n    return targetInst;\n  }\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n  if (topLevelType === TOP_CHANGE) {\n    return targetInst;\n  }\n}\n/**\n * SECTION: handle `input` event\n */\n\n\nvar isInputEventSupported = false;\n\nif (canUseDOM) {\n  // IE9 claims to support the input event but fails to trigger it when\n  // deleting text, so we ignore its input events.\n  isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);\n}\n/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\n\n\nfunction startWatchingForValueChange(target, targetInst) {\n  activeElement = target;\n  activeElementInst = targetInst;\n  activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\n\n\nfunction stopWatchingForValueChange() {\n  if (!activeElement) {\n    return;\n  }\n\n  activeElement.detachEvent('onpropertychange', handlePropertyChange);\n  activeElement = null;\n  activeElementInst = null;\n}\n/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\n\n\nfunction handlePropertyChange(nativeEvent) {\n  if (nativeEvent.propertyName !== 'value') {\n    return;\n  }\n\n  if (getInstIfValueChanged(activeElementInst)) {\n    manualDispatchChangeEvent(nativeEvent);\n  }\n}\n\nfunction handleEventsForInputEventPolyfill(topLevelType, target, targetInst) {\n  if (topLevelType === TOP_FOCUS) {\n    // In IE9, propertychange fires for most input events but is buggy and\n    // doesn't fire when text is deleted, but conveniently, selectionchange\n    // appears to fire in all of the remaining cases so we catch those and\n    // forward the event if the value has changed\n    // In either case, we don't want to call the event handler if the value\n    // is changed from JS so we redefine a setter for `.value` that updates\n    // our activeElementValue variable, allowing us to ignore those changes\n    //\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForValueChange();\n    startWatchingForValueChange(target, targetInst);\n  } else if (topLevelType === TOP_BLUR) {\n    stopWatchingForValueChange();\n  }\n} // For IE8 and IE9.\n\n\nfunction getTargetInstForInputEventPolyfill(topLevelType, targetInst) {\n  if (topLevelType === TOP_SELECTION_CHANGE || topLevelType === TOP_KEY_UP || topLevelType === TOP_KEY_DOWN) {\n    // On the selectionchange event, the target is just document which isn't\n    // helpful for us so just check activeElement instead.\n    //\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n    // propertychange on the first input event after setting `value` from a\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\n    // gets it and catching keydown lets us fire an event for the first\n    // keystroke if user does a key repeat (it'll be a little delayed: right\n    // before the second keystroke). Other input methods (e.g., paste) seem to\n    // fire selectionchange normally.\n    return getInstIfValueChanged(activeElementInst);\n  }\n}\n/**\n * SECTION: handle `click` event\n */\n\n\nfunction shouldUseClickEvent(elem) {\n  // Use the `click` event to detect changes to checkbox and radio inputs.\n  // This approach works across all browsers, whereas `change` does not fire\n  // until `blur` in IE8.\n  var nodeName = elem.nodeName;\n  return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n  if (topLevelType === TOP_CLICK) {\n    return getInstIfValueChanged(targetInst);\n  }\n}\n\nfunction getTargetInstForInputOrChangeEvent(topLevelType, targetInst) {\n  if (topLevelType === TOP_INPUT || topLevelType === TOP_CHANGE) {\n    return getInstIfValueChanged(targetInst);\n  }\n}\n\nfunction handleControlledInputBlur(node) {\n  var state = node._wrapperState;\n\n  if (!state || !state.controlled || node.type !== 'number') {\n    return;\n  }\n\n  {\n    // If controlled, assign the value attribute to the current value on blur\n    setDefaultValue(node, 'number', node.value);\n  }\n}\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\n\n\nvar ChangeEventPlugin = {\n  eventTypes: eventTypes$1,\n  _isInputEventSupported: isInputEventSupported,\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n    var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n    var getTargetInstFunc, handleEventFunc;\n\n    if (shouldUseChangeEvent(targetNode)) {\n      getTargetInstFunc = getTargetInstForChangeEvent;\n    } else if (isTextInputElement(targetNode)) {\n      if (isInputEventSupported) {\n        getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n      } else {\n        getTargetInstFunc = getTargetInstForInputEventPolyfill;\n        handleEventFunc = handleEventsForInputEventPolyfill;\n      }\n    } else if (shouldUseClickEvent(targetNode)) {\n      getTargetInstFunc = getTargetInstForClickEvent;\n    }\n\n    if (getTargetInstFunc) {\n      var inst = getTargetInstFunc(topLevelType, targetInst);\n\n      if (inst) {\n        var event = createAndAccumulateChangeEvent(inst, nativeEvent, nativeEventTarget);\n        return event;\n      }\n    }\n\n    if (handleEventFunc) {\n      handleEventFunc(topLevelType, targetNode, targetInst);\n    } // When blurring, set the value attribute for number inputs\n\n\n    if (topLevelType === TOP_BLUR) {\n      handleControlledInputBlur(targetNode);\n    }\n  }\n};\n\nvar SyntheticUIEvent = SyntheticEvent.extend({\n  view: null,\n  detail: null\n});\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\nvar modifierKeyToProp = {\n  Alt: 'altKey',\n  Control: 'ctrlKey',\n  Meta: 'metaKey',\n  Shift: 'shiftKey'\n}; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support\n// getModifierState. If getModifierState is not supported, we map it to a set of\n// modifier keys exposed by the event. In this case, Lock-keys are not supported.\n\nfunction modifierStateGetter(keyArg) {\n  var syntheticEvent = this;\n  var nativeEvent = syntheticEvent.nativeEvent;\n\n  if (nativeEvent.getModifierState) {\n    return nativeEvent.getModifierState(keyArg);\n  }\n\n  var keyProp = modifierKeyToProp[keyArg];\n  return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n  return modifierStateGetter;\n}\n\nvar previousScreenX = 0;\nvar previousScreenY = 0; // Use flags to signal movementX/Y has already been set\n\nvar isMovementXSet = false;\nvar isMovementYSet = false;\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticMouseEvent = SyntheticUIEvent.extend({\n  screenX: null,\n  screenY: null,\n  clientX: null,\n  clientY: null,\n  pageX: null,\n  pageY: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  getModifierState: getEventModifierState,\n  button: null,\n  buttons: null,\n  relatedTarget: function (event) {\n    return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n  },\n  movementX: function (event) {\n    if ('movementX' in event) {\n      return event.movementX;\n    }\n\n    var screenX = previousScreenX;\n    previousScreenX = event.screenX;\n\n    if (!isMovementXSet) {\n      isMovementXSet = true;\n      return 0;\n    }\n\n    return event.type === 'mousemove' ? event.screenX - screenX : 0;\n  },\n  movementY: function (event) {\n    if ('movementY' in event) {\n      return event.movementY;\n    }\n\n    var screenY = previousScreenY;\n    previousScreenY = event.screenY;\n\n    if (!isMovementYSet) {\n      isMovementYSet = true;\n      return 0;\n    }\n\n    return event.type === 'mousemove' ? event.screenY - screenY : 0;\n  }\n});\n\n/**\n * @interface PointerEvent\n * @see http://www.w3.org/TR/pointerevents/\n */\n\nvar SyntheticPointerEvent = SyntheticMouseEvent.extend({\n  pointerId: null,\n  width: null,\n  height: null,\n  pressure: null,\n  tangentialPressure: null,\n  tiltX: null,\n  tiltY: null,\n  twist: null,\n  pointerType: null,\n  isPrimary: null\n});\n\nvar eventTypes$2 = {\n  mouseEnter: {\n    registrationName: 'onMouseEnter',\n    dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n  },\n  mouseLeave: {\n    registrationName: 'onMouseLeave',\n    dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n  },\n  pointerEnter: {\n    registrationName: 'onPointerEnter',\n    dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n  },\n  pointerLeave: {\n    registrationName: 'onPointerLeave',\n    dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n  }\n};\nvar EnterLeaveEventPlugin = {\n  eventTypes: eventTypes$2,\n\n  /**\n   * For almost every interaction we care about, there will be both a top-level\n   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n   * we do not extract duplicate events. However, moving the mouse into the\n   * browser from outside will not fire a `mouseout` event. In this case, we use\n   * the `mouseover` top-level event.\n   */\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n    var isOverEvent = topLevelType === TOP_MOUSE_OVER || topLevelType === TOP_POINTER_OVER;\n    var isOutEvent = topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_POINTER_OUT;\n\n    if (isOverEvent && (eventSystemFlags & IS_REPLAYED) === 0 && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n      // If this is an over event with a target, then we've already dispatched\n      // the event in the out event of the other target. If this is replayed,\n      // then it's because we couldn't dispatch against this target previously\n      // so we have to do it now instead.\n      return null;\n    }\n\n    if (!isOutEvent && !isOverEvent) {\n      // Must not be a mouse or pointer in or out - ignoring.\n      return null;\n    }\n\n    var win;\n\n    if (nativeEventTarget.window === nativeEventTarget) {\n      // `nativeEventTarget` is probably a window object.\n      win = nativeEventTarget;\n    } else {\n      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n      var doc = nativeEventTarget.ownerDocument;\n\n      if (doc) {\n        win = doc.defaultView || doc.parentWindow;\n      } else {\n        win = window;\n      }\n    }\n\n    var from;\n    var to;\n\n    if (isOutEvent) {\n      from = targetInst;\n      var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n      to = related ? getClosestInstanceFromNode(related) : null;\n\n      if (to !== null) {\n        var nearestMounted = getNearestMountedFiber(to);\n\n        if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) {\n          to = null;\n        }\n      }\n    } else {\n      // Moving to a node from outside the window.\n      from = null;\n      to = targetInst;\n    }\n\n    if (from === to) {\n      // Nothing pertains to our managed components.\n      return null;\n    }\n\n    var eventInterface, leaveEventType, enterEventType, eventTypePrefix;\n\n    if (topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_MOUSE_OVER) {\n      eventInterface = SyntheticMouseEvent;\n      leaveEventType = eventTypes$2.mouseLeave;\n      enterEventType = eventTypes$2.mouseEnter;\n      eventTypePrefix = 'mouse';\n    } else if (topLevelType === TOP_POINTER_OUT || topLevelType === TOP_POINTER_OVER) {\n      eventInterface = SyntheticPointerEvent;\n      leaveEventType = eventTypes$2.pointerLeave;\n      enterEventType = eventTypes$2.pointerEnter;\n      eventTypePrefix = 'pointer';\n    }\n\n    var fromNode = from == null ? win : getNodeFromInstance$1(from);\n    var toNode = to == null ? win : getNodeFromInstance$1(to);\n    var leave = eventInterface.getPooled(leaveEventType, from, nativeEvent, nativeEventTarget);\n    leave.type = eventTypePrefix + 'leave';\n    leave.target = fromNode;\n    leave.relatedTarget = toNode;\n    var enter = eventInterface.getPooled(enterEventType, to, nativeEvent, nativeEventTarget);\n    enter.type = eventTypePrefix + 'enter';\n    enter.target = toNode;\n    enter.relatedTarget = fromNode;\n    accumulateEnterLeaveDispatches(leave, enter, from, to); // If we are not processing the first ancestor, then we\n    // should not process the same nativeEvent again, as we\n    // will have already processed it in the first ancestor.\n\n    if ((eventSystemFlags & IS_FIRST_ANCESTOR) === 0) {\n      return [leave];\n    }\n\n    return [leave, enter];\n  }\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n  return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n  ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\n\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) {\n    return true;\n  }\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  } // Test for A's keys different from B.\n\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwnProperty$2.call(objB, keysA[i]) || !objectIs(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nvar skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;\nvar eventTypes$3 = {\n  select: {\n    phasedRegistrationNames: {\n      bubbled: 'onSelect',\n      captured: 'onSelectCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_CONTEXT_MENU, TOP_DRAG_END, TOP_FOCUS, TOP_KEY_DOWN, TOP_KEY_UP, TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_SELECTION_CHANGE]\n  }\n};\nvar activeElement$1 = null;\nvar activeElementInst$1 = null;\nvar lastSelection = null;\nvar mouseDown = false;\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\n\nfunction getSelection$1(node) {\n  if ('selectionStart' in node && hasSelectionCapabilities(node)) {\n    return {\n      start: node.selectionStart,\n      end: node.selectionEnd\n    };\n  } else {\n    var win = node.ownerDocument && node.ownerDocument.defaultView || window;\n    var selection = win.getSelection();\n    return {\n      anchorNode: selection.anchorNode,\n      anchorOffset: selection.anchorOffset,\n      focusNode: selection.focusNode,\n      focusOffset: selection.focusOffset\n    };\n  }\n}\n/**\n * Get document associated with the event target.\n *\n * @param {object} nativeEventTarget\n * @return {Document}\n */\n\n\nfunction getEventTargetDocument(eventTarget) {\n  return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;\n}\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @param {object} nativeEventTarget\n * @return {?SyntheticEvent}\n */\n\n\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n  // Ensure we have the right element, and that the user is not dragging a\n  // selection (this matches native `select` event behavior). In HTML5, select\n  // fires only on input and textarea thus if there's no focused element we\n  // won't dispatch.\n  var doc = getEventTargetDocument(nativeEventTarget);\n\n  if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {\n    return null;\n  } // Only fire when selection has actually changed.\n\n\n  var currentSelection = getSelection$1(activeElement$1);\n\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n    lastSelection = currentSelection;\n    var syntheticEvent = SyntheticEvent.getPooled(eventTypes$3.select, activeElementInst$1, nativeEvent, nativeEventTarget);\n    syntheticEvent.type = 'select';\n    syntheticEvent.target = activeElement$1;\n    accumulateTwoPhaseDispatches(syntheticEvent);\n    return syntheticEvent;\n  }\n\n  return null;\n}\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\n\n\nvar SelectEventPlugin = {\n  eventTypes: eventTypes$3,\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, container) {\n    var containerOrDoc = container || getEventTargetDocument(nativeEventTarget); // Track whether all listeners exists for this plugin. If none exist, we do\n    // not extract events. See #3639.\n\n    if (!containerOrDoc || !isListeningToAllDependencies('onSelect', containerOrDoc)) {\n      return null;\n    }\n\n    var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n\n    switch (topLevelType) {\n      // Track the input node that has focus.\n      case TOP_FOCUS:\n        if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n          activeElement$1 = targetNode;\n          activeElementInst$1 = targetInst;\n          lastSelection = null;\n        }\n\n        break;\n\n      case TOP_BLUR:\n        activeElement$1 = null;\n        activeElementInst$1 = null;\n        lastSelection = null;\n        break;\n      // Don't fire the event while the user is dragging. This matches the\n      // semantics of the native select event.\n\n      case TOP_MOUSE_DOWN:\n        mouseDown = true;\n        break;\n\n      case TOP_CONTEXT_MENU:\n      case TOP_MOUSE_UP:\n      case TOP_DRAG_END:\n        mouseDown = false;\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n      // Chrome and IE fire non-standard event when selection is changed (and\n      // sometimes when it hasn't). IE's event fires out of order with respect\n      // to key and input events on deletion, so we discard it.\n      //\n      // Firefox doesn't support selectionchange, so check selection status\n      // after each key entry. The selection changes after keydown and before\n      // keyup, but we check on keydown as well in the case of holding down a\n      // key, when multiple keydown events are fired but only one keyup is.\n      // This is also our approach for IE handling, for the reason above.\n\n      case TOP_SELECTION_CHANGE:\n        if (skipSelectionChangeEvent) {\n          break;\n        }\n\n      // falls through\n\n      case TOP_KEY_DOWN:\n      case TOP_KEY_UP:\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n    }\n\n    return null;\n  }\n};\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\n\nvar SyntheticAnimationEvent = SyntheticEvent.extend({\n  animationName: null,\n  elapsedTime: null,\n  pseudoElement: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\n\nvar SyntheticClipboardEvent = SyntheticEvent.extend({\n  clipboardData: function (event) {\n    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n  }\n});\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticFocusEvent = SyntheticUIEvent.extend({\n  relatedTarget: null\n});\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n  var charCode;\n  var keyCode = nativeEvent.keyCode;\n\n  if ('charCode' in nativeEvent) {\n    charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n\n    if (charCode === 0 && keyCode === 13) {\n      charCode = 13;\n    }\n  } else {\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n    charCode = keyCode;\n  } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)\n  // report Enter as charCode 10 when ctrl is pressed.\n\n\n  if (charCode === 10) {\n    charCode = 13;\n  } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n  // Must not discard the (non-)printable Enter-key.\n\n\n  if (charCode >= 32 || charCode === 13) {\n    return charCode;\n  }\n\n  return 0;\n}\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar normalizeKey = {\n  Esc: 'Escape',\n  Spacebar: ' ',\n  Left: 'ArrowLeft',\n  Up: 'ArrowUp',\n  Right: 'ArrowRight',\n  Down: 'ArrowDown',\n  Del: 'Delete',\n  Win: 'OS',\n  Menu: 'ContextMenu',\n  Apps: 'ContextMenu',\n  Scroll: 'ScrollLock',\n  MozPrintableKey: 'Unidentified'\n};\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar translateToKey = {\n  '8': 'Backspace',\n  '9': 'Tab',\n  '12': 'Clear',\n  '13': 'Enter',\n  '16': 'Shift',\n  '17': 'Control',\n  '18': 'Alt',\n  '19': 'Pause',\n  '20': 'CapsLock',\n  '27': 'Escape',\n  '32': ' ',\n  '33': 'PageUp',\n  '34': 'PageDown',\n  '35': 'End',\n  '36': 'Home',\n  '37': 'ArrowLeft',\n  '38': 'ArrowUp',\n  '39': 'ArrowRight',\n  '40': 'ArrowDown',\n  '45': 'Insert',\n  '46': 'Delete',\n  '112': 'F1',\n  '113': 'F2',\n  '114': 'F3',\n  '115': 'F4',\n  '116': 'F5',\n  '117': 'F6',\n  '118': 'F7',\n  '119': 'F8',\n  '120': 'F9',\n  '121': 'F10',\n  '122': 'F11',\n  '123': 'F12',\n  '144': 'NumLock',\n  '145': 'ScrollLock',\n  '224': 'Meta'\n};\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\n\nfunction getEventKey(nativeEvent) {\n  if (nativeEvent.key) {\n    // Normalize inconsistent values reported by browsers due to\n    // implementations of a working draft specification.\n    // FireFox implements `key` but returns `MozPrintableKey` for all\n    // printable characters (normalized to `Unidentified`), ignore it.\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n\n    if (key !== 'Unidentified') {\n      return key;\n    }\n  } // Browser does not implement `key`, polyfill as much of it as we can.\n\n\n  if (nativeEvent.type === 'keypress') {\n    var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can\n    // thus be captured by `keypress`, no other non-printable key should.\n\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n  }\n\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n    // While user keyboard layout determines the actual meaning of each\n    // `keyCode` value, almost all function keys have a universal value.\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n  }\n\n  return '';\n}\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticKeyboardEvent = SyntheticUIEvent.extend({\n  key: getEventKey,\n  location: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  repeat: null,\n  locale: null,\n  getModifierState: getEventModifierState,\n  // Legacy Interface\n  charCode: function (event) {\n    // `charCode` is the result of a KeyPress event and represents the value of\n    // the actual printable character.\n    // KeyPress is deprecated, but its replacement is not yet final and not\n    // implemented in any major browser. Only KeyPress has charCode.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n\n    return 0;\n  },\n  keyCode: function (event) {\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\n    // physical keyboard key.\n    // The actual meaning of the value depends on the users' keyboard layout\n    // which cannot be detected. Assuming that it is a US keyboard layout\n    // provides a surprisingly accurate mapping for US and European users.\n    // Due to this, it is left to the user to implement at this time.\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n\n    return 0;\n  },\n  which: function (event) {\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\n    // type of the event.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n\n    return 0;\n  }\n});\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticDragEvent = SyntheticMouseEvent.extend({\n  dataTransfer: null\n});\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\n\nvar SyntheticTouchEvent = SyntheticUIEvent.extend({\n  touches: null,\n  targetTouches: null,\n  changedTouches: null,\n  altKey: null,\n  metaKey: null,\n  ctrlKey: null,\n  shiftKey: null,\n  getModifierState: getEventModifierState\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\n\nvar SyntheticTransitionEvent = SyntheticEvent.extend({\n  propertyName: null,\n  elapsedTime: null,\n  pseudoElement: null\n});\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticWheelEvent = SyntheticMouseEvent.extend({\n  deltaX: function (event) {\n    return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n  },\n  deltaY: function (event) {\n    return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n    'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n    'wheelDelta' in event ? -event.wheelDelta : 0;\n  },\n  deltaZ: null,\n  // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n  deltaMode: null\n});\n\nvar knownHTMLTopLevelTypes = [TOP_ABORT, TOP_CANCEL, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_CLOSE, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_INPUT, TOP_INVALID, TOP_LOAD, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_RESET, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUBMIT, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_TOGGLE, TOP_VOLUME_CHANGE, TOP_WAITING];\nvar SimpleEventPlugin = {\n  // simpleEventPluginEventTypes gets populated from\n  // the DOMEventProperties module.\n  eventTypes: simpleEventPluginEventTypes,\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n    var dispatchConfig = topLevelEventsToDispatchConfig.get(topLevelType);\n\n    if (!dispatchConfig) {\n      return null;\n    }\n\n    var EventConstructor;\n\n    switch (topLevelType) {\n      case TOP_KEY_PRESS:\n        // Firefox creates a keypress event for function keys too. This removes\n        // the unwanted keypress events. Enter is however both printable and\n        // non-printable. One would expect Tab to be as well (but it isn't).\n        if (getEventCharCode(nativeEvent) === 0) {\n          return null;\n        }\n\n      /* falls through */\n\n      case TOP_KEY_DOWN:\n      case TOP_KEY_UP:\n        EventConstructor = SyntheticKeyboardEvent;\n        break;\n\n      case TOP_BLUR:\n      case TOP_FOCUS:\n        EventConstructor = SyntheticFocusEvent;\n        break;\n\n      case TOP_CLICK:\n        // Firefox creates a click event on right mouse clicks. This removes the\n        // unwanted click events.\n        if (nativeEvent.button === 2) {\n          return null;\n        }\n\n      /* falls through */\n\n      case TOP_AUX_CLICK:\n      case TOP_DOUBLE_CLICK:\n      case TOP_MOUSE_DOWN:\n      case TOP_MOUSE_MOVE:\n      case TOP_MOUSE_UP: // TODO: Disabled elements should not respond to mouse events\n\n      /* falls through */\n\n      case TOP_MOUSE_OUT:\n      case TOP_MOUSE_OVER:\n      case TOP_CONTEXT_MENU:\n        EventConstructor = SyntheticMouseEvent;\n        break;\n\n      case TOP_DRAG:\n      case TOP_DRAG_END:\n      case TOP_DRAG_ENTER:\n      case TOP_DRAG_EXIT:\n      case TOP_DRAG_LEAVE:\n      case TOP_DRAG_OVER:\n      case TOP_DRAG_START:\n      case TOP_DROP:\n        EventConstructor = SyntheticDragEvent;\n        break;\n\n      case TOP_TOUCH_CANCEL:\n      case TOP_TOUCH_END:\n      case TOP_TOUCH_MOVE:\n      case TOP_TOUCH_START:\n        EventConstructor = SyntheticTouchEvent;\n        break;\n\n      case TOP_ANIMATION_END:\n      case TOP_ANIMATION_ITERATION:\n      case TOP_ANIMATION_START:\n        EventConstructor = SyntheticAnimationEvent;\n        break;\n\n      case TOP_TRANSITION_END:\n        EventConstructor = SyntheticTransitionEvent;\n        break;\n\n      case TOP_SCROLL:\n        EventConstructor = SyntheticUIEvent;\n        break;\n\n      case TOP_WHEEL:\n        EventConstructor = SyntheticWheelEvent;\n        break;\n\n      case TOP_COPY:\n      case TOP_CUT:\n      case TOP_PASTE:\n        EventConstructor = SyntheticClipboardEvent;\n        break;\n\n      case TOP_GOT_POINTER_CAPTURE:\n      case TOP_LOST_POINTER_CAPTURE:\n      case TOP_POINTER_CANCEL:\n      case TOP_POINTER_DOWN:\n      case TOP_POINTER_MOVE:\n      case TOP_POINTER_OUT:\n      case TOP_POINTER_OVER:\n      case TOP_POINTER_UP:\n        EventConstructor = SyntheticPointerEvent;\n        break;\n\n      default:\n        {\n          if (knownHTMLTopLevelTypes.indexOf(topLevelType) === -1) {\n            error('SimpleEventPlugin: Unhandled event type, `%s`. This warning ' + 'is likely caused by a bug in React. Please file an issue.', topLevelType);\n          }\n        } // HTML Events\n        // @see http://www.w3.org/TR/html5/index.html#events-0\n\n\n        EventConstructor = SyntheticEvent;\n        break;\n    }\n\n    var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\n    accumulateTwoPhaseDispatches(event);\n    return event;\n  }\n};\n\n/**\n * Specifies a deterministic ordering of `EventPlugin`s. A convenient way to\n * reason about plugins, without having to package every one of them. This\n * is better than having plugins be ordered in the same order that they\n * are injected because that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\n\nvar DOMEventPluginOrder = ['ResponderEventPlugin', 'SimpleEventPlugin', 'EnterLeaveEventPlugin', 'ChangeEventPlugin', 'SelectEventPlugin', 'BeforeInputEventPlugin'];\n/**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\n\ninjectEventPluginOrder(DOMEventPluginOrder);\nsetComponentTree(getFiberCurrentPropsFromNode$1, getInstanceFromNode$1, getNodeFromInstance$1);\n/**\n * Some important event plugins included by default (without having to require\n * them).\n */\n\ninjectEventPluginsByName({\n  SimpleEventPlugin: SimpleEventPlugin,\n  EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n  ChangeEventPlugin: ChangeEventPlugin,\n  SelectEventPlugin: SelectEventPlugin,\n  BeforeInputEventPlugin: BeforeInputEventPlugin\n});\n\n// Prefix measurements so that it's possible to filter them.\n// Longer prefixes are hard to read in DevTools.\nvar reactEmoji = \"\\u269B\";\nvar warningEmoji = \"\\u26D4\";\nvar supportsUserTiming = typeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function'; // Keep track of current fiber so that we know the path to unwind on pause.\n// TODO: this looks the same as nextUnitOfWork in scheduler. Can we unify them?\n\nvar currentFiber = null; // If we're in the middle of user code, which fiber and method is it?\n// Reusing `currentFiber` would be confusing for this because user code fiber\n// can change during commit phase too, but we don't need to unwind it (since\n// lifecycles in the commit phase don't resemble a tree).\n\nvar currentPhase = null;\nvar currentPhaseFiber = null; // Did lifecycle hook schedule an update? This is often a performance problem,\n// so we will keep track of it, and include it in the report.\n// Track commits caused by cascading updates.\n\nvar isCommitting = false;\nvar hasScheduledUpdateInCurrentCommit = false;\nvar hasScheduledUpdateInCurrentPhase = false;\nvar commitCountInCurrentWorkLoop = 0;\nvar effectCountInCurrentCommit = 0;\n// to avoid stretch the commit phase with measurement overhead.\n\nvar labelsInCurrentCommit = new Set();\n\nvar formatMarkName = function (markName) {\n  return reactEmoji + \" \" + markName;\n};\n\nvar formatLabel = function (label, warning) {\n  var prefix = warning ? warningEmoji + \" \" : reactEmoji + \" \";\n  var suffix = warning ? \" Warning: \" + warning : '';\n  return \"\" + prefix + label + suffix;\n};\n\nvar beginMark = function (markName) {\n  performance.mark(formatMarkName(markName));\n};\n\nvar clearMark = function (markName) {\n  performance.clearMarks(formatMarkName(markName));\n};\n\nvar endMark = function (label, markName, warning) {\n  var formattedMarkName = formatMarkName(markName);\n  var formattedLabel = formatLabel(label, warning);\n\n  try {\n    performance.measure(formattedLabel, formattedMarkName);\n  } catch (err) {} // If previous mark was missing for some reason, this will throw.\n  // This could only happen if React crashed in an unexpected place earlier.\n  // Don't pile on with more errors.\n  // Clear marks immediately to avoid growing buffer.\n\n\n  performance.clearMarks(formattedMarkName);\n  performance.clearMeasures(formattedLabel);\n};\n\nvar getFiberMarkName = function (label, debugID) {\n  return label + \" (#\" + debugID + \")\";\n};\n\nvar getFiberLabel = function (componentName, isMounted, phase) {\n  if (phase === null) {\n    // These are composite component total time measurements.\n    return componentName + \" [\" + (isMounted ? 'update' : 'mount') + \"]\";\n  } else {\n    // Composite component methods.\n    return componentName + \".\" + phase;\n  }\n};\n\nvar beginFiberMark = function (fiber, phase) {\n  var componentName = getComponentName(fiber.type) || 'Unknown';\n  var debugID = fiber._debugID;\n  var isMounted = fiber.alternate !== null;\n  var label = getFiberLabel(componentName, isMounted, phase);\n\n  if (isCommitting && labelsInCurrentCommit.has(label)) {\n    // During the commit phase, we don't show duplicate labels because\n    // there is a fixed overhead for every measurement, and we don't\n    // want to stretch the commit phase beyond necessary.\n    return false;\n  }\n\n  labelsInCurrentCommit.add(label);\n  var markName = getFiberMarkName(label, debugID);\n  beginMark(markName);\n  return true;\n};\n\nvar clearFiberMark = function (fiber, phase) {\n  var componentName = getComponentName(fiber.type) || 'Unknown';\n  var debugID = fiber._debugID;\n  var isMounted = fiber.alternate !== null;\n  var label = getFiberLabel(componentName, isMounted, phase);\n  var markName = getFiberMarkName(label, debugID);\n  clearMark(markName);\n};\n\nvar endFiberMark = function (fiber, phase, warning) {\n  var componentName = getComponentName(fiber.type) || 'Unknown';\n  var debugID = fiber._debugID;\n  var isMounted = fiber.alternate !== null;\n  var label = getFiberLabel(componentName, isMounted, phase);\n  var markName = getFiberMarkName(label, debugID);\n  endMark(label, markName, warning);\n};\n\nvar shouldIgnoreFiber = function (fiber) {\n  // Host components should be skipped in the timeline.\n  // We could check typeof fiber.type, but does this work with RN?\n  switch (fiber.tag) {\n    case HostRoot:\n    case HostComponent:\n    case HostText:\n    case HostPortal:\n    case Fragment:\n    case ContextProvider:\n    case ContextConsumer:\n    case Mode:\n      return true;\n\n    default:\n      return false;\n  }\n};\n\nvar clearPendingPhaseMeasurement = function () {\n  if (currentPhase !== null && currentPhaseFiber !== null) {\n    clearFiberMark(currentPhaseFiber, currentPhase);\n  }\n\n  currentPhaseFiber = null;\n  currentPhase = null;\n  hasScheduledUpdateInCurrentPhase = false;\n};\n\nvar pauseTimers = function () {\n  // Stops all currently active measurements so that they can be resumed\n  // if we continue in a later deferred loop from the same unit of work.\n  var fiber = currentFiber;\n\n  while (fiber) {\n    if (fiber._debugIsCurrentlyTiming) {\n      endFiberMark(fiber, null, null);\n    }\n\n    fiber = fiber.return;\n  }\n};\n\nvar resumeTimersRecursively = function (fiber) {\n  if (fiber.return !== null) {\n    resumeTimersRecursively(fiber.return);\n  }\n\n  if (fiber._debugIsCurrentlyTiming) {\n    beginFiberMark(fiber, null);\n  }\n};\n\nvar resumeTimers = function () {\n  // Resumes all measurements that were active during the last deferred loop.\n  if (currentFiber !== null) {\n    resumeTimersRecursively(currentFiber);\n  }\n};\n\nfunction recordEffect() {\n  {\n    effectCountInCurrentCommit++;\n  }\n}\nfunction recordScheduleUpdate() {\n  {\n    if (isCommitting) {\n      hasScheduledUpdateInCurrentCommit = true;\n    }\n\n    if (currentPhase !== null && currentPhase !== 'componentWillMount' && currentPhase !== 'componentWillReceiveProps') {\n      hasScheduledUpdateInCurrentPhase = true;\n    }\n  }\n}\nfunction startWorkTimer(fiber) {\n  {\n    if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n      return;\n    } // If we pause, this is the fiber to unwind from.\n\n\n    currentFiber = fiber;\n\n    if (!beginFiberMark(fiber, null)) {\n      return;\n    }\n\n    fiber._debugIsCurrentlyTiming = true;\n  }\n}\nfunction cancelWorkTimer(fiber) {\n  {\n    if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n      return;\n    } // Remember we shouldn't complete measurement for this fiber.\n    // Otherwise flamechart will be deep even for small updates.\n\n\n    fiber._debugIsCurrentlyTiming = false;\n    clearFiberMark(fiber, null);\n  }\n}\nfunction stopWorkTimer(fiber) {\n  {\n    if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n      return;\n    } // If we pause, its parent is the fiber to unwind from.\n\n\n    currentFiber = fiber.return;\n\n    if (!fiber._debugIsCurrentlyTiming) {\n      return;\n    }\n\n    fiber._debugIsCurrentlyTiming = false;\n    endFiberMark(fiber, null, null);\n  }\n}\nfunction stopFailedWorkTimer(fiber) {\n  {\n    if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n      return;\n    } // If we pause, its parent is the fiber to unwind from.\n\n\n    currentFiber = fiber.return;\n\n    if (!fiber._debugIsCurrentlyTiming) {\n      return;\n    }\n\n    fiber._debugIsCurrentlyTiming = false;\n    var warning = fiber.tag === SuspenseComponent ? 'Rendering was suspended' : 'An error was thrown inside this error boundary';\n    endFiberMark(fiber, null, warning);\n  }\n}\nfunction startPhaseTimer(fiber, phase) {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    clearPendingPhaseMeasurement();\n\n    if (!beginFiberMark(fiber, phase)) {\n      return;\n    }\n\n    currentPhaseFiber = fiber;\n    currentPhase = phase;\n  }\n}\nfunction stopPhaseTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    if (currentPhase !== null && currentPhaseFiber !== null) {\n      var warning = hasScheduledUpdateInCurrentPhase ? 'Scheduled a cascading update' : null;\n      endFiberMark(currentPhaseFiber, currentPhase, warning);\n    }\n\n    currentPhase = null;\n    currentPhaseFiber = null;\n  }\n}\nfunction startWorkLoopTimer(nextUnitOfWork) {\n  {\n    currentFiber = nextUnitOfWork;\n\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    commitCountInCurrentWorkLoop = 0; // This is top level call.\n    // Any other measurements are performed within.\n\n    beginMark('(React Tree Reconciliation)'); // Resume any measurements that were in progress during the last loop.\n\n    resumeTimers();\n  }\n}\nfunction stopWorkLoopTimer(interruptedBy, didCompleteRoot) {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var warning = null;\n\n    if (interruptedBy !== null) {\n      if (interruptedBy.tag === HostRoot) {\n        warning = 'A top-level update interrupted the previous render';\n      } else {\n        var componentName = getComponentName(interruptedBy.type) || 'Unknown';\n        warning = \"An update to \" + componentName + \" interrupted the previous render\";\n      }\n    } else if (commitCountInCurrentWorkLoop > 1) {\n      warning = 'There were cascading updates';\n    }\n\n    commitCountInCurrentWorkLoop = 0;\n    var label = didCompleteRoot ? '(React Tree Reconciliation: Completed Root)' : '(React Tree Reconciliation: Yielded)'; // Pause any measurements until the next loop.\n\n    pauseTimers();\n    endMark(label, '(React Tree Reconciliation)', warning);\n  }\n}\nfunction startCommitTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    isCommitting = true;\n    hasScheduledUpdateInCurrentCommit = false;\n    labelsInCurrentCommit.clear();\n    beginMark('(Committing Changes)');\n  }\n}\nfunction stopCommitTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var warning = null;\n\n    if (hasScheduledUpdateInCurrentCommit) {\n      warning = 'Lifecycle hook scheduled a cascading update';\n    } else if (commitCountInCurrentWorkLoop > 0) {\n      warning = 'Caused by a cascading update in earlier commit';\n    }\n\n    hasScheduledUpdateInCurrentCommit = false;\n    commitCountInCurrentWorkLoop++;\n    isCommitting = false;\n    labelsInCurrentCommit.clear();\n    endMark('(Committing Changes)', '(Committing Changes)', warning);\n  }\n}\nfunction startCommitSnapshotEffectsTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    effectCountInCurrentCommit = 0;\n    beginMark('(Committing Snapshot Effects)');\n  }\n}\nfunction stopCommitSnapshotEffectsTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var count = effectCountInCurrentCommit;\n    effectCountInCurrentCommit = 0;\n    endMark(\"(Committing Snapshot Effects: \" + count + \" Total)\", '(Committing Snapshot Effects)', null);\n  }\n}\nfunction startCommitHostEffectsTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    effectCountInCurrentCommit = 0;\n    beginMark('(Committing Host Effects)');\n  }\n}\nfunction stopCommitHostEffectsTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var count = effectCountInCurrentCommit;\n    effectCountInCurrentCommit = 0;\n    endMark(\"(Committing Host Effects: \" + count + \" Total)\", '(Committing Host Effects)', null);\n  }\n}\nfunction startCommitLifeCyclesTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    effectCountInCurrentCommit = 0;\n    beginMark('(Calling Lifecycle Methods)');\n  }\n}\nfunction stopCommitLifeCyclesTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var count = effectCountInCurrentCommit;\n    effectCountInCurrentCommit = 0;\n    endMark(\"(Calling Lifecycle Methods: \" + count + \" Total)\", '(Calling Lifecycle Methods)', null);\n  }\n}\n\nvar valueStack = [];\nvar fiberStack;\n\n{\n  fiberStack = [];\n}\n\nvar index = -1;\n\nfunction createCursor(defaultValue) {\n  return {\n    current: defaultValue\n  };\n}\n\nfunction pop(cursor, fiber) {\n  if (index < 0) {\n    {\n      error('Unexpected pop.');\n    }\n\n    return;\n  }\n\n  {\n    if (fiber !== fiberStack[index]) {\n      error('Unexpected Fiber popped.');\n    }\n  }\n\n  cursor.current = valueStack[index];\n  valueStack[index] = null;\n\n  {\n    fiberStack[index] = null;\n  }\n\n  index--;\n}\n\nfunction push(cursor, value, fiber) {\n  index++;\n  valueStack[index] = cursor.current;\n\n  {\n    fiberStack[index] = fiber;\n  }\n\n  cursor.current = value;\n}\n\nvar warnedAboutMissingGetChildContext;\n\n{\n  warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n\n{\n  Object.freeze(emptyContextObject);\n} // A cursor to the current merged context object on the stack.\n\n\nvar contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.\n\nvar didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\n\nvar previousContext = emptyContextObject;\n\nfunction getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {\n  {\n    if (didPushOwnContextIfProvider && isContextProvider(Component)) {\n      // If the fiber is a context provider itself, when we read its context\n      // we may have already pushed its own child context on the stack. A context\n      // provider should not \"see\" its own child context. Therefore we read the\n      // previous (parent) context instead for a context provider.\n      return previousContext;\n    }\n\n    return contextStackCursor.current;\n  }\n}\n\nfunction cacheContext(workInProgress, unmaskedContext, maskedContext) {\n  {\n    var instance = workInProgress.stateNode;\n    instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;\n    instance.__reactInternalMemoizedMaskedChildContext = maskedContext;\n  }\n}\n\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n  {\n    var type = workInProgress.type;\n    var contextTypes = type.contextTypes;\n\n    if (!contextTypes) {\n      return emptyContextObject;\n    } // Avoid recreating masked context unless unmasked context has changed.\n    // Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n    // This may trigger infinite loops if componentWillReceiveProps calls setState.\n\n\n    var instance = workInProgress.stateNode;\n\n    if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {\n      return instance.__reactInternalMemoizedMaskedChildContext;\n    }\n\n    var context = {};\n\n    for (var key in contextTypes) {\n      context[key] = unmaskedContext[key];\n    }\n\n    {\n      var name = getComponentName(type) || 'Unknown';\n      checkPropTypes(contextTypes, context, 'context', name, getCurrentFiberStackInDev);\n    } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n    // Context is created before the class component is instantiated so check for instance.\n\n\n    if (instance) {\n      cacheContext(workInProgress, unmaskedContext, context);\n    }\n\n    return context;\n  }\n}\n\nfunction hasContextChanged() {\n  {\n    return didPerformWorkStackCursor.current;\n  }\n}\n\nfunction isContextProvider(type) {\n  {\n    var childContextTypes = type.childContextTypes;\n    return childContextTypes !== null && childContextTypes !== undefined;\n  }\n}\n\nfunction popContext(fiber) {\n  {\n    pop(didPerformWorkStackCursor, fiber);\n    pop(contextStackCursor, fiber);\n  }\n}\n\nfunction popTopLevelContextObject(fiber) {\n  {\n    pop(didPerformWorkStackCursor, fiber);\n    pop(contextStackCursor, fiber);\n  }\n}\n\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n  {\n    if (!(contextStackCursor.current === emptyContextObject)) {\n      {\n        throw Error( \"Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    push(contextStackCursor, context, fiber);\n    push(didPerformWorkStackCursor, didChange, fiber);\n  }\n}\n\nfunction processChildContext(fiber, type, parentContext) {\n  {\n    var instance = fiber.stateNode;\n    var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n    // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n\n    if (typeof instance.getChildContext !== 'function') {\n      {\n        var componentName = getComponentName(type) || 'Unknown';\n\n        if (!warnedAboutMissingGetChildContext[componentName]) {\n          warnedAboutMissingGetChildContext[componentName] = true;\n\n          error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n        }\n      }\n\n      return parentContext;\n    }\n\n    var childContext;\n    startPhaseTimer(fiber, 'getChildContext');\n    childContext = instance.getChildContext();\n    stopPhaseTimer();\n\n    for (var contextKey in childContext) {\n      if (!(contextKey in childContextTypes)) {\n        {\n          throw Error( (getComponentName(type) || 'Unknown') + \".getChildContext(): key \\\"\" + contextKey + \"\\\" is not defined in childContextTypes.\" );\n        }\n      }\n    }\n\n    {\n      var name = getComponentName(type) || 'Unknown';\n      checkPropTypes(childContextTypes, childContext, 'child context', name, // In practice, there is one case in which we won't get a stack. It's when\n      // somebody calls unstable_renderSubtreeIntoContainer() and we process\n      // context from the parent component instance. The stack will be missing\n      // because it's outside of the reconciliation, and so the pointer has not\n      // been set. This is rare and doesn't matter. We'll also remove that API.\n      getCurrentFiberStackInDev);\n    }\n\n    return _assign({}, parentContext, {}, childContext);\n  }\n}\n\nfunction pushContextProvider(workInProgress) {\n  {\n    var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.\n    // If the instance does not exist yet, we will push null at first,\n    // and replace it on the stack later when invalidating the context.\n\n    var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.\n    // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\n\n    previousContext = contextStackCursor.current;\n    push(contextStackCursor, memoizedMergedChildContext, workInProgress);\n    push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);\n    return true;\n  }\n}\n\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n  {\n    var instance = workInProgress.stateNode;\n\n    if (!instance) {\n      {\n        throw Error( \"Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    if (didChange) {\n      // Merge parent and own context.\n      // Skip this if we're not updating due to sCU.\n      // This avoids unnecessarily recomputing memoized values.\n      var mergedContext = processChildContext(workInProgress, type, previousContext);\n      instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.\n      // It is important to unwind the context in the reverse order.\n\n      pop(didPerformWorkStackCursor, workInProgress);\n      pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.\n\n      push(contextStackCursor, mergedContext, workInProgress);\n      push(didPerformWorkStackCursor, didChange, workInProgress);\n    } else {\n      pop(didPerformWorkStackCursor, workInProgress);\n      push(didPerformWorkStackCursor, didChange, workInProgress);\n    }\n  }\n}\n\nfunction findCurrentUnmaskedContext(fiber) {\n  {\n    // Currently this is only used with renderSubtreeIntoContainer; not sure if it\n    // makes sense elsewhere\n    if (!(isFiberMounted(fiber) && fiber.tag === ClassComponent)) {\n      {\n        throw Error( \"Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    var node = fiber;\n\n    do {\n      switch (node.tag) {\n        case HostRoot:\n          return node.stateNode.context;\n\n        case ClassComponent:\n          {\n            var Component = node.type;\n\n            if (isContextProvider(Component)) {\n              return node.stateNode.__reactInternalMemoizedMergedChildContext;\n            }\n\n            break;\n          }\n      }\n\n      node = node.return;\n    } while (node !== null);\n\n    {\n      {\n        throw Error( \"Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n  }\n}\n\nvar LegacyRoot = 0;\nvar BlockingRoot = 1;\nvar ConcurrentRoot = 2;\n\nvar Scheduler_runWithPriority = Scheduler.unstable_runWithPriority,\n    Scheduler_scheduleCallback = Scheduler.unstable_scheduleCallback,\n    Scheduler_cancelCallback = Scheduler.unstable_cancelCallback,\n    Scheduler_shouldYield = Scheduler.unstable_shouldYield,\n    Scheduler_requestPaint = Scheduler.unstable_requestPaint,\n    Scheduler_now = Scheduler.unstable_now,\n    Scheduler_getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n    Scheduler_ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n    Scheduler_UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n    Scheduler_NormalPriority = Scheduler.unstable_NormalPriority,\n    Scheduler_LowPriority = Scheduler.unstable_LowPriority,\n    Scheduler_IdlePriority = Scheduler.unstable_IdlePriority;\n\n{\n  // Provide explicit error message when production+profiling bundle of e.g.\n  // react-dom is used with production (non-profiling) bundle of\n  // scheduler/tracing\n  if (!(tracing.__interactionsRef != null && tracing.__interactionsRef.current != null)) {\n    {\n      throw Error( \"It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at http://fb.me/react-profiling\" );\n    }\n  }\n}\n\nvar fakeCallbackNode = {}; // Except for NoPriority, these correspond to Scheduler priorities. We use\n// ascending numbers so we can compare them like numbers. They start at 90 to\n// avoid clashing with Scheduler's priorities.\n\nvar ImmediatePriority = 99;\nvar UserBlockingPriority$1 = 98;\nvar NormalPriority = 97;\nvar LowPriority = 96;\nvar IdlePriority = 95; // NoPriority is the absence of priority. Also React-only.\n\nvar NoPriority = 90;\nvar shouldYield = Scheduler_shouldYield;\nvar requestPaint = // Fall back gracefully if we're running an older version of Scheduler.\nScheduler_requestPaint !== undefined ? Scheduler_requestPaint : function () {};\nvar syncQueue = null;\nvar immediateQueueCallbackNode = null;\nvar isFlushingSyncQueue = false;\nvar initialTimeMs = Scheduler_now(); // If the initial timestamp is reasonably small, use Scheduler's `now` directly.\n// This will be the case for modern browsers that support `performance.now`. In\n// older browsers, Scheduler falls back to `Date.now`, which returns a Unix\n// timestamp. In that case, subtract the module initialization time to simulate\n// the behavior of performance.now and keep our times small enough to fit\n// within 32 bits.\n// TODO: Consider lifting this into Scheduler.\n\nvar now = initialTimeMs < 10000 ? Scheduler_now : function () {\n  return Scheduler_now() - initialTimeMs;\n};\nfunction getCurrentPriorityLevel() {\n  switch (Scheduler_getCurrentPriorityLevel()) {\n    case Scheduler_ImmediatePriority:\n      return ImmediatePriority;\n\n    case Scheduler_UserBlockingPriority:\n      return UserBlockingPriority$1;\n\n    case Scheduler_NormalPriority:\n      return NormalPriority;\n\n    case Scheduler_LowPriority:\n      return LowPriority;\n\n    case Scheduler_IdlePriority:\n      return IdlePriority;\n\n    default:\n      {\n        {\n          throw Error( \"Unknown priority level.\" );\n        }\n      }\n\n  }\n}\n\nfunction reactPriorityToSchedulerPriority(reactPriorityLevel) {\n  switch (reactPriorityLevel) {\n    case ImmediatePriority:\n      return Scheduler_ImmediatePriority;\n\n    case UserBlockingPriority$1:\n      return Scheduler_UserBlockingPriority;\n\n    case NormalPriority:\n      return Scheduler_NormalPriority;\n\n    case LowPriority:\n      return Scheduler_LowPriority;\n\n    case IdlePriority:\n      return Scheduler_IdlePriority;\n\n    default:\n      {\n        {\n          throw Error( \"Unknown priority level.\" );\n        }\n      }\n\n  }\n}\n\nfunction runWithPriority$1(reactPriorityLevel, fn) {\n  var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);\n  return Scheduler_runWithPriority(priorityLevel, fn);\n}\nfunction scheduleCallback(reactPriorityLevel, callback, options) {\n  var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);\n  return Scheduler_scheduleCallback(priorityLevel, callback, options);\n}\nfunction scheduleSyncCallback(callback) {\n  // Push this callback into an internal queue. We'll flush these either in\n  // the next tick, or earlier if something calls `flushSyncCallbackQueue`.\n  if (syncQueue === null) {\n    syncQueue = [callback]; // Flush the queue in the next tick, at the earliest.\n\n    immediateQueueCallbackNode = Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueueImpl);\n  } else {\n    // Push onto existing queue. Don't need to schedule a callback because\n    // we already scheduled one when we created the queue.\n    syncQueue.push(callback);\n  }\n\n  return fakeCallbackNode;\n}\nfunction cancelCallback(callbackNode) {\n  if (callbackNode !== fakeCallbackNode) {\n    Scheduler_cancelCallback(callbackNode);\n  }\n}\nfunction flushSyncCallbackQueue() {\n  if (immediateQueueCallbackNode !== null) {\n    var node = immediateQueueCallbackNode;\n    immediateQueueCallbackNode = null;\n    Scheduler_cancelCallback(node);\n  }\n\n  flushSyncCallbackQueueImpl();\n}\n\nfunction flushSyncCallbackQueueImpl() {\n  if (!isFlushingSyncQueue && syncQueue !== null) {\n    // Prevent re-entrancy.\n    isFlushingSyncQueue = true;\n    var i = 0;\n\n    try {\n      var _isSync = true;\n      var queue = syncQueue;\n      runWithPriority$1(ImmediatePriority, function () {\n        for (; i < queue.length; i++) {\n          var callback = queue[i];\n\n          do {\n            callback = callback(_isSync);\n          } while (callback !== null);\n        }\n      });\n      syncQueue = null;\n    } catch (error) {\n      // If something throws, leave the remaining callbacks on the queue.\n      if (syncQueue !== null) {\n        syncQueue = syncQueue.slice(i + 1);\n      } // Resume flushing in the next tick\n\n\n      Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueue);\n      throw error;\n    } finally {\n      isFlushingSyncQueue = false;\n    }\n  }\n}\n\nvar NoMode = 0;\nvar StrictMode = 1; // TODO: Remove BlockingMode and ConcurrentMode by reading from the root\n// tag instead\n\nvar BlockingMode = 2;\nvar ConcurrentMode = 4;\nvar ProfileMode = 8;\n\n// Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\nvar NoWork = 0; // TODO: Think of a better name for Never. The key difference with Idle is that\n// Never work can be committed in an inconsistent state without tearing the UI.\n// The main example is offscreen content, like a hidden subtree. So one possible\n// name is Offscreen. However, it also includes dehydrated Suspense boundaries,\n// which are inconsistent in the sense that they haven't finished yet, but\n// aren't visibly inconsistent because the server rendered HTML matches what the\n// hydrated tree would look like.\n\nvar Never = 1; // Idle is slightly higher priority than Never. It must completely finish in\n// order to be consistent.\n\nvar Idle = 2; // Continuous Hydration is slightly higher than Idle and is used to increase\n// priority of hover targets.\n\nvar ContinuousHydration = 3;\nvar Sync = MAX_SIGNED_31_BIT_INT;\nvar Batched = Sync - 1;\nvar UNIT_SIZE = 10;\nvar MAGIC_NUMBER_OFFSET = Batched - 1; // 1 unit of expiration time represents 10ms.\n\nfunction msToExpirationTime(ms) {\n  // Always subtract from the offset so that we don't clash with the magic number for NoWork.\n  return MAGIC_NUMBER_OFFSET - (ms / UNIT_SIZE | 0);\n}\nfunction expirationTimeToMs(expirationTime) {\n  return (MAGIC_NUMBER_OFFSET - expirationTime) * UNIT_SIZE;\n}\n\nfunction ceiling(num, precision) {\n  return ((num / precision | 0) + 1) * precision;\n}\n\nfunction computeExpirationBucket(currentTime, expirationInMs, bucketSizeMs) {\n  return MAGIC_NUMBER_OFFSET - ceiling(MAGIC_NUMBER_OFFSET - currentTime + expirationInMs / UNIT_SIZE, bucketSizeMs / UNIT_SIZE);\n} // TODO: This corresponds to Scheduler's NormalPriority, not LowPriority. Update\n// the names to reflect.\n\n\nvar LOW_PRIORITY_EXPIRATION = 5000;\nvar LOW_PRIORITY_BATCH_SIZE = 250;\nfunction computeAsyncExpiration(currentTime) {\n  return computeExpirationBucket(currentTime, LOW_PRIORITY_EXPIRATION, LOW_PRIORITY_BATCH_SIZE);\n}\nfunction computeSuspenseExpiration(currentTime, timeoutMs) {\n  // TODO: Should we warn if timeoutMs is lower than the normal pri expiration time?\n  return computeExpirationBucket(currentTime, timeoutMs, LOW_PRIORITY_BATCH_SIZE);\n} // We intentionally set a higher expiration time for interactive updates in\n// dev than in production.\n//\n// If the main thread is being blocked so long that you hit the expiration,\n// it's a problem that could be solved with better scheduling.\n//\n// People will be more likely to notice this and fix it with the long\n// expiration time in development.\n//\n// In production we opt for better UX at the risk of masking scheduling\n// problems, by expiring fast.\n\nvar HIGH_PRIORITY_EXPIRATION =  500 ;\nvar HIGH_PRIORITY_BATCH_SIZE = 100;\nfunction computeInteractiveExpiration(currentTime) {\n  return computeExpirationBucket(currentTime, HIGH_PRIORITY_EXPIRATION, HIGH_PRIORITY_BATCH_SIZE);\n}\nfunction inferPriorityFromExpirationTime(currentTime, expirationTime) {\n  if (expirationTime === Sync) {\n    return ImmediatePriority;\n  }\n\n  if (expirationTime === Never || expirationTime === Idle) {\n    return IdlePriority;\n  }\n\n  var msUntil = expirationTimeToMs(expirationTime) - expirationTimeToMs(currentTime);\n\n  if (msUntil <= 0) {\n    return ImmediatePriority;\n  }\n\n  if (msUntil <= HIGH_PRIORITY_EXPIRATION + HIGH_PRIORITY_BATCH_SIZE) {\n    return UserBlockingPriority$1;\n  }\n\n  if (msUntil <= LOW_PRIORITY_EXPIRATION + LOW_PRIORITY_BATCH_SIZE) {\n    return NormalPriority;\n  } // TODO: Handle LowPriority\n  // Assume anything lower has idle priority\n\n\n  return IdlePriority;\n}\n\nvar ReactStrictModeWarnings = {\n  recordUnsafeLifecycleWarnings: function (fiber, instance) {},\n  flushPendingUnsafeLifecycleWarnings: function () {},\n  recordLegacyContextWarning: function (fiber, instance) {},\n  flushLegacyContextWarning: function () {},\n  discardPendingWarnings: function () {}\n};\n\n{\n  var findStrictRoot = function (fiber) {\n    var maybeStrictRoot = null;\n    var node = fiber;\n\n    while (node !== null) {\n      if (node.mode & StrictMode) {\n        maybeStrictRoot = node;\n      }\n\n      node = node.return;\n    }\n\n    return maybeStrictRoot;\n  };\n\n  var setToSortedString = function (set) {\n    var array = [];\n    set.forEach(function (value) {\n      array.push(value);\n    });\n    return array.sort().join(', ');\n  };\n\n  var pendingComponentWillMountWarnings = [];\n  var pendingUNSAFE_ComponentWillMountWarnings = [];\n  var pendingComponentWillReceivePropsWarnings = [];\n  var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n  var pendingComponentWillUpdateWarnings = [];\n  var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.\n\n  var didWarnAboutUnsafeLifecycles = new Set();\n\n  ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {\n    // Dedup strategy: Warn once per component.\n    if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {\n      return;\n    }\n\n    if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.\n    instance.componentWillMount.__suppressDeprecationWarning !== true) {\n      pendingComponentWillMountWarnings.push(fiber);\n    }\n\n    if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillMount === 'function') {\n      pendingUNSAFE_ComponentWillMountWarnings.push(fiber);\n    }\n\n    if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n      pendingComponentWillReceivePropsWarnings.push(fiber);\n    }\n\n    if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n      pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);\n    }\n\n    if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n      pendingComponentWillUpdateWarnings.push(fiber);\n    }\n\n    if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {\n      pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);\n    }\n  };\n\n  ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n    // We do an initial pass to gather component names\n    var componentWillMountUniqueNames = new Set();\n\n    if (pendingComponentWillMountWarnings.length > 0) {\n      pendingComponentWillMountWarnings.forEach(function (fiber) {\n        componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingComponentWillMountWarnings = [];\n    }\n\n    var UNSAFE_componentWillMountUniqueNames = new Set();\n\n    if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {\n      pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n        UNSAFE_componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingUNSAFE_ComponentWillMountWarnings = [];\n    }\n\n    var componentWillReceivePropsUniqueNames = new Set();\n\n    if (pendingComponentWillReceivePropsWarnings.length > 0) {\n      pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n        componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingComponentWillReceivePropsWarnings = [];\n    }\n\n    var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n\n    if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {\n      pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {\n        UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n    }\n\n    var componentWillUpdateUniqueNames = new Set();\n\n    if (pendingComponentWillUpdateWarnings.length > 0) {\n      pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n        componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingComponentWillUpdateWarnings = [];\n    }\n\n    var UNSAFE_componentWillUpdateUniqueNames = new Set();\n\n    if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {\n      pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n        UNSAFE_componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingUNSAFE_ComponentWillUpdateWarnings = [];\n    } // Finally, we flush all the warnings\n    // UNSAFE_ ones before the deprecated ones, since they'll be 'louder'\n\n\n    if (UNSAFE_componentWillMountUniqueNames.size > 0) {\n      var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);\n\n      error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '\\nPlease update the following components: %s', sortedNames);\n    }\n\n    if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {\n      var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);\n\n      error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, \" + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n' + '\\nPlease update the following components: %s', _sortedNames);\n    }\n\n    if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {\n      var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);\n\n      error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '\\nPlease update the following components: %s', _sortedNames2);\n    }\n\n    if (componentWillMountUniqueNames.size > 0) {\n      var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);\n\n      warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames3);\n    }\n\n    if (componentWillReceivePropsUniqueNames.size > 0) {\n      var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);\n\n      warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, refactor your \" + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames4);\n    }\n\n    if (componentWillUpdateUniqueNames.size > 0) {\n      var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);\n\n      warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames5);\n    }\n  };\n\n  var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.\n\n  var didWarnAboutLegacyContext = new Set();\n\n  ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {\n    var strictRoot = findStrictRoot(fiber);\n\n    if (strictRoot === null) {\n      error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n\n      return;\n    } // Dedup strategy: Warn once per component.\n\n\n    if (didWarnAboutLegacyContext.has(fiber.type)) {\n      return;\n    }\n\n    var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);\n\n    if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {\n      if (warningsForRoot === undefined) {\n        warningsForRoot = [];\n        pendingLegacyContextWarning.set(strictRoot, warningsForRoot);\n      }\n\n      warningsForRoot.push(fiber);\n    }\n  };\n\n  ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n    pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {\n      if (fiberArray.length === 0) {\n        return;\n      }\n\n      var firstFiber = fiberArray[0];\n      var uniqueNames = new Set();\n      fiberArray.forEach(function (fiber) {\n        uniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutLegacyContext.add(fiber.type);\n      });\n      var sortedNames = setToSortedString(uniqueNames);\n      var firstComponentStack = getStackByFiberInDevAndProd(firstFiber);\n\n      error('Legacy context API has been detected within a strict-mode tree.' + '\\n\\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here: https://fb.me/react-legacy-context' + '%s', sortedNames, firstComponentStack);\n    });\n  };\n\n  ReactStrictModeWarnings.discardPendingWarnings = function () {\n    pendingComponentWillMountWarnings = [];\n    pendingUNSAFE_ComponentWillMountWarnings = [];\n    pendingComponentWillReceivePropsWarnings = [];\n    pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n    pendingComponentWillUpdateWarnings = [];\n    pendingUNSAFE_ComponentWillUpdateWarnings = [];\n    pendingLegacyContextWarning = new Map();\n  };\n}\n\nvar resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below.\n\nvar failedBoundaries = null;\nvar setRefreshHandler = function (handler) {\n  {\n    resolveFamily = handler;\n  }\n};\nfunction resolveFunctionForHotReloading(type) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return type;\n    }\n\n    var family = resolveFamily(type);\n\n    if (family === undefined) {\n      return type;\n    } // Use the latest known implementation.\n\n\n    return family.current;\n  }\n}\nfunction resolveClassForHotReloading(type) {\n  // No implementation differences.\n  return resolveFunctionForHotReloading(type);\n}\nfunction resolveForwardRefForHotReloading(type) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return type;\n    }\n\n    var family = resolveFamily(type);\n\n    if (family === undefined) {\n      // Check if we're dealing with a real forwardRef. Don't want to crash early.\n      if (type !== null && type !== undefined && typeof type.render === 'function') {\n        // ForwardRef is special because its resolved .type is an object,\n        // but it's possible that we only have its inner render function in the map.\n        // If that inner render function is different, we'll build a new forwardRef type.\n        var currentRender = resolveFunctionForHotReloading(type.render);\n\n        if (type.render !== currentRender) {\n          var syntheticType = {\n            $$typeof: REACT_FORWARD_REF_TYPE,\n            render: currentRender\n          };\n\n          if (type.displayName !== undefined) {\n            syntheticType.displayName = type.displayName;\n          }\n\n          return syntheticType;\n        }\n      }\n\n      return type;\n    } // Use the latest known implementation.\n\n\n    return family.current;\n  }\n}\nfunction isCompatibleFamilyForHotReloading(fiber, element) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return false;\n    }\n\n    var prevType = fiber.elementType;\n    var nextType = element.type; // If we got here, we know types aren't === equal.\n\n    var needsCompareFamilies = false;\n    var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;\n\n    switch (fiber.tag) {\n      case ClassComponent:\n        {\n          if (typeof nextType === 'function') {\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      case FunctionComponent:\n        {\n          if (typeof nextType === 'function') {\n            needsCompareFamilies = true;\n          } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n            // We don't know the inner type yet.\n            // We're going to assume that the lazy inner type is stable,\n            // and so it is sufficient to avoid reconciling it away.\n            // We're not going to unwrap or actually use the new lazy type.\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      case ForwardRef:\n        {\n          if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {\n            needsCompareFamilies = true;\n          } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      case MemoComponent:\n      case SimpleMemoComponent:\n        {\n          if ($$typeofNextType === REACT_MEMO_TYPE) {\n            // TODO: if it was but can no longer be simple,\n            // we shouldn't set this.\n            needsCompareFamilies = true;\n          } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      default:\n        return false;\n    } // Check if both types have a family and it's the same one.\n\n\n    if (needsCompareFamilies) {\n      // Note: memo() and forwardRef() we'll compare outer rather than inner type.\n      // This means both of them need to be registered to preserve state.\n      // If we unwrapped and compared the inner types for wrappers instead,\n      // then we would risk falsely saying two separate memo(Foo)\n      // calls are equivalent because they wrap the same Foo function.\n      var prevFamily = resolveFamily(prevType);\n\n      if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n}\nfunction markFailedErrorBoundaryForHotReloading(fiber) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return;\n    }\n\n    if (typeof WeakSet !== 'function') {\n      return;\n    }\n\n    if (failedBoundaries === null) {\n      failedBoundaries = new WeakSet();\n    }\n\n    failedBoundaries.add(fiber);\n  }\n}\nvar scheduleRefresh = function (root, update) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return;\n    }\n\n    var staleFamilies = update.staleFamilies,\n        updatedFamilies = update.updatedFamilies;\n    flushPassiveEffects();\n    flushSync(function () {\n      scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);\n    });\n  }\n};\nvar scheduleRoot = function (root, element) {\n  {\n    if (root.context !== emptyContextObject) {\n      // Super edge case: root has a legacy _renderSubtree context\n      // but we don't know the parentComponent so we can't pass it.\n      // Just ignore. We'll delete this with _renderSubtree code path later.\n      return;\n    }\n\n    flushPassiveEffects();\n    syncUpdates(function () {\n      updateContainer(element, root, null, null);\n    });\n  }\n};\n\nfunction scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {\n  {\n    var alternate = fiber.alternate,\n        child = fiber.child,\n        sibling = fiber.sibling,\n        tag = fiber.tag,\n        type = fiber.type;\n    var candidateType = null;\n\n    switch (tag) {\n      case FunctionComponent:\n      case SimpleMemoComponent:\n      case ClassComponent:\n        candidateType = type;\n        break;\n\n      case ForwardRef:\n        candidateType = type.render;\n        break;\n    }\n\n    if (resolveFamily === null) {\n      throw new Error('Expected resolveFamily to be set during hot reload.');\n    }\n\n    var needsRender = false;\n    var needsRemount = false;\n\n    if (candidateType !== null) {\n      var family = resolveFamily(candidateType);\n\n      if (family !== undefined) {\n        if (staleFamilies.has(family)) {\n          needsRemount = true;\n        } else if (updatedFamilies.has(family)) {\n          if (tag === ClassComponent) {\n            needsRemount = true;\n          } else {\n            needsRender = true;\n          }\n        }\n      }\n    }\n\n    if (failedBoundaries !== null) {\n      if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) {\n        needsRemount = true;\n      }\n    }\n\n    if (needsRemount) {\n      fiber._debugNeedsRemount = true;\n    }\n\n    if (needsRemount || needsRender) {\n      scheduleWork(fiber, Sync);\n    }\n\n    if (child !== null && !needsRemount) {\n      scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);\n    }\n\n    if (sibling !== null) {\n      scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);\n    }\n  }\n}\n\nvar findHostInstancesForRefresh = function (root, families) {\n  {\n    var hostInstances = new Set();\n    var types = new Set(families.map(function (family) {\n      return family.current;\n    }));\n    findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);\n    return hostInstances;\n  }\n};\n\nfunction findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {\n  {\n    var child = fiber.child,\n        sibling = fiber.sibling,\n        tag = fiber.tag,\n        type = fiber.type;\n    var candidateType = null;\n\n    switch (tag) {\n      case FunctionComponent:\n      case SimpleMemoComponent:\n      case ClassComponent:\n        candidateType = type;\n        break;\n\n      case ForwardRef:\n        candidateType = type.render;\n        break;\n    }\n\n    var didMatch = false;\n\n    if (candidateType !== null) {\n      if (types.has(candidateType)) {\n        didMatch = true;\n      }\n    }\n\n    if (didMatch) {\n      // We have a match. This only drills down to the closest host components.\n      // There's no need to search deeper because for the purpose of giving\n      // visual feedback, \"flashing\" outermost parent rectangles is sufficient.\n      findHostInstancesForFiberShallowly(fiber, hostInstances);\n    } else {\n      // If there's no match, maybe there will be one further down in the child tree.\n      if (child !== null) {\n        findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);\n      }\n    }\n\n    if (sibling !== null) {\n      findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);\n    }\n  }\n}\n\nfunction findHostInstancesForFiberShallowly(fiber, hostInstances) {\n  {\n    var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);\n\n    if (foundHostInstances) {\n      return;\n    } // If we didn't find any host children, fallback to closest host parent.\n\n\n    var node = fiber;\n\n    while (true) {\n      switch (node.tag) {\n        case HostComponent:\n          hostInstances.add(node.stateNode);\n          return;\n\n        case HostPortal:\n          hostInstances.add(node.stateNode.containerInfo);\n          return;\n\n        case HostRoot:\n          hostInstances.add(node.stateNode.containerInfo);\n          return;\n      }\n\n      if (node.return === null) {\n        throw new Error('Expected to reach root first.');\n      }\n\n      node = node.return;\n    }\n  }\n}\n\nfunction findChildHostInstancesForFiberShallowly(fiber, hostInstances) {\n  {\n    var node = fiber;\n    var foundHostInstances = false;\n\n    while (true) {\n      if (node.tag === HostComponent) {\n        // We got a match.\n        foundHostInstances = true;\n        hostInstances.add(node.stateNode); // There may still be more, so keep searching.\n      } else if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n\n      if (node === fiber) {\n        return foundHostInstances;\n      }\n\n      while (node.sibling === null) {\n        if (node.return === null || node.return === fiber) {\n          return foundHostInstances;\n        }\n\n        node = node.return;\n      }\n\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n\n  return false;\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n  if (Component && Component.defaultProps) {\n    // Resolve default props. Taken from ReactElement\n    var props = _assign({}, baseProps);\n\n    var defaultProps = Component.defaultProps;\n\n    for (var propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n\n    return props;\n  }\n\n  return baseProps;\n}\nfunction readLazyComponentType(lazyComponent) {\n  initializeLazyComponentType(lazyComponent);\n\n  if (lazyComponent._status !== Resolved) {\n    throw lazyComponent._result;\n  }\n\n  return lazyComponent._result;\n}\n\nvar valueCursor = createCursor(null);\nvar rendererSigil;\n\n{\n  // Use this to detect multiple renderers using the same context\n  rendererSigil = {};\n}\n\nvar currentlyRenderingFiber = null;\nvar lastContextDependency = null;\nvar lastContextWithAllBitsObserved = null;\nvar isDisallowedContextReadInDEV = false;\nfunction resetContextDependencies() {\n  // This is called right before React yields execution, to ensure `readContext`\n  // cannot be called outside the render phase.\n  currentlyRenderingFiber = null;\n  lastContextDependency = null;\n  lastContextWithAllBitsObserved = null;\n\n  {\n    isDisallowedContextReadInDEV = false;\n  }\n}\nfunction enterDisallowedContextReadInDEV() {\n  {\n    isDisallowedContextReadInDEV = true;\n  }\n}\nfunction exitDisallowedContextReadInDEV() {\n  {\n    isDisallowedContextReadInDEV = false;\n  }\n}\nfunction pushProvider(providerFiber, nextValue) {\n  var context = providerFiber.type._context;\n\n  {\n    push(valueCursor, context._currentValue, providerFiber);\n    context._currentValue = nextValue;\n\n    {\n      if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {\n        error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n      }\n\n      context._currentRenderer = rendererSigil;\n    }\n  }\n}\nfunction popProvider(providerFiber) {\n  var currentValue = valueCursor.current;\n  pop(valueCursor, providerFiber);\n  var context = providerFiber.type._context;\n\n  {\n    context._currentValue = currentValue;\n  }\n}\nfunction calculateChangedBits(context, newValue, oldValue) {\n  if (objectIs(oldValue, newValue)) {\n    // No change\n    return 0;\n  } else {\n    var changedBits = typeof context._calculateChangedBits === 'function' ? context._calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n    {\n      if ((changedBits & MAX_SIGNED_31_BIT_INT) !== changedBits) {\n        error('calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits);\n      }\n    }\n\n    return changedBits | 0;\n  }\n}\nfunction scheduleWorkOnParentPath(parent, renderExpirationTime) {\n  // Update the child expiration time of all the ancestors, including\n  // the alternates.\n  var node = parent;\n\n  while (node !== null) {\n    var alternate = node.alternate;\n\n    if (node.childExpirationTime < renderExpirationTime) {\n      node.childExpirationTime = renderExpirationTime;\n\n      if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n        alternate.childExpirationTime = renderExpirationTime;\n      }\n    } else if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n      alternate.childExpirationTime = renderExpirationTime;\n    } else {\n      // Neither alternate was updated, which means the rest of the\n      // ancestor path already has sufficient priority.\n      break;\n    }\n\n    node = node.return;\n  }\n}\nfunction propagateContextChange(workInProgress, context, changedBits, renderExpirationTime) {\n  var fiber = workInProgress.child;\n\n  if (fiber !== null) {\n    // Set the return pointer of the child to the work-in-progress fiber.\n    fiber.return = workInProgress;\n  }\n\n  while (fiber !== null) {\n    var nextFiber = void 0; // Visit this fiber.\n\n    var list = fiber.dependencies;\n\n    if (list !== null) {\n      nextFiber = fiber.child;\n      var dependency = list.firstContext;\n\n      while (dependency !== null) {\n        // Check if the context matches.\n        if (dependency.context === context && (dependency.observedBits & changedBits) !== 0) {\n          // Match! Schedule an update on this fiber.\n          if (fiber.tag === ClassComponent) {\n            // Schedule a force update on the work-in-progress.\n            var update = createUpdate(renderExpirationTime, null);\n            update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the\n            // update to the current fiber, too, which means it will persist even if\n            // this render is thrown away. Since it's a race condition, not sure it's\n            // worth fixing.\n\n            enqueueUpdate(fiber, update);\n          }\n\n          if (fiber.expirationTime < renderExpirationTime) {\n            fiber.expirationTime = renderExpirationTime;\n          }\n\n          var alternate = fiber.alternate;\n\n          if (alternate !== null && alternate.expirationTime < renderExpirationTime) {\n            alternate.expirationTime = renderExpirationTime;\n          }\n\n          scheduleWorkOnParentPath(fiber.return, renderExpirationTime); // Mark the expiration time on the list, too.\n\n          if (list.expirationTime < renderExpirationTime) {\n            list.expirationTime = renderExpirationTime;\n          } // Since we already found a match, we can stop traversing the\n          // dependency list.\n\n\n          break;\n        }\n\n        dependency = dependency.next;\n      }\n    } else if (fiber.tag === ContextProvider) {\n      // Don't scan deeper if this is a matching provider\n      nextFiber = fiber.type === workInProgress.type ? null : fiber.child;\n    } else {\n      // Traverse down.\n      nextFiber = fiber.child;\n    }\n\n    if (nextFiber !== null) {\n      // Set the return pointer of the child to the work-in-progress fiber.\n      nextFiber.return = fiber;\n    } else {\n      // No child. Traverse to next sibling.\n      nextFiber = fiber;\n\n      while (nextFiber !== null) {\n        if (nextFiber === workInProgress) {\n          // We're back to the root of this subtree. Exit.\n          nextFiber = null;\n          break;\n        }\n\n        var sibling = nextFiber.sibling;\n\n        if (sibling !== null) {\n          // Set the return pointer of the sibling to the work-in-progress fiber.\n          sibling.return = nextFiber.return;\n          nextFiber = sibling;\n          break;\n        } // No more siblings. Traverse up.\n\n\n        nextFiber = nextFiber.return;\n      }\n    }\n\n    fiber = nextFiber;\n  }\n}\nfunction prepareToReadContext(workInProgress, renderExpirationTime) {\n  currentlyRenderingFiber = workInProgress;\n  lastContextDependency = null;\n  lastContextWithAllBitsObserved = null;\n  var dependencies = workInProgress.dependencies;\n\n  if (dependencies !== null) {\n    var firstContext = dependencies.firstContext;\n\n    if (firstContext !== null) {\n      if (dependencies.expirationTime >= renderExpirationTime) {\n        // Context list has a pending update. Mark that this fiber performed work.\n        markWorkInProgressReceivedUpdate();\n      } // Reset the work-in-progress list\n\n\n      dependencies.firstContext = null;\n    }\n  }\n}\nfunction readContext(context, observedBits) {\n  {\n    // This warning would fire if you read context inside a Hook like useMemo.\n    // Unlike the class check below, it's not enforced in production for perf.\n    if (isDisallowedContextReadInDEV) {\n      error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n    }\n  }\n\n  if (lastContextWithAllBitsObserved === context) ; else if (observedBits === false || observedBits === 0) ; else {\n    var resolvedObservedBits; // Avoid deopting on observable arguments or heterogeneous types.\n\n    if (typeof observedBits !== 'number' || observedBits === MAX_SIGNED_31_BIT_INT) {\n      // Observe all updates.\n      lastContextWithAllBitsObserved = context;\n      resolvedObservedBits = MAX_SIGNED_31_BIT_INT;\n    } else {\n      resolvedObservedBits = observedBits;\n    }\n\n    var contextItem = {\n      context: context,\n      observedBits: resolvedObservedBits,\n      next: null\n    };\n\n    if (lastContextDependency === null) {\n      if (!(currentlyRenderingFiber !== null)) {\n        {\n          throw Error( \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\" );\n        }\n      } // This is the first dependency for this component. Create a new list.\n\n\n      lastContextDependency = contextItem;\n      currentlyRenderingFiber.dependencies = {\n        expirationTime: NoWork,\n        firstContext: contextItem,\n        responders: null\n      };\n    } else {\n      // Append a new context item.\n      lastContextDependency = lastContextDependency.next = contextItem;\n    }\n  }\n\n  return  context._currentValue ;\n}\n\nvar UpdateState = 0;\nvar ReplaceState = 1;\nvar ForceUpdate = 2;\nvar CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.\n// It should only be read right after calling `processUpdateQueue`, via\n// `checkHasForceUpdateAfterProcessing`.\n\nvar hasForceUpdate = false;\nvar didWarnUpdateInsideUpdate;\nvar currentlyProcessingQueue;\n\n{\n  didWarnUpdateInsideUpdate = false;\n  currentlyProcessingQueue = null;\n}\n\nfunction initializeUpdateQueue(fiber) {\n  var queue = {\n    baseState: fiber.memoizedState,\n    baseQueue: null,\n    shared: {\n      pending: null\n    },\n    effects: null\n  };\n  fiber.updateQueue = queue;\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  // Clone the update queue from current. Unless it's already a clone.\n  var queue = workInProgress.updateQueue;\n  var currentQueue = current.updateQueue;\n\n  if (queue === currentQueue) {\n    var clone = {\n      baseState: currentQueue.baseState,\n      baseQueue: currentQueue.baseQueue,\n      shared: currentQueue.shared,\n      effects: currentQueue.effects\n    };\n    workInProgress.updateQueue = clone;\n  }\n}\nfunction createUpdate(expirationTime, suspenseConfig) {\n  var update = {\n    expirationTime: expirationTime,\n    suspenseConfig: suspenseConfig,\n    tag: UpdateState,\n    payload: null,\n    callback: null,\n    next: null\n  };\n  update.next = update;\n\n  {\n    update.priority = getCurrentPriorityLevel();\n  }\n\n  return update;\n}\nfunction enqueueUpdate(fiber, update) {\n  var updateQueue = fiber.updateQueue;\n\n  if (updateQueue === null) {\n    // Only occurs if the fiber has been unmounted.\n    return;\n  }\n\n  var sharedQueue = updateQueue.shared;\n  var pending = sharedQueue.pending;\n\n  if (pending === null) {\n    // This is the first update. Create a circular list.\n    update.next = update;\n  } else {\n    update.next = pending.next;\n    pending.next = update;\n  }\n\n  sharedQueue.pending = update;\n\n  {\n    if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {\n      error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');\n\n      didWarnUpdateInsideUpdate = true;\n    }\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, update) {\n  var current = workInProgress.alternate;\n\n  if (current !== null) {\n    // Ensure the work-in-progress queue is a clone\n    cloneUpdateQueue(current, workInProgress);\n  } // Captured updates go only on the work-in-progress queue.\n\n\n  var queue = workInProgress.updateQueue; // Append the update to the end of the list.\n\n  var last = queue.baseQueue;\n\n  if (last === null) {\n    queue.baseQueue = update.next = update;\n    update.next = update;\n  } else {\n    update.next = last.next;\n    last.next = update;\n  }\n}\n\nfunction getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {\n  switch (update.tag) {\n    case ReplaceState:\n      {\n        var payload = update.payload;\n\n        if (typeof payload === 'function') {\n          // Updater function\n          {\n            enterDisallowedContextReadInDEV();\n\n            if ( workInProgress.mode & StrictMode) {\n              payload.call(instance, prevState, nextProps);\n            }\n          }\n\n          var nextState = payload.call(instance, prevState, nextProps);\n\n          {\n            exitDisallowedContextReadInDEV();\n          }\n\n          return nextState;\n        } // State object\n\n\n        return payload;\n      }\n\n    case CaptureUpdate:\n      {\n        workInProgress.effectTag = workInProgress.effectTag & ~ShouldCapture | DidCapture;\n      }\n    // Intentional fallthrough\n\n    case UpdateState:\n      {\n        var _payload = update.payload;\n        var partialState;\n\n        if (typeof _payload === 'function') {\n          // Updater function\n          {\n            enterDisallowedContextReadInDEV();\n\n            if ( workInProgress.mode & StrictMode) {\n              _payload.call(instance, prevState, nextProps);\n            }\n          }\n\n          partialState = _payload.call(instance, prevState, nextProps);\n\n          {\n            exitDisallowedContextReadInDEV();\n          }\n        } else {\n          // Partial state object\n          partialState = _payload;\n        }\n\n        if (partialState === null || partialState === undefined) {\n          // Null and undefined are treated as no-ops.\n          return prevState;\n        } // Merge the partial state and the previous state.\n\n\n        return _assign({}, prevState, partialState);\n      }\n\n    case ForceUpdate:\n      {\n        hasForceUpdate = true;\n        return prevState;\n      }\n  }\n\n  return prevState;\n}\n\nfunction processUpdateQueue(workInProgress, props, instance, renderExpirationTime) {\n  // This is always non-null on a ClassComponent or HostRoot\n  var queue = workInProgress.updateQueue;\n  hasForceUpdate = false;\n\n  {\n    currentlyProcessingQueue = queue.shared;\n  } // The last rebase update that is NOT part of the base state.\n\n\n  var baseQueue = queue.baseQueue; // The last pending update that hasn't been processed yet.\n\n  var pendingQueue = queue.shared.pending;\n\n  if (pendingQueue !== null) {\n    // We have new updates that haven't been processed yet.\n    // We'll add them to the base queue.\n    if (baseQueue !== null) {\n      // Merge the pending queue and the base queue.\n      var baseFirst = baseQueue.next;\n      var pendingFirst = pendingQueue.next;\n      baseQueue.next = pendingFirst;\n      pendingQueue.next = baseFirst;\n    }\n\n    baseQueue = pendingQueue;\n    queue.shared.pending = null; // TODO: Pass `current` as argument\n\n    var current = workInProgress.alternate;\n\n    if (current !== null) {\n      var currentQueue = current.updateQueue;\n\n      if (currentQueue !== null) {\n        currentQueue.baseQueue = pendingQueue;\n      }\n    }\n  } // These values may change as we process the queue.\n\n\n  if (baseQueue !== null) {\n    var first = baseQueue.next; // Iterate through the list of updates to compute the result.\n\n    var newState = queue.baseState;\n    var newExpirationTime = NoWork;\n    var newBaseState = null;\n    var newBaseQueueFirst = null;\n    var newBaseQueueLast = null;\n\n    if (first !== null) {\n      var update = first;\n\n      do {\n        var updateExpirationTime = update.expirationTime;\n\n        if (updateExpirationTime < renderExpirationTime) {\n          // Priority is insufficient. Skip this update. If this is the first\n          // skipped update, the previous update/state is the new base\n          // update/state.\n          var clone = {\n            expirationTime: update.expirationTime,\n            suspenseConfig: update.suspenseConfig,\n            tag: update.tag,\n            payload: update.payload,\n            callback: update.callback,\n            next: null\n          };\n\n          if (newBaseQueueLast === null) {\n            newBaseQueueFirst = newBaseQueueLast = clone;\n            newBaseState = newState;\n          } else {\n            newBaseQueueLast = newBaseQueueLast.next = clone;\n          } // Update the remaining priority in the queue.\n\n\n          if (updateExpirationTime > newExpirationTime) {\n            newExpirationTime = updateExpirationTime;\n          }\n        } else {\n          // This update does have sufficient priority.\n          if (newBaseQueueLast !== null) {\n            var _clone = {\n              expirationTime: Sync,\n              // This update is going to be committed so we never want uncommit it.\n              suspenseConfig: update.suspenseConfig,\n              tag: update.tag,\n              payload: update.payload,\n              callback: update.callback,\n              next: null\n            };\n            newBaseQueueLast = newBaseQueueLast.next = _clone;\n          } // Mark the event time of this update as relevant to this render pass.\n          // TODO: This should ideally use the true event time of this update rather than\n          // its priority which is a derived and not reverseable value.\n          // TODO: We should skip this update if it was already committed but currently\n          // we have no way of detecting the difference between a committed and suspended\n          // update here.\n\n\n          markRenderEventTimeAndConfig(updateExpirationTime, update.suspenseConfig); // Process this update.\n\n          newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);\n          var callback = update.callback;\n\n          if (callback !== null) {\n            workInProgress.effectTag |= Callback;\n            var effects = queue.effects;\n\n            if (effects === null) {\n              queue.effects = [update];\n            } else {\n              effects.push(update);\n            }\n          }\n        }\n\n        update = update.next;\n\n        if (update === null || update === first) {\n          pendingQueue = queue.shared.pending;\n\n          if (pendingQueue === null) {\n            break;\n          } else {\n            // An update was scheduled from inside a reducer. Add the new\n            // pending updates to the end of the list and keep processing.\n            update = baseQueue.next = pendingQueue.next;\n            pendingQueue.next = first;\n            queue.baseQueue = baseQueue = pendingQueue;\n            queue.shared.pending = null;\n          }\n        }\n      } while (true);\n    }\n\n    if (newBaseQueueLast === null) {\n      newBaseState = newState;\n    } else {\n      newBaseQueueLast.next = newBaseQueueFirst;\n    }\n\n    queue.baseState = newBaseState;\n    queue.baseQueue = newBaseQueueLast; // Set the remaining expiration time to be whatever is remaining in the queue.\n    // This should be fine because the only two other things that contribute to\n    // expiration time are props and context. We're already in the middle of the\n    // begin phase by the time we start processing the queue, so we've already\n    // dealt with the props. Context in components that specify\n    // shouldComponentUpdate is tricky; but we'll have to account for\n    // that regardless.\n\n    markUnprocessedUpdateTime(newExpirationTime);\n    workInProgress.expirationTime = newExpirationTime;\n    workInProgress.memoizedState = newState;\n  }\n\n  {\n    currentlyProcessingQueue = null;\n  }\n}\n\nfunction callCallback(callback, context) {\n  if (!(typeof callback === 'function')) {\n    {\n      throw Error( \"Invalid argument passed as callback. Expected a function. Instead received: \" + callback );\n    }\n  }\n\n  callback.call(context);\n}\n\nfunction resetHasForceUpdateBeforeProcessing() {\n  hasForceUpdate = false;\n}\nfunction checkHasForceUpdateAfterProcessing() {\n  return hasForceUpdate;\n}\nfunction commitUpdateQueue(finishedWork, finishedQueue, instance) {\n  // Commit the effects\n  var effects = finishedQueue.effects;\n  finishedQueue.effects = null;\n\n  if (effects !== null) {\n    for (var i = 0; i < effects.length; i++) {\n      var effect = effects[i];\n      var callback = effect.callback;\n\n      if (callback !== null) {\n        effect.callback = null;\n        callCallback(callback, instance);\n      }\n    }\n  }\n}\n\nvar ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig;\nfunction requestCurrentSuspenseConfig() {\n  return ReactCurrentBatchConfig.suspense;\n}\n\nvar fakeInternalInstance = {};\nvar isArray = Array.isArray; // React.Component uses a shared frozen object by default.\n// We'll use it to determine whether we need to initialize legacy refs.\n\nvar emptyRefsObject = new React.Component().refs;\nvar didWarnAboutStateAssignmentForComponent;\nvar didWarnAboutUninitializedState;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;\nvar didWarnAboutLegacyLifecyclesAndDerivedState;\nvar didWarnAboutUndefinedDerivedState;\nvar warnOnUndefinedDerivedState;\nvar warnOnInvalidCallback;\nvar didWarnAboutDirectlyAssigningPropsToState;\nvar didWarnAboutContextTypeAndContextTypes;\nvar didWarnAboutInvalidateContextType;\n\n{\n  didWarnAboutStateAssignmentForComponent = new Set();\n  didWarnAboutUninitializedState = new Set();\n  didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n  didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n  didWarnAboutDirectlyAssigningPropsToState = new Set();\n  didWarnAboutUndefinedDerivedState = new Set();\n  didWarnAboutContextTypeAndContextTypes = new Set();\n  didWarnAboutInvalidateContextType = new Set();\n  var didWarnOnInvalidCallback = new Set();\n\n  warnOnInvalidCallback = function (callback, callerName) {\n    if (callback === null || typeof callback === 'function') {\n      return;\n    }\n\n    var key = callerName + \"_\" + callback;\n\n    if (!didWarnOnInvalidCallback.has(key)) {\n      didWarnOnInvalidCallback.add(key);\n\n      error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n    }\n  };\n\n  warnOnUndefinedDerivedState = function (type, partialState) {\n    if (partialState === undefined) {\n      var componentName = getComponentName(type) || 'Component';\n\n      if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n        didWarnAboutUndefinedDerivedState.add(componentName);\n\n        error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n      }\n    }\n  }; // This is so gross but it's at least non-critical and can be removed if\n  // it causes problems. This is meant to give a nicer error message for\n  // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n  // ...)) which otherwise throws a \"_processChildContext is not a function\"\n  // exception.\n\n\n  Object.defineProperty(fakeInternalInstance, '_processChildContext', {\n    enumerable: false,\n    value: function () {\n      {\n        {\n          throw Error( \"_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn't supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal).\" );\n        }\n      }\n    }\n  });\n  Object.freeze(fakeInternalInstance);\n}\n\nfunction applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {\n  var prevState = workInProgress.memoizedState;\n\n  {\n    if ( workInProgress.mode & StrictMode) {\n      // Invoke the function an extra time to help detect side-effects.\n      getDerivedStateFromProps(nextProps, prevState);\n    }\n  }\n\n  var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n  {\n    warnOnUndefinedDerivedState(ctor, partialState);\n  } // Merge the partial state and the previous state.\n\n\n  var memoizedState = partialState === null || partialState === undefined ? prevState : _assign({}, prevState, partialState);\n  workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the\n  // base state.\n\n  if (workInProgress.expirationTime === NoWork) {\n    // Queue is always non-null for classes\n    var updateQueue = workInProgress.updateQueue;\n    updateQueue.baseState = memoizedState;\n  }\n}\nvar classComponentUpdater = {\n  isMounted: isMounted,\n  enqueueSetState: function (inst, payload, callback) {\n    var fiber = get(inst);\n    var currentTime = requestCurrentTimeForUpdate();\n    var suspenseConfig = requestCurrentSuspenseConfig();\n    var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n    var update = createUpdate(expirationTime, suspenseConfig);\n    update.payload = payload;\n\n    if (callback !== undefined && callback !== null) {\n      {\n        warnOnInvalidCallback(callback, 'setState');\n      }\n\n      update.callback = callback;\n    }\n\n    enqueueUpdate(fiber, update);\n    scheduleWork(fiber, expirationTime);\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    var fiber = get(inst);\n    var currentTime = requestCurrentTimeForUpdate();\n    var suspenseConfig = requestCurrentSuspenseConfig();\n    var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n    var update = createUpdate(expirationTime, suspenseConfig);\n    update.tag = ReplaceState;\n    update.payload = payload;\n\n    if (callback !== undefined && callback !== null) {\n      {\n        warnOnInvalidCallback(callback, 'replaceState');\n      }\n\n      update.callback = callback;\n    }\n\n    enqueueUpdate(fiber, update);\n    scheduleWork(fiber, expirationTime);\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    var fiber = get(inst);\n    var currentTime = requestCurrentTimeForUpdate();\n    var suspenseConfig = requestCurrentSuspenseConfig();\n    var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n    var update = createUpdate(expirationTime, suspenseConfig);\n    update.tag = ForceUpdate;\n\n    if (callback !== undefined && callback !== null) {\n      {\n        warnOnInvalidCallback(callback, 'forceUpdate');\n      }\n\n      update.callback = callback;\n    }\n\n    enqueueUpdate(fiber, update);\n    scheduleWork(fiber, expirationTime);\n  }\n};\n\nfunction checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {\n  var instance = workInProgress.stateNode;\n\n  if (typeof instance.shouldComponentUpdate === 'function') {\n    {\n      if ( workInProgress.mode & StrictMode) {\n        // Invoke the function an extra time to help detect side-effects.\n        instance.shouldComponentUpdate(newProps, newState, nextContext);\n      }\n    }\n\n    startPhaseTimer(workInProgress, 'shouldComponentUpdate');\n    var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n    stopPhaseTimer();\n\n    {\n      if (shouldUpdate === undefined) {\n        error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(ctor) || 'Component');\n      }\n    }\n\n    return shouldUpdate;\n  }\n\n  if (ctor.prototype && ctor.prototype.isPureReactComponent) {\n    return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);\n  }\n\n  return true;\n}\n\nfunction checkClassInstance(workInProgress, ctor, newProps) {\n  var instance = workInProgress.stateNode;\n\n  {\n    var name = getComponentName(ctor) || 'Component';\n    var renderPresent = instance.render;\n\n    if (!renderPresent) {\n      if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n      } else {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n      }\n    }\n\n    if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {\n      error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);\n    }\n\n    if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);\n    }\n\n    if (instance.propTypes) {\n      error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n    }\n\n    if (instance.contextType) {\n      error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);\n    }\n\n    {\n      if (instance.contextTypes) {\n        error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n      }\n\n      if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n        didWarnAboutContextTypeAndContextTypes.add(ctor);\n\n        error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n      }\n    }\n\n    if (typeof instance.componentShouldUpdate === 'function') {\n      error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);\n    }\n\n    if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n      error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(ctor) || 'A pure component');\n    }\n\n    if (typeof instance.componentDidUnmount === 'function') {\n      error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n    }\n\n    if (typeof instance.componentDidReceiveProps === 'function') {\n      error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);\n    }\n\n    if (typeof instance.componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n    }\n\n    if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);\n    }\n\n    var hasMutatedProps = instance.props !== newProps;\n\n    if (instance.props !== undefined && hasMutatedProps) {\n      error('%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n    }\n\n    if (instance.defaultProps) {\n      error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n      didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n\n      error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentName(ctor));\n    }\n\n    if (typeof instance.getDerivedStateFromProps === 'function') {\n      error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof instance.getDerivedStateFromError === 'function') {\n      error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof ctor.getSnapshotBeforeUpdate === 'function') {\n      error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);\n    }\n\n    var _state = instance.state;\n\n    if (_state && (typeof _state !== 'object' || isArray(_state))) {\n      error('%s.state: must be set to an object or null', name);\n    }\n\n    if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {\n      error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);\n    }\n  }\n}\n\nfunction adoptClassInstance(workInProgress, instance) {\n  instance.updater = classComponentUpdater;\n  workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates\n\n  set(instance, workInProgress);\n\n  {\n    instance._reactInternalInstance = fakeInternalInstance;\n  }\n}\n\nfunction constructClassInstance(workInProgress, ctor, props) {\n  var isLegacyContextConsumer = false;\n  var unmaskedContext = emptyContextObject;\n  var context = emptyContextObject;\n  var contextType = ctor.contextType;\n\n  {\n    if ('contextType' in ctor) {\n      var isValid = // Allow null for conditional declaration\n      contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n      if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n        didWarnAboutInvalidateContextType.add(ctor);\n        var addendum = '';\n\n        if (contextType === undefined) {\n          addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n        } else if (typeof contextType !== 'object') {\n          addendum = ' However, it is set to a ' + typeof contextType + '.';\n        } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n          addendum = ' Did you accidentally pass the Context.Provider instead?';\n        } else if (contextType._context !== undefined) {\n          // <Context.Consumer>\n          addendum = ' Did you accidentally pass the Context.Consumer instead?';\n        } else {\n          addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n        }\n\n        error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(ctor) || 'Component', addendum);\n      }\n    }\n  }\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    context = readContext(contextType);\n  } else {\n    unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    var contextTypes = ctor.contextTypes;\n    isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;\n    context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;\n  } // Instantiate twice to help detect side-effects.\n\n\n  {\n    if ( workInProgress.mode & StrictMode) {\n      new ctor(props, context); // eslint-disable-line no-new\n    }\n  }\n\n  var instance = new ctor(props, context);\n  var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;\n  adoptClassInstance(workInProgress, instance);\n\n  {\n    if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {\n      var componentName = getComponentName(ctor) || 'Component';\n\n      if (!didWarnAboutUninitializedState.has(componentName)) {\n        didWarnAboutUninitializedState.add(componentName);\n\n        error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);\n      }\n    } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n    // Warn about these lifecycles if they are present.\n    // Don't warn about react-lifecycles-compat polyfilled methods though.\n\n\n    if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n      var foundWillMountName = null;\n      var foundWillReceivePropsName = null;\n      var foundWillUpdateName = null;\n\n      if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n        foundWillMountName = 'componentWillMount';\n      } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n        foundWillMountName = 'UNSAFE_componentWillMount';\n      }\n\n      if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n        foundWillReceivePropsName = 'componentWillReceiveProps';\n      } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n        foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n      }\n\n      if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n        foundWillUpdateName = 'componentWillUpdate';\n      } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n        foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n      }\n\n      if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n        var _componentName = getComponentName(ctor) || 'Component';\n\n        var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n\n        if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n          didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n\n          error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://fb.me/react-unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? \"\\n  \" + foundWillMountName : '', foundWillReceivePropsName !== null ? \"\\n  \" + foundWillReceivePropsName : '', foundWillUpdateName !== null ? \"\\n  \" + foundWillUpdateName : '');\n        }\n      }\n    }\n  } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n  // ReactFiberContext usually updates this cache but can't for newly-created instances.\n\n\n  if (isLegacyContextConsumer) {\n    cacheContext(workInProgress, unmaskedContext, context);\n  }\n\n  return instance;\n}\n\nfunction callComponentWillMount(workInProgress, instance) {\n  startPhaseTimer(workInProgress, 'componentWillMount');\n  var oldState = instance.state;\n\n  if (typeof instance.componentWillMount === 'function') {\n    instance.componentWillMount();\n  }\n\n  if (typeof instance.UNSAFE_componentWillMount === 'function') {\n    instance.UNSAFE_componentWillMount();\n  }\n\n  stopPhaseTimer();\n\n  if (oldState !== instance.state) {\n    {\n      error('%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentName(workInProgress.type) || 'Component');\n    }\n\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n  }\n}\n\nfunction callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {\n  var oldState = instance.state;\n  startPhaseTimer(workInProgress, 'componentWillReceiveProps');\n\n  if (typeof instance.componentWillReceiveProps === 'function') {\n    instance.componentWillReceiveProps(newProps, nextContext);\n  }\n\n  if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  }\n\n  stopPhaseTimer();\n\n  if (instance.state !== oldState) {\n    {\n      var componentName = getComponentName(workInProgress.type) || 'Component';\n\n      if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {\n        didWarnAboutStateAssignmentForComponent.add(componentName);\n\n        error('%s.componentWillReceiveProps(): Assigning directly to ' + \"this.state is deprecated (except inside a component's \" + 'constructor). Use setState instead.', componentName);\n      }\n    }\n\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n  }\n} // Invokes the mount life-cycles on a previously never rendered instance.\n\n\nfunction mountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n  {\n    checkClassInstance(workInProgress, ctor, newProps);\n  }\n\n  var instance = workInProgress.stateNode;\n  instance.props = newProps;\n  instance.state = workInProgress.memoizedState;\n  instance.refs = emptyRefsObject;\n  initializeUpdateQueue(workInProgress);\n  var contextType = ctor.contextType;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    instance.context = readContext(contextType);\n  } else {\n    var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    instance.context = getMaskedContext(workInProgress, unmaskedContext);\n  }\n\n  {\n    if (instance.state === newProps) {\n      var componentName = getComponentName(ctor) || 'Component';\n\n      if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n        didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n\n        error('%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n      }\n    }\n\n    if (workInProgress.mode & StrictMode) {\n      ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);\n    }\n\n    {\n      ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);\n    }\n  }\n\n  processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n  instance.state = workInProgress.memoizedState;\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n    instance.state = workInProgress.memoizedState;\n  } // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n\n  if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n    callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's\n    // process them now.\n\n    processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n    instance.state = workInProgress.memoizedState;\n  }\n\n  if (typeof instance.componentDidMount === 'function') {\n    workInProgress.effectTag |= Update;\n  }\n}\n\nfunction resumeMountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n  var instance = workInProgress.stateNode;\n  var oldProps = workInProgress.memoizedProps;\n  instance.props = oldProps;\n  var oldContext = instance.context;\n  var contextType = ctor.contextType;\n  var nextContext = emptyContextObject;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    nextContext = readContext(contextType);\n  } else {\n    var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);\n  }\n\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n  var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n  // ever the previously attempted to render - not the \"current\". However,\n  // during componentDidUpdate we pass the \"current\" props.\n  // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n  if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n    if (oldProps !== newProps || oldContext !== nextContext) {\n      callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n    }\n  }\n\n  resetHasForceUpdateBeforeProcessing();\n  var oldState = workInProgress.memoizedState;\n  var newState = instance.state = oldState;\n  processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n  newState = workInProgress.memoizedState;\n\n  if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidMount === 'function') {\n      workInProgress.effectTag |= Update;\n    }\n\n    return false;\n  }\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n    newState = workInProgress.memoizedState;\n  }\n\n  var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n  if (shouldUpdate) {\n    // In order to support react-lifecycles-compat polyfilled components,\n    // Unsafe lifecycles should not be invoked for components using the new APIs.\n    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n      startPhaseTimer(workInProgress, 'componentWillMount');\n\n      if (typeof instance.componentWillMount === 'function') {\n        instance.componentWillMount();\n      }\n\n      if (typeof instance.UNSAFE_componentWillMount === 'function') {\n        instance.UNSAFE_componentWillMount();\n      }\n\n      stopPhaseTimer();\n    }\n\n    if (typeof instance.componentDidMount === 'function') {\n      workInProgress.effectTag |= Update;\n    }\n  } else {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidMount === 'function') {\n      workInProgress.effectTag |= Update;\n    } // If shouldComponentUpdate returned false, we should still update the\n    // memoized state to indicate that this work can be reused.\n\n\n    workInProgress.memoizedProps = newProps;\n    workInProgress.memoizedState = newState;\n  } // Update the existing instance's state, props, and context pointers even\n  // if shouldComponentUpdate returns false.\n\n\n  instance.props = newProps;\n  instance.state = newState;\n  instance.context = nextContext;\n  return shouldUpdate;\n} // Invokes the update life-cycles and returns false if it shouldn't rerender.\n\n\nfunction updateClassInstance(current, workInProgress, ctor, newProps, renderExpirationTime) {\n  var instance = workInProgress.stateNode;\n  cloneUpdateQueue(current, workInProgress);\n  var oldProps = workInProgress.memoizedProps;\n  instance.props = workInProgress.type === workInProgress.elementType ? oldProps : resolveDefaultProps(workInProgress.type, oldProps);\n  var oldContext = instance.context;\n  var contextType = ctor.contextType;\n  var nextContext = emptyContextObject;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    nextContext = readContext(contextType);\n  } else {\n    var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);\n  }\n\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n  var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n  // ever the previously attempted to render - not the \"current\". However,\n  // during componentDidUpdate we pass the \"current\" props.\n  // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n  if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n    if (oldProps !== newProps || oldContext !== nextContext) {\n      callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n    }\n  }\n\n  resetHasForceUpdateBeforeProcessing();\n  var oldState = workInProgress.memoizedState;\n  var newState = instance.state = oldState;\n  processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n  newState = workInProgress.memoizedState;\n\n  if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidUpdate === 'function') {\n      if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.effectTag |= Update;\n      }\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n      if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.effectTag |= Snapshot;\n      }\n    }\n\n    return false;\n  }\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n    newState = workInProgress.memoizedState;\n  }\n\n  var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n  if (shouldUpdate) {\n    // In order to support react-lifecycles-compat polyfilled components,\n    // Unsafe lifecycles should not be invoked for components using the new APIs.\n    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {\n      startPhaseTimer(workInProgress, 'componentWillUpdate');\n\n      if (typeof instance.componentWillUpdate === 'function') {\n        instance.componentWillUpdate(newProps, newState, nextContext);\n      }\n\n      if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n        instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);\n      }\n\n      stopPhaseTimer();\n    }\n\n    if (typeof instance.componentDidUpdate === 'function') {\n      workInProgress.effectTag |= Update;\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n      workInProgress.effectTag |= Snapshot;\n    }\n  } else {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidUpdate === 'function') {\n      if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.effectTag |= Update;\n      }\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n      if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.effectTag |= Snapshot;\n      }\n    } // If shouldComponentUpdate returned false, we should still update the\n    // memoized props/state to indicate that this work can be reused.\n\n\n    workInProgress.memoizedProps = newProps;\n    workInProgress.memoizedState = newState;\n  } // Update the existing instance's state, props, and context pointers even\n  // if shouldComponentUpdate returns false.\n\n\n  instance.props = newProps;\n  instance.state = newState;\n  instance.context = nextContext;\n  return shouldUpdate;\n}\n\nvar didWarnAboutMaps;\nvar didWarnAboutGenerators;\nvar didWarnAboutStringRefs;\nvar ownerHasKeyUseWarning;\nvar ownerHasFunctionTypeWarning;\n\nvar warnForMissingKey = function (child) {};\n\n{\n  didWarnAboutMaps = false;\n  didWarnAboutGenerators = false;\n  didWarnAboutStringRefs = {};\n  /**\n   * Warn if there's no key explicitly set on dynamic arrays of children or\n   * object keys are not valid. This allows us to keep track of children between\n   * updates.\n   */\n\n  ownerHasKeyUseWarning = {};\n  ownerHasFunctionTypeWarning = {};\n\n  warnForMissingKey = function (child) {\n    if (child === null || typeof child !== 'object') {\n      return;\n    }\n\n    if (!child._store || child._store.validated || child.key != null) {\n      return;\n    }\n\n    if (!(typeof child._store === 'object')) {\n      {\n        throw Error( \"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    child._store.validated = true;\n    var currentComponentErrorInfo = 'Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.' + getCurrentFiberStackInDev();\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n    error('Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.');\n  };\n}\n\nvar isArray$1 = Array.isArray;\n\nfunction coerceRef(returnFiber, current, element) {\n  var mixedRef = element.ref;\n\n  if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {\n    {\n      // TODO: Clean this up once we turn on the string ref warning for\n      // everyone, because the strict mode case will no longer be relevant\n      if ((returnFiber.mode & StrictMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs\n      // because these cannot be automatically converted to an arrow function\n      // using a codemod. Therefore, we don't have to warn about string refs again.\n      !(element._owner && element._self && element._owner.stateNode !== element._self)) {\n        var componentName = getComponentName(returnFiber.type) || 'Component';\n\n        if (!didWarnAboutStringRefs[componentName]) {\n          {\n            error('A string ref, \"%s\", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref%s', mixedRef, getStackByFiberInDevAndProd(returnFiber));\n          }\n\n          didWarnAboutStringRefs[componentName] = true;\n        }\n      }\n    }\n\n    if (element._owner) {\n      var owner = element._owner;\n      var inst;\n\n      if (owner) {\n        var ownerFiber = owner;\n\n        if (!(ownerFiber.tag === ClassComponent)) {\n          {\n            throw Error( \"Function components cannot have string refs. We recommend using useRef() instead. Learn more about using refs safely here: https://fb.me/react-strict-mode-string-ref\" );\n          }\n        }\n\n        inst = ownerFiber.stateNode;\n      }\n\n      if (!inst) {\n        {\n          throw Error( \"Missing owner for string ref \" + mixedRef + \". This error is likely caused by a bug in React. Please file an issue.\" );\n        }\n      }\n\n      var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref\n\n      if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {\n        return current.ref;\n      }\n\n      var ref = function (value) {\n        var refs = inst.refs;\n\n        if (refs === emptyRefsObject) {\n          // This is a lazy pooled frozen object, so we need to initialize.\n          refs = inst.refs = {};\n        }\n\n        if (value === null) {\n          delete refs[stringRef];\n        } else {\n          refs[stringRef] = value;\n        }\n      };\n\n      ref._stringRef = stringRef;\n      return ref;\n    } else {\n      if (!(typeof mixedRef === 'string')) {\n        {\n          throw Error( \"Expected ref to be a function, a string, an object returned by React.createRef(), or null.\" );\n        }\n      }\n\n      if (!element._owner) {\n        {\n          throw Error( \"Element ref was specified as a string (\" + mixedRef + \") but no owner was set. This could happen for one of the following reasons:\\n1. You may be adding a ref to a function component\\n2. You may be adding a ref to a component that was not created inside a component's render method\\n3. You have multiple copies of React loaded\\nSee https://fb.me/react-refs-must-have-owner for more information.\" );\n        }\n      }\n    }\n  }\n\n  return mixedRef;\n}\n\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n  if (returnFiber.type !== 'textarea') {\n    var addendum = '';\n\n    {\n      addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + getCurrentFiberStackInDev();\n    }\n\n    {\n      {\n        throw Error( \"Objects are not valid as a React child (found: \" + (Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild) + \").\" + addendum );\n      }\n    }\n  }\n}\n\nfunction warnOnFunctionType() {\n  {\n    var currentComponentErrorInfo = 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.' + getCurrentFiberStackInDev();\n\n    if (ownerHasFunctionTypeWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasFunctionTypeWarning[currentComponentErrorInfo] = true;\n\n    error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n  }\n} // This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\n\n\nfunction ChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (!shouldTrackSideEffects) {\n      // Noop.\n      return;\n    } // Deletions are added in reversed order so we add it to the front.\n    // At this point, the return fiber's effect list is empty except for\n    // deletions, so we can just append the deletion to the list. The remaining\n    // effects aren't added until the complete phase. Once we implement\n    // resuming, this may not be true.\n\n\n    var last = returnFiber.lastEffect;\n\n    if (last !== null) {\n      last.nextEffect = childToDelete;\n      returnFiber.lastEffect = childToDelete;\n    } else {\n      returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n    }\n\n    childToDelete.nextEffect = null;\n    childToDelete.effectTag = Deletion;\n  }\n\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) {\n      // Noop.\n      return null;\n    } // TODO: For the shouldClone case, this could be micro-optimized a bit by\n    // assuming that after the first child we've already added everything.\n\n\n    var childToDelete = currentFirstChild;\n\n    while (childToDelete !== null) {\n      deleteChild(returnFiber, childToDelete);\n      childToDelete = childToDelete.sibling;\n    }\n\n    return null;\n  }\n\n  function mapRemainingChildren(returnFiber, currentFirstChild) {\n    // Add the remaining children to a temporary map so that we can find them by\n    // keys quickly. Implicit (null) keys get added to this set with their index\n    // instead.\n    var existingChildren = new Map();\n    var existingChild = currentFirstChild;\n\n    while (existingChild !== null) {\n      if (existingChild.key !== null) {\n        existingChildren.set(existingChild.key, existingChild);\n      } else {\n        existingChildren.set(existingChild.index, existingChild);\n      }\n\n      existingChild = existingChild.sibling;\n    }\n\n    return existingChildren;\n  }\n\n  function useFiber(fiber, pendingProps) {\n    // We currently set sibling to null and index to 0 here because it is easy\n    // to forget to do before returning it. E.g. for the single child case.\n    var clone = createWorkInProgress(fiber, pendingProps);\n    clone.index = 0;\n    clone.sibling = null;\n    return clone;\n  }\n\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n\n    if (!shouldTrackSideEffects) {\n      // Noop.\n      return lastPlacedIndex;\n    }\n\n    var current = newFiber.alternate;\n\n    if (current !== null) {\n      var oldIndex = current.index;\n\n      if (oldIndex < lastPlacedIndex) {\n        // This is a move.\n        newFiber.effectTag = Placement;\n        return lastPlacedIndex;\n      } else {\n        // This item can stay in place.\n        return oldIndex;\n      }\n    } else {\n      // This is an insertion.\n      newFiber.effectTag = Placement;\n      return lastPlacedIndex;\n    }\n  }\n\n  function placeSingleChild(newFiber) {\n    // This is simpler for the single child case. We only need to do a\n    // placement for inserting new children.\n    if (shouldTrackSideEffects && newFiber.alternate === null) {\n      newFiber.effectTag = Placement;\n    }\n\n    return newFiber;\n  }\n\n  function updateTextNode(returnFiber, current, textContent, expirationTime) {\n    if (current === null || current.tag !== HostText) {\n      // Insert\n      var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n      created.return = returnFiber;\n      return created;\n    } else {\n      // Update\n      var existing = useFiber(current, textContent);\n      existing.return = returnFiber;\n      return existing;\n    }\n  }\n\n  function updateElement(returnFiber, current, element, expirationTime) {\n    if (current !== null) {\n      if (current.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n       isCompatibleFamilyForHotReloading(current, element) )) {\n        // Move based on index\n        var existing = useFiber(current, element.props);\n        existing.ref = coerceRef(returnFiber, current, element);\n        existing.return = returnFiber;\n\n        {\n          existing._debugSource = element._source;\n          existing._debugOwner = element._owner;\n        }\n\n        return existing;\n      }\n    } // Insert\n\n\n    var created = createFiberFromElement(element, returnFiber.mode, expirationTime);\n    created.ref = coerceRef(returnFiber, current, element);\n    created.return = returnFiber;\n    return created;\n  }\n\n  function updatePortal(returnFiber, current, portal, expirationTime) {\n    if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {\n      // Insert\n      var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n      created.return = returnFiber;\n      return created;\n    } else {\n      // Update\n      var existing = useFiber(current, portal.children || []);\n      existing.return = returnFiber;\n      return existing;\n    }\n  }\n\n  function updateFragment(returnFiber, current, fragment, expirationTime, key) {\n    if (current === null || current.tag !== Fragment) {\n      // Insert\n      var created = createFiberFromFragment(fragment, returnFiber.mode, expirationTime, key);\n      created.return = returnFiber;\n      return created;\n    } else {\n      // Update\n      var existing = useFiber(current, fragment);\n      existing.return = returnFiber;\n      return existing;\n    }\n  }\n\n  function createChild(returnFiber, newChild, expirationTime) {\n    if (typeof newChild === 'string' || typeof newChild === 'number') {\n      // Text nodes don't have keys. If the previous node is implicitly keyed\n      // we can continue to replace it without aborting even if it is not a text\n      // node.\n      var created = createFiberFromText('' + newChild, returnFiber.mode, expirationTime);\n      created.return = returnFiber;\n      return created;\n    }\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          {\n            var _created = createFiberFromElement(newChild, returnFiber.mode, expirationTime);\n\n            _created.ref = coerceRef(returnFiber, null, newChild);\n            _created.return = returnFiber;\n            return _created;\n          }\n\n        case REACT_PORTAL_TYPE:\n          {\n            var _created2 = createFiberFromPortal(newChild, returnFiber.mode, expirationTime);\n\n            _created2.return = returnFiber;\n            return _created2;\n          }\n      }\n\n      if (isArray$1(newChild) || getIteratorFn(newChild)) {\n        var _created3 = createFiberFromFragment(newChild, returnFiber.mode, expirationTime, null);\n\n        _created3.return = returnFiber;\n        return _created3;\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType();\n      }\n    }\n\n    return null;\n  }\n\n  function updateSlot(returnFiber, oldFiber, newChild, expirationTime) {\n    // Update the fiber if the keys match, otherwise return null.\n    var key = oldFiber !== null ? oldFiber.key : null;\n\n    if (typeof newChild === 'string' || typeof newChild === 'number') {\n      // Text nodes don't have keys. If the previous node is implicitly keyed\n      // we can continue to replace it without aborting even if it is not a text\n      // node.\n      if (key !== null) {\n        return null;\n      }\n\n      return updateTextNode(returnFiber, oldFiber, '' + newChild, expirationTime);\n    }\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          {\n            if (newChild.key === key) {\n              if (newChild.type === REACT_FRAGMENT_TYPE) {\n                return updateFragment(returnFiber, oldFiber, newChild.props.children, expirationTime, key);\n              }\n\n              return updateElement(returnFiber, oldFiber, newChild, expirationTime);\n            } else {\n              return null;\n            }\n          }\n\n        case REACT_PORTAL_TYPE:\n          {\n            if (newChild.key === key) {\n              return updatePortal(returnFiber, oldFiber, newChild, expirationTime);\n            } else {\n              return null;\n            }\n          }\n      }\n\n      if (isArray$1(newChild) || getIteratorFn(newChild)) {\n        if (key !== null) {\n          return null;\n        }\n\n        return updateFragment(returnFiber, oldFiber, newChild, expirationTime, null);\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType();\n      }\n    }\n\n    return null;\n  }\n\n  function updateFromMap(existingChildren, returnFiber, newIdx, newChild, expirationTime) {\n    if (typeof newChild === 'string' || typeof newChild === 'number') {\n      // Text nodes don't have keys, so we neither have to check the old nor\n      // new node for the key. If both are text nodes, they match.\n      var matchedFiber = existingChildren.get(newIdx) || null;\n      return updateTextNode(returnFiber, matchedFiber, '' + newChild, expirationTime);\n    }\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          {\n            var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n            if (newChild.type === REACT_FRAGMENT_TYPE) {\n              return updateFragment(returnFiber, _matchedFiber, newChild.props.children, expirationTime, newChild.key);\n            }\n\n            return updateElement(returnFiber, _matchedFiber, newChild, expirationTime);\n          }\n\n        case REACT_PORTAL_TYPE:\n          {\n            var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n            return updatePortal(returnFiber, _matchedFiber2, newChild, expirationTime);\n          }\n      }\n\n      if (isArray$1(newChild) || getIteratorFn(newChild)) {\n        var _matchedFiber3 = existingChildren.get(newIdx) || null;\n\n        return updateFragment(returnFiber, _matchedFiber3, newChild, expirationTime, null);\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType();\n      }\n    }\n\n    return null;\n  }\n  /**\n   * Warns if there is a duplicate or missing key\n   */\n\n\n  function warnOnInvalidKey(child, knownKeys) {\n    {\n      if (typeof child !== 'object' || child === null) {\n        return knownKeys;\n      }\n\n      switch (child.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n        case REACT_PORTAL_TYPE:\n          warnForMissingKey(child);\n          var key = child.key;\n\n          if (typeof key !== 'string') {\n            break;\n          }\n\n          if (knownKeys === null) {\n            knownKeys = new Set();\n            knownKeys.add(key);\n            break;\n          }\n\n          if (!knownKeys.has(key)) {\n            knownKeys.add(key);\n            break;\n          }\n\n          error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);\n\n          break;\n      }\n    }\n\n    return knownKeys;\n  }\n\n  function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, expirationTime) {\n    // This algorithm can't optimize by searching from both ends since we\n    // don't have backpointers on fibers. I'm trying to see how far we can get\n    // with that model. If it ends up not being worth the tradeoffs, we can\n    // add it later.\n    // Even with a two ended optimization, we'd want to optimize for the case\n    // where there are few changes and brute force the comparison instead of\n    // going for the Map. It'd like to explore hitting that path first in\n    // forward-only mode and only go for the Map once we notice that we need\n    // lots of look ahead. This doesn't handle reversal as well as two ended\n    // search but that's unusual. Besides, for the two ended optimization to\n    // work on Iterables, we'd need to copy the whole set.\n    // In this first iteration, we'll just live with hitting the bad case\n    // (adding everything to a Map) in for every insert/move.\n    // If you change this code, also update reconcileChildrenIterator() which\n    // uses the same algorithm.\n    {\n      // First, validate keys.\n      var knownKeys = null;\n\n      for (var i = 0; i < newChildren.length; i++) {\n        var child = newChildren[i];\n        knownKeys = warnOnInvalidKey(child, knownKeys);\n      }\n    }\n\n    var resultingFirstChild = null;\n    var previousNewFiber = null;\n    var oldFiber = currentFirstChild;\n    var lastPlacedIndex = 0;\n    var newIdx = 0;\n    var nextOldFiber = null;\n\n    for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {\n      if (oldFiber.index > newIdx) {\n        nextOldFiber = oldFiber;\n        oldFiber = null;\n      } else {\n        nextOldFiber = oldFiber.sibling;\n      }\n\n      var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], expirationTime);\n\n      if (newFiber === null) {\n        // TODO: This breaks on empty slots like null children. That's\n        // unfortunate because it triggers the slow path all the time. We need\n        // a better way to communicate whether this was a miss or null,\n        // boolean, undefined, etc.\n        if (oldFiber === null) {\n          oldFiber = nextOldFiber;\n        }\n\n        break;\n      }\n\n      if (shouldTrackSideEffects) {\n        if (oldFiber && newFiber.alternate === null) {\n          // We matched the slot, but we didn't reuse the existing fiber, so we\n          // need to delete the existing child.\n          deleteChild(returnFiber, oldFiber);\n        }\n      }\n\n      lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n      if (previousNewFiber === null) {\n        // TODO: Move out of the loop. This only happens for the first run.\n        resultingFirstChild = newFiber;\n      } else {\n        // TODO: Defer siblings if we're not at the right index for this slot.\n        // I.e. if we had null values before, then we want to defer this\n        // for each null value. However, we also don't want to call updateSlot\n        // with the previous one.\n        previousNewFiber.sibling = newFiber;\n      }\n\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n\n    if (newIdx === newChildren.length) {\n      // We've reached the end of the new children. We can delete the rest.\n      deleteRemainingChildren(returnFiber, oldFiber);\n      return resultingFirstChild;\n    }\n\n    if (oldFiber === null) {\n      // If we don't have any more existing children we can choose a fast path\n      // since the rest will all be insertions.\n      for (; newIdx < newChildren.length; newIdx++) {\n        var _newFiber = createChild(returnFiber, newChildren[newIdx], expirationTime);\n\n        if (_newFiber === null) {\n          continue;\n        }\n\n        lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          // TODO: Move out of the loop. This only happens for the first run.\n          resultingFirstChild = _newFiber;\n        } else {\n          previousNewFiber.sibling = _newFiber;\n        }\n\n        previousNewFiber = _newFiber;\n      }\n\n      return resultingFirstChild;\n    } // Add all children to a key map for quick lookups.\n\n\n    var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n    for (; newIdx < newChildren.length; newIdx++) {\n      var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], expirationTime);\n\n      if (_newFiber2 !== null) {\n        if (shouldTrackSideEffects) {\n          if (_newFiber2.alternate !== null) {\n            // The new fiber is a work in progress, but if there exists a\n            // current, that means that we reused the fiber. We need to delete\n            // it from the child list so that we don't add it to the deletion\n            // list.\n            existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);\n          }\n        }\n\n        lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          resultingFirstChild = _newFiber2;\n        } else {\n          previousNewFiber.sibling = _newFiber2;\n        }\n\n        previousNewFiber = _newFiber2;\n      }\n    }\n\n    if (shouldTrackSideEffects) {\n      // Any existing children that weren't consumed above were deleted. We need\n      // to add them to the deletion list.\n      existingChildren.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    }\n\n    return resultingFirstChild;\n  }\n\n  function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, expirationTime) {\n    // This is the same implementation as reconcileChildrenArray(),\n    // but using the iterator instead.\n    var iteratorFn = getIteratorFn(newChildrenIterable);\n\n    if (!(typeof iteratorFn === 'function')) {\n      {\n        throw Error( \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    {\n      // We don't support rendering Generators because it's a mutation.\n      // See https://github.com/facebook/react/issues/12995\n      if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag\n      newChildrenIterable[Symbol.toStringTag] === 'Generator') {\n        if (!didWarnAboutGenerators) {\n          error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');\n        }\n\n        didWarnAboutGenerators = true;\n      } // Warn about using Maps as children\n\n\n      if (newChildrenIterable.entries === iteratorFn) {\n        if (!didWarnAboutMaps) {\n          error('Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.');\n        }\n\n        didWarnAboutMaps = true;\n      } // First, validate keys.\n      // We'll get a different iterator later for the main pass.\n\n\n      var _newChildren = iteratorFn.call(newChildrenIterable);\n\n      if (_newChildren) {\n        var knownKeys = null;\n\n        var _step = _newChildren.next();\n\n        for (; !_step.done; _step = _newChildren.next()) {\n          var child = _step.value;\n          knownKeys = warnOnInvalidKey(child, knownKeys);\n        }\n      }\n    }\n\n    var newChildren = iteratorFn.call(newChildrenIterable);\n\n    if (!(newChildren != null)) {\n      {\n        throw Error( \"An iterable object provided no iterator.\" );\n      }\n    }\n\n    var resultingFirstChild = null;\n    var previousNewFiber = null;\n    var oldFiber = currentFirstChild;\n    var lastPlacedIndex = 0;\n    var newIdx = 0;\n    var nextOldFiber = null;\n    var step = newChildren.next();\n\n    for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {\n      if (oldFiber.index > newIdx) {\n        nextOldFiber = oldFiber;\n        oldFiber = null;\n      } else {\n        nextOldFiber = oldFiber.sibling;\n      }\n\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, expirationTime);\n\n      if (newFiber === null) {\n        // TODO: This breaks on empty slots like null children. That's\n        // unfortunate because it triggers the slow path all the time. We need\n        // a better way to communicate whether this was a miss or null,\n        // boolean, undefined, etc.\n        if (oldFiber === null) {\n          oldFiber = nextOldFiber;\n        }\n\n        break;\n      }\n\n      if (shouldTrackSideEffects) {\n        if (oldFiber && newFiber.alternate === null) {\n          // We matched the slot, but we didn't reuse the existing fiber, so we\n          // need to delete the existing child.\n          deleteChild(returnFiber, oldFiber);\n        }\n      }\n\n      lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n      if (previousNewFiber === null) {\n        // TODO: Move out of the loop. This only happens for the first run.\n        resultingFirstChild = newFiber;\n      } else {\n        // TODO: Defer siblings if we're not at the right index for this slot.\n        // I.e. if we had null values before, then we want to defer this\n        // for each null value. However, we also don't want to call updateSlot\n        // with the previous one.\n        previousNewFiber.sibling = newFiber;\n      }\n\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n\n    if (step.done) {\n      // We've reached the end of the new children. We can delete the rest.\n      deleteRemainingChildren(returnFiber, oldFiber);\n      return resultingFirstChild;\n    }\n\n    if (oldFiber === null) {\n      // If we don't have any more existing children we can choose a fast path\n      // since the rest will all be insertions.\n      for (; !step.done; newIdx++, step = newChildren.next()) {\n        var _newFiber3 = createChild(returnFiber, step.value, expirationTime);\n\n        if (_newFiber3 === null) {\n          continue;\n        }\n\n        lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          // TODO: Move out of the loop. This only happens for the first run.\n          resultingFirstChild = _newFiber3;\n        } else {\n          previousNewFiber.sibling = _newFiber3;\n        }\n\n        previousNewFiber = _newFiber3;\n      }\n\n      return resultingFirstChild;\n    } // Add all children to a key map for quick lookups.\n\n\n    var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n    for (; !step.done; newIdx++, step = newChildren.next()) {\n      var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, expirationTime);\n\n      if (_newFiber4 !== null) {\n        if (shouldTrackSideEffects) {\n          if (_newFiber4.alternate !== null) {\n            // The new fiber is a work in progress, but if there exists a\n            // current, that means that we reused the fiber. We need to delete\n            // it from the child list so that we don't add it to the deletion\n            // list.\n            existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);\n          }\n        }\n\n        lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          resultingFirstChild = _newFiber4;\n        } else {\n          previousNewFiber.sibling = _newFiber4;\n        }\n\n        previousNewFiber = _newFiber4;\n      }\n    }\n\n    if (shouldTrackSideEffects) {\n      // Any existing children that weren't consumed above were deleted. We need\n      // to add them to the deletion list.\n      existingChildren.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    }\n\n    return resultingFirstChild;\n  }\n\n  function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, expirationTime) {\n    // There's no need to check for keys on text nodes since we don't have a\n    // way to define them.\n    if (currentFirstChild !== null && currentFirstChild.tag === HostText) {\n      // We already have an existing node so let's just update it and delete\n      // the rest.\n      deleteRemainingChildren(returnFiber, currentFirstChild.sibling);\n      var existing = useFiber(currentFirstChild, textContent);\n      existing.return = returnFiber;\n      return existing;\n    } // The existing first child is not a text node so we need to create one\n    // and delete the existing ones.\n\n\n    deleteRemainingChildren(returnFiber, currentFirstChild);\n    var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n    created.return = returnFiber;\n    return created;\n  }\n\n  function reconcileSingleElement(returnFiber, currentFirstChild, element, expirationTime) {\n    var key = element.key;\n    var child = currentFirstChild;\n\n    while (child !== null) {\n      // TODO: If key === null and child.key === null, then this only applies to\n      // the first item in the list.\n      if (child.key === key) {\n        switch (child.tag) {\n          case Fragment:\n            {\n              if (element.type === REACT_FRAGMENT_TYPE) {\n                deleteRemainingChildren(returnFiber, child.sibling);\n                var existing = useFiber(child, element.props.children);\n                existing.return = returnFiber;\n\n                {\n                  existing._debugSource = element._source;\n                  existing._debugOwner = element._owner;\n                }\n\n                return existing;\n              }\n\n              break;\n            }\n\n          case Block:\n\n          // We intentionally fallthrough here if enableBlocksAPI is not on.\n          // eslint-disable-next-lined no-fallthrough\n\n          default:\n            {\n              if (child.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n               isCompatibleFamilyForHotReloading(child, element) )) {\n                deleteRemainingChildren(returnFiber, child.sibling);\n\n                var _existing3 = useFiber(child, element.props);\n\n                _existing3.ref = coerceRef(returnFiber, child, element);\n                _existing3.return = returnFiber;\n\n                {\n                  _existing3._debugSource = element._source;\n                  _existing3._debugOwner = element._owner;\n                }\n\n                return _existing3;\n              }\n\n              break;\n            }\n        } // Didn't match.\n\n\n        deleteRemainingChildren(returnFiber, child);\n        break;\n      } else {\n        deleteChild(returnFiber, child);\n      }\n\n      child = child.sibling;\n    }\n\n    if (element.type === REACT_FRAGMENT_TYPE) {\n      var created = createFiberFromFragment(element.props.children, returnFiber.mode, expirationTime, element.key);\n      created.return = returnFiber;\n      return created;\n    } else {\n      var _created4 = createFiberFromElement(element, returnFiber.mode, expirationTime);\n\n      _created4.ref = coerceRef(returnFiber, currentFirstChild, element);\n      _created4.return = returnFiber;\n      return _created4;\n    }\n  }\n\n  function reconcileSinglePortal(returnFiber, currentFirstChild, portal, expirationTime) {\n    var key = portal.key;\n    var child = currentFirstChild;\n\n    while (child !== null) {\n      // TODO: If key === null and child.key === null, then this only applies to\n      // the first item in the list.\n      if (child.key === key) {\n        if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {\n          deleteRemainingChildren(returnFiber, child.sibling);\n          var existing = useFiber(child, portal.children || []);\n          existing.return = returnFiber;\n          return existing;\n        } else {\n          deleteRemainingChildren(returnFiber, child);\n          break;\n        }\n      } else {\n        deleteChild(returnFiber, child);\n      }\n\n      child = child.sibling;\n    }\n\n    var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n    created.return = returnFiber;\n    return created;\n  } // This API will tag the children with the side-effect of the reconciliation\n  // itself. They will be added to the side-effect list as we pass through the\n  // children and the parent.\n\n\n  function reconcileChildFibers(returnFiber, currentFirstChild, newChild, expirationTime) {\n    // This function is not recursive.\n    // If the top level item is an array, we treat it as a set of children,\n    // not as a fragment. Nested arrays on the other hand will be treated as\n    // fragment nodes. Recursion happens at the normal flow.\n    // Handle top level unkeyed fragments as if they were arrays.\n    // This leads to an ambiguity between <>{[...]}</> and <>...</>.\n    // We treat the ambiguous cases above the same.\n    var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;\n\n    if (isUnkeyedTopLevelFragment) {\n      newChild = newChild.props.children;\n    } // Handle object types\n\n\n    var isObject = typeof newChild === 'object' && newChild !== null;\n\n    if (isObject) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, expirationTime));\n\n        case REACT_PORTAL_TYPE:\n          return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, expirationTime));\n      }\n    }\n\n    if (typeof newChild === 'string' || typeof newChild === 'number') {\n      return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, expirationTime));\n    }\n\n    if (isArray$1(newChild)) {\n      return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, expirationTime);\n    }\n\n    if (getIteratorFn(newChild)) {\n      return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, expirationTime);\n    }\n\n    if (isObject) {\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType();\n      }\n    }\n\n    if (typeof newChild === 'undefined' && !isUnkeyedTopLevelFragment) {\n      // If the new child is undefined, and the return fiber is a composite\n      // component, throw an error. If Fiber return types are disabled,\n      // we already threw above.\n      switch (returnFiber.tag) {\n        case ClassComponent:\n          {\n            {\n              var instance = returnFiber.stateNode;\n\n              if (instance.render._isMockFunction) {\n                // We allow auto-mocks to proceed as if they're returning null.\n                break;\n              }\n            }\n          }\n        // Intentionally fall through to the next case, which handles both\n        // functions and classes\n        // eslint-disable-next-lined no-fallthrough\n\n        case FunctionComponent:\n          {\n            var Component = returnFiber.type;\n\n            {\n              {\n                throw Error( (Component.displayName || Component.name || 'Component') + \"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.\" );\n              }\n            }\n          }\n      }\n    } // Remaining cases are all treated as empty.\n\n\n    return deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n\n  return reconcileChildFibers;\n}\n\nvar reconcileChildFibers = ChildReconciler(true);\nvar mountChildFibers = ChildReconciler(false);\nfunction cloneChildFibers(current, workInProgress) {\n  if (!(current === null || workInProgress.child === current.child)) {\n    {\n      throw Error( \"Resuming work not yet implemented.\" );\n    }\n  }\n\n  if (workInProgress.child === null) {\n    return;\n  }\n\n  var currentChild = workInProgress.child;\n  var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);\n  workInProgress.child = newChild;\n  newChild.return = workInProgress;\n\n  while (currentChild.sibling !== null) {\n    currentChild = currentChild.sibling;\n    newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);\n    newChild.return = workInProgress;\n  }\n\n  newChild.sibling = null;\n} // Reset a workInProgress child set to prepare it for a second pass.\n\nfunction resetChildFibers(workInProgress, renderExpirationTime) {\n  var child = workInProgress.child;\n\n  while (child !== null) {\n    resetWorkInProgress(child, renderExpirationTime);\n    child = child.sibling;\n  }\n}\n\nvar NO_CONTEXT = {};\nvar contextStackCursor$1 = createCursor(NO_CONTEXT);\nvar contextFiberStackCursor = createCursor(NO_CONTEXT);\nvar rootInstanceStackCursor = createCursor(NO_CONTEXT);\n\nfunction requiredContext(c) {\n  if (!(c !== NO_CONTEXT)) {\n    {\n      throw Error( \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n\n  return c;\n}\n\nfunction getRootHostContainer() {\n  var rootInstance = requiredContext(rootInstanceStackCursor.current);\n  return rootInstance;\n}\n\nfunction pushHostContainer(fiber, nextRootInstance) {\n  // Push current root instance onto the stack;\n  // This allows us to reset root when portals are popped.\n  push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.\n  // This enables us to pop only Fibers that provide unique contexts.\n\n  push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.\n  // However, we can't just call getRootHostContext() and push it because\n  // we'd have a different number of entries on the stack depending on\n  // whether getRootHostContext() throws somewhere in renderer code or not.\n  // So we push an empty value first. This lets us safely unwind on errors.\n\n  push(contextStackCursor$1, NO_CONTEXT, fiber);\n  var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.\n\n  pop(contextStackCursor$1, fiber);\n  push(contextStackCursor$1, nextRootContext, fiber);\n}\n\nfunction popHostContainer(fiber) {\n  pop(contextStackCursor$1, fiber);\n  pop(contextFiberStackCursor, fiber);\n  pop(rootInstanceStackCursor, fiber);\n}\n\nfunction getHostContext() {\n  var context = requiredContext(contextStackCursor$1.current);\n  return context;\n}\n\nfunction pushHostContext(fiber) {\n  var rootInstance = requiredContext(rootInstanceStackCursor.current);\n  var context = requiredContext(contextStackCursor$1.current);\n  var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.\n\n  if (context === nextContext) {\n    return;\n  } // Track the context and the Fiber that provided it.\n  // This enables us to pop only Fibers that provide unique contexts.\n\n\n  push(contextFiberStackCursor, fiber, fiber);\n  push(contextStackCursor$1, nextContext, fiber);\n}\n\nfunction popHostContext(fiber) {\n  // Do not pop unless this Fiber provided the current context.\n  // pushHostContext() only pushes Fibers that provide unique contexts.\n  if (contextFiberStackCursor.current !== fiber) {\n    return;\n  }\n\n  pop(contextStackCursor$1, fiber);\n  pop(contextFiberStackCursor, fiber);\n}\n\nvar DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is\n// inherited deeply down the subtree. The upper bits only affect\n// this immediate suspense boundary and gets reset each new\n// boundary or suspense list.\n\nvar SubtreeSuspenseContextMask = 1; // Subtree Flags:\n// InvisibleParentSuspenseContext indicates that one of our parent Suspense\n// boundaries is not currently showing visible main content.\n// Either because it is already showing a fallback or is not mounted at all.\n// We can use this to determine if it is desirable to trigger a fallback at\n// the parent. If not, then we might need to trigger undesirable boundaries\n// and/or suspend the commit to avoid hiding the parent content.\n\nvar InvisibleParentSuspenseContext = 1; // Shallow Flags:\n// ForceSuspenseFallback can be used by SuspenseList to force newly added\n// items into their fallback state during one of the render passes.\n\nvar ForceSuspenseFallback = 2;\nvar suspenseStackCursor = createCursor(DefaultSuspenseContext);\nfunction hasSuspenseContext(parentContext, flag) {\n  return (parentContext & flag) !== 0;\n}\nfunction setDefaultShallowSuspenseContext(parentContext) {\n  return parentContext & SubtreeSuspenseContextMask;\n}\nfunction setShallowSuspenseContext(parentContext, shallowContext) {\n  return parentContext & SubtreeSuspenseContextMask | shallowContext;\n}\nfunction addSubtreeSuspenseContext(parentContext, subtreeContext) {\n  return parentContext | subtreeContext;\n}\nfunction pushSuspenseContext(fiber, newContext) {\n  push(suspenseStackCursor, newContext, fiber);\n}\nfunction popSuspenseContext(fiber) {\n  pop(suspenseStackCursor, fiber);\n}\n\nfunction shouldCaptureSuspense(workInProgress, hasInvisibleParent) {\n  // If it was the primary children that just suspended, capture and render the\n  // fallback. Otherwise, don't capture and bubble to the next boundary.\n  var nextState = workInProgress.memoizedState;\n\n  if (nextState !== null) {\n    if (nextState.dehydrated !== null) {\n      // A dehydrated boundary always captures.\n      return true;\n    }\n\n    return false;\n  }\n\n  var props = workInProgress.memoizedProps; // In order to capture, the Suspense component must have a fallback prop.\n\n  if (props.fallback === undefined) {\n    return false;\n  } // Regular boundaries always capture.\n\n\n  if (props.unstable_avoidThisFallback !== true) {\n    return true;\n  } // If it's a boundary we should avoid, then we prefer to bubble up to the\n  // parent boundary if it is currently invisible.\n\n\n  if (hasInvisibleParent) {\n    return false;\n  } // If the parent is not able to handle it, we must handle it.\n\n\n  return true;\n}\nfunction findFirstSuspended(row) {\n  var node = row;\n\n  while (node !== null) {\n    if (node.tag === SuspenseComponent) {\n      var state = node.memoizedState;\n\n      if (state !== null) {\n        var dehydrated = state.dehydrated;\n\n        if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {\n          return node;\n        }\n      }\n    } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't\n    // keep track of whether it suspended or not.\n    node.memoizedProps.revealOrder !== undefined) {\n      var didSuspend = (node.effectTag & DidCapture) !== NoEffect;\n\n      if (didSuspend) {\n        return node;\n      }\n    } else if (node.child !== null) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === row) {\n      return null;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === row) {\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n\n  return null;\n}\n\nfunction createDeprecatedResponderListener(responder, props) {\n  var eventResponderListener = {\n    responder: responder,\n    props: props\n  };\n\n  {\n    Object.freeze(eventResponderListener);\n  }\n\n  return eventResponderListener;\n}\n\nvar HasEffect =\n/* */\n1; // Represents the phase in which the effect (not the clean-up) fires.\n\nvar Layout =\n/*    */\n2;\nvar Passive$1 =\n/*   */\n4;\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher,\n    ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar didWarnAboutMismatchedHooksForComponent;\n\n{\n  didWarnAboutMismatchedHooksForComponent = new Set();\n}\n\n// These are set right before calling the component.\nvar renderExpirationTime = NoWork; // The work-in-progress fiber. I've named it differently to distinguish it from\n// the work-in-progress hook.\n\nvar currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The\n// current hook list is the list that belongs to the current fiber. The\n// work-in-progress hook list is a new list that will be added to the\n// work-in-progress fiber.\n\nvar currentHook = null;\nvar workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This\n// does not get reset if we do another render pass; only when we're completely\n// finished evaluating this component. This is an optimization so we know\n// whether we need to clear render phase updates after a throw.\n\nvar didScheduleRenderPhaseUpdate = false;\nvar RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook\n\nvar currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.\n// The list stores the order of hooks used during the initial render (mount).\n// Subsequent renders (updates) reference this list.\n\nvar hookTypesDev = null;\nvar hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore\n// the dependencies for Hooks that need them (e.g. useEffect or useMemo).\n// When true, such Hooks will always be \"remounted\". Only used during hot reload.\n\nvar ignorePreviousDependencies = false;\n\nfunction mountHookTypesDev() {\n  {\n    var hookName = currentHookNameInDev;\n\n    if (hookTypesDev === null) {\n      hookTypesDev = [hookName];\n    } else {\n      hookTypesDev.push(hookName);\n    }\n  }\n}\n\nfunction updateHookTypesDev() {\n  {\n    var hookName = currentHookNameInDev;\n\n    if (hookTypesDev !== null) {\n      hookTypesUpdateIndexDev++;\n\n      if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {\n        warnOnHookMismatchInDev(hookName);\n      }\n    }\n  }\n}\n\nfunction checkDepsAreArrayDev(deps) {\n  {\n    if (deps !== undefined && deps !== null && !Array.isArray(deps)) {\n      // Verify deps, but only on mount to avoid extra checks.\n      // It's unlikely their type would change as usually you define them inline.\n      error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);\n    }\n  }\n}\n\nfunction warnOnHookMismatchInDev(currentHookName) {\n  {\n    var componentName = getComponentName(currentlyRenderingFiber$1.type);\n\n    if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {\n      didWarnAboutMismatchedHooksForComponent.add(componentName);\n\n      if (hookTypesDev !== null) {\n        var table = '';\n        var secondColumnStart = 30;\n\n        for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {\n          var oldHookName = hookTypesDev[i];\n          var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;\n          var row = i + 1 + \". \" + oldHookName; // Extra space so second column lines up\n          // lol @ IE not supporting String#repeat\n\n          while (row.length < secondColumnStart) {\n            row += ' ';\n          }\n\n          row += newHookName + '\\n';\n          table += row;\n        }\n\n        error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://fb.me/rules-of-hooks\\n\\n' + '   Previous render            Next render\\n' + '   ------------------------------------------------------\\n' + '%s' + '   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n', componentName, table);\n      }\n    }\n  }\n}\n\nfunction throwInvalidHookError() {\n  {\n    {\n      throw Error( \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.\" );\n    }\n  }\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  {\n    if (ignorePreviousDependencies) {\n      // Only true when this component is being hot reloaded.\n      return false;\n    }\n  }\n\n  if (prevDeps === null) {\n    {\n      error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n    }\n\n    return false;\n  }\n\n  {\n    // Don't bother comparing lengths in prod because these arrays should be\n    // passed inline.\n    if (nextDeps.length !== prevDeps.length) {\n      error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, \"[\" + prevDeps.join(', ') + \"]\", \"[\" + nextDeps.join(', ') + \"]\");\n    }\n  }\n\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n    if (objectIs(nextDeps[i], prevDeps[i])) {\n      continue;\n    }\n\n    return false;\n  }\n\n  return true;\n}\n\nfunction renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderExpirationTime) {\n  renderExpirationTime = nextRenderExpirationTime;\n  currentlyRenderingFiber$1 = workInProgress;\n\n  {\n    hookTypesDev = current !== null ? current._debugHookTypes : null;\n    hookTypesUpdateIndexDev = -1; // Used for hot reloading:\n\n    ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;\n  }\n\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.expirationTime = NoWork; // The following should have already been reset\n  // currentHook = null;\n  // workInProgressHook = null;\n  // didScheduleRenderPhaseUpdate = false;\n  // TODO Warn if no hooks are used at all during mount, then some are used during update.\n  // Currently we will identify the update render as a mount because memoizedState === null.\n  // This is tricky because it's valid for certain types of components (e.g. React.lazy)\n  // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.\n  // Non-stateful hooks (e.g. context) don't get added to memoizedState,\n  // so memoizedState would be null during updates and mounts.\n\n  {\n    if (current !== null && current.memoizedState !== null) {\n      ReactCurrentDispatcher.current = HooksDispatcherOnUpdateInDEV;\n    } else if (hookTypesDev !== null) {\n      // This dispatcher handles an edge case where a component is updating,\n      // but no stateful hooks have been used.\n      // We want to match the production code behavior (which will use HooksDispatcherOnMount),\n      // but with the extra DEV validation to ensure hooks ordering hasn't changed.\n      // This dispatcher does that.\n      ReactCurrentDispatcher.current = HooksDispatcherOnMountWithHookTypesInDEV;\n    } else {\n      ReactCurrentDispatcher.current = HooksDispatcherOnMountInDEV;\n    }\n  }\n\n  var children = Component(props, secondArg); // Check if there was a render phase update\n\n  if (workInProgress.expirationTime === renderExpirationTime) {\n    // Keep rendering in a loop for as long as render phase updates continue to\n    // be scheduled. Use a counter to prevent infinite loops.\n    var numberOfReRenders = 0;\n\n    do {\n      workInProgress.expirationTime = NoWork;\n\n      if (!(numberOfReRenders < RE_RENDER_LIMIT)) {\n        {\n          throw Error( \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\" );\n        }\n      }\n\n      numberOfReRenders += 1;\n\n      {\n        // Even when hot reloading, allow dependencies to stabilize\n        // after first render to prevent infinite render phase updates.\n        ignorePreviousDependencies = false;\n      } // Start over from the beginning of the list\n\n\n      currentHook = null;\n      workInProgressHook = null;\n      workInProgress.updateQueue = null;\n\n      {\n        // Also validate hook order for cascading updates.\n        hookTypesUpdateIndexDev = -1;\n      }\n\n      ReactCurrentDispatcher.current =  HooksDispatcherOnRerenderInDEV ;\n      children = Component(props, secondArg);\n    } while (workInProgress.expirationTime === renderExpirationTime);\n  } // We can assume the previous dispatcher is always this one, since we set it\n  // at the beginning of the render phase and there's no re-entrancy.\n\n\n  ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n  {\n    workInProgress._debugHookTypes = hookTypesDev;\n  } // This check uses currentHook so that it works the same in DEV and prod bundles.\n  // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.\n\n\n  var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;\n  renderExpirationTime = NoWork;\n  currentlyRenderingFiber$1 = null;\n  currentHook = null;\n  workInProgressHook = null;\n\n  {\n    currentHookNameInDev = null;\n    hookTypesDev = null;\n    hookTypesUpdateIndexDev = -1;\n  }\n\n  didScheduleRenderPhaseUpdate = false;\n\n  if (!!didRenderTooFewHooks) {\n    {\n      throw Error( \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\" );\n    }\n  }\n\n  return children;\n}\nfunction bailoutHooks(current, workInProgress, expirationTime) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.effectTag &= ~(Passive | Update);\n\n  if (current.expirationTime <= expirationTime) {\n    current.expirationTime = NoWork;\n  }\n}\nfunction resetHooksAfterThrow() {\n  // We can assume the previous dispatcher is always this one, since we set it\n  // at the beginning of the render phase and there's no re-entrancy.\n  ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n  if (didScheduleRenderPhaseUpdate) {\n    // There were render phase updates. These are only valid for this render\n    // phase, which we are now aborting. Remove the updates from the queues so\n    // they do not persist to the next render. Do not remove updates from hooks\n    // that weren't processed.\n    //\n    // Only reset the updates from the queue if it has a clone. If it does\n    // not have a clone, that means it wasn't processed, and the updates were\n    // scheduled before we entered the render phase.\n    var hook = currentlyRenderingFiber$1.memoizedState;\n\n    while (hook !== null) {\n      var queue = hook.queue;\n\n      if (queue !== null) {\n        queue.pending = null;\n      }\n\n      hook = hook.next;\n    }\n  }\n\n  renderExpirationTime = NoWork;\n  currentlyRenderingFiber$1 = null;\n  currentHook = null;\n  workInProgressHook = null;\n\n  {\n    hookTypesDev = null;\n    hookTypesUpdateIndexDev = -1;\n    currentHookNameInDev = null;\n  }\n\n  didScheduleRenderPhaseUpdate = false;\n}\n\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n\n  if (workInProgressHook === null) {\n    // This is the first hook in the list\n    currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;\n  } else {\n    // Append to the end of the list\n    workInProgressHook = workInProgressHook.next = hook;\n  }\n\n  return workInProgressHook;\n}\n\nfunction updateWorkInProgressHook() {\n  // This function is used both for updates and for re-renders triggered by a\n  // render phase update. It assumes there is either a current hook we can\n  // clone, or a work-in-progress hook from a previous render pass that we can\n  // use as a base. When we reach the end of the base list, we must switch to\n  // the dispatcher used for mounts.\n  var nextCurrentHook;\n\n  if (currentHook === null) {\n    var current = currentlyRenderingFiber$1.alternate;\n\n    if (current !== null) {\n      nextCurrentHook = current.memoizedState;\n    } else {\n      nextCurrentHook = null;\n    }\n  } else {\n    nextCurrentHook = currentHook.next;\n  }\n\n  var nextWorkInProgressHook;\n\n  if (workInProgressHook === null) {\n    nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;\n  } else {\n    nextWorkInProgressHook = workInProgressHook.next;\n  }\n\n  if (nextWorkInProgressHook !== null) {\n    // There's already a work-in-progress. Reuse it.\n    workInProgressHook = nextWorkInProgressHook;\n    nextWorkInProgressHook = workInProgressHook.next;\n    currentHook = nextCurrentHook;\n  } else {\n    // Clone from the current hook.\n    if (!(nextCurrentHook !== null)) {\n      {\n        throw Error( \"Rendered more hooks than during the previous render.\" );\n      }\n    }\n\n    currentHook = nextCurrentHook;\n    var newHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n\n    if (workInProgressHook === null) {\n      // This is the first hook in the list.\n      currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;\n    } else {\n      // Append to the end of the list.\n      workInProgressHook = workInProgressHook.next = newHook;\n    }\n  }\n\n  return workInProgressHook;\n}\n\nfunction createFunctionComponentUpdateQueue() {\n  return {\n    lastEffect: null\n  };\n}\n\nfunction basicStateReducer(state, action) {\n  // $FlowFixMe: Flow doesn't like mixed types\n  return typeof action === 'function' ? action(state) : action;\n}\n\nfunction mountReducer(reducer, initialArg, init) {\n  var hook = mountWorkInProgressHook();\n  var initialState;\n\n  if (init !== undefined) {\n    initialState = init(initialArg);\n  } else {\n    initialState = initialArg;\n  }\n\n  hook.memoizedState = hook.baseState = initialState;\n  var queue = hook.queue = {\n    pending: null,\n    dispatch: null,\n    lastRenderedReducer: reducer,\n    lastRenderedState: initialState\n  };\n  var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);\n  return [hook.memoizedState, dispatch];\n}\n\nfunction updateReducer(reducer, initialArg, init) {\n  var hook = updateWorkInProgressHook();\n  var queue = hook.queue;\n\n  if (!(queue !== null)) {\n    {\n      throw Error( \"Should have a queue. This is likely a bug in React. Please file an issue.\" );\n    }\n  }\n\n  queue.lastRenderedReducer = reducer;\n  var current = currentHook; // The last rebase update that is NOT part of the base state.\n\n  var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet.\n\n  var pendingQueue = queue.pending;\n\n  if (pendingQueue !== null) {\n    // We have new updates that haven't been processed yet.\n    // We'll add them to the base queue.\n    if (baseQueue !== null) {\n      // Merge the pending queue and the base queue.\n      var baseFirst = baseQueue.next;\n      var pendingFirst = pendingQueue.next;\n      baseQueue.next = pendingFirst;\n      pendingQueue.next = baseFirst;\n    }\n\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n\n  if (baseQueue !== null) {\n    // We have a queue to process.\n    var first = baseQueue.next;\n    var newState = current.baseState;\n    var newBaseState = null;\n    var newBaseQueueFirst = null;\n    var newBaseQueueLast = null;\n    var update = first;\n\n    do {\n      var updateExpirationTime = update.expirationTime;\n\n      if (updateExpirationTime < renderExpirationTime) {\n        // Priority is insufficient. Skip this update. If this is the first\n        // skipped update, the previous update/state is the new base\n        // update/state.\n        var clone = {\n          expirationTime: update.expirationTime,\n          suspenseConfig: update.suspenseConfig,\n          action: update.action,\n          eagerReducer: update.eagerReducer,\n          eagerState: update.eagerState,\n          next: null\n        };\n\n        if (newBaseQueueLast === null) {\n          newBaseQueueFirst = newBaseQueueLast = clone;\n          newBaseState = newState;\n        } else {\n          newBaseQueueLast = newBaseQueueLast.next = clone;\n        } // Update the remaining priority in the queue.\n\n\n        if (updateExpirationTime > currentlyRenderingFiber$1.expirationTime) {\n          currentlyRenderingFiber$1.expirationTime = updateExpirationTime;\n          markUnprocessedUpdateTime(updateExpirationTime);\n        }\n      } else {\n        // This update does have sufficient priority.\n        if (newBaseQueueLast !== null) {\n          var _clone = {\n            expirationTime: Sync,\n            // This update is going to be committed so we never want uncommit it.\n            suspenseConfig: update.suspenseConfig,\n            action: update.action,\n            eagerReducer: update.eagerReducer,\n            eagerState: update.eagerState,\n            next: null\n          };\n          newBaseQueueLast = newBaseQueueLast.next = _clone;\n        } // Mark the event time of this update as relevant to this render pass.\n        // TODO: This should ideally use the true event time of this update rather than\n        // its priority which is a derived and not reverseable value.\n        // TODO: We should skip this update if it was already committed but currently\n        // we have no way of detecting the difference between a committed and suspended\n        // update here.\n\n\n        markRenderEventTimeAndConfig(updateExpirationTime, update.suspenseConfig); // Process this update.\n\n        if (update.eagerReducer === reducer) {\n          // If this update was processed eagerly, and its reducer matches the\n          // current reducer, we can use the eagerly computed state.\n          newState = update.eagerState;\n        } else {\n          var action = update.action;\n          newState = reducer(newState, action);\n        }\n      }\n\n      update = update.next;\n    } while (update !== null && update !== first);\n\n    if (newBaseQueueLast === null) {\n      newBaseState = newState;\n    } else {\n      newBaseQueueLast.next = newBaseQueueFirst;\n    } // Mark that the fiber performed work, but only if the new state is\n    // different from the current state.\n\n\n    if (!objectIs(newState, hook.memoizedState)) {\n      markWorkInProgressReceivedUpdate();\n    }\n\n    hook.memoizedState = newState;\n    hook.baseState = newBaseState;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = newState;\n  }\n\n  var dispatch = queue.dispatch;\n  return [hook.memoizedState, dispatch];\n}\n\nfunction rerenderReducer(reducer, initialArg, init) {\n  var hook = updateWorkInProgressHook();\n  var queue = hook.queue;\n\n  if (!(queue !== null)) {\n    {\n      throw Error( \"Should have a queue. This is likely a bug in React. Please file an issue.\" );\n    }\n  }\n\n  queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous\n  // work-in-progress hook.\n\n  var dispatch = queue.dispatch;\n  var lastRenderPhaseUpdate = queue.pending;\n  var newState = hook.memoizedState;\n\n  if (lastRenderPhaseUpdate !== null) {\n    // The queue doesn't persist past this render pass.\n    queue.pending = null;\n    var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n    var update = firstRenderPhaseUpdate;\n\n    do {\n      // Process this render phase update. We don't have to check the\n      // priority because it will always be the same as the current\n      // render's.\n      var action = update.action;\n      newState = reducer(newState, action);\n      update = update.next;\n    } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is\n    // different from the current state.\n\n\n    if (!objectIs(newState, hook.memoizedState)) {\n      markWorkInProgressReceivedUpdate();\n    }\n\n    hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to\n    // the base state unless the queue is empty.\n    // TODO: Not sure if this is the desired semantics, but it's what we\n    // do for gDSFP. I can't remember why.\n\n    if (hook.baseQueue === null) {\n      hook.baseState = newState;\n    }\n\n    queue.lastRenderedState = newState;\n  }\n\n  return [newState, dispatch];\n}\n\nfunction mountState(initialState) {\n  var hook = mountWorkInProgressHook();\n\n  if (typeof initialState === 'function') {\n    // $FlowFixMe: Flow doesn't like mixed types\n    initialState = initialState();\n  }\n\n  hook.memoizedState = hook.baseState = initialState;\n  var queue = hook.queue = {\n    pending: null,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);\n  return [hook.memoizedState, dispatch];\n}\n\nfunction updateState(initialState) {\n  return updateReducer(basicStateReducer);\n}\n\nfunction rerenderState(initialState) {\n  return rerenderReducer(basicStateReducer);\n}\n\nfunction pushEffect(tag, create, destroy, deps) {\n  var effect = {\n    tag: tag,\n    create: create,\n    destroy: destroy,\n    deps: deps,\n    // Circular\n    next: null\n  };\n  var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n  if (componentUpdateQueue === null) {\n    componentUpdateQueue = createFunctionComponentUpdateQueue();\n    currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n    componentUpdateQueue.lastEffect = effect.next = effect;\n  } else {\n    var lastEffect = componentUpdateQueue.lastEffect;\n\n    if (lastEffect === null) {\n      componentUpdateQueue.lastEffect = effect.next = effect;\n    } else {\n      var firstEffect = lastEffect.next;\n      lastEffect.next = effect;\n      effect.next = firstEffect;\n      componentUpdateQueue.lastEffect = effect;\n    }\n  }\n\n  return effect;\n}\n\nfunction mountRef(initialValue) {\n  var hook = mountWorkInProgressHook();\n  var ref = {\n    current: initialValue\n  };\n\n  {\n    Object.seal(ref);\n  }\n\n  hook.memoizedState = ref;\n  return ref;\n}\n\nfunction updateRef(initialValue) {\n  var hook = updateWorkInProgressHook();\n  return hook.memoizedState;\n}\n\nfunction mountEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n  var hook = mountWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  currentlyRenderingFiber$1.effectTag |= fiberEffectTag;\n  hook.memoizedState = pushEffect(HasEffect | hookEffectTag, create, undefined, nextDeps);\n}\n\nfunction updateEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n  var hook = updateWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var destroy = undefined;\n\n  if (currentHook !== null) {\n    var prevEffect = currentHook.memoizedState;\n    destroy = prevEffect.destroy;\n\n    if (nextDeps !== null) {\n      var prevDeps = prevEffect.deps;\n\n      if (areHookInputsEqual(nextDeps, prevDeps)) {\n        pushEffect(hookEffectTag, create, destroy, nextDeps);\n        return;\n      }\n    }\n  }\n\n  currentlyRenderingFiber$1.effectTag |= fiberEffectTag;\n  hook.memoizedState = pushEffect(HasEffect | hookEffectTag, create, destroy, nextDeps);\n}\n\nfunction mountEffect(create, deps) {\n  {\n    // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n    if ('undefined' !== typeof jest) {\n      warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);\n    }\n  }\n\n  return mountEffectImpl(Update | Passive, Passive$1, create, deps);\n}\n\nfunction updateEffect(create, deps) {\n  {\n    // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n    if ('undefined' !== typeof jest) {\n      warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);\n    }\n  }\n\n  return updateEffectImpl(Update | Passive, Passive$1, create, deps);\n}\n\nfunction mountLayoutEffect(create, deps) {\n  return mountEffectImpl(Update, Layout, create, deps);\n}\n\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(Update, Layout, create, deps);\n}\n\nfunction imperativeHandleEffect(create, ref) {\n  if (typeof ref === 'function') {\n    var refCallback = ref;\n\n    var _inst = create();\n\n    refCallback(_inst);\n    return function () {\n      refCallback(null);\n    };\n  } else if (ref !== null && ref !== undefined) {\n    var refObject = ref;\n\n    {\n      if (!refObject.hasOwnProperty('current')) {\n        error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');\n      }\n    }\n\n    var _inst2 = create();\n\n    refObject.current = _inst2;\n    return function () {\n      refObject.current = null;\n    };\n  }\n}\n\nfunction mountImperativeHandle(ref, create, deps) {\n  {\n    if (typeof create !== 'function') {\n      error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n    }\n  } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n  var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n  return mountEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction updateImperativeHandle(ref, create, deps) {\n  {\n    if (typeof create !== 'function') {\n      error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n    }\n  } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n  var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n  return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction mountDebugValue(value, formatterFn) {// This hook is normally a no-op.\n  // The react-debug-hooks package injects its own implementation\n  // so that e.g. DevTools can display custom hook values.\n}\n\nvar updateDebugValue = mountDebugValue;\n\nfunction mountCallback(callback, deps) {\n  var hook = mountWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  hook.memoizedState = [callback, nextDeps];\n  return callback;\n}\n\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var prevState = hook.memoizedState;\n\n  if (prevState !== null) {\n    if (nextDeps !== null) {\n      var prevDeps = prevState[1];\n\n      if (areHookInputsEqual(nextDeps, prevDeps)) {\n        return prevState[0];\n      }\n    }\n  }\n\n  hook.memoizedState = [callback, nextDeps];\n  return callback;\n}\n\nfunction mountMemo(nextCreate, deps) {\n  var hook = mountWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var nextValue = nextCreate();\n  hook.memoizedState = [nextValue, nextDeps];\n  return nextValue;\n}\n\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var prevState = hook.memoizedState;\n\n  if (prevState !== null) {\n    // Assume these are defined. If they're not, areHookInputsEqual will warn.\n    if (nextDeps !== null) {\n      var prevDeps = prevState[1];\n\n      if (areHookInputsEqual(nextDeps, prevDeps)) {\n        return prevState[0];\n      }\n    }\n  }\n\n  var nextValue = nextCreate();\n  hook.memoizedState = [nextValue, nextDeps];\n  return nextValue;\n}\n\nfunction mountDeferredValue(value, config) {\n  var _mountState = mountState(value),\n      prevValue = _mountState[0],\n      setValue = _mountState[1];\n\n  mountEffect(function () {\n    var previousConfig = ReactCurrentBatchConfig$1.suspense;\n    ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n    try {\n      setValue(value);\n    } finally {\n      ReactCurrentBatchConfig$1.suspense = previousConfig;\n    }\n  }, [value, config]);\n  return prevValue;\n}\n\nfunction updateDeferredValue(value, config) {\n  var _updateState = updateState(),\n      prevValue = _updateState[0],\n      setValue = _updateState[1];\n\n  updateEffect(function () {\n    var previousConfig = ReactCurrentBatchConfig$1.suspense;\n    ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n    try {\n      setValue(value);\n    } finally {\n      ReactCurrentBatchConfig$1.suspense = previousConfig;\n    }\n  }, [value, config]);\n  return prevValue;\n}\n\nfunction rerenderDeferredValue(value, config) {\n  var _rerenderState = rerenderState(),\n      prevValue = _rerenderState[0],\n      setValue = _rerenderState[1];\n\n  updateEffect(function () {\n    var previousConfig = ReactCurrentBatchConfig$1.suspense;\n    ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n    try {\n      setValue(value);\n    } finally {\n      ReactCurrentBatchConfig$1.suspense = previousConfig;\n    }\n  }, [value, config]);\n  return prevValue;\n}\n\nfunction startTransition(setPending, config, callback) {\n  var priorityLevel = getCurrentPriorityLevel();\n  runWithPriority$1(priorityLevel < UserBlockingPriority$1 ? UserBlockingPriority$1 : priorityLevel, function () {\n    setPending(true);\n  });\n  runWithPriority$1(priorityLevel > NormalPriority ? NormalPriority : priorityLevel, function () {\n    var previousConfig = ReactCurrentBatchConfig$1.suspense;\n    ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n    try {\n      setPending(false);\n      callback();\n    } finally {\n      ReactCurrentBatchConfig$1.suspense = previousConfig;\n    }\n  });\n}\n\nfunction mountTransition(config) {\n  var _mountState2 = mountState(false),\n      isPending = _mountState2[0],\n      setPending = _mountState2[1];\n\n  var start = mountCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n  return [start, isPending];\n}\n\nfunction updateTransition(config) {\n  var _updateState2 = updateState(),\n      isPending = _updateState2[0],\n      setPending = _updateState2[1];\n\n  var start = updateCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n  return [start, isPending];\n}\n\nfunction rerenderTransition(config) {\n  var _rerenderState2 = rerenderState(),\n      isPending = _rerenderState2[0],\n      setPending = _rerenderState2[1];\n\n  var start = updateCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n  return [start, isPending];\n}\n\nfunction dispatchAction(fiber, queue, action) {\n  {\n    if (typeof arguments[3] === 'function') {\n      error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n    }\n  }\n\n  var currentTime = requestCurrentTimeForUpdate();\n  var suspenseConfig = requestCurrentSuspenseConfig();\n  var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n  var update = {\n    expirationTime: expirationTime,\n    suspenseConfig: suspenseConfig,\n    action: action,\n    eagerReducer: null,\n    eagerState: null,\n    next: null\n  };\n\n  {\n    update.priority = getCurrentPriorityLevel();\n  } // Append the update to the end of the list.\n\n\n  var pending = queue.pending;\n\n  if (pending === null) {\n    // This is the first update. Create a circular list.\n    update.next = update;\n  } else {\n    update.next = pending.next;\n    pending.next = update;\n  }\n\n  queue.pending = update;\n  var alternate = fiber.alternate;\n\n  if (fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1) {\n    // This is a render phase update. Stash it in a lazily-created map of\n    // queue -> linked list of updates. After this render pass, we'll restart\n    // and apply the stashed updates on top of the work-in-progress hook.\n    didScheduleRenderPhaseUpdate = true;\n    update.expirationTime = renderExpirationTime;\n    currentlyRenderingFiber$1.expirationTime = renderExpirationTime;\n  } else {\n    if (fiber.expirationTime === NoWork && (alternate === null || alternate.expirationTime === NoWork)) {\n      // The queue is currently empty, which means we can eagerly compute the\n      // next state before entering the render phase. If the new state is the\n      // same as the current state, we may be able to bail out entirely.\n      var lastRenderedReducer = queue.lastRenderedReducer;\n\n      if (lastRenderedReducer !== null) {\n        var prevDispatcher;\n\n        {\n          prevDispatcher = ReactCurrentDispatcher.current;\n          ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        }\n\n        try {\n          var currentState = queue.lastRenderedState;\n          var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute\n          // it, on the update object. If the reducer hasn't changed by the\n          // time we enter the render phase, then the eager state can be used\n          // without calling the reducer again.\n\n          update.eagerReducer = lastRenderedReducer;\n          update.eagerState = eagerState;\n\n          if (objectIs(eagerState, currentState)) {\n            // Fast path. We can bail out without scheduling React to re-render.\n            // It's still possible that we'll need to rebase this update later,\n            // if the component re-renders for a different reason and by that\n            // time the reducer has changed.\n            return;\n          }\n        } catch (error) {// Suppress the error. It will throw again in the render phase.\n        } finally {\n          {\n            ReactCurrentDispatcher.current = prevDispatcher;\n          }\n        }\n      }\n    }\n\n    {\n      // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n      if ('undefined' !== typeof jest) {\n        warnIfNotScopedWithMatchingAct(fiber);\n        warnIfNotCurrentlyActingUpdatesInDev(fiber);\n      }\n    }\n\n    scheduleWork(fiber, expirationTime);\n  }\n}\n\nvar ContextOnlyDispatcher = {\n  readContext: readContext,\n  useCallback: throwInvalidHookError,\n  useContext: throwInvalidHookError,\n  useEffect: throwInvalidHookError,\n  useImperativeHandle: throwInvalidHookError,\n  useLayoutEffect: throwInvalidHookError,\n  useMemo: throwInvalidHookError,\n  useReducer: throwInvalidHookError,\n  useRef: throwInvalidHookError,\n  useState: throwInvalidHookError,\n  useDebugValue: throwInvalidHookError,\n  useResponder: throwInvalidHookError,\n  useDeferredValue: throwInvalidHookError,\n  useTransition: throwInvalidHookError\n};\nvar HooksDispatcherOnMountInDEV = null;\nvar HooksDispatcherOnMountWithHookTypesInDEV = null;\nvar HooksDispatcherOnUpdateInDEV = null;\nvar HooksDispatcherOnRerenderInDEV = null;\nvar InvalidNestedHooksDispatcherOnMountInDEV = null;\nvar InvalidNestedHooksDispatcherOnUpdateInDEV = null;\nvar InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n\n{\n  var warnInvalidContextAccess = function () {\n    error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n  };\n\n  var warnInvalidHookAccess = function () {\n    error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://fb.me/rules-of-hooks');\n  };\n\n  HooksDispatcherOnMountInDEV = {\n    readContext: function (context, observedBits) {\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      mountHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      mountHookTypesDev();\n      return mountRef(initialValue);\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      mountHookTypesDev();\n      return mountDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      mountHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      mountHookTypesDev();\n      return mountDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      mountHookTypesDev();\n      return mountTransition(config);\n    }\n  };\n  HooksDispatcherOnMountWithHookTypesInDEV = {\n    readContext: function (context, observedBits) {\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      updateHookTypesDev();\n      return mountCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      updateHookTypesDev();\n      return mountEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      updateHookTypesDev();\n      return mountImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      updateHookTypesDev();\n      return mountLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      updateHookTypesDev();\n      return mountRef(initialValue);\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      updateHookTypesDev();\n      return mountDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      updateHookTypesDev();\n      return mountDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      updateHookTypesDev();\n      return mountTransition(config);\n    }\n  };\n  HooksDispatcherOnUpdateInDEV = {\n    readContext: function (context, observedBits) {\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      updateHookTypesDev();\n      return updateDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      updateHookTypesDev();\n      return updateTransition(config);\n    }\n  };\n  HooksDispatcherOnRerenderInDEV = {\n    readContext: function (context, observedBits) {\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n      try {\n        return rerenderReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n      try {\n        return rerenderState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      updateHookTypesDev();\n      return rerenderDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      updateHookTypesDev();\n      return rerenderTransition(config);\n    }\n  };\n  InvalidNestedHooksDispatcherOnMountInDEV = {\n    readContext: function (context, observedBits) {\n      warnInvalidContextAccess();\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountRef(initialValue);\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountTransition(config);\n    }\n  };\n  InvalidNestedHooksDispatcherOnUpdateInDEV = {\n    readContext: function (context, observedBits) {\n      warnInvalidContextAccess();\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateTransition(config);\n    }\n  };\n  InvalidNestedHooksDispatcherOnRerenderInDEV = {\n    readContext: function (context, observedBits) {\n      warnInvalidContextAccess();\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return rerenderReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return rerenderState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return rerenderDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return rerenderTransition(config);\n    }\n  };\n}\n\nvar now$1 = Scheduler.unstable_now;\nvar commitTime = 0;\nvar profilerStartTime = -1;\n\nfunction getCommitTime() {\n  return commitTime;\n}\n\nfunction recordCommitTime() {\n\n  commitTime = now$1();\n}\n\nfunction startProfilerTimer(fiber) {\n\n  profilerStartTime = now$1();\n\n  if (fiber.actualStartTime < 0) {\n    fiber.actualStartTime = now$1();\n  }\n}\n\nfunction stopProfilerTimerIfRunning(fiber) {\n\n  profilerStartTime = -1;\n}\n\nfunction stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {\n\n  if (profilerStartTime >= 0) {\n    var elapsedTime = now$1() - profilerStartTime;\n    fiber.actualDuration += elapsedTime;\n\n    if (overrideBaseTime) {\n      fiber.selfBaseDuration = elapsedTime;\n    }\n\n    profilerStartTime = -1;\n  }\n}\n\n// This may have been an insertion or a hydration.\n\nvar hydrationParentFiber = null;\nvar nextHydratableInstance = null;\nvar isHydrating = false;\n\nfunction enterHydrationState(fiber) {\n\n  var parentInstance = fiber.stateNode.containerInfo;\n  nextHydratableInstance = getFirstHydratableChild(parentInstance);\n  hydrationParentFiber = fiber;\n  isHydrating = true;\n  return true;\n}\n\nfunction deleteHydratableInstance(returnFiber, instance) {\n  {\n    switch (returnFiber.tag) {\n      case HostRoot:\n        didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance);\n        break;\n\n      case HostComponent:\n        didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance);\n        break;\n    }\n  }\n\n  var childToDelete = createFiberFromHostInstanceForDeletion();\n  childToDelete.stateNode = instance;\n  childToDelete.return = returnFiber;\n  childToDelete.effectTag = Deletion; // This might seem like it belongs on progressedFirstDeletion. However,\n  // these children are not part of the reconciliation list of children.\n  // Even if we abort and rereconcile the children, that will try to hydrate\n  // again and the nodes are still in the host tree so these will be\n  // recreated.\n\n  if (returnFiber.lastEffect !== null) {\n    returnFiber.lastEffect.nextEffect = childToDelete;\n    returnFiber.lastEffect = childToDelete;\n  } else {\n    returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n  }\n}\n\nfunction insertNonHydratedInstance(returnFiber, fiber) {\n  fiber.effectTag = fiber.effectTag & ~Hydrating | Placement;\n\n  {\n    switch (returnFiber.tag) {\n      case HostRoot:\n        {\n          var parentContainer = returnFiber.stateNode.containerInfo;\n\n          switch (fiber.tag) {\n            case HostComponent:\n              var type = fiber.type;\n              var props = fiber.pendingProps;\n              didNotFindHydratableContainerInstance(parentContainer, type);\n              break;\n\n            case HostText:\n              var text = fiber.pendingProps;\n              didNotFindHydratableContainerTextInstance(parentContainer, text);\n              break;\n          }\n\n          break;\n        }\n\n      case HostComponent:\n        {\n          var parentType = returnFiber.type;\n          var parentProps = returnFiber.memoizedProps;\n          var parentInstance = returnFiber.stateNode;\n\n          switch (fiber.tag) {\n            case HostComponent:\n              var _type = fiber.type;\n              var _props = fiber.pendingProps;\n              didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type);\n              break;\n\n            case HostText:\n              var _text = fiber.pendingProps;\n              didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text);\n              break;\n\n            case SuspenseComponent:\n              didNotFindHydratableSuspenseInstance(parentType, parentProps);\n              break;\n          }\n\n          break;\n        }\n\n      default:\n        return;\n    }\n  }\n}\n\nfunction tryHydrate(fiber, nextInstance) {\n  switch (fiber.tag) {\n    case HostComponent:\n      {\n        var type = fiber.type;\n        var props = fiber.pendingProps;\n        var instance = canHydrateInstance(nextInstance, type);\n\n        if (instance !== null) {\n          fiber.stateNode = instance;\n          return true;\n        }\n\n        return false;\n      }\n\n    case HostText:\n      {\n        var text = fiber.pendingProps;\n        var textInstance = canHydrateTextInstance(nextInstance, text);\n\n        if (textInstance !== null) {\n          fiber.stateNode = textInstance;\n          return true;\n        }\n\n        return false;\n      }\n\n    case SuspenseComponent:\n      {\n\n        return false;\n      }\n\n    default:\n      return false;\n  }\n}\n\nfunction tryToClaimNextHydratableInstance(fiber) {\n  if (!isHydrating) {\n    return;\n  }\n\n  var nextInstance = nextHydratableInstance;\n\n  if (!nextInstance) {\n    // Nothing to hydrate. Make it an insertion.\n    insertNonHydratedInstance(hydrationParentFiber, fiber);\n    isHydrating = false;\n    hydrationParentFiber = fiber;\n    return;\n  }\n\n  var firstAttemptedInstance = nextInstance;\n\n  if (!tryHydrate(fiber, nextInstance)) {\n    // If we can't hydrate this instance let's try the next one.\n    // We use this as a heuristic. It's based on intuition and not data so it\n    // might be flawed or unnecessary.\n    nextInstance = getNextHydratableSibling(firstAttemptedInstance);\n\n    if (!nextInstance || !tryHydrate(fiber, nextInstance)) {\n      // Nothing to hydrate. Make it an insertion.\n      insertNonHydratedInstance(hydrationParentFiber, fiber);\n      isHydrating = false;\n      hydrationParentFiber = fiber;\n      return;\n    } // We matched the next one, we'll now assume that the first one was\n    // superfluous and we'll delete it. Since we can't eagerly delete it\n    // we'll have to schedule a deletion. To do that, this node needs a dummy\n    // fiber associated with it.\n\n\n    deleteHydratableInstance(hydrationParentFiber, firstAttemptedInstance);\n  }\n\n  hydrationParentFiber = fiber;\n  nextHydratableInstance = getFirstHydratableChild(nextInstance);\n}\n\nfunction prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {\n\n  var instance = fiber.stateNode;\n  var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber); // TODO: Type this specific to this type of component.\n\n  fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n  // is a new ref we mark this as an update.\n\n  if (updatePayload !== null) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction prepareToHydrateHostTextInstance(fiber) {\n\n  var textInstance = fiber.stateNode;\n  var textContent = fiber.memoizedProps;\n  var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);\n\n  {\n    if (shouldUpdate) {\n      // We assume that prepareToHydrateHostTextInstance is called in a context where the\n      // hydration parent is the parent host component of this host text.\n      var returnFiber = hydrationParentFiber;\n\n      if (returnFiber !== null) {\n        switch (returnFiber.tag) {\n          case HostRoot:\n            {\n              var parentContainer = returnFiber.stateNode.containerInfo;\n              didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent);\n              break;\n            }\n\n          case HostComponent:\n            {\n              var parentType = returnFiber.type;\n              var parentProps = returnFiber.memoizedProps;\n              var parentInstance = returnFiber.stateNode;\n              didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent);\n              break;\n            }\n        }\n      }\n    }\n  }\n\n  return shouldUpdate;\n}\n\nfunction skipPastDehydratedSuspenseInstance(fiber) {\n\n  var suspenseState = fiber.memoizedState;\n  var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n  if (!suspenseInstance) {\n    {\n      throw Error( \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n\n  return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);\n}\n\nfunction popToNextHostParent(fiber) {\n  var parent = fiber.return;\n\n  while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) {\n    parent = parent.return;\n  }\n\n  hydrationParentFiber = parent;\n}\n\nfunction popHydrationState(fiber) {\n\n  if (fiber !== hydrationParentFiber) {\n    // We're deeper than the current hydration context, inside an inserted\n    // tree.\n    return false;\n  }\n\n  if (!isHydrating) {\n    // If we're not currently hydrating but we're in a hydration context, then\n    // we were an insertion and now need to pop up reenter hydration of our\n    // siblings.\n    popToNextHostParent(fiber);\n    isHydrating = true;\n    return false;\n  }\n\n  var type = fiber.type; // If we have any remaining hydratable nodes, we need to delete them now.\n  // We only do this deeper than head and body since they tend to have random\n  // other nodes in them. We also ignore components with pure text content in\n  // side of them.\n  // TODO: Better heuristic.\n\n  if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) {\n    var nextInstance = nextHydratableInstance;\n\n    while (nextInstance) {\n      deleteHydratableInstance(fiber, nextInstance);\n      nextInstance = getNextHydratableSibling(nextInstance);\n    }\n  }\n\n  popToNextHostParent(fiber);\n\n  if (fiber.tag === SuspenseComponent) {\n    nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);\n  } else {\n    nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;\n  }\n\n  return true;\n}\n\nfunction resetHydrationState() {\n\n  hydrationParentFiber = null;\n  nextHydratableInstance = null;\n  isHydrating = false;\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar didReceiveUpdate = false;\nvar didWarnAboutBadClass;\nvar didWarnAboutModulePatternComponent;\nvar didWarnAboutContextTypeOnFunctionComponent;\nvar didWarnAboutGetDerivedStateOnFunctionComponent;\nvar didWarnAboutFunctionRefs;\nvar didWarnAboutReassigningProps;\nvar didWarnAboutRevealOrder;\nvar didWarnAboutTailOptions;\n\n{\n  didWarnAboutBadClass = {};\n  didWarnAboutModulePatternComponent = {};\n  didWarnAboutContextTypeOnFunctionComponent = {};\n  didWarnAboutGetDerivedStateOnFunctionComponent = {};\n  didWarnAboutFunctionRefs = {};\n  didWarnAboutReassigningProps = false;\n  didWarnAboutRevealOrder = {};\n  didWarnAboutTailOptions = {};\n}\n\nfunction reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime) {\n  if (current === null) {\n    // If this is a fresh new component that hasn't been rendered yet, we\n    // won't update its child set by applying minimal side-effects. Instead,\n    // we will add them all to the child before it gets rendered. That means\n    // we can optimize this reconciliation pass by not tracking side-effects.\n    workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n  } else {\n    // If the current child is the same as the work in progress, it means that\n    // we haven't yet started any work on these children. Therefore, we use\n    // the clone algorithm to create a copy of all the current children.\n    // If we had any progressed work already, that is invalid at this point so\n    // let's throw it out.\n    workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderExpirationTime);\n  }\n}\n\nfunction forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderExpirationTime) {\n  // This function is fork of reconcileChildren. It's used in cases where we\n  // want to reconcile without matching against the existing set. This has the\n  // effect of all current children being unmounted; even if the type and key\n  // are the same, the old child is unmounted and a new child is created.\n  //\n  // To do this, we're going to go through the reconcile algorithm twice. In\n  // the first pass, we schedule a deletion for all the current children by\n  // passing null.\n  workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderExpirationTime); // In the second pass, we mount the new children. The trick here is that we\n  // pass null in place of where we usually pass the current child set. This has\n  // the effect of remounting all children regardless of whether their\n  // identities match.\n\n  workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n}\n\nfunction updateForwardRef(current, workInProgress, Component, nextProps, renderExpirationTime) {\n  // TODO: current can be non-null here even if the component\n  // hasn't yet mounted. This happens after the first render suspends.\n  // We'll need to figure out if this is fine or can cause issues.\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var innerPropTypes = Component.propTypes;\n\n      if (innerPropTypes) {\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentName(Component), getCurrentFiberStackInDev);\n      }\n    }\n  }\n\n  var render = Component.render;\n  var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent\n\n  var nextChildren;\n  prepareToReadContext(workInProgress, renderExpirationTime);\n\n  {\n    ReactCurrentOwner$1.current = workInProgress;\n    setIsRendering(true);\n    nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderExpirationTime);\n\n    if ( workInProgress.mode & StrictMode) {\n      // Only double-render components with Hooks\n      if (workInProgress.memoizedState !== null) {\n        nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderExpirationTime);\n      }\n    }\n\n    setIsRendering(false);\n  }\n\n  if (current !== null && !didReceiveUpdate) {\n    bailoutHooks(current, workInProgress, renderExpirationTime);\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateMemoComponent(current, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n  if (current === null) {\n    var type = Component.type;\n\n    if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.\n    Component.defaultProps === undefined) {\n      var resolvedType = type;\n\n      {\n        resolvedType = resolveFunctionForHotReloading(type);\n      } // If this is a plain function component without default props,\n      // and with only the default shallow comparison, we upgrade it\n      // to a SimpleMemoComponent to allow fast path updates.\n\n\n      workInProgress.tag = SimpleMemoComponent;\n      workInProgress.type = resolvedType;\n\n      {\n        validateFunctionComponentInDev(workInProgress, type);\n      }\n\n      return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, updateExpirationTime, renderExpirationTime);\n    }\n\n    {\n      var innerPropTypes = type.propTypes;\n\n      if (innerPropTypes) {\n        // Inner memo component props aren't currently validated in createElement.\n        // We could move it there, but we'd still need this for lazy code path.\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentName(type), getCurrentFiberStackInDev);\n      }\n    }\n\n    var child = createFiberFromTypeAndProps(Component.type, null, nextProps, null, workInProgress.mode, renderExpirationTime);\n    child.ref = workInProgress.ref;\n    child.return = workInProgress;\n    workInProgress.child = child;\n    return child;\n  }\n\n  {\n    var _type = Component.type;\n    var _innerPropTypes = _type.propTypes;\n\n    if (_innerPropTypes) {\n      // Inner memo component props aren't currently validated in createElement.\n      // We could move it there, but we'd still need this for lazy code path.\n      checkPropTypes(_innerPropTypes, nextProps, // Resolved props\n      'prop', getComponentName(_type), getCurrentFiberStackInDev);\n    }\n  }\n\n  var currentChild = current.child; // This is always exactly one child\n\n  if (updateExpirationTime < renderExpirationTime) {\n    // This will be the props with resolved defaultProps,\n    // unlike current.memoizedProps which will be the unresolved ones.\n    var prevProps = currentChild.memoizedProps; // Default to shallow comparison\n\n    var compare = Component.compare;\n    compare = compare !== null ? compare : shallowEqual;\n\n    if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n    }\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n  var newChild = createWorkInProgress(currentChild, nextProps);\n  newChild.ref = workInProgress.ref;\n  newChild.return = workInProgress;\n  workInProgress.child = newChild;\n  return newChild;\n}\n\nfunction updateSimpleMemoComponent(current, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n  // TODO: current can be non-null here even if the component\n  // hasn't yet mounted. This happens when the inner render suspends.\n  // We'll need to figure out if this is fine or can cause issues.\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var outerMemoType = workInProgress.elementType;\n\n      if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {\n        // We warn when you define propTypes on lazy()\n        // so let's just skip over it to find memo() outer wrapper.\n        // Inner props for memo are validated later.\n        outerMemoType = refineResolvedLazyComponent(outerMemoType);\n      }\n\n      var outerPropTypes = outerMemoType && outerMemoType.propTypes;\n\n      if (outerPropTypes) {\n        checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)\n        'prop', getComponentName(outerMemoType), getCurrentFiberStackInDev);\n      } // Inner propTypes will be validated in the function component path.\n\n    }\n  }\n\n  if (current !== null) {\n    var prevProps = current.memoizedProps;\n\n    if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.\n     workInProgress.type === current.type )) {\n      didReceiveUpdate = false;\n\n      if (updateExpirationTime < renderExpirationTime) {\n        // The pending update priority was cleared at the beginning of\n        // beginWork. We're about to bail out, but there might be additional\n        // updates at a lower priority. Usually, the priority level of the\n        // remaining updates is accumlated during the evaluation of the\n        // component (i.e. when processing the update queue). But since since\n        // we're bailing out early *without* evaluating the component, we need\n        // to account for it here, too. Reset to the value of the current fiber.\n        // NOTE: This only applies to SimpleMemoComponent, not MemoComponent,\n        // because a MemoComponent fiber does not have hooks or an update queue;\n        // rather, it wraps around an inner component, which may or may not\n        // contains hooks.\n        // TODO: Move the reset at in beginWork out of the common path so that\n        // this is no longer necessary.\n        workInProgress.expirationTime = current.expirationTime;\n        return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n      }\n    }\n  }\n\n  return updateFunctionComponent(current, workInProgress, Component, nextProps, renderExpirationTime);\n}\n\nfunction updateFragment(current, workInProgress, renderExpirationTime) {\n  var nextChildren = workInProgress.pendingProps;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateMode(current, workInProgress, renderExpirationTime) {\n  var nextChildren = workInProgress.pendingProps.children;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateProfiler(current, workInProgress, renderExpirationTime) {\n  {\n    workInProgress.effectTag |= Update;\n  }\n\n  var nextProps = workInProgress.pendingProps;\n  var nextChildren = nextProps.children;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n\n  if (current === null && ref !== null || current !== null && current.ref !== ref) {\n    // Schedule a Ref effect\n    workInProgress.effectTag |= Ref;\n  }\n}\n\nfunction updateFunctionComponent(current, workInProgress, Component, nextProps, renderExpirationTime) {\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var innerPropTypes = Component.propTypes;\n\n      if (innerPropTypes) {\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentName(Component), getCurrentFiberStackInDev);\n      }\n    }\n  }\n\n  var context;\n\n  {\n    var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);\n    context = getMaskedContext(workInProgress, unmaskedContext);\n  }\n\n  var nextChildren;\n  prepareToReadContext(workInProgress, renderExpirationTime);\n\n  {\n    ReactCurrentOwner$1.current = workInProgress;\n    setIsRendering(true);\n    nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderExpirationTime);\n\n    if ( workInProgress.mode & StrictMode) {\n      // Only double-render components with Hooks\n      if (workInProgress.memoizedState !== null) {\n        nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderExpirationTime);\n      }\n    }\n\n    setIsRendering(false);\n  }\n\n  if (current !== null && !didReceiveUpdate) {\n    bailoutHooks(current, workInProgress, renderExpirationTime);\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateClassComponent(current, workInProgress, Component, nextProps, renderExpirationTime) {\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var innerPropTypes = Component.propTypes;\n\n      if (innerPropTypes) {\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentName(Component), getCurrentFiberStackInDev);\n      }\n    }\n  } // Push context providers early to prevent context stack mismatches.\n  // During mounting we don't know the child context yet as the instance doesn't exist.\n  // We will invalidate the child context in finishClassComponent() right after rendering.\n\n\n  var hasContext;\n\n  if (isContextProvider(Component)) {\n    hasContext = true;\n    pushContextProvider(workInProgress);\n  } else {\n    hasContext = false;\n  }\n\n  prepareToReadContext(workInProgress, renderExpirationTime);\n  var instance = workInProgress.stateNode;\n  var shouldUpdate;\n\n  if (instance === null) {\n    if (current !== null) {\n      // A class component without an instance only mounts if it suspended\n      // inside a non-concurrent tree, in an inconsistent state. We want to\n      // treat it like a new mount, even though an empty version of it already\n      // committed. Disconnect the alternate pointers.\n      current.alternate = null;\n      workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n      workInProgress.effectTag |= Placement;\n    } // In the initial pass we might need to construct the instance.\n\n\n    constructClassInstance(workInProgress, Component, nextProps);\n    mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n    shouldUpdate = true;\n  } else if (current === null) {\n    // In a resume, we'll already have an instance we can reuse.\n    shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n  } else {\n    shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderExpirationTime);\n  }\n\n  var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime);\n\n  {\n    var inst = workInProgress.stateNode;\n\n    if (inst.props !== nextProps) {\n      if (!didWarnAboutReassigningProps) {\n        error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentName(workInProgress.type) || 'a component');\n      }\n\n      didWarnAboutReassigningProps = true;\n    }\n  }\n\n  return nextUnitOfWork;\n}\n\nfunction finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime) {\n  // Refs should update even if shouldComponentUpdate returns false\n  markRef(current, workInProgress);\n  var didCaptureError = (workInProgress.effectTag & DidCapture) !== NoEffect;\n\n  if (!shouldUpdate && !didCaptureError) {\n    // Context providers should defer to sCU for rendering\n    if (hasContext) {\n      invalidateContextProvider(workInProgress, Component, false);\n    }\n\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n  }\n\n  var instance = workInProgress.stateNode; // Rerender\n\n  ReactCurrentOwner$1.current = workInProgress;\n  var nextChildren;\n\n  if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {\n    // If we captured an error, but getDerivedStateFromError is not defined,\n    // unmount all the children. componentDidCatch will schedule an update to\n    // re-render a fallback. This is temporary until we migrate everyone to\n    // the new API.\n    // TODO: Warn in a future release.\n    nextChildren = null;\n\n    {\n      stopProfilerTimerIfRunning();\n    }\n  } else {\n    {\n      setIsRendering(true);\n      nextChildren = instance.render();\n\n      if ( workInProgress.mode & StrictMode) {\n        instance.render();\n      }\n\n      setIsRendering(false);\n    }\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n\n  if (current !== null && didCaptureError) {\n    // If we're recovering from an error, reconcile without reusing any of\n    // the existing children. Conceptually, the normal children and the children\n    // that are shown on error are two different sets, so we shouldn't reuse\n    // normal children even if their identities match.\n    forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderExpirationTime);\n  } else {\n    reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  } // Memoize state using the values we just used to render.\n  // TODO: Restructure so we never read values from the instance.\n\n\n  workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.\n\n  if (hasContext) {\n    invalidateContextProvider(workInProgress, Component, true);\n  }\n\n  return workInProgress.child;\n}\n\nfunction pushHostRootContext(workInProgress) {\n  var root = workInProgress.stateNode;\n\n  if (root.pendingContext) {\n    pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);\n  } else if (root.context) {\n    // Should always be set\n    pushTopLevelContextObject(workInProgress, root.context, false);\n  }\n\n  pushHostContainer(workInProgress, root.containerInfo);\n}\n\nfunction updateHostRoot(current, workInProgress, renderExpirationTime) {\n  pushHostRootContext(workInProgress);\n  var updateQueue = workInProgress.updateQueue;\n\n  if (!(current !== null && updateQueue !== null)) {\n    {\n      throw Error( \"If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n\n  var nextProps = workInProgress.pendingProps;\n  var prevState = workInProgress.memoizedState;\n  var prevChildren = prevState !== null ? prevState.element : null;\n  cloneUpdateQueue(current, workInProgress);\n  processUpdateQueue(workInProgress, nextProps, null, renderExpirationTime);\n  var nextState = workInProgress.memoizedState; // Caution: React DevTools currently depends on this property\n  // being called \"element\".\n\n  var nextChildren = nextState.element;\n\n  if (nextChildren === prevChildren) {\n    // If the state is the same as before, that's a bailout because we had\n    // no work that expires at this time.\n    resetHydrationState();\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n  }\n\n  var root = workInProgress.stateNode;\n\n  if (root.hydrate && enterHydrationState(workInProgress)) {\n    // If we don't have any current children this might be the first pass.\n    // We always try to hydrate. If this isn't a hydration pass there won't\n    // be any children to hydrate which is effectively the same thing as\n    // not hydrating.\n    var child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n    workInProgress.child = child;\n    var node = child;\n\n    while (node) {\n      // Mark each child as hydrating. This is a fast path to know whether this\n      // tree is part of a hydrating tree. This is used to determine if a child\n      // node has fully mounted yet, and for scheduling event replaying.\n      // Conceptually this is similar to Placement in that a new subtree is\n      // inserted into the React tree here. It just happens to not need DOM\n      // mutations because it already exists.\n      node.effectTag = node.effectTag & ~Placement | Hydrating;\n      node = node.sibling;\n    }\n  } else {\n    // Otherwise reset hydration state in case we aborted and resumed another\n    // root.\n    reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n    resetHydrationState();\n  }\n\n  return workInProgress.child;\n}\n\nfunction updateHostComponent(current, workInProgress, renderExpirationTime) {\n  pushHostContext(workInProgress);\n\n  if (current === null) {\n    tryToClaimNextHydratableInstance(workInProgress);\n  }\n\n  var type = workInProgress.type;\n  var nextProps = workInProgress.pendingProps;\n  var prevProps = current !== null ? current.memoizedProps : null;\n  var nextChildren = nextProps.children;\n  var isDirectTextChild = shouldSetTextContent(type, nextProps);\n\n  if (isDirectTextChild) {\n    // We special case a direct text child of a host node. This is a common\n    // case. We won't handle it as a reified child. We will instead handle\n    // this in the host environment that also has access to this prop. That\n    // avoids allocating another HostText fiber and traversing it.\n    nextChildren = null;\n  } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {\n    // If we're switching from a direct text child to a normal child, or to\n    // empty, we need to schedule the text content to be reset.\n    workInProgress.effectTag |= ContentReset;\n  }\n\n  markRef(current, workInProgress); // Check the host config to see if the children are offscreen/hidden.\n\n  if (workInProgress.mode & ConcurrentMode && renderExpirationTime !== Never && shouldDeprioritizeSubtree(type, nextProps)) {\n    {\n      markSpawnedWork(Never);\n    } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n    workInProgress.expirationTime = workInProgress.childExpirationTime = Never;\n    return null;\n  }\n\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateHostText(current, workInProgress) {\n  if (current === null) {\n    tryToClaimNextHydratableInstance(workInProgress);\n  } // Nothing to do here. This is terminal. We'll do the completion step\n  // immediately after.\n\n\n  return null;\n}\n\nfunction mountLazyComponent(_current, workInProgress, elementType, updateExpirationTime, renderExpirationTime) {\n  if (_current !== null) {\n    // A lazy component only mounts if it suspended inside a non-\n    // concurrent tree, in an inconsistent state. We want to treat it like\n    // a new mount, even though an empty version of it already committed.\n    // Disconnect the alternate pointers.\n    _current.alternate = null;\n    workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n    workInProgress.effectTag |= Placement;\n  }\n\n  var props = workInProgress.pendingProps; // We can't start a User Timing measurement with correct label yet.\n  // Cancel and resume right after we know the tag.\n\n  cancelWorkTimer(workInProgress);\n  var Component = readLazyComponentType(elementType); // Store the unwrapped component in the type.\n\n  workInProgress.type = Component;\n  var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);\n  startWorkTimer(workInProgress);\n  var resolvedProps = resolveDefaultProps(Component, props);\n  var child;\n\n  switch (resolvedTag) {\n    case FunctionComponent:\n      {\n        {\n          validateFunctionComponentInDev(workInProgress, Component);\n          workInProgress.type = Component = resolveFunctionForHotReloading(Component);\n        }\n\n        child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n        return child;\n      }\n\n    case ClassComponent:\n      {\n        {\n          workInProgress.type = Component = resolveClassForHotReloading(Component);\n        }\n\n        child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n        return child;\n      }\n\n    case ForwardRef:\n      {\n        {\n          workInProgress.type = Component = resolveForwardRefForHotReloading(Component);\n        }\n\n        child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n        return child;\n      }\n\n    case MemoComponent:\n      {\n        {\n          if (workInProgress.type !== workInProgress.elementType) {\n            var outerPropTypes = Component.propTypes;\n\n            if (outerPropTypes) {\n              checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only\n              'prop', getComponentName(Component), getCurrentFiberStackInDev);\n            }\n          }\n        }\n\n        child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too\n        updateExpirationTime, renderExpirationTime);\n        return child;\n      }\n  }\n\n  var hint = '';\n\n  {\n    if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {\n      hint = ' Did you wrap a component in React.lazy() more than once?';\n    }\n  } // This message intentionally doesn't mention ForwardRef or MemoComponent\n  // because the fact that it's a separate type of work is an\n  // implementation detail.\n\n\n  {\n    {\n      throw Error( \"Element type is invalid. Received a promise that resolves to: \" + Component + \". Lazy element type must resolve to a class or function.\" + hint );\n    }\n  }\n}\n\nfunction mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderExpirationTime) {\n  if (_current !== null) {\n    // An incomplete component only mounts if it suspended inside a non-\n    // concurrent tree, in an inconsistent state. We want to treat it like\n    // a new mount, even though an empty version of it already committed.\n    // Disconnect the alternate pointers.\n    _current.alternate = null;\n    workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n    workInProgress.effectTag |= Placement;\n  } // Promote the fiber to a class and try rendering again.\n\n\n  workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`\n  // Push context providers early to prevent context stack mismatches.\n  // During mounting we don't know the child context yet as the instance doesn't exist.\n  // We will invalidate the child context in finishClassComponent() right after rendering.\n\n  var hasContext;\n\n  if (isContextProvider(Component)) {\n    hasContext = true;\n    pushContextProvider(workInProgress);\n  } else {\n    hasContext = false;\n  }\n\n  prepareToReadContext(workInProgress, renderExpirationTime);\n  constructClassInstance(workInProgress, Component, nextProps);\n  mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n  return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n}\n\nfunction mountIndeterminateComponent(_current, workInProgress, Component, renderExpirationTime) {\n  if (_current !== null) {\n    // An indeterminate component only mounts if it suspended inside a non-\n    // concurrent tree, in an inconsistent state. We want to treat it like\n    // a new mount, even though an empty version of it already committed.\n    // Disconnect the alternate pointers.\n    _current.alternate = null;\n    workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n    workInProgress.effectTag |= Placement;\n  }\n\n  var props = workInProgress.pendingProps;\n  var context;\n\n  {\n    var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);\n    context = getMaskedContext(workInProgress, unmaskedContext);\n  }\n\n  prepareToReadContext(workInProgress, renderExpirationTime);\n  var value;\n\n  {\n    if (Component.prototype && typeof Component.prototype.render === 'function') {\n      var componentName = getComponentName(Component) || 'Unknown';\n\n      if (!didWarnAboutBadClass[componentName]) {\n        error(\"The <%s /> component appears to have a render method, but doesn't extend React.Component. \" + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);\n\n        didWarnAboutBadClass[componentName] = true;\n      }\n    }\n\n    if (workInProgress.mode & StrictMode) {\n      ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);\n    }\n\n    setIsRendering(true);\n    ReactCurrentOwner$1.current = workInProgress;\n    value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n    setIsRendering(false);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n\n  if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n    {\n      var _componentName = getComponentName(Component) || 'Unknown';\n\n      if (!didWarnAboutModulePatternComponent[_componentName]) {\n        error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);\n\n        didWarnAboutModulePatternComponent[_componentName] = true;\n      }\n    } // Proceed under the assumption that this is a class instance\n\n\n    workInProgress.tag = ClassComponent; // Throw out any hooks that were used.\n\n    workInProgress.memoizedState = null;\n    workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.\n    // During mounting we don't know the child context yet as the instance doesn't exist.\n    // We will invalidate the child context in finishClassComponent() right after rendering.\n\n    var hasContext = false;\n\n    if (isContextProvider(Component)) {\n      hasContext = true;\n      pushContextProvider(workInProgress);\n    } else {\n      hasContext = false;\n    }\n\n    workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;\n    initializeUpdateQueue(workInProgress);\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n\n    if (typeof getDerivedStateFromProps === 'function') {\n      applyDerivedStateFromProps(workInProgress, Component, getDerivedStateFromProps, props);\n    }\n\n    adoptClassInstance(workInProgress, value);\n    mountClassInstance(workInProgress, Component, props, renderExpirationTime);\n    return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n  } else {\n    // Proceed under the assumption that this is a function component\n    workInProgress.tag = FunctionComponent;\n\n    {\n\n      if ( workInProgress.mode & StrictMode) {\n        // Only double-render components with Hooks\n        if (workInProgress.memoizedState !== null) {\n          value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n        }\n      }\n    }\n\n    reconcileChildren(null, workInProgress, value, renderExpirationTime);\n\n    {\n      validateFunctionComponentInDev(workInProgress, Component);\n    }\n\n    return workInProgress.child;\n  }\n}\n\nfunction validateFunctionComponentInDev(workInProgress, Component) {\n  {\n    if (Component) {\n      if (Component.childContextTypes) {\n        error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');\n      }\n    }\n\n    if (workInProgress.ref !== null) {\n      var info = '';\n      var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n      if (ownerName) {\n        info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n      }\n\n      var warningKey = ownerName || workInProgress._debugID || '';\n      var debugSource = workInProgress._debugSource;\n\n      if (debugSource) {\n        warningKey = debugSource.fileName + ':' + debugSource.lineNumber;\n      }\n\n      if (!didWarnAboutFunctionRefs[warningKey]) {\n        didWarnAboutFunctionRefs[warningKey] = true;\n\n        error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);\n      }\n    }\n\n    if (typeof Component.getDerivedStateFromProps === 'function') {\n      var _componentName2 = getComponentName(Component) || 'Unknown';\n\n      if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2]) {\n        error('%s: Function components do not support getDerivedStateFromProps.', _componentName2);\n\n        didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] = true;\n      }\n    }\n\n    if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n      var _componentName3 = getComponentName(Component) || 'Unknown';\n\n      if (!didWarnAboutContextTypeOnFunctionComponent[_componentName3]) {\n        error('%s: Function components do not support contextType.', _componentName3);\n\n        didWarnAboutContextTypeOnFunctionComponent[_componentName3] = true;\n      }\n    }\n  }\n}\n\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  retryTime: NoWork\n};\n\nfunction shouldRemainOnFallback(suspenseContext, current, workInProgress) {\n  // If the context is telling us that we should show a fallback, and we're not\n  // already showing content, then we should show the fallback instead.\n  return hasSuspenseContext(suspenseContext, ForceSuspenseFallback) && (current === null || current.memoizedState !== null);\n}\n\nfunction updateSuspenseComponent(current, workInProgress, renderExpirationTime) {\n  var mode = workInProgress.mode;\n  var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.\n\n  {\n    if (shouldSuspend(workInProgress)) {\n      workInProgress.effectTag |= DidCapture;\n    }\n  }\n\n  var suspenseContext = suspenseStackCursor.current;\n  var nextDidTimeout = false;\n  var didSuspend = (workInProgress.effectTag & DidCapture) !== NoEffect;\n\n  if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) {\n    // Something in this boundary's subtree already suspended. Switch to\n    // rendering the fallback children.\n    nextDidTimeout = true;\n    workInProgress.effectTag &= ~DidCapture;\n  } else {\n    // Attempting the main content\n    if (current === null || current.memoizedState !== null) {\n      // This is a new mount or this boundary is already showing a fallback state.\n      // Mark this subtree context as having at least one invisible parent that could\n      // handle the fallback state.\n      // Boundaries without fallbacks or should be avoided are not considered since\n      // they cannot handle preferred fallback states.\n      if (nextProps.fallback !== undefined && nextProps.unstable_avoidThisFallback !== true) {\n        suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext);\n      }\n    }\n  }\n\n  suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n  pushSuspenseContext(workInProgress, suspenseContext); // This next part is a bit confusing. If the children timeout, we switch to\n  // showing the fallback children in place of the \"primary\" children.\n  // However, we don't want to delete the primary children because then their\n  // state will be lost (both the React state and the host state, e.g.\n  // uncontrolled form inputs). Instead we keep them mounted and hide them.\n  // Both the fallback children AND the primary children are rendered at the\n  // same time. Once the primary children are un-suspended, we can delete\n  // the fallback children — don't need to preserve their state.\n  //\n  // The two sets of children are siblings in the host environment, but\n  // semantically, for purposes of reconciliation, they are two separate sets.\n  // So we store them using two fragment fibers.\n  //\n  // However, we want to avoid allocating extra fibers for every placeholder.\n  // They're only necessary when the children time out, because that's the\n  // only time when both sets are mounted.\n  //\n  // So, the extra fragment fibers are only used if the children time out.\n  // Otherwise, we render the primary children directly. This requires some\n  // custom reconciliation logic to preserve the state of the primary\n  // children. It's essentially a very basic form of re-parenting.\n\n  if (current === null) {\n    // If we're currently hydrating, try to hydrate this boundary.\n    // But only if this has a fallback.\n    if (nextProps.fallback !== undefined) {\n      tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component.\n    } // This is the initial mount. This branch is pretty simple because there's\n    // no previous state that needs to be preserved.\n\n\n    if (nextDidTimeout) {\n      // Mount separate fragments for primary and fallback children.\n      var nextFallbackChildren = nextProps.fallback;\n      var primaryChildFragment = createFiberFromFragment(null, mode, NoWork, null);\n      primaryChildFragment.return = workInProgress;\n\n      if ((workInProgress.mode & BlockingMode) === NoMode) {\n        // Outside of blocking mode, we commit the effects from the\n        // partially completed, timed-out tree, too.\n        var progressedState = workInProgress.memoizedState;\n        var progressedPrimaryChild = progressedState !== null ? workInProgress.child.child : workInProgress.child;\n        primaryChildFragment.child = progressedPrimaryChild;\n        var progressedChild = progressedPrimaryChild;\n\n        while (progressedChild !== null) {\n          progressedChild.return = primaryChildFragment;\n          progressedChild = progressedChild.sibling;\n        }\n      }\n\n      var fallbackChildFragment = createFiberFromFragment(nextFallbackChildren, mode, renderExpirationTime, null);\n      fallbackChildFragment.return = workInProgress;\n      primaryChildFragment.sibling = fallbackChildFragment; // Skip the primary children, and continue working on the\n      // fallback children.\n\n      workInProgress.memoizedState = SUSPENDED_MARKER;\n      workInProgress.child = primaryChildFragment;\n      return fallbackChildFragment;\n    } else {\n      // Mount the primary children without an intermediate fragment fiber.\n      var nextPrimaryChildren = nextProps.children;\n      workInProgress.memoizedState = null;\n      return workInProgress.child = mountChildFibers(workInProgress, null, nextPrimaryChildren, renderExpirationTime);\n    }\n  } else {\n    // This is an update. This branch is more complicated because we need to\n    // ensure the state of the primary children is preserved.\n    var prevState = current.memoizedState;\n\n    if (prevState !== null) {\n      // wrapped in a fragment fiber.\n\n\n      var currentPrimaryChildFragment = current.child;\n      var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n\n      if (nextDidTimeout) {\n        // Still timed out. Reuse the current primary children by cloning\n        // its fragment. We're going to skip over these entirely.\n        var _nextFallbackChildren2 = nextProps.fallback;\n\n        var _primaryChildFragment2 = createWorkInProgress(currentPrimaryChildFragment, currentPrimaryChildFragment.pendingProps);\n\n        _primaryChildFragment2.return = workInProgress;\n\n        if ((workInProgress.mode & BlockingMode) === NoMode) {\n          // Outside of blocking mode, we commit the effects from the\n          // partially completed, timed-out tree, too.\n          var _progressedState = workInProgress.memoizedState;\n\n          var _progressedPrimaryChild = _progressedState !== null ? workInProgress.child.child : workInProgress.child;\n\n          if (_progressedPrimaryChild !== currentPrimaryChildFragment.child) {\n            _primaryChildFragment2.child = _progressedPrimaryChild;\n            var _progressedChild2 = _progressedPrimaryChild;\n\n            while (_progressedChild2 !== null) {\n              _progressedChild2.return = _primaryChildFragment2;\n              _progressedChild2 = _progressedChild2.sibling;\n            }\n          }\n        } // Because primaryChildFragment is a new fiber that we're inserting as the\n        // parent of a new tree, we need to set its treeBaseDuration.\n\n\n        if ( workInProgress.mode & ProfileMode) {\n          // treeBaseDuration is the sum of all the child tree base durations.\n          var _treeBaseDuration = 0;\n          var _hiddenChild = _primaryChildFragment2.child;\n\n          while (_hiddenChild !== null) {\n            _treeBaseDuration += _hiddenChild.treeBaseDuration;\n            _hiddenChild = _hiddenChild.sibling;\n          }\n\n          _primaryChildFragment2.treeBaseDuration = _treeBaseDuration;\n        } // Clone the fallback child fragment, too. These we'll continue\n        // working on.\n\n\n        var _fallbackChildFragment2 = createWorkInProgress(currentFallbackChildFragment, _nextFallbackChildren2);\n\n        _fallbackChildFragment2.return = workInProgress;\n        _primaryChildFragment2.sibling = _fallbackChildFragment2;\n        _primaryChildFragment2.childExpirationTime = NoWork; // Skip the primary children, and continue working on the\n        // fallback children.\n\n        workInProgress.memoizedState = SUSPENDED_MARKER;\n        workInProgress.child = _primaryChildFragment2;\n        return _fallbackChildFragment2;\n      } else {\n        // No longer suspended. Switch back to showing the primary children,\n        // and remove the intermediate fragment fiber.\n        var _nextPrimaryChildren = nextProps.children;\n        var currentPrimaryChild = currentPrimaryChildFragment.child;\n        var primaryChild = reconcileChildFibers(workInProgress, currentPrimaryChild, _nextPrimaryChildren, renderExpirationTime); // If this render doesn't suspend, we need to delete the fallback\n        // children. Wait until the complete phase, after we've confirmed the\n        // fallback is no longer needed.\n        // TODO: Would it be better to store the fallback fragment on\n        // the stateNode?\n        // Continue rendering the children, like we normally do.\n\n        workInProgress.memoizedState = null;\n        return workInProgress.child = primaryChild;\n      }\n    } else {\n      // The current tree has not already timed out. That means the primary\n      // children are not wrapped in a fragment fiber.\n      var _currentPrimaryChild = current.child;\n\n      if (nextDidTimeout) {\n        // Timed out. Wrap the children in a fragment fiber to keep them\n        // separate from the fallback children.\n        var _nextFallbackChildren3 = nextProps.fallback;\n\n        var _primaryChildFragment3 = createFiberFromFragment( // It shouldn't matter what the pending props are because we aren't\n        // going to render this fragment.\n        null, mode, NoWork, null);\n\n        _primaryChildFragment3.return = workInProgress;\n        _primaryChildFragment3.child = _currentPrimaryChild;\n\n        if (_currentPrimaryChild !== null) {\n          _currentPrimaryChild.return = _primaryChildFragment3;\n        } // Even though we're creating a new fiber, there are no new children,\n        // because we're reusing an already mounted tree. So we don't need to\n        // schedule a placement.\n        // primaryChildFragment.effectTag |= Placement;\n\n\n        if ((workInProgress.mode & BlockingMode) === NoMode) {\n          // Outside of blocking mode, we commit the effects from the\n          // partially completed, timed-out tree, too.\n          var _progressedState2 = workInProgress.memoizedState;\n\n          var _progressedPrimaryChild2 = _progressedState2 !== null ? workInProgress.child.child : workInProgress.child;\n\n          _primaryChildFragment3.child = _progressedPrimaryChild2;\n          var _progressedChild3 = _progressedPrimaryChild2;\n\n          while (_progressedChild3 !== null) {\n            _progressedChild3.return = _primaryChildFragment3;\n            _progressedChild3 = _progressedChild3.sibling;\n          }\n        } // Because primaryChildFragment is a new fiber that we're inserting as the\n        // parent of a new tree, we need to set its treeBaseDuration.\n\n\n        if ( workInProgress.mode & ProfileMode) {\n          // treeBaseDuration is the sum of all the child tree base durations.\n          var _treeBaseDuration2 = 0;\n          var _hiddenChild2 = _primaryChildFragment3.child;\n\n          while (_hiddenChild2 !== null) {\n            _treeBaseDuration2 += _hiddenChild2.treeBaseDuration;\n            _hiddenChild2 = _hiddenChild2.sibling;\n          }\n\n          _primaryChildFragment3.treeBaseDuration = _treeBaseDuration2;\n        } // Create a fragment from the fallback children, too.\n\n\n        var _fallbackChildFragment3 = createFiberFromFragment(_nextFallbackChildren3, mode, renderExpirationTime, null);\n\n        _fallbackChildFragment3.return = workInProgress;\n        _primaryChildFragment3.sibling = _fallbackChildFragment3;\n        _fallbackChildFragment3.effectTag |= Placement;\n        _primaryChildFragment3.childExpirationTime = NoWork; // Skip the primary children, and continue working on the\n        // fallback children.\n\n        workInProgress.memoizedState = SUSPENDED_MARKER;\n        workInProgress.child = _primaryChildFragment3;\n        return _fallbackChildFragment3;\n      } else {\n        // Still haven't timed out. Continue rendering the children, like we\n        // normally do.\n        workInProgress.memoizedState = null;\n        var _nextPrimaryChildren2 = nextProps.children;\n        return workInProgress.child = reconcileChildFibers(workInProgress, _currentPrimaryChild, _nextPrimaryChildren2, renderExpirationTime);\n      }\n    }\n  }\n}\n\nfunction scheduleWorkOnFiber(fiber, renderExpirationTime) {\n  if (fiber.expirationTime < renderExpirationTime) {\n    fiber.expirationTime = renderExpirationTime;\n  }\n\n  var alternate = fiber.alternate;\n\n  if (alternate !== null && alternate.expirationTime < renderExpirationTime) {\n    alternate.expirationTime = renderExpirationTime;\n  }\n\n  scheduleWorkOnParentPath(fiber.return, renderExpirationTime);\n}\n\nfunction propagateSuspenseContextChange(workInProgress, firstChild, renderExpirationTime) {\n  // Mark any Suspense boundaries with fallbacks as having work to do.\n  // If they were previously forced into fallbacks, they may now be able\n  // to unblock.\n  var node = firstChild;\n\n  while (node !== null) {\n    if (node.tag === SuspenseComponent) {\n      var state = node.memoizedState;\n\n      if (state !== null) {\n        scheduleWorkOnFiber(node, renderExpirationTime);\n      }\n    } else if (node.tag === SuspenseListComponent) {\n      // If the tail is hidden there might not be an Suspense boundaries\n      // to schedule work on. In this case we have to schedule it on the\n      // list itself.\n      // We don't have to traverse to the children of the list since\n      // the list will propagate the change when it rerenders.\n      scheduleWorkOnFiber(node, renderExpirationTime);\n    } else if (node.child !== null) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === workInProgress) {\n      return;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === workInProgress) {\n        return;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n}\n\nfunction findLastContentRow(firstChild) {\n  // This is going to find the last row among these children that is already\n  // showing content on the screen, as opposed to being in fallback state or\n  // new. If a row has multiple Suspense boundaries, any of them being in the\n  // fallback state, counts as the whole row being in a fallback state.\n  // Note that the \"rows\" will be workInProgress, but any nested children\n  // will still be current since we haven't rendered them yet. The mounted\n  // order may not be the same as the new order. We use the new order.\n  var row = firstChild;\n  var lastContentRow = null;\n\n  while (row !== null) {\n    var currentRow = row.alternate; // New rows can't be content rows.\n\n    if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n      lastContentRow = row;\n    }\n\n    row = row.sibling;\n  }\n\n  return lastContentRow;\n}\n\nfunction validateRevealOrder(revealOrder) {\n  {\n    if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {\n      didWarnAboutRevealOrder[revealOrder] = true;\n\n      if (typeof revealOrder === 'string') {\n        switch (revealOrder.toLowerCase()) {\n          case 'together':\n          case 'forwards':\n          case 'backwards':\n            {\n              error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase \"%s\" instead.', revealOrder, revealOrder.toLowerCase());\n\n              break;\n            }\n\n          case 'forward':\n          case 'backward':\n            {\n              error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use \"%ss\" instead.', revealOrder, revealOrder.toLowerCase());\n\n              break;\n            }\n\n          default:\n            error('\"%s\" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n\n            break;\n        }\n      } else {\n        error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n      }\n    }\n  }\n}\n\nfunction validateTailOptions(tailMode, revealOrder) {\n  {\n    if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {\n      if (tailMode !== 'collapsed' && tailMode !== 'hidden') {\n        didWarnAboutTailOptions[tailMode] = true;\n\n        error('\"%s\" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean \"collapsed\" or \"hidden\"?', tailMode);\n      } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {\n        didWarnAboutTailOptions[tailMode] = true;\n\n        error('<SuspenseList tail=\"%s\" /> is only valid if revealOrder is ' + '\"forwards\" or \"backwards\". ' + 'Did you mean to specify revealOrder=\"forwards\"?', tailMode);\n      }\n    }\n  }\n}\n\nfunction validateSuspenseListNestedChild(childSlot, index) {\n  {\n    var isArray = Array.isArray(childSlot);\n    var isIterable = !isArray && typeof getIteratorFn(childSlot) === 'function';\n\n    if (isArray || isIterable) {\n      var type = isArray ? 'array' : 'iterable';\n\n      error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);\n\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction validateSuspenseListChildren(children, revealOrder) {\n  {\n    if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {\n      if (Array.isArray(children)) {\n        for (var i = 0; i < children.length; i++) {\n          if (!validateSuspenseListNestedChild(children[i], i)) {\n            return;\n          }\n        }\n      } else {\n        var iteratorFn = getIteratorFn(children);\n\n        if (typeof iteratorFn === 'function') {\n          var childrenIterator = iteratorFn.call(children);\n\n          if (childrenIterator) {\n            var step = childrenIterator.next();\n            var _i = 0;\n\n            for (; !step.done; step = childrenIterator.next()) {\n              if (!validateSuspenseListNestedChild(step.value, _i)) {\n                return;\n              }\n\n              _i++;\n            }\n          }\n        } else {\n          error('A single row was passed to a <SuspenseList revealOrder=\"%s\" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);\n        }\n      }\n    }\n  }\n}\n\nfunction initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode, lastEffectBeforeRendering) {\n  var renderState = workInProgress.memoizedState;\n\n  if (renderState === null) {\n    workInProgress.memoizedState = {\n      isBackwards: isBackwards,\n      rendering: null,\n      renderingStartTime: 0,\n      last: lastContentRow,\n      tail: tail,\n      tailExpiration: 0,\n      tailMode: tailMode,\n      lastEffect: lastEffectBeforeRendering\n    };\n  } else {\n    // We can reuse the existing object from previous renders.\n    renderState.isBackwards = isBackwards;\n    renderState.rendering = null;\n    renderState.renderingStartTime = 0;\n    renderState.last = lastContentRow;\n    renderState.tail = tail;\n    renderState.tailExpiration = 0;\n    renderState.tailMode = tailMode;\n    renderState.lastEffect = lastEffectBeforeRendering;\n  }\n} // This can end up rendering this component multiple passes.\n// The first pass splits the children fibers into two sets. A head and tail.\n// We first render the head. If anything is in fallback state, we do another\n// pass through beginWork to rerender all children (including the tail) with\n// the force suspend context. If the first render didn't have anything in\n// in fallback state. Then we render each row in the tail one-by-one.\n// That happens in the completeWork phase without going back to beginWork.\n\n\nfunction updateSuspenseListComponent(current, workInProgress, renderExpirationTime) {\n  var nextProps = workInProgress.pendingProps;\n  var revealOrder = nextProps.revealOrder;\n  var tailMode = nextProps.tail;\n  var newChildren = nextProps.children;\n  validateRevealOrder(revealOrder);\n  validateTailOptions(tailMode, revealOrder);\n  validateSuspenseListChildren(newChildren, revealOrder);\n  reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n  var suspenseContext = suspenseStackCursor.current;\n  var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback);\n\n  if (shouldForceFallback) {\n    suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n    workInProgress.effectTag |= DidCapture;\n  } else {\n    var didSuspendBefore = current !== null && (current.effectTag & DidCapture) !== NoEffect;\n\n    if (didSuspendBefore) {\n      // If we previously forced a fallback, we need to schedule work\n      // on any nested boundaries to let them know to try to render\n      // again. This is the same as context updating.\n      propagateSuspenseContextChange(workInProgress, workInProgress.child, renderExpirationTime);\n    }\n\n    suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n  }\n\n  pushSuspenseContext(workInProgress, suspenseContext);\n\n  if ((workInProgress.mode & BlockingMode) === NoMode) {\n    // Outside of blocking mode, SuspenseList doesn't work so we just\n    // use make it a noop by treating it as the default revealOrder.\n    workInProgress.memoizedState = null;\n  } else {\n    switch (revealOrder) {\n      case 'forwards':\n        {\n          var lastContentRow = findLastContentRow(workInProgress.child);\n          var tail;\n\n          if (lastContentRow === null) {\n            // The whole list is part of the tail.\n            // TODO: We could fast path by just rendering the tail now.\n            tail = workInProgress.child;\n            workInProgress.child = null;\n          } else {\n            // Disconnect the tail rows after the content row.\n            // We're going to render them separately later.\n            tail = lastContentRow.sibling;\n            lastContentRow.sibling = null;\n          }\n\n          initSuspenseListRenderState(workInProgress, false, // isBackwards\n          tail, lastContentRow, tailMode, workInProgress.lastEffect);\n          break;\n        }\n\n      case 'backwards':\n        {\n          // We're going to find the first row that has existing content.\n          // At the same time we're going to reverse the list of everything\n          // we pass in the meantime. That's going to be our tail in reverse\n          // order.\n          var _tail = null;\n          var row = workInProgress.child;\n          workInProgress.child = null;\n\n          while (row !== null) {\n            var currentRow = row.alternate; // New rows can't be content rows.\n\n            if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n              // This is the beginning of the main content.\n              workInProgress.child = row;\n              break;\n            }\n\n            var nextRow = row.sibling;\n            row.sibling = _tail;\n            _tail = row;\n            row = nextRow;\n          } // TODO: If workInProgress.child is null, we can continue on the tail immediately.\n\n\n          initSuspenseListRenderState(workInProgress, true, // isBackwards\n          _tail, null, // last\n          tailMode, workInProgress.lastEffect);\n          break;\n        }\n\n      case 'together':\n        {\n          initSuspenseListRenderState(workInProgress, false, // isBackwards\n          null, // tail\n          null, // last\n          undefined, workInProgress.lastEffect);\n          break;\n        }\n\n      default:\n        {\n          // The default reveal order is the same as not having\n          // a boundary.\n          workInProgress.memoizedState = null;\n        }\n    }\n  }\n\n  return workInProgress.child;\n}\n\nfunction updatePortalComponent(current, workInProgress, renderExpirationTime) {\n  pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n  var nextChildren = workInProgress.pendingProps;\n\n  if (current === null) {\n    // Portals are special because we don't append the children during mount\n    // but at commit. Therefore we need to track insertions which the normal\n    // flow doesn't do during mount. This doesn't happen at the root because\n    // the root always starts with a \"current\" with a null child.\n    // TODO: Consider unifying this with how the root works.\n    workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n  } else {\n    reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  }\n\n  return workInProgress.child;\n}\n\nfunction updateContextProvider(current, workInProgress, renderExpirationTime) {\n  var providerType = workInProgress.type;\n  var context = providerType._context;\n  var newProps = workInProgress.pendingProps;\n  var oldProps = workInProgress.memoizedProps;\n  var newValue = newProps.value;\n\n  {\n    var providerPropTypes = workInProgress.type.propTypes;\n\n    if (providerPropTypes) {\n      checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider', getCurrentFiberStackInDev);\n    }\n  }\n\n  pushProvider(workInProgress, newValue);\n\n  if (oldProps !== null) {\n    var oldValue = oldProps.value;\n    var changedBits = calculateChangedBits(context, newValue, oldValue);\n\n    if (changedBits === 0) {\n      // No change. Bailout early if children are the same.\n      if (oldProps.children === newProps.children && !hasContextChanged()) {\n        return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n      }\n    } else {\n      // The context value changed. Search for matching consumers and schedule\n      // them to update.\n      propagateContextChange(workInProgress, context, changedBits, renderExpirationTime);\n    }\n  }\n\n  var newChildren = newProps.children;\n  reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingContextAsConsumer = false;\n\nfunction updateContextConsumer(current, workInProgress, renderExpirationTime) {\n  var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In\n  // DEV mode, we create a separate object for Context.Consumer that acts\n  // like a proxy to Context. This proxy object adds unnecessary code in PROD\n  // so we use the old behaviour (Context.Consumer references Context) to\n  // reduce size and overhead. The separate object references context via\n  // a property called \"_context\", which also gives us the ability to check\n  // in DEV mode if this property exists or not and warn if it does not.\n\n  {\n    if (context._context === undefined) {\n      // This may be because it's a Context (rather than a Consumer).\n      // Or it may be because it's older React where they're the same thing.\n      // We only want to warn if we're sure it's a new React.\n      if (context !== context.Consumer) {\n        if (!hasWarnedAboutUsingContextAsConsumer) {\n          hasWarnedAboutUsingContextAsConsumer = true;\n\n          error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n        }\n      }\n    } else {\n      context = context._context;\n    }\n  }\n\n  var newProps = workInProgress.pendingProps;\n  var render = newProps.children;\n\n  {\n    if (typeof render !== 'function') {\n      error('A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');\n    }\n  }\n\n  prepareToReadContext(workInProgress, renderExpirationTime);\n  var newValue = readContext(context, newProps.unstable_observedBits);\n  var newChildren;\n\n  {\n    ReactCurrentOwner$1.current = workInProgress;\n    setIsRendering(true);\n    newChildren = render(newValue);\n    setIsRendering(false);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n  reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction markWorkInProgressReceivedUpdate() {\n  didReceiveUpdate = true;\n}\n\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime) {\n  cancelWorkTimer(workInProgress);\n\n  if (current !== null) {\n    // Reuse previous dependencies\n    workInProgress.dependencies = current.dependencies;\n  }\n\n  {\n    // Don't update \"base\" render times for bailouts.\n    stopProfilerTimerIfRunning();\n  }\n\n  var updateExpirationTime = workInProgress.expirationTime;\n\n  if (updateExpirationTime !== NoWork) {\n    markUnprocessedUpdateTime(updateExpirationTime);\n  } // Check if the children have any pending work.\n\n\n  var childExpirationTime = workInProgress.childExpirationTime;\n\n  if (childExpirationTime < renderExpirationTime) {\n    // The children don't have any work either. We can skip them.\n    // TODO: Once we add back resuming, we should check if the children are\n    // a work-in-progress set. If so, we need to transfer their effects.\n    return null;\n  } else {\n    // This fiber doesn't have work, but its subtree does. Clone the child\n    // fibers and continue.\n    cloneChildFibers(current, workInProgress);\n    return workInProgress.child;\n  }\n}\n\nfunction remountFiber(current, oldWorkInProgress, newWorkInProgress) {\n  {\n    var returnFiber = oldWorkInProgress.return;\n\n    if (returnFiber === null) {\n      throw new Error('Cannot swap the root fiber.');\n    } // Disconnect from the old current.\n    // It will get deleted.\n\n\n    current.alternate = null;\n    oldWorkInProgress.alternate = null; // Connect to the new tree.\n\n    newWorkInProgress.index = oldWorkInProgress.index;\n    newWorkInProgress.sibling = oldWorkInProgress.sibling;\n    newWorkInProgress.return = oldWorkInProgress.return;\n    newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.\n\n    if (oldWorkInProgress === returnFiber.child) {\n      returnFiber.child = newWorkInProgress;\n    } else {\n      var prevSibling = returnFiber.child;\n\n      if (prevSibling === null) {\n        throw new Error('Expected parent to have a child.');\n      }\n\n      while (prevSibling.sibling !== oldWorkInProgress) {\n        prevSibling = prevSibling.sibling;\n\n        if (prevSibling === null) {\n          throw new Error('Expected to find the previous sibling.');\n        }\n      }\n\n      prevSibling.sibling = newWorkInProgress;\n    } // Delete the old fiber and place the new one.\n    // Since the old fiber is disconnected, we have to schedule it manually.\n\n\n    var last = returnFiber.lastEffect;\n\n    if (last !== null) {\n      last.nextEffect = current;\n      returnFiber.lastEffect = current;\n    } else {\n      returnFiber.firstEffect = returnFiber.lastEffect = current;\n    }\n\n    current.nextEffect = null;\n    current.effectTag = Deletion;\n    newWorkInProgress.effectTag |= Placement; // Restart work from the new fiber.\n\n    return newWorkInProgress;\n  }\n}\n\nfunction beginWork(current, workInProgress, renderExpirationTime) {\n  var updateExpirationTime = workInProgress.expirationTime;\n\n  {\n    if (workInProgress._debugNeedsRemount && current !== null) {\n      // This will restart the begin phase with a new fiber.\n      return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.expirationTime));\n    }\n  }\n\n  if (current !== null) {\n    var oldProps = current.memoizedProps;\n    var newProps = workInProgress.pendingProps;\n\n    if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:\n     workInProgress.type !== current.type )) {\n      // If props or context changed, mark the fiber as having performed work.\n      // This may be unset if the props are determined to be equal later (memo).\n      didReceiveUpdate = true;\n    } else if (updateExpirationTime < renderExpirationTime) {\n      didReceiveUpdate = false; // This fiber does not have any pending work. Bailout without entering\n      // the begin phase. There's still some bookkeeping we that needs to be done\n      // in this optimized path, mostly pushing stuff onto the stack.\n\n      switch (workInProgress.tag) {\n        case HostRoot:\n          pushHostRootContext(workInProgress);\n          resetHydrationState();\n          break;\n\n        case HostComponent:\n          pushHostContext(workInProgress);\n\n          if (workInProgress.mode & ConcurrentMode && renderExpirationTime !== Never && shouldDeprioritizeSubtree(workInProgress.type, newProps)) {\n            {\n              markSpawnedWork(Never);\n            } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n            workInProgress.expirationTime = workInProgress.childExpirationTime = Never;\n            return null;\n          }\n\n          break;\n\n        case ClassComponent:\n          {\n            var Component = workInProgress.type;\n\n            if (isContextProvider(Component)) {\n              pushContextProvider(workInProgress);\n            }\n\n            break;\n          }\n\n        case HostPortal:\n          pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n          break;\n\n        case ContextProvider:\n          {\n            var newValue = workInProgress.memoizedProps.value;\n            pushProvider(workInProgress, newValue);\n            break;\n          }\n\n        case Profiler:\n          {\n            // Profiler should only call onRender when one of its descendants actually rendered.\n            var hasChildWork = workInProgress.childExpirationTime >= renderExpirationTime;\n\n            if (hasChildWork) {\n              workInProgress.effectTag |= Update;\n            }\n          }\n\n          break;\n\n        case SuspenseComponent:\n          {\n            var state = workInProgress.memoizedState;\n\n            if (state !== null) {\n              // whether to retry the primary children, or to skip over it and\n              // go straight to the fallback. Check the priority of the primary\n              // child fragment.\n\n\n              var primaryChildFragment = workInProgress.child;\n              var primaryChildExpirationTime = primaryChildFragment.childExpirationTime;\n\n              if (primaryChildExpirationTime !== NoWork && primaryChildExpirationTime >= renderExpirationTime) {\n                // The primary children have pending work. Use the normal path\n                // to attempt to render the primary children again.\n                return updateSuspenseComponent(current, workInProgress, renderExpirationTime);\n              } else {\n                pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient\n                // priority. Bailout.\n\n                var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n\n                if (child !== null) {\n                  // The fallback children have pending work. Skip over the\n                  // primary children and work on the fallback.\n                  return child.sibling;\n                } else {\n                  return null;\n                }\n              }\n            } else {\n              pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current));\n            }\n\n            break;\n          }\n\n        case SuspenseListComponent:\n          {\n            var didSuspendBefore = (current.effectTag & DidCapture) !== NoEffect;\n\n            var _hasChildWork = workInProgress.childExpirationTime >= renderExpirationTime;\n\n            if (didSuspendBefore) {\n              if (_hasChildWork) {\n                // If something was in fallback state last time, and we have all the\n                // same children then we're still in progressive loading state.\n                // Something might get unblocked by state updates or retries in the\n                // tree which will affect the tail. So we need to use the normal\n                // path to compute the correct tail.\n                return updateSuspenseListComponent(current, workInProgress, renderExpirationTime);\n              } // If none of the children had any work, that means that none of\n              // them got retried so they'll still be blocked in the same way\n              // as before. We can fast bail out.\n\n\n              workInProgress.effectTag |= DidCapture;\n            } // If nothing suspended before and we're rendering the same children,\n            // then the tail doesn't matter. Anything new that suspends will work\n            // in the \"together\" mode, so we can continue from the state we had.\n\n\n            var renderState = workInProgress.memoizedState;\n\n            if (renderState !== null) {\n              // Reset to the \"together\" mode in case we've started a different\n              // update in the past but didn't complete it.\n              renderState.rendering = null;\n              renderState.tail = null;\n            }\n\n            pushSuspenseContext(workInProgress, suspenseStackCursor.current);\n\n            if (_hasChildWork) {\n              break;\n            } else {\n              // If none of the children had any work, that means that none of\n              // them got retried so they'll still be blocked in the same way\n              // as before. We can fast bail out.\n              return null;\n            }\n          }\n      }\n\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n    } else {\n      // An update was scheduled on this fiber, but there are no new props\n      // nor legacy context. Set this to false. If an update queue or context\n      // consumer produces a changed value, it will set this to true. Otherwise,\n      // the component will assume the children have not changed and bail out.\n      didReceiveUpdate = false;\n    }\n  } else {\n    didReceiveUpdate = false;\n  } // Before entering the begin phase, clear pending update priority.\n  // TODO: This assumes that we're about to evaluate the component and process\n  // the update queue. However, there's an exception: SimpleMemoComponent\n  // sometimes bails out later in the begin phase. This indicates that we should\n  // move this assignment out of the common path and into each branch.\n\n\n  workInProgress.expirationTime = NoWork;\n\n  switch (workInProgress.tag) {\n    case IndeterminateComponent:\n      {\n        return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderExpirationTime);\n      }\n\n    case LazyComponent:\n      {\n        var elementType = workInProgress.elementType;\n        return mountLazyComponent(current, workInProgress, elementType, updateExpirationTime, renderExpirationTime);\n      }\n\n    case FunctionComponent:\n      {\n        var _Component = workInProgress.type;\n        var unresolvedProps = workInProgress.pendingProps;\n        var resolvedProps = workInProgress.elementType === _Component ? unresolvedProps : resolveDefaultProps(_Component, unresolvedProps);\n        return updateFunctionComponent(current, workInProgress, _Component, resolvedProps, renderExpirationTime);\n      }\n\n    case ClassComponent:\n      {\n        var _Component2 = workInProgress.type;\n        var _unresolvedProps = workInProgress.pendingProps;\n\n        var _resolvedProps = workInProgress.elementType === _Component2 ? _unresolvedProps : resolveDefaultProps(_Component2, _unresolvedProps);\n\n        return updateClassComponent(current, workInProgress, _Component2, _resolvedProps, renderExpirationTime);\n      }\n\n    case HostRoot:\n      return updateHostRoot(current, workInProgress, renderExpirationTime);\n\n    case HostComponent:\n      return updateHostComponent(current, workInProgress, renderExpirationTime);\n\n    case HostText:\n      return updateHostText(current, workInProgress);\n\n    case SuspenseComponent:\n      return updateSuspenseComponent(current, workInProgress, renderExpirationTime);\n\n    case HostPortal:\n      return updatePortalComponent(current, workInProgress, renderExpirationTime);\n\n    case ForwardRef:\n      {\n        var type = workInProgress.type;\n        var _unresolvedProps2 = workInProgress.pendingProps;\n\n        var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);\n\n        return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderExpirationTime);\n      }\n\n    case Fragment:\n      return updateFragment(current, workInProgress, renderExpirationTime);\n\n    case Mode:\n      return updateMode(current, workInProgress, renderExpirationTime);\n\n    case Profiler:\n      return updateProfiler(current, workInProgress, renderExpirationTime);\n\n    case ContextProvider:\n      return updateContextProvider(current, workInProgress, renderExpirationTime);\n\n    case ContextConsumer:\n      return updateContextConsumer(current, workInProgress, renderExpirationTime);\n\n    case MemoComponent:\n      {\n        var _type2 = workInProgress.type;\n        var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.\n\n        var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);\n\n        {\n          if (workInProgress.type !== workInProgress.elementType) {\n            var outerPropTypes = _type2.propTypes;\n\n            if (outerPropTypes) {\n              checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only\n              'prop', getComponentName(_type2), getCurrentFiberStackInDev);\n            }\n          }\n        }\n\n        _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);\n        return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, updateExpirationTime, renderExpirationTime);\n      }\n\n    case SimpleMemoComponent:\n      {\n        return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, updateExpirationTime, renderExpirationTime);\n      }\n\n    case IncompleteClassComponent:\n      {\n        var _Component3 = workInProgress.type;\n        var _unresolvedProps4 = workInProgress.pendingProps;\n\n        var _resolvedProps4 = workInProgress.elementType === _Component3 ? _unresolvedProps4 : resolveDefaultProps(_Component3, _unresolvedProps4);\n\n        return mountIncompleteClassComponent(current, workInProgress, _Component3, _resolvedProps4, renderExpirationTime);\n      }\n\n    case SuspenseListComponent:\n      {\n        return updateSuspenseListComponent(current, workInProgress, renderExpirationTime);\n      }\n  }\n\n  {\n    {\n      throw Error( \"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction markUpdate(workInProgress) {\n  // Tag the fiber with an update effect. This turns a Placement into\n  // a PlacementAndUpdate.\n  workInProgress.effectTag |= Update;\n}\n\nfunction markRef$1(workInProgress) {\n  workInProgress.effectTag |= Ref;\n}\n\nvar appendAllChildren;\nvar updateHostContainer;\nvar updateHostComponent$1;\nvar updateHostText$1;\n\n{\n  // Mutation mode\n  appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {\n    // We only have the top Fiber that was created but we need recurse down its\n    // children to find all the terminal nodes.\n    var node = workInProgress.child;\n\n    while (node !== null) {\n      if (node.tag === HostComponent || node.tag === HostText) {\n        appendInitialChild(parent, node.stateNode);\n      } else if (node.tag === HostPortal) ; else if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n\n      if (node === workInProgress) {\n        return;\n      }\n\n      while (node.sibling === null) {\n        if (node.return === null || node.return === workInProgress) {\n          return;\n        }\n\n        node = node.return;\n      }\n\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  };\n\n  updateHostContainer = function (workInProgress) {// Noop\n  };\n\n  updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {\n    // If we have an alternate, that means this is an update and we need to\n    // schedule a side-effect to do the updates.\n    var oldProps = current.memoizedProps;\n\n    if (oldProps === newProps) {\n      // In mutation mode, this is sufficient for a bailout because\n      // we won't touch this node even if children changed.\n      return;\n    } // If we get updated because one of our children updated, we don't\n    // have newProps so we'll have to reuse them.\n    // TODO: Split the update API as separate for the props vs. children.\n    // Even better would be if children weren't special cased at all tho.\n\n\n    var instance = workInProgress.stateNode;\n    var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host\n    // component is hitting the resume path. Figure out why. Possibly\n    // related to `hidden`.\n\n    var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component.\n\n    workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n    // is a new ref we mark this as an update. All the work is done in commitWork.\n\n    if (updatePayload) {\n      markUpdate(workInProgress);\n    }\n  };\n\n  updateHostText$1 = function (current, workInProgress, oldText, newText) {\n    // If the text differs, mark it as an update. All the work in done in commitWork.\n    if (oldText !== newText) {\n      markUpdate(workInProgress);\n    }\n  };\n}\n\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  switch (renderState.tailMode) {\n    case 'hidden':\n      {\n        // Any insertions at the end of the tail list after this point\n        // should be invisible. If there are already mounted boundaries\n        // anything before them are not considered for collapsing.\n        // Therefore we need to go through the whole tail to find if\n        // there are any.\n        var tailNode = renderState.tail;\n        var lastTailNode = null;\n\n        while (tailNode !== null) {\n          if (tailNode.alternate !== null) {\n            lastTailNode = tailNode;\n          }\n\n          tailNode = tailNode.sibling;\n        } // Next we're simply going to delete all insertions after the\n        // last rendered item.\n\n\n        if (lastTailNode === null) {\n          // All remaining items in the tail are insertions.\n          renderState.tail = null;\n        } else {\n          // Detach the insertion after the last node that was already\n          // inserted.\n          lastTailNode.sibling = null;\n        }\n\n        break;\n      }\n\n    case 'collapsed':\n      {\n        // Any insertions at the end of the tail list after this point\n        // should be invisible. If there are already mounted boundaries\n        // anything before them are not considered for collapsing.\n        // Therefore we need to go through the whole tail to find if\n        // there are any.\n        var _tailNode = renderState.tail;\n        var _lastTailNode = null;\n\n        while (_tailNode !== null) {\n          if (_tailNode.alternate !== null) {\n            _lastTailNode = _tailNode;\n          }\n\n          _tailNode = _tailNode.sibling;\n        } // Next we're simply going to delete all insertions after the\n        // last rendered item.\n\n\n        if (_lastTailNode === null) {\n          // All remaining items in the tail are insertions.\n          if (!hasRenderedATailFallback && renderState.tail !== null) {\n            // We suspended during the head. We want to show at least one\n            // row at the tail. So we'll keep on and cut off the rest.\n            renderState.tail.sibling = null;\n          } else {\n            renderState.tail = null;\n          }\n        } else {\n          // Detach the insertion after the last node that was already\n          // inserted.\n          _lastTailNode.sibling = null;\n        }\n\n        break;\n      }\n  }\n}\n\nfunction completeWork(current, workInProgress, renderExpirationTime) {\n  var newProps = workInProgress.pendingProps;\n\n  switch (workInProgress.tag) {\n    case IndeterminateComponent:\n    case LazyComponent:\n    case SimpleMemoComponent:\n    case FunctionComponent:\n    case ForwardRef:\n    case Fragment:\n    case Mode:\n    case Profiler:\n    case ContextConsumer:\n    case MemoComponent:\n      return null;\n\n    case ClassComponent:\n      {\n        var Component = workInProgress.type;\n\n        if (isContextProvider(Component)) {\n          popContext(workInProgress);\n        }\n\n        return null;\n      }\n\n    case HostRoot:\n      {\n        popHostContainer(workInProgress);\n        popTopLevelContextObject(workInProgress);\n        var fiberRoot = workInProgress.stateNode;\n\n        if (fiberRoot.pendingContext) {\n          fiberRoot.context = fiberRoot.pendingContext;\n          fiberRoot.pendingContext = null;\n        }\n\n        if (current === null || current.child === null) {\n          // If we hydrated, pop so that we can delete any remaining children\n          // that weren't hydrated.\n          var wasHydrated = popHydrationState(workInProgress);\n\n          if (wasHydrated) {\n            // If we hydrated, then we'll need to schedule an update for\n            // the commit side-effects on the root.\n            markUpdate(workInProgress);\n          }\n        }\n\n        updateHostContainer(workInProgress);\n        return null;\n      }\n\n    case HostComponent:\n      {\n        popHostContext(workInProgress);\n        var rootContainerInstance = getRootHostContainer();\n        var type = workInProgress.type;\n\n        if (current !== null && workInProgress.stateNode != null) {\n          updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);\n\n          if (current.ref !== workInProgress.ref) {\n            markRef$1(workInProgress);\n          }\n        } else {\n          if (!newProps) {\n            if (!(workInProgress.stateNode !== null)) {\n              {\n                throw Error( \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\" );\n              }\n            } // This can happen when we abort work.\n\n\n            return null;\n          }\n\n          var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context\n          // \"stack\" as the parent. Then append children as we go in beginWork\n          // or completeWork depending on whether we want to add them top->down or\n          // bottom->up. Top->down is faster in IE11.\n\n          var _wasHydrated = popHydrationState(workInProgress);\n\n          if (_wasHydrated) {\n            // TODO: Move this and createInstance step into the beginPhase\n            // to consolidate.\n            if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {\n              // If changes to the hydrated node need to be applied at the\n              // commit-phase we mark this as such.\n              markUpdate(workInProgress);\n            }\n          } else {\n            var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);\n            appendAllChildren(instance, workInProgress, false, false); // This needs to be set before we mount Flare event listeners\n\n            workInProgress.stateNode = instance;\n            // (eg DOM renderer supports auto-focus for certain elements).\n            // Make sure such renderers get scheduled for later work.\n\n\n            if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) {\n              markUpdate(workInProgress);\n            }\n          }\n\n          if (workInProgress.ref !== null) {\n            // If there is a ref on a host node we need to schedule a callback\n            markRef$1(workInProgress);\n          }\n        }\n\n        return null;\n      }\n\n    case HostText:\n      {\n        var newText = newProps;\n\n        if (current && workInProgress.stateNode != null) {\n          var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need\n          // to schedule a side-effect to do the updates.\n\n          updateHostText$1(current, workInProgress, oldText, newText);\n        } else {\n          if (typeof newText !== 'string') {\n            if (!(workInProgress.stateNode !== null)) {\n              {\n                throw Error( \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\" );\n              }\n            } // This can happen when we abort work.\n\n          }\n\n          var _rootContainerInstance = getRootHostContainer();\n\n          var _currentHostContext = getHostContext();\n\n          var _wasHydrated2 = popHydrationState(workInProgress);\n\n          if (_wasHydrated2) {\n            if (prepareToHydrateHostTextInstance(workInProgress)) {\n              markUpdate(workInProgress);\n            }\n          } else {\n            workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);\n          }\n        }\n\n        return null;\n      }\n\n    case SuspenseComponent:\n      {\n        popSuspenseContext(workInProgress);\n        var nextState = workInProgress.memoizedState;\n\n        if ((workInProgress.effectTag & DidCapture) !== NoEffect) {\n          // Something suspended. Re-render with the fallback children.\n          workInProgress.expirationTime = renderExpirationTime; // Do not reset the effect list.\n\n          return workInProgress;\n        }\n\n        var nextDidTimeout = nextState !== null;\n        var prevDidTimeout = false;\n\n        if (current === null) {\n          if (workInProgress.memoizedProps.fallback !== undefined) {\n            popHydrationState(workInProgress);\n          }\n        } else {\n          var prevState = current.memoizedState;\n          prevDidTimeout = prevState !== null;\n\n          if (!nextDidTimeout && prevState !== null) {\n            // We just switched from the fallback to the normal children.\n            // Delete the fallback.\n            // TODO: Would it be better to store the fallback fragment on\n            // the stateNode during the begin phase?\n            var currentFallbackChild = current.child.sibling;\n\n            if (currentFallbackChild !== null) {\n              // Deletions go at the beginning of the return fiber's effect list\n              var first = workInProgress.firstEffect;\n\n              if (first !== null) {\n                workInProgress.firstEffect = currentFallbackChild;\n                currentFallbackChild.nextEffect = first;\n              } else {\n                workInProgress.firstEffect = workInProgress.lastEffect = currentFallbackChild;\n                currentFallbackChild.nextEffect = null;\n              }\n\n              currentFallbackChild.effectTag = Deletion;\n            }\n          }\n        }\n\n        if (nextDidTimeout && !prevDidTimeout) {\n          // If this subtreee is running in blocking mode we can suspend,\n          // otherwise we won't suspend.\n          // TODO: This will still suspend a synchronous tree if anything\n          // in the concurrent tree already suspended during this render.\n          // This is a known bug.\n          if ((workInProgress.mode & BlockingMode) !== NoMode) {\n            // TODO: Move this back to throwException because this is too late\n            // if this is a large tree which is common for initial loads. We\n            // don't know if we should restart a render or not until we get\n            // this marker, and this is too late.\n            // If this render already had a ping or lower pri updates,\n            // and this is the first time we know we're going to suspend we\n            // should be able to immediately restart from within throwException.\n            var hasInvisibleChildContext = current === null && workInProgress.memoizedProps.unstable_avoidThisFallback !== true;\n\n            if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) {\n              // If this was in an invisible tree or a new render, then showing\n              // this boundary is ok.\n              renderDidSuspend();\n            } else {\n              // Otherwise, we're going to have to hide content so we should\n              // suspend for longer if possible.\n              renderDidSuspendDelayIfPossible();\n            }\n          }\n        }\n\n        {\n          // TODO: Only schedule updates if these values are non equal, i.e. it changed.\n          if (nextDidTimeout || prevDidTimeout) {\n            // If this boundary just timed out, schedule an effect to attach a\n            // retry listener to the promise. This flag is also used to hide the\n            // primary children. In mutation mode, we also need the flag to\n            // *unhide* children that were previously hidden, so check if this\n            // is currently timed out, too.\n            workInProgress.effectTag |= Update;\n          }\n        }\n\n        return null;\n      }\n\n    case HostPortal:\n      popHostContainer(workInProgress);\n      updateHostContainer(workInProgress);\n      return null;\n\n    case ContextProvider:\n      // Pop provider fiber\n      popProvider(workInProgress);\n      return null;\n\n    case IncompleteClassComponent:\n      {\n        // Same as class component case. I put it down here so that the tags are\n        // sequential to ensure this switch is compiled to a jump table.\n        var _Component = workInProgress.type;\n\n        if (isContextProvider(_Component)) {\n          popContext(workInProgress);\n        }\n\n        return null;\n      }\n\n    case SuspenseListComponent:\n      {\n        popSuspenseContext(workInProgress);\n        var renderState = workInProgress.memoizedState;\n\n        if (renderState === null) {\n          // We're running in the default, \"independent\" mode.\n          // We don't do anything in this mode.\n          return null;\n        }\n\n        var didSuspendAlready = (workInProgress.effectTag & DidCapture) !== NoEffect;\n        var renderedTail = renderState.rendering;\n\n        if (renderedTail === null) {\n          // We just rendered the head.\n          if (!didSuspendAlready) {\n            // This is the first pass. We need to figure out if anything is still\n            // suspended in the rendered set.\n            // If new content unsuspended, but there's still some content that\n            // didn't. Then we need to do a second pass that forces everything\n            // to keep showing their fallbacks.\n            // We might be suspended if something in this render pass suspended, or\n            // something in the previous committed pass suspended. Otherwise,\n            // there's no chance so we can skip the expensive call to\n            // findFirstSuspended.\n            var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.effectTag & DidCapture) === NoEffect);\n\n            if (!cannotBeSuspended) {\n              var row = workInProgress.child;\n\n              while (row !== null) {\n                var suspended = findFirstSuspended(row);\n\n                if (suspended !== null) {\n                  didSuspendAlready = true;\n                  workInProgress.effectTag |= DidCapture;\n                  cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as\n                  // part of the second pass. In that case nothing will subscribe to\n                  // its thennables. Instead, we'll transfer its thennables to the\n                  // SuspenseList so that it can retry if they resolve.\n                  // There might be multiple of these in the list but since we're\n                  // going to wait for all of them anyway, it doesn't really matter\n                  // which ones gets to ping. In theory we could get clever and keep\n                  // track of how many dependencies remain but it gets tricky because\n                  // in the meantime, we can add/remove/change items and dependencies.\n                  // We might bail out of the loop before finding any but that\n                  // doesn't matter since that means that the other boundaries that\n                  // we did find already has their listeners attached.\n\n                  var newThennables = suspended.updateQueue;\n\n                  if (newThennables !== null) {\n                    workInProgress.updateQueue = newThennables;\n                    workInProgress.effectTag |= Update;\n                  } // Rerender the whole list, but this time, we'll force fallbacks\n                  // to stay in place.\n                  // Reset the effect list before doing the second pass since that's now invalid.\n\n\n                  if (renderState.lastEffect === null) {\n                    workInProgress.firstEffect = null;\n                  }\n\n                  workInProgress.lastEffect = renderState.lastEffect; // Reset the child fibers to their original state.\n\n                  resetChildFibers(workInProgress, renderExpirationTime); // Set up the Suspense Context to force suspense and immediately\n                  // rerender the children.\n\n                  pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback));\n                  return workInProgress.child;\n                }\n\n                row = row.sibling;\n              }\n            }\n          } else {\n            cutOffTailIfNeeded(renderState, false);\n          } // Next we're going to render the tail.\n\n        } else {\n          // Append the rendered row to the child list.\n          if (!didSuspendAlready) {\n            var _suspended = findFirstSuspended(renderedTail);\n\n            if (_suspended !== null) {\n              workInProgress.effectTag |= DidCapture;\n              didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't\n              // get lost if this row ends up dropped during a second pass.\n\n              var _newThennables = _suspended.updateQueue;\n\n              if (_newThennables !== null) {\n                workInProgress.updateQueue = _newThennables;\n                workInProgress.effectTag |= Update;\n              }\n\n              cutOffTailIfNeeded(renderState, true); // This might have been modified.\n\n              if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate) {\n                // We need to delete the row we just rendered.\n                // Reset the effect list to what it was before we rendered this\n                // child. The nested children have already appended themselves.\n                var lastEffect = workInProgress.lastEffect = renderState.lastEffect; // Remove any effects that were appended after this point.\n\n                if (lastEffect !== null) {\n                  lastEffect.nextEffect = null;\n                } // We're done.\n\n\n                return null;\n              }\n            } else if ( // The time it took to render last row is greater than time until\n            // the expiration.\n            now() * 2 - renderState.renderingStartTime > renderState.tailExpiration && renderExpirationTime > Never) {\n              // We have now passed our CPU deadline and we'll just give up further\n              // attempts to render the main content and only render fallbacks.\n              // The assumption is that this is usually faster.\n              workInProgress.effectTag |= DidCapture;\n              didSuspendAlready = true;\n              cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n              // to get it started back up to attempt the next item. If we can show\n              // them, then they really have the same priority as this render.\n              // So we'll pick it back up the very next render pass once we've had\n              // an opportunity to yield for paint.\n\n              var nextPriority = renderExpirationTime - 1;\n              workInProgress.expirationTime = workInProgress.childExpirationTime = nextPriority;\n\n              {\n                markSpawnedWork(nextPriority);\n              }\n            }\n          }\n\n          if (renderState.isBackwards) {\n            // The effect list of the backwards tail will have been added\n            // to the end. This breaks the guarantee that life-cycles fire in\n            // sibling order but that isn't a strong guarantee promised by React.\n            // Especially since these might also just pop in during future commits.\n            // Append to the beginning of the list.\n            renderedTail.sibling = workInProgress.child;\n            workInProgress.child = renderedTail;\n          } else {\n            var previousSibling = renderState.last;\n\n            if (previousSibling !== null) {\n              previousSibling.sibling = renderedTail;\n            } else {\n              workInProgress.child = renderedTail;\n            }\n\n            renderState.last = renderedTail;\n          }\n        }\n\n        if (renderState.tail !== null) {\n          // We still have tail rows to render.\n          if (renderState.tailExpiration === 0) {\n            // Heuristic for how long we're willing to spend rendering rows\n            // until we just give up and show what we have so far.\n            var TAIL_EXPIRATION_TIMEOUT_MS = 500;\n            renderState.tailExpiration = now() + TAIL_EXPIRATION_TIMEOUT_MS; // TODO: This is meant to mimic the train model or JND but this\n            // is a per component value. It should really be since the start\n            // of the total render or last commit. Consider using something like\n            // globalMostRecentFallbackTime. That doesn't account for being\n            // suspended for part of the time or when it's a new render.\n            // It should probably use a global start time value instead.\n          } // Pop a row.\n\n\n          var next = renderState.tail;\n          renderState.rendering = next;\n          renderState.tail = next.sibling;\n          renderState.lastEffect = workInProgress.lastEffect;\n          renderState.renderingStartTime = now();\n          next.sibling = null; // Restore the context.\n          // TODO: We can probably just avoid popping it instead and only\n          // setting it the first time we go from not suspended to suspended.\n\n          var suspenseContext = suspenseStackCursor.current;\n\n          if (didSuspendAlready) {\n            suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n          } else {\n            suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n          }\n\n          pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row.\n\n          return next;\n        }\n\n        return null;\n      }\n  }\n\n  {\n    {\n      throw Error( \"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction unwindWork(workInProgress, renderExpirationTime) {\n  switch (workInProgress.tag) {\n    case ClassComponent:\n      {\n        var Component = workInProgress.type;\n\n        if (isContextProvider(Component)) {\n          popContext(workInProgress);\n        }\n\n        var effectTag = workInProgress.effectTag;\n\n        if (effectTag & ShouldCapture) {\n          workInProgress.effectTag = effectTag & ~ShouldCapture | DidCapture;\n          return workInProgress;\n        }\n\n        return null;\n      }\n\n    case HostRoot:\n      {\n        popHostContainer(workInProgress);\n        popTopLevelContextObject(workInProgress);\n        var _effectTag = workInProgress.effectTag;\n\n        if (!((_effectTag & DidCapture) === NoEffect)) {\n          {\n            throw Error( \"The root failed to unmount after an error. This is likely a bug in React. Please file an issue.\" );\n          }\n        }\n\n        workInProgress.effectTag = _effectTag & ~ShouldCapture | DidCapture;\n        return workInProgress;\n      }\n\n    case HostComponent:\n      {\n        // TODO: popHydrationState\n        popHostContext(workInProgress);\n        return null;\n      }\n\n    case SuspenseComponent:\n      {\n        popSuspenseContext(workInProgress);\n\n        var _effectTag2 = workInProgress.effectTag;\n\n        if (_effectTag2 & ShouldCapture) {\n          workInProgress.effectTag = _effectTag2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.\n\n          return workInProgress;\n        }\n\n        return null;\n      }\n\n    case SuspenseListComponent:\n      {\n        popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been\n        // caught by a nested boundary. If not, it should bubble through.\n\n        return null;\n      }\n\n    case HostPortal:\n      popHostContainer(workInProgress);\n      return null;\n\n    case ContextProvider:\n      popProvider(workInProgress);\n      return null;\n\n    default:\n      return null;\n  }\n}\n\nfunction unwindInterruptedWork(interruptedWork) {\n  switch (interruptedWork.tag) {\n    case ClassComponent:\n      {\n        var childContextTypes = interruptedWork.type.childContextTypes;\n\n        if (childContextTypes !== null && childContextTypes !== undefined) {\n          popContext(interruptedWork);\n        }\n\n        break;\n      }\n\n    case HostRoot:\n      {\n        popHostContainer(interruptedWork);\n        popTopLevelContextObject(interruptedWork);\n        break;\n      }\n\n    case HostComponent:\n      {\n        popHostContext(interruptedWork);\n        break;\n      }\n\n    case HostPortal:\n      popHostContainer(interruptedWork);\n      break;\n\n    case SuspenseComponent:\n      popSuspenseContext(interruptedWork);\n      break;\n\n    case SuspenseListComponent:\n      popSuspenseContext(interruptedWork);\n      break;\n\n    case ContextProvider:\n      popProvider(interruptedWork);\n      break;\n  }\n}\n\nfunction createCapturedValue(value, source) {\n  // If the value is an error, call this function immediately after it is thrown\n  // so the stack is accurate.\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\n\nfunction logCapturedError(capturedError) {\n\n  var error = capturedError.error;\n\n  {\n    var componentName = capturedError.componentName,\n        componentStack = capturedError.componentStack,\n        errorBoundaryName = capturedError.errorBoundaryName,\n        errorBoundaryFound = capturedError.errorBoundaryFound,\n        willRetry = capturedError.willRetry; // Browsers support silencing uncaught errors by calling\n    // `preventDefault()` in window `error` handler.\n    // We record this information as an expando on the error.\n\n    if (error != null && error._suppressLogging) {\n      if (errorBoundaryFound && willRetry) {\n        // The error is recoverable and was silenced.\n        // Ignore it and don't print the stack addendum.\n        // This is handy for testing error boundaries without noise.\n        return;\n      } // The error is fatal. Since the silencing might have\n      // been accidental, we'll surface it anyway.\n      // However, the browser would have silenced the original error\n      // so we'll print it first, and then print the stack addendum.\n\n\n      console['error'](error); // Don't transform to our wrapper\n      // For a more detailed description of this block, see:\n      // https://github.com/facebook/react/pull/13384\n    }\n\n    var componentNameMessage = componentName ? \"The above error occurred in the <\" + componentName + \"> component:\" : 'The above error occurred in one of your React components:';\n    var errorBoundaryMessage; // errorBoundaryFound check is sufficient; errorBoundaryName check is to satisfy Flow.\n\n    if (errorBoundaryFound && errorBoundaryName) {\n      if (willRetry) {\n        errorBoundaryMessage = \"React will try to recreate this component tree from scratch \" + (\"using the error boundary you provided, \" + errorBoundaryName + \".\");\n      } else {\n        errorBoundaryMessage = \"This error was initially handled by the error boundary \" + errorBoundaryName + \".\\n\" + \"Recreating the tree from scratch failed so React will unmount the tree.\";\n      }\n    } else {\n      errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\\n' + 'Visit https://fb.me/react-error-boundaries to learn more about error boundaries.';\n    }\n\n    var combinedMessage = \"\" + componentNameMessage + componentStack + \"\\n\\n\" + (\"\" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.\n    // We don't include the original error message and JS stack because the browser\n    // has already printed it. Even if the application swallows the error, it is still\n    // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\n\n    console['error'](combinedMessage); // Don't transform to our wrapper\n  }\n}\n\nvar didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n\n{\n  didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n}\n\nvar PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;\nfunction logError(boundary, errorInfo) {\n  var source = errorInfo.source;\n  var stack = errorInfo.stack;\n\n  if (stack === null && source !== null) {\n    stack = getStackByFiberInDevAndProd(source);\n  }\n\n  var capturedError = {\n    componentName: source !== null ? getComponentName(source.type) : null,\n    componentStack: stack !== null ? stack : '',\n    error: errorInfo.value,\n    errorBoundary: null,\n    errorBoundaryName: null,\n    errorBoundaryFound: false,\n    willRetry: false\n  };\n\n  if (boundary !== null && boundary.tag === ClassComponent) {\n    capturedError.errorBoundary = boundary.stateNode;\n    capturedError.errorBoundaryName = getComponentName(boundary.type);\n    capturedError.errorBoundaryFound = true;\n    capturedError.willRetry = true;\n  }\n\n  try {\n    logCapturedError(capturedError);\n  } catch (e) {\n    // This method must not throw, or React internal state will get messed up.\n    // If console.error is overridden, or logCapturedError() shows a dialog that throws,\n    // we want to report this error outside of the normal stack as a last resort.\n    // https://github.com/facebook/react/issues/13188\n    setTimeout(function () {\n      throw e;\n    });\n  }\n}\n\nvar callComponentWillUnmountWithTimer = function (current, instance) {\n  startPhaseTimer(current, 'componentWillUnmount');\n  instance.props = current.memoizedProps;\n  instance.state = current.memoizedState;\n  instance.componentWillUnmount();\n  stopPhaseTimer();\n}; // Capture errors so they don't interrupt unmounting.\n\n\nfunction safelyCallComponentWillUnmount(current, instance) {\n  {\n    invokeGuardedCallback(null, callComponentWillUnmountWithTimer, null, current, instance);\n\n    if (hasCaughtError()) {\n      var unmountError = clearCaughtError();\n      captureCommitPhaseError(current, unmountError);\n    }\n  }\n}\n\nfunction safelyDetachRef(current) {\n  var ref = current.ref;\n\n  if (ref !== null) {\n    if (typeof ref === 'function') {\n      {\n        invokeGuardedCallback(null, ref, null, null);\n\n        if (hasCaughtError()) {\n          var refError = clearCaughtError();\n          captureCommitPhaseError(current, refError);\n        }\n      }\n    } else {\n      ref.current = null;\n    }\n  }\n}\n\nfunction safelyCallDestroy(current, destroy) {\n  {\n    invokeGuardedCallback(null, destroy, null);\n\n    if (hasCaughtError()) {\n      var error = clearCaughtError();\n      captureCommitPhaseError(current, error);\n    }\n  }\n}\n\nfunction commitBeforeMutationLifeCycles(current, finishedWork) {\n  switch (finishedWork.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case SimpleMemoComponent:\n    case Block:\n      {\n        return;\n      }\n\n    case ClassComponent:\n      {\n        if (finishedWork.effectTag & Snapshot) {\n          if (current !== null) {\n            var prevProps = current.memoizedProps;\n            var prevState = current.memoizedState;\n            startPhaseTimer(finishedWork, 'getSnapshotBeforeUpdate');\n            var instance = finishedWork.stateNode; // We could update instance props and state here,\n            // but instead we rely on them being set during last render.\n            // TODO: revisit this when we implement resuming.\n\n            {\n              if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                if (instance.props !== finishedWork.memoizedProps) {\n                  error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n\n                if (instance.state !== finishedWork.memoizedState) {\n                  error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n              }\n            }\n\n            var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);\n\n            {\n              var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;\n\n              if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {\n                didWarnSet.add(finishedWork.type);\n\n                error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentName(finishedWork.type));\n              }\n            }\n\n            instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n            stopPhaseTimer();\n          }\n        }\n\n        return;\n      }\n\n    case HostRoot:\n    case HostComponent:\n    case HostText:\n    case HostPortal:\n    case IncompleteClassComponent:\n      // Nothing to do for these component types\n      return;\n  }\n\n  {\n    {\n      throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction commitHookEffectListUnmount(tag, finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n  if (lastEffect !== null) {\n    var firstEffect = lastEffect.next;\n    var effect = firstEffect;\n\n    do {\n      if ((effect.tag & tag) === tag) {\n        // Unmount\n        var destroy = effect.destroy;\n        effect.destroy = undefined;\n\n        if (destroy !== undefined) {\n          destroy();\n        }\n      }\n\n      effect = effect.next;\n    } while (effect !== firstEffect);\n  }\n}\n\nfunction commitHookEffectListMount(tag, finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n  if (lastEffect !== null) {\n    var firstEffect = lastEffect.next;\n    var effect = firstEffect;\n\n    do {\n      if ((effect.tag & tag) === tag) {\n        // Mount\n        var create = effect.create;\n        effect.destroy = create();\n\n        {\n          var destroy = effect.destroy;\n\n          if (destroy !== undefined && typeof destroy !== 'function') {\n            var addendum = void 0;\n\n            if (destroy === null) {\n              addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';\n            } else if (typeof destroy.then === 'function') {\n              addendum = '\\n\\nIt looks like you wrote useEffect(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\\n\\n' + 'useEffect(() => {\\n' + '  async function fetchData() {\\n' + '    // You can await here\\n' + '    const response = await MyAPI.getData(someId);\\n' + '    // ...\\n' + '  }\\n' + '  fetchData();\\n' + \"}, [someId]); // Or [] if effect doesn't need props or state\\n\\n\" + 'Learn more about data fetching with Hooks: https://fb.me/react-hooks-data-fetching';\n            } else {\n              addendum = ' You returned: ' + destroy;\n            }\n\n            error('An effect function must not return anything besides a function, ' + 'which is used for clean-up.%s%s', addendum, getStackByFiberInDevAndProd(finishedWork));\n          }\n        }\n      }\n\n      effect = effect.next;\n    } while (effect !== firstEffect);\n  }\n}\n\nfunction commitPassiveHookEffects(finishedWork) {\n  if ((finishedWork.effectTag & Passive) !== NoEffect) {\n    switch (finishedWork.tag) {\n      case FunctionComponent:\n      case ForwardRef:\n      case SimpleMemoComponent:\n      case Block:\n        {\n          // TODO (#17945) We should call all passive destroy functions (for all fibers)\n          // before calling any create functions. The current approach only serializes\n          // these for a single fiber.\n          commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork);\n          commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);\n          break;\n        }\n    }\n  }\n}\n\nfunction commitLifeCycles(finishedRoot, current, finishedWork, committedExpirationTime) {\n  switch (finishedWork.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case SimpleMemoComponent:\n    case Block:\n      {\n        // At this point layout effects have already been destroyed (during mutation phase).\n        // This is done to prevent sibling component effects from interfering with each other,\n        // e.g. a destroy function in one component should never override a ref set\n        // by a create function in another component during the same commit.\n        commitHookEffectListMount(Layout | HasEffect, finishedWork);\n\n        return;\n      }\n\n    case ClassComponent:\n      {\n        var instance = finishedWork.stateNode;\n\n        if (finishedWork.effectTag & Update) {\n          if (current === null) {\n            startPhaseTimer(finishedWork, 'componentDidMount'); // We could update instance props and state here,\n            // but instead we rely on them being set during last render.\n            // TODO: revisit this when we implement resuming.\n\n            {\n              if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                if (instance.props !== finishedWork.memoizedProps) {\n                  error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n\n                if (instance.state !== finishedWork.memoizedState) {\n                  error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n              }\n            }\n\n            instance.componentDidMount();\n            stopPhaseTimer();\n          } else {\n            var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);\n            var prevState = current.memoizedState;\n            startPhaseTimer(finishedWork, 'componentDidUpdate'); // We could update instance props and state here,\n            // but instead we rely on them being set during last render.\n            // TODO: revisit this when we implement resuming.\n\n            {\n              if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                if (instance.props !== finishedWork.memoizedProps) {\n                  error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n\n                if (instance.state !== finishedWork.memoizedState) {\n                  error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n              }\n            }\n\n            instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n            stopPhaseTimer();\n          }\n        }\n\n        var updateQueue = finishedWork.updateQueue;\n\n        if (updateQueue !== null) {\n          {\n            if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n              if (instance.props !== finishedWork.memoizedProps) {\n                error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n              }\n\n              if (instance.state !== finishedWork.memoizedState) {\n                error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n              }\n            }\n          } // We could update instance props and state here,\n          // but instead we rely on them being set during last render.\n          // TODO: revisit this when we implement resuming.\n\n\n          commitUpdateQueue(finishedWork, updateQueue, instance);\n        }\n\n        return;\n      }\n\n    case HostRoot:\n      {\n        var _updateQueue = finishedWork.updateQueue;\n\n        if (_updateQueue !== null) {\n          var _instance = null;\n\n          if (finishedWork.child !== null) {\n            switch (finishedWork.child.tag) {\n              case HostComponent:\n                _instance = getPublicInstance(finishedWork.child.stateNode);\n                break;\n\n              case ClassComponent:\n                _instance = finishedWork.child.stateNode;\n                break;\n            }\n          }\n\n          commitUpdateQueue(finishedWork, _updateQueue, _instance);\n        }\n\n        return;\n      }\n\n    case HostComponent:\n      {\n        var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted\n        // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n        // These effects should only be committed when components are first mounted,\n        // aka when there is no current/alternate.\n\n        if (current === null && finishedWork.effectTag & Update) {\n          var type = finishedWork.type;\n          var props = finishedWork.memoizedProps;\n          commitMount(_instance2, type, props);\n        }\n\n        return;\n      }\n\n    case HostText:\n      {\n        // We have no life-cycles associated with text.\n        return;\n      }\n\n    case HostPortal:\n      {\n        // We have no life-cycles associated with portals.\n        return;\n      }\n\n    case Profiler:\n      {\n        {\n          var onRender = finishedWork.memoizedProps.onRender;\n\n          if (typeof onRender === 'function') {\n            {\n              onRender(finishedWork.memoizedProps.id, current === null ? 'mount' : 'update', finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, getCommitTime(), finishedRoot.memoizedInteractions);\n            }\n          }\n        }\n\n        return;\n      }\n\n    case SuspenseComponent:\n      {\n        commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        return;\n      }\n\n    case SuspenseListComponent:\n    case IncompleteClassComponent:\n    case FundamentalComponent:\n    case ScopeComponent:\n      return;\n  }\n\n  {\n    {\n      throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction hideOrUnhideAllChildren(finishedWork, isHidden) {\n  {\n    // We only have the top Fiber that was inserted but we need to recurse down its\n    // children to find all the terminal nodes.\n    var node = finishedWork;\n\n    while (true) {\n      if (node.tag === HostComponent) {\n        var instance = node.stateNode;\n\n        if (isHidden) {\n          hideInstance(instance);\n        } else {\n          unhideInstance(node.stateNode, node.memoizedProps);\n        }\n      } else if (node.tag === HostText) {\n        var _instance3 = node.stateNode;\n\n        if (isHidden) {\n          hideTextInstance(_instance3);\n        } else {\n          unhideTextInstance(_instance3, node.memoizedProps);\n        }\n      } else if (node.tag === SuspenseComponent && node.memoizedState !== null && node.memoizedState.dehydrated === null) {\n        // Found a nested Suspense component that timed out. Skip over the\n        // primary child fragment, which should remain hidden.\n        var fallbackChildFragment = node.child.sibling;\n        fallbackChildFragment.return = node;\n        node = fallbackChildFragment;\n        continue;\n      } else if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n\n      if (node === finishedWork) {\n        return;\n      }\n\n      while (node.sibling === null) {\n        if (node.return === null || node.return === finishedWork) {\n          return;\n        }\n\n        node = node.return;\n      }\n\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n}\n\nfunction commitAttachRef(finishedWork) {\n  var ref = finishedWork.ref;\n\n  if (ref !== null) {\n    var instance = finishedWork.stateNode;\n    var instanceToUse;\n\n    switch (finishedWork.tag) {\n      case HostComponent:\n        instanceToUse = getPublicInstance(instance);\n        break;\n\n      default:\n        instanceToUse = instance;\n    } // Moved outside to ensure DCE works with this flag\n\n    if (typeof ref === 'function') {\n      ref(instanceToUse);\n    } else {\n      {\n        if (!ref.hasOwnProperty('current')) {\n          error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().%s', getComponentName(finishedWork.type), getStackByFiberInDevAndProd(finishedWork));\n        }\n      }\n\n      ref.current = instanceToUse;\n    }\n  }\n}\n\nfunction commitDetachRef(current) {\n  var currentRef = current.ref;\n\n  if (currentRef !== null) {\n    if (typeof currentRef === 'function') {\n      currentRef(null);\n    } else {\n      currentRef.current = null;\n    }\n  }\n} // User-originating errors (lifecycles and refs) should not interrupt\n// deletion, so don't let them throw. Host-originating errors should\n// interrupt deletion, so it's okay\n\n\nfunction commitUnmount(finishedRoot, current, renderPriorityLevel) {\n  onCommitUnmount(current);\n\n  switch (current.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case MemoComponent:\n    case SimpleMemoComponent:\n    case Block:\n      {\n        var updateQueue = current.updateQueue;\n\n        if (updateQueue !== null) {\n          var lastEffect = updateQueue.lastEffect;\n\n          if (lastEffect !== null) {\n            var firstEffect = lastEffect.next;\n\n            {\n              // When the owner fiber is deleted, the destroy function of a passive\n              // effect hook is called during the synchronous commit phase. This is\n              // a concession to implementation complexity. Calling it in the\n              // passive effect phase (like they usually are, when dependencies\n              // change during an update) would require either traversing the\n              // children of the deleted fiber again, or including unmount effects\n              // as part of the fiber effect list.\n              //\n              // Because this is during the sync commit phase, we need to change\n              // the priority.\n              //\n              // TODO: Reconsider this implementation trade off.\n              var priorityLevel = renderPriorityLevel > NormalPriority ? NormalPriority : renderPriorityLevel;\n              runWithPriority$1(priorityLevel, function () {\n                var effect = firstEffect;\n\n                do {\n                  var _destroy = effect.destroy;\n\n                  if (_destroy !== undefined) {\n                    safelyCallDestroy(current, _destroy);\n                  }\n\n                  effect = effect.next;\n                } while (effect !== firstEffect);\n              });\n            }\n          }\n        }\n\n        return;\n      }\n\n    case ClassComponent:\n      {\n        safelyDetachRef(current);\n        var instance = current.stateNode;\n\n        if (typeof instance.componentWillUnmount === 'function') {\n          safelyCallComponentWillUnmount(current, instance);\n        }\n\n        return;\n      }\n\n    case HostComponent:\n      {\n\n        safelyDetachRef(current);\n        return;\n      }\n\n    case HostPortal:\n      {\n        // TODO: this is recursive.\n        // We are also not using this parent because\n        // the portal will get pushed immediately.\n        {\n          unmountHostComponents(finishedRoot, current, renderPriorityLevel);\n        }\n\n        return;\n      }\n\n    case FundamentalComponent:\n      {\n\n        return;\n      }\n\n    case DehydratedFragment:\n      {\n\n        return;\n      }\n\n    case ScopeComponent:\n      {\n\n        return;\n      }\n  }\n}\n\nfunction commitNestedUnmounts(finishedRoot, root, renderPriorityLevel) {\n  // While we're inside a removed host node we don't want to call\n  // removeChild on the inner nodes because they're removed by the top\n  // call anyway. We also want to call componentWillUnmount on all\n  // composites before this host node is removed from the tree. Therefore\n  // we do an inner loop while we're still inside the host node.\n  var node = root;\n\n  while (true) {\n    commitUnmount(finishedRoot, node, renderPriorityLevel); // Visit children because they may contain more composite or host nodes.\n    // Skip portals because commitUnmount() currently visits them recursively.\n\n    if (node.child !== null && ( // If we use mutation we drill down into portals using commitUnmount above.\n    // If we don't use mutation we drill down into portals here instead.\n     node.tag !== HostPortal)) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === root) {\n      return;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === root) {\n        return;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n}\n\nfunction detachFiber(current) {\n  var alternate = current.alternate; // Cut off the return pointers to disconnect it from the tree. Ideally, we\n  // should clear the child pointer of the parent alternate to let this\n  // get GC:ed but we don't know which for sure which parent is the current\n  // one so we'll settle for GC:ing the subtree of this child. This child\n  // itself will be GC:ed when the parent updates the next time.\n\n  current.return = null;\n  current.child = null;\n  current.memoizedState = null;\n  current.updateQueue = null;\n  current.dependencies = null;\n  current.alternate = null;\n  current.firstEffect = null;\n  current.lastEffect = null;\n  current.pendingProps = null;\n  current.memoizedProps = null;\n  current.stateNode = null;\n\n  if (alternate !== null) {\n    detachFiber(alternate);\n  }\n}\n\nfunction getHostParentFiber(fiber) {\n  var parent = fiber.return;\n\n  while (parent !== null) {\n    if (isHostParent(parent)) {\n      return parent;\n    }\n\n    parent = parent.return;\n  }\n\n  {\n    {\n      throw Error( \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction isHostParent(fiber) {\n  return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;\n}\n\nfunction getHostSibling(fiber) {\n  // We're going to search forward into the tree until we find a sibling host\n  // node. Unfortunately, if multiple insertions are done in a row we have to\n  // search past them. This leads to exponential search for the next sibling.\n  // TODO: Find a more efficient way to do this.\n  var node = fiber;\n\n  siblings: while (true) {\n    // If we didn't find anything, let's try the next sibling.\n    while (node.sibling === null) {\n      if (node.return === null || isHostParent(node.return)) {\n        // If we pop out of the root or hit the parent the fiber we are the\n        // last sibling.\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n\n    while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) {\n      // If it is not host node and, we might have a host node inside it.\n      // Try to search down until we find one.\n      if (node.effectTag & Placement) {\n        // If we don't have a child, try the siblings instead.\n        continue siblings;\n      } // If we don't have a child, try the siblings instead.\n      // We also skip portals because they are not part of this host tree.\n\n\n      if (node.child === null || node.tag === HostPortal) {\n        continue siblings;\n      } else {\n        node.child.return = node;\n        node = node.child;\n      }\n    } // Check if this host node is stable or about to be placed.\n\n\n    if (!(node.effectTag & Placement)) {\n      // Found it!\n      return node.stateNode;\n    }\n  }\n}\n\nfunction commitPlacement(finishedWork) {\n\n\n  var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together.\n\n  var parent;\n  var isContainer;\n  var parentStateNode = parentFiber.stateNode;\n\n  switch (parentFiber.tag) {\n    case HostComponent:\n      parent = parentStateNode;\n      isContainer = false;\n      break;\n\n    case HostRoot:\n      parent = parentStateNode.containerInfo;\n      isContainer = true;\n      break;\n\n    case HostPortal:\n      parent = parentStateNode.containerInfo;\n      isContainer = true;\n      break;\n\n    case FundamentalComponent:\n\n    // eslint-disable-next-line-no-fallthrough\n\n    default:\n      {\n        {\n          throw Error( \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\" );\n        }\n      }\n\n  }\n\n  if (parentFiber.effectTag & ContentReset) {\n    // Reset the text content of the parent before doing any insertions\n    resetTextContent(parent); // Clear ContentReset from the effect tag\n\n    parentFiber.effectTag &= ~ContentReset;\n  }\n\n  var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its\n  // children to find all the terminal nodes.\n\n  if (isContainer) {\n    insertOrAppendPlacementNodeIntoContainer(finishedWork, before, parent);\n  } else {\n    insertOrAppendPlacementNode(finishedWork, before, parent);\n  }\n}\n\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  var isHost = tag === HostComponent || tag === HostText;\n\n  if (isHost || enableFundamentalAPI ) {\n    var stateNode = isHost ? node.stateNode : node.stateNode.instance;\n\n    if (before) {\n      insertInContainerBefore(parent, stateNode, before);\n    } else {\n      appendChildToContainer(parent, stateNode);\n    }\n  } else if (tag === HostPortal) ; else {\n    var child = node.child;\n\n    if (child !== null) {\n      insertOrAppendPlacementNodeIntoContainer(child, before, parent);\n      var sibling = child.sibling;\n\n      while (sibling !== null) {\n        insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);\n        sibling = sibling.sibling;\n      }\n    }\n  }\n}\n\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  var isHost = tag === HostComponent || tag === HostText;\n\n  if (isHost || enableFundamentalAPI ) {\n    var stateNode = isHost ? node.stateNode : node.stateNode.instance;\n\n    if (before) {\n      insertBefore(parent, stateNode, before);\n    } else {\n      appendChild(parent, stateNode);\n    }\n  } else if (tag === HostPortal) ; else {\n    var child = node.child;\n\n    if (child !== null) {\n      insertOrAppendPlacementNode(child, before, parent);\n      var sibling = child.sibling;\n\n      while (sibling !== null) {\n        insertOrAppendPlacementNode(sibling, before, parent);\n        sibling = sibling.sibling;\n      }\n    }\n  }\n}\n\nfunction unmountHostComponents(finishedRoot, current, renderPriorityLevel) {\n  // We only have the top Fiber that was deleted but we need to recurse down its\n  // children to find all the terminal nodes.\n  var node = current; // Each iteration, currentParent is populated with node's host parent if not\n  // currentParentIsValid.\n\n  var currentParentIsValid = false; // Note: these two variables *must* always be updated together.\n\n  var currentParent;\n  var currentParentIsContainer;\n\n  while (true) {\n    if (!currentParentIsValid) {\n      var parent = node.return;\n\n      findParent: while (true) {\n        if (!(parent !== null)) {\n          {\n            throw Error( \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\" );\n          }\n        }\n\n        var parentStateNode = parent.stateNode;\n\n        switch (parent.tag) {\n          case HostComponent:\n            currentParent = parentStateNode;\n            currentParentIsContainer = false;\n            break findParent;\n\n          case HostRoot:\n            currentParent = parentStateNode.containerInfo;\n            currentParentIsContainer = true;\n            break findParent;\n\n          case HostPortal:\n            currentParent = parentStateNode.containerInfo;\n            currentParentIsContainer = true;\n            break findParent;\n\n        }\n\n        parent = parent.return;\n      }\n\n      currentParentIsValid = true;\n    }\n\n    if (node.tag === HostComponent || node.tag === HostText) {\n      commitNestedUnmounts(finishedRoot, node, renderPriorityLevel); // After all the children have unmounted, it is now safe to remove the\n      // node from the tree.\n\n      if (currentParentIsContainer) {\n        removeChildFromContainer(currentParent, node.stateNode);\n      } else {\n        removeChild(currentParent, node.stateNode);\n      } // Don't visit children because we already visited them.\n\n    } else if (node.tag === HostPortal) {\n      if (node.child !== null) {\n        // When we go into a portal, it becomes the parent to remove from.\n        // We will reassign it back when we pop the portal on the way up.\n        currentParent = node.stateNode.containerInfo;\n        currentParentIsContainer = true; // Visit children because portals might contain host components.\n\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n    } else {\n      commitUnmount(finishedRoot, node, renderPriorityLevel); // Visit children because we may find more host components below.\n\n      if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n    }\n\n    if (node === current) {\n      return;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === current) {\n        return;\n      }\n\n      node = node.return;\n\n      if (node.tag === HostPortal) {\n        // When we go out of the portal, we need to restore the parent.\n        // Since we don't keep a stack of them, we will search for it.\n        currentParentIsValid = false;\n      }\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n}\n\nfunction commitDeletion(finishedRoot, current, renderPriorityLevel) {\n  {\n    // Recursively delete all host nodes from the parent.\n    // Detach refs and call componentWillUnmount() on the whole subtree.\n    unmountHostComponents(finishedRoot, current, renderPriorityLevel);\n  }\n\n  detachFiber(current);\n}\n\nfunction commitWork(current, finishedWork) {\n\n  switch (finishedWork.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case MemoComponent:\n    case SimpleMemoComponent:\n    case Block:\n      {\n        // Layout effects are destroyed during the mutation phase so that all\n        // destroy functions for all fibers are called before any create functions.\n        // This prevents sibling component effects from interfering with each other,\n        // e.g. a destroy function in one component should never override a ref set\n        // by a create function in another component during the same commit.\n        commitHookEffectListUnmount(Layout | HasEffect, finishedWork);\n        return;\n      }\n\n    case ClassComponent:\n      {\n        return;\n      }\n\n    case HostComponent:\n      {\n        var instance = finishedWork.stateNode;\n\n        if (instance != null) {\n          // Commit the work prepared earlier.\n          var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n          // as the newProps. The updatePayload will contain the real change in\n          // this case.\n\n          var oldProps = current !== null ? current.memoizedProps : newProps;\n          var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.\n\n          var updatePayload = finishedWork.updateQueue;\n          finishedWork.updateQueue = null;\n\n          if (updatePayload !== null) {\n            commitUpdate(instance, updatePayload, type, oldProps, newProps);\n          }\n        }\n\n        return;\n      }\n\n    case HostText:\n      {\n        if (!(finishedWork.stateNode !== null)) {\n          {\n            throw Error( \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\" );\n          }\n        }\n\n        var textInstance = finishedWork.stateNode;\n        var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n        // as the newProps. The updatePayload will contain the real change in\n        // this case.\n\n        var oldText = current !== null ? current.memoizedProps : newText;\n        commitTextUpdate(textInstance, oldText, newText);\n        return;\n      }\n\n    case HostRoot:\n      {\n        {\n          var _root = finishedWork.stateNode;\n\n          if (_root.hydrate) {\n            // We've just hydrated. No need to hydrate again.\n            _root.hydrate = false;\n            commitHydratedContainer(_root.containerInfo);\n          }\n        }\n\n        return;\n      }\n\n    case Profiler:\n      {\n        return;\n      }\n\n    case SuspenseComponent:\n      {\n        commitSuspenseComponent(finishedWork);\n        attachSuspenseRetryListeners(finishedWork);\n        return;\n      }\n\n    case SuspenseListComponent:\n      {\n        attachSuspenseRetryListeners(finishedWork);\n        return;\n      }\n\n    case IncompleteClassComponent:\n      {\n        return;\n      }\n  }\n\n  {\n    {\n      throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction commitSuspenseComponent(finishedWork) {\n  var newState = finishedWork.memoizedState;\n  var newDidTimeout;\n  var primaryChildParent = finishedWork;\n\n  if (newState === null) {\n    newDidTimeout = false;\n  } else {\n    newDidTimeout = true;\n    primaryChildParent = finishedWork.child;\n    markCommitTimeOfFallback();\n  }\n\n  if ( primaryChildParent !== null) {\n    hideOrUnhideAllChildren(primaryChildParent, newDidTimeout);\n  }\n}\n\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n\n  var newState = finishedWork.memoizedState;\n\n  if (newState === null) {\n    var current = finishedWork.alternate;\n\n    if (current !== null) {\n      var prevState = current.memoizedState;\n\n      if (prevState !== null) {\n        var suspenseInstance = prevState.dehydrated;\n\n        if (suspenseInstance !== null) {\n          commitHydratedSuspenseInstance(suspenseInstance);\n        }\n      }\n    }\n  }\n}\n\nfunction attachSuspenseRetryListeners(finishedWork) {\n  // If this boundary just timed out, then it will have a set of thenables.\n  // For each thenable, attach a listener so that when it resolves, React\n  // attempts to re-render the boundary in the primary (pre-timeout) state.\n  var thenables = finishedWork.updateQueue;\n\n  if (thenables !== null) {\n    finishedWork.updateQueue = null;\n    var retryCache = finishedWork.stateNode;\n\n    if (retryCache === null) {\n      retryCache = finishedWork.stateNode = new PossiblyWeakSet();\n    }\n\n    thenables.forEach(function (thenable) {\n      // Memoize using the boundary fiber to prevent redundant listeners.\n      var retry = resolveRetryThenable.bind(null, finishedWork, thenable);\n\n      if (!retryCache.has(thenable)) {\n        {\n          if (thenable.__reactDoNotTraceInteractions !== true) {\n            retry = tracing.unstable_wrap(retry);\n          }\n        }\n\n        retryCache.add(thenable);\n        thenable.then(retry, retry);\n      }\n    });\n  }\n}\n\nfunction commitResetTextContent(current) {\n\n  resetTextContent(current.stateNode);\n}\n\nvar PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;\n\nfunction createRootErrorUpdate(fiber, errorInfo, expirationTime) {\n  var update = createUpdate(expirationTime, null); // Unmount the root by rendering null.\n\n  update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property\n  // being called \"element\".\n\n  update.payload = {\n    element: null\n  };\n  var error = errorInfo.value;\n\n  update.callback = function () {\n    onUncaughtError(error);\n    logError(fiber, errorInfo);\n  };\n\n  return update;\n}\n\nfunction createClassErrorUpdate(fiber, errorInfo, expirationTime) {\n  var update = createUpdate(expirationTime, null);\n  update.tag = CaptureUpdate;\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n\n  if (typeof getDerivedStateFromError === 'function') {\n    var error$1 = errorInfo.value;\n\n    update.payload = function () {\n      logError(fiber, errorInfo);\n      return getDerivedStateFromError(error$1);\n    };\n  }\n\n  var inst = fiber.stateNode;\n\n  if (inst !== null && typeof inst.componentDidCatch === 'function') {\n    update.callback = function callback() {\n      {\n        markFailedErrorBoundaryForHotReloading(fiber);\n      }\n\n      if (typeof getDerivedStateFromError !== 'function') {\n        // To preserve the preexisting retry behavior of error boundaries,\n        // we keep track of which ones already failed during this batch.\n        // This gets reset before we yield back to the browser.\n        // TODO: Warn in strict mode if getDerivedStateFromError is\n        // not defined.\n        markLegacyErrorBoundaryAsFailed(this); // Only log here if componentDidCatch is the only error boundary method defined\n\n        logError(fiber, errorInfo);\n      }\n\n      var error$1 = errorInfo.value;\n      var stack = errorInfo.stack;\n      this.componentDidCatch(error$1, {\n        componentStack: stack !== null ? stack : ''\n      });\n\n      {\n        if (typeof getDerivedStateFromError !== 'function') {\n          // If componentDidCatch is the only error boundary method defined,\n          // then it needs to call setState to recover from errors.\n          // If no state update is scheduled then the boundary will swallow the error.\n          if (fiber.expirationTime !== Sync) {\n            error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentName(fiber.type) || 'Unknown');\n          }\n        }\n      }\n    };\n  } else {\n    update.callback = function () {\n      markFailedErrorBoundaryForHotReloading(fiber);\n    };\n  }\n\n  return update;\n}\n\nfunction attachPingListener(root, renderExpirationTime, thenable) {\n  // Attach a listener to the promise to \"ping\" the root and retry. But\n  // only if one does not already exist for the current render expiration\n  // time (which acts like a \"thread ID\" here).\n  var pingCache = root.pingCache;\n  var threadIDs;\n\n  if (pingCache === null) {\n    pingCache = root.pingCache = new PossiblyWeakMap$1();\n    threadIDs = new Set();\n    pingCache.set(thenable, threadIDs);\n  } else {\n    threadIDs = pingCache.get(thenable);\n\n    if (threadIDs === undefined) {\n      threadIDs = new Set();\n      pingCache.set(thenable, threadIDs);\n    }\n  }\n\n  if (!threadIDs.has(renderExpirationTime)) {\n    // Memoize using the thread ID to prevent redundant listeners.\n    threadIDs.add(renderExpirationTime);\n    var ping = pingSuspendedRoot.bind(null, root, thenable, renderExpirationTime);\n    thenable.then(ping, ping);\n  }\n}\n\nfunction throwException(root, returnFiber, sourceFiber, value, renderExpirationTime) {\n  // The source fiber did not complete.\n  sourceFiber.effectTag |= Incomplete; // Its effect list is no longer valid.\n\n  sourceFiber.firstEffect = sourceFiber.lastEffect = null;\n\n  if (value !== null && typeof value === 'object' && typeof value.then === 'function') {\n    // This is a thenable.\n    var thenable = value;\n\n    if ((sourceFiber.mode & BlockingMode) === NoMode) {\n      // Reset the memoizedState to what it was before we attempted\n      // to render it.\n      var currentSource = sourceFiber.alternate;\n\n      if (currentSource) {\n        sourceFiber.updateQueue = currentSource.updateQueue;\n        sourceFiber.memoizedState = currentSource.memoizedState;\n        sourceFiber.expirationTime = currentSource.expirationTime;\n      } else {\n        sourceFiber.updateQueue = null;\n        sourceFiber.memoizedState = null;\n      }\n    }\n\n    var hasInvisibleParentBoundary = hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext); // Schedule the nearest Suspense to re-render the timed out view.\n\n    var _workInProgress = returnFiber;\n\n    do {\n      if (_workInProgress.tag === SuspenseComponent && shouldCaptureSuspense(_workInProgress, hasInvisibleParentBoundary)) {\n        // Found the nearest boundary.\n        // Stash the promise on the boundary fiber. If the boundary times out, we'll\n        // attach another listener to flip the boundary back to its normal state.\n        var thenables = _workInProgress.updateQueue;\n\n        if (thenables === null) {\n          var updateQueue = new Set();\n          updateQueue.add(thenable);\n          _workInProgress.updateQueue = updateQueue;\n        } else {\n          thenables.add(thenable);\n        } // If the boundary is outside of blocking mode, we should *not*\n        // suspend the commit. Pretend as if the suspended component rendered\n        // null and keep rendering. In the commit phase, we'll schedule a\n        // subsequent synchronous update to re-render the Suspense.\n        //\n        // Note: It doesn't matter whether the component that suspended was\n        // inside a blocking mode tree. If the Suspense is outside of it, we\n        // should *not* suspend the commit.\n\n\n        if ((_workInProgress.mode & BlockingMode) === NoMode) {\n          _workInProgress.effectTag |= DidCapture; // We're going to commit this fiber even though it didn't complete.\n          // But we shouldn't call any lifecycle methods or callbacks. Remove\n          // all lifecycle effect tags.\n\n          sourceFiber.effectTag &= ~(LifecycleEffectMask | Incomplete);\n\n          if (sourceFiber.tag === ClassComponent) {\n            var currentSourceFiber = sourceFiber.alternate;\n\n            if (currentSourceFiber === null) {\n              // This is a new mount. Change the tag so it's not mistaken for a\n              // completed class component. For example, we should not call\n              // componentWillUnmount if it is deleted.\n              sourceFiber.tag = IncompleteClassComponent;\n            } else {\n              // When we try rendering again, we should not reuse the current fiber,\n              // since it's known to be in an inconsistent state. Use a force update to\n              // prevent a bail out.\n              var update = createUpdate(Sync, null);\n              update.tag = ForceUpdate;\n              enqueueUpdate(sourceFiber, update);\n            }\n          } // The source fiber did not complete. Mark it with Sync priority to\n          // indicate that it still has pending work.\n\n\n          sourceFiber.expirationTime = Sync; // Exit without suspending.\n\n          return;\n        } // Confirmed that the boundary is in a concurrent mode tree. Continue\n        // with the normal suspend path.\n        //\n        // After this we'll use a set of heuristics to determine whether this\n        // render pass will run to completion or restart or \"suspend\" the commit.\n        // The actual logic for this is spread out in different places.\n        //\n        // This first principle is that if we're going to suspend when we complete\n        // a root, then we should also restart if we get an update or ping that\n        // might unsuspend it, and vice versa. The only reason to suspend is\n        // because you think you might want to restart before committing. However,\n        // it doesn't make sense to restart only while in the period we're suspended.\n        //\n        // Restarting too aggressively is also not good because it starves out any\n        // intermediate loading state. So we use heuristics to determine when.\n        // Suspense Heuristics\n        //\n        // If nothing threw a Promise or all the same fallbacks are already showing,\n        // then don't suspend/restart.\n        //\n        // If this is an initial render of a new tree of Suspense boundaries and\n        // those trigger a fallback, then don't suspend/restart. We want to ensure\n        // that we can show the initial loading state as quickly as possible.\n        //\n        // If we hit a \"Delayed\" case, such as when we'd switch from content back into\n        // a fallback, then we should always suspend/restart. SuspenseConfig applies to\n        // this case. If none is defined, JND is used instead.\n        //\n        // If we're already showing a fallback and it gets \"retried\", allowing us to show\n        // another level, but there's still an inner boundary that would show a fallback,\n        // then we suspend/restart for 500ms since the last time we showed a fallback\n        // anywhere in the tree. This effectively throttles progressive loading into a\n        // consistent train of commits. This also gives us an opportunity to restart to\n        // get to the completed state slightly earlier.\n        //\n        // If there's ambiguity due to batching it's resolved in preference of:\n        // 1) \"delayed\", 2) \"initial render\", 3) \"retry\".\n        //\n        // We want to ensure that a \"busy\" state doesn't get force committed. We want to\n        // ensure that new initial loading states can commit as soon as possible.\n\n\n        attachPingListener(root, renderExpirationTime, thenable);\n        _workInProgress.effectTag |= ShouldCapture;\n        _workInProgress.expirationTime = renderExpirationTime;\n        return;\n      } // This boundary already captured during this render. Continue to the next\n      // boundary.\n\n\n      _workInProgress = _workInProgress.return;\n    } while (_workInProgress !== null); // No boundary was found. Fallthrough to error mode.\n    // TODO: Use invariant so the message is stripped in prod?\n\n\n    value = new Error((getComponentName(sourceFiber.type) || 'A React component') + ' suspended while rendering, but no fallback UI was specified.\\n' + '\\n' + 'Add a <Suspense fallback=...> component higher in the tree to ' + 'provide a loading indicator or placeholder to display.' + getStackByFiberInDevAndProd(sourceFiber));\n  } // We didn't find a boundary that could handle this type of exception. Start\n  // over and traverse parent path again, this time treating the exception\n  // as an error.\n\n\n  renderDidError();\n  value = createCapturedValue(value, sourceFiber);\n  var workInProgress = returnFiber;\n\n  do {\n    switch (workInProgress.tag) {\n      case HostRoot:\n        {\n          var _errorInfo = value;\n          workInProgress.effectTag |= ShouldCapture;\n          workInProgress.expirationTime = renderExpirationTime;\n\n          var _update = createRootErrorUpdate(workInProgress, _errorInfo, renderExpirationTime);\n\n          enqueueCapturedUpdate(workInProgress, _update);\n          return;\n        }\n\n      case ClassComponent:\n        // Capture and retry\n        var errorInfo = value;\n        var ctor = workInProgress.type;\n        var instance = workInProgress.stateNode;\n\n        if ((workInProgress.effectTag & DidCapture) === NoEffect && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {\n          workInProgress.effectTag |= ShouldCapture;\n          workInProgress.expirationTime = renderExpirationTime; // Schedule the error boundary to re-render using updated state\n\n          var _update2 = createClassErrorUpdate(workInProgress, errorInfo, renderExpirationTime);\n\n          enqueueCapturedUpdate(workInProgress, _update2);\n          return;\n        }\n\n        break;\n    }\n\n    workInProgress = workInProgress.return;\n  } while (workInProgress !== null);\n}\n\nvar ceil = Math.ceil;\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,\n    ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,\n    IsSomeRendererActing = ReactSharedInternals.IsSomeRendererActing;\nvar NoContext =\n/*                    */\n0;\nvar BatchedContext =\n/*               */\n1;\nvar EventContext =\n/*                 */\n2;\nvar DiscreteEventContext =\n/*         */\n4;\nvar LegacyUnbatchedContext =\n/*       */\n8;\nvar RenderContext =\n/*                */\n16;\nvar CommitContext =\n/*                */\n32;\nvar RootIncomplete = 0;\nvar RootFatalErrored = 1;\nvar RootErrored = 2;\nvar RootSuspended = 3;\nvar RootSuspendedWithDelay = 4;\nvar RootCompleted = 5;\n// Describes where we are in the React execution stack\nvar executionContext = NoContext; // The root we're working on\n\nvar workInProgressRoot = null; // The fiber we're working on\n\nvar workInProgress = null; // The expiration time we're rendering\n\nvar renderExpirationTime$1 = NoWork; // Whether to root completed, errored, suspended, etc.\n\nvar workInProgressRootExitStatus = RootIncomplete; // A fatal error, if one is thrown\n\nvar workInProgressRootFatalError = null; // Most recent event time among processed updates during this render.\n// This is conceptually a time stamp but expressed in terms of an ExpirationTime\n// because we deal mostly with expiration times in the hot path, so this avoids\n// the conversion happening in the hot path.\n\nvar workInProgressRootLatestProcessedExpirationTime = Sync;\nvar workInProgressRootLatestSuspenseTimeout = Sync;\nvar workInProgressRootCanSuspendUsingConfig = null; // The work left over by components that were visited during this render. Only\n// includes unprocessed updates, not work in bailed out children.\n\nvar workInProgressRootNextUnprocessedUpdateTime = NoWork; // If we're pinged while rendering we don't always restart immediately.\n// This flag determines if it might be worthwhile to restart if an opportunity\n// happens latere.\n\nvar workInProgressRootHasPendingPing = false; // The most recent time we committed a fallback. This lets us ensure a train\n// model where we don't commit new loading states in too quick succession.\n\nvar globalMostRecentFallbackTime = 0;\nvar FALLBACK_THROTTLE_MS = 500;\nvar nextEffect = null;\nvar hasUncaughtError = false;\nvar firstUncaughtError = null;\nvar legacyErrorBoundariesThatAlreadyFailed = null;\nvar rootDoesHavePassiveEffects = false;\nvar rootWithPendingPassiveEffects = null;\nvar pendingPassiveEffectsRenderPriority = NoPriority;\nvar pendingPassiveEffectsExpirationTime = NoWork;\nvar rootsWithPendingDiscreteUpdates = null; // Use these to prevent an infinite loop of nested updates\n\nvar NESTED_UPDATE_LIMIT = 50;\nvar nestedUpdateCount = 0;\nvar rootWithNestedUpdates = null;\nvar NESTED_PASSIVE_UPDATE_LIMIT = 50;\nvar nestedPassiveUpdateCount = 0;\nvar interruptedBy = null; // Marks the need to reschedule pending interactions at these expiration times\n// during the commit phase. This enables them to be traced across components\n// that spawn new work during render. E.g. hidden boundaries, suspended SSR\n// hydration or SuspenseList.\n\nvar spawnedWorkDuringRender = null; // Expiration times are computed by adding to the current time (the start\n// time). However, if two updates are scheduled within the same event, we\n// should treat their start times as simultaneous, even if the actual clock\n// time has advanced between the first and second call.\n// In other words, because expiration times determine how updates are batched,\n// we want all updates of like priority that occur within the same event to\n// receive the same expiration time. Otherwise we get tearing.\n\nvar currentEventTime = NoWork;\nfunction requestCurrentTimeForUpdate() {\n  if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n    // We're inside React, so it's fine to read the actual time.\n    return msToExpirationTime(now());\n  } // We're not inside React, so we may be in the middle of a browser event.\n\n\n  if (currentEventTime !== NoWork) {\n    // Use the same start time for all updates until we enter React again.\n    return currentEventTime;\n  } // This is the first update since React yielded. Compute a new start time.\n\n\n  currentEventTime = msToExpirationTime(now());\n  return currentEventTime;\n}\nfunction getCurrentTime() {\n  return msToExpirationTime(now());\n}\nfunction computeExpirationForFiber(currentTime, fiber, suspenseConfig) {\n  var mode = fiber.mode;\n\n  if ((mode & BlockingMode) === NoMode) {\n    return Sync;\n  }\n\n  var priorityLevel = getCurrentPriorityLevel();\n\n  if ((mode & ConcurrentMode) === NoMode) {\n    return priorityLevel === ImmediatePriority ? Sync : Batched;\n  }\n\n  if ((executionContext & RenderContext) !== NoContext) {\n    // Use whatever time we're already rendering\n    // TODO: Should there be a way to opt out, like with `runWithPriority`?\n    return renderExpirationTime$1;\n  }\n\n  var expirationTime;\n\n  if (suspenseConfig !== null) {\n    // Compute an expiration time based on the Suspense timeout.\n    expirationTime = computeSuspenseExpiration(currentTime, suspenseConfig.timeoutMs | 0 || LOW_PRIORITY_EXPIRATION);\n  } else {\n    // Compute an expiration time based on the Scheduler priority.\n    switch (priorityLevel) {\n      case ImmediatePriority:\n        expirationTime = Sync;\n        break;\n\n      case UserBlockingPriority$1:\n        // TODO: Rename this to computeUserBlockingExpiration\n        expirationTime = computeInteractiveExpiration(currentTime);\n        break;\n\n      case NormalPriority:\n      case LowPriority:\n        // TODO: Handle LowPriority\n        // TODO: Rename this to... something better.\n        expirationTime = computeAsyncExpiration(currentTime);\n        break;\n\n      case IdlePriority:\n        expirationTime = Idle;\n        break;\n\n      default:\n        {\n          {\n            throw Error( \"Expected a valid priority level\" );\n          }\n        }\n\n    }\n  } // If we're in the middle of rendering a tree, do not update at the same\n  // expiration time that is already rendering.\n  // TODO: We shouldn't have to do this if the update is on a different root.\n  // Refactor computeExpirationForFiber + scheduleUpdate so we have access to\n  // the root when we check for this condition.\n\n\n  if (workInProgressRoot !== null && expirationTime === renderExpirationTime$1) {\n    // This is a trick to move this update into a separate batch\n    expirationTime -= 1;\n  }\n\n  return expirationTime;\n}\nfunction scheduleUpdateOnFiber(fiber, expirationTime) {\n  checkForNestedUpdates();\n  warnAboutRenderPhaseUpdatesInDEV(fiber);\n  var root = markUpdateTimeFromFiberToRoot(fiber, expirationTime);\n\n  if (root === null) {\n    warnAboutUpdateOnUnmountedFiberInDEV(fiber);\n    return;\n  }\n\n  checkForInterruption(fiber, expirationTime);\n  recordScheduleUpdate(); // TODO: computeExpirationForFiber also reads the priority. Pass the\n  // priority as an argument to that function and this one.\n\n  var priorityLevel = getCurrentPriorityLevel();\n\n  if (expirationTime === Sync) {\n    if ( // Check if we're inside unbatchedUpdates\n    (executionContext & LegacyUnbatchedContext) !== NoContext && // Check if we're not already rendering\n    (executionContext & (RenderContext | CommitContext)) === NoContext) {\n      // Register pending interactions on the root to avoid losing traced interaction data.\n      schedulePendingInteractions(root, expirationTime); // This is a legacy edge case. The initial mount of a ReactDOM.render-ed\n      // root inside of batchedUpdates should be synchronous, but layout updates\n      // should be deferred until the end of the batch.\n\n      performSyncWorkOnRoot(root);\n    } else {\n      ensureRootIsScheduled(root);\n      schedulePendingInteractions(root, expirationTime);\n\n      if (executionContext === NoContext) {\n        // Flush the synchronous work now, unless we're already working or inside\n        // a batch. This is intentionally inside scheduleUpdateOnFiber instead of\n        // scheduleCallbackForFiber to preserve the ability to schedule a callback\n        // without immediately flushing it. We only do this for user-initiated\n        // updates, to preserve historical behavior of legacy mode.\n        flushSyncCallbackQueue();\n      }\n    }\n  } else {\n    ensureRootIsScheduled(root);\n    schedulePendingInteractions(root, expirationTime);\n  }\n\n  if ((executionContext & DiscreteEventContext) !== NoContext && ( // Only updates at user-blocking priority or greater are considered\n  // discrete, even inside a discrete event.\n  priorityLevel === UserBlockingPriority$1 || priorityLevel === ImmediatePriority)) {\n    // This is the result of a discrete event. Track the lowest priority\n    // discrete update per root so we can flush them early, if needed.\n    if (rootsWithPendingDiscreteUpdates === null) {\n      rootsWithPendingDiscreteUpdates = new Map([[root, expirationTime]]);\n    } else {\n      var lastDiscreteTime = rootsWithPendingDiscreteUpdates.get(root);\n\n      if (lastDiscreteTime === undefined || lastDiscreteTime > expirationTime) {\n        rootsWithPendingDiscreteUpdates.set(root, expirationTime);\n      }\n    }\n  }\n}\nvar scheduleWork = scheduleUpdateOnFiber; // This is split into a separate function so we can mark a fiber with pending\n// work without treating it as a typical update that originates from an event;\n// e.g. retrying a Suspense boundary isn't an update, but it does schedule work\n// on a fiber.\n\nfunction markUpdateTimeFromFiberToRoot(fiber, expirationTime) {\n  // Update the source fiber's expiration time\n  if (fiber.expirationTime < expirationTime) {\n    fiber.expirationTime = expirationTime;\n  }\n\n  var alternate = fiber.alternate;\n\n  if (alternate !== null && alternate.expirationTime < expirationTime) {\n    alternate.expirationTime = expirationTime;\n  } // Walk the parent path to the root and update the child expiration time.\n\n\n  var node = fiber.return;\n  var root = null;\n\n  if (node === null && fiber.tag === HostRoot) {\n    root = fiber.stateNode;\n  } else {\n    while (node !== null) {\n      alternate = node.alternate;\n\n      if (node.childExpirationTime < expirationTime) {\n        node.childExpirationTime = expirationTime;\n\n        if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n          alternate.childExpirationTime = expirationTime;\n        }\n      } else if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n        alternate.childExpirationTime = expirationTime;\n      }\n\n      if (node.return === null && node.tag === HostRoot) {\n        root = node.stateNode;\n        break;\n      }\n\n      node = node.return;\n    }\n  }\n\n  if (root !== null) {\n    if (workInProgressRoot === root) {\n      // Received an update to a tree that's in the middle of rendering. Mark\n      // that's unprocessed work on this root.\n      markUnprocessedUpdateTime(expirationTime);\n\n      if (workInProgressRootExitStatus === RootSuspendedWithDelay) {\n        // The root already suspended with a delay, which means this render\n        // definitely won't finish. Since we have a new update, let's mark it as\n        // suspended now, right before marking the incoming update. This has the\n        // effect of interrupting the current render and switching to the update.\n        // TODO: This happens to work when receiving an update during the render\n        // phase, because of the trick inside computeExpirationForFiber to\n        // subtract 1 from `renderExpirationTime` to move it into a\n        // separate bucket. But we should probably model it with an exception,\n        // using the same mechanism we use to force hydration of a subtree.\n        // TODO: This does not account for low pri updates that were already\n        // scheduled before the root started rendering. Need to track the next\n        // pending expiration time (perhaps by backtracking the return path) and\n        // then trigger a restart in the `renderDidSuspendDelayIfPossible` path.\n        markRootSuspendedAtTime(root, renderExpirationTime$1);\n      }\n    } // Mark that the root has a pending update.\n\n\n    markRootUpdatedAtTime(root, expirationTime);\n  }\n\n  return root;\n}\n\nfunction getNextRootExpirationTimeToWorkOn(root) {\n  // Determines the next expiration time that the root should render, taking\n  // into account levels that may be suspended, or levels that may have\n  // received a ping.\n  var lastExpiredTime = root.lastExpiredTime;\n\n  if (lastExpiredTime !== NoWork) {\n    return lastExpiredTime;\n  } // \"Pending\" refers to any update that hasn't committed yet, including if it\n  // suspended. The \"suspended\" range is therefore a subset.\n\n\n  var firstPendingTime = root.firstPendingTime;\n\n  if (!isRootSuspendedAtTime(root, firstPendingTime)) {\n    // The highest priority pending time is not suspended. Let's work on that.\n    return firstPendingTime;\n  } // If the first pending time is suspended, check if there's a lower priority\n  // pending level that we know about. Or check if we received a ping. Work\n  // on whichever is higher priority.\n\n\n  var lastPingedTime = root.lastPingedTime;\n  var nextKnownPendingLevel = root.nextKnownPendingLevel;\n  var nextLevel = lastPingedTime > nextKnownPendingLevel ? lastPingedTime : nextKnownPendingLevel;\n\n  if ( nextLevel <= Idle && firstPendingTime !== nextLevel) {\n    // Don't work on Idle/Never priority unless everything else is committed.\n    return NoWork;\n  }\n\n  return nextLevel;\n} // Use this function to schedule a task for a root. There's only one task per\n// root; if a task was already scheduled, we'll check to make sure the\n// expiration time of the existing task is the same as the expiration time of\n// the next level that the root has work on. This function is called on every\n// update, and right before exiting a task.\n\n\nfunction ensureRootIsScheduled(root) {\n  var lastExpiredTime = root.lastExpiredTime;\n\n  if (lastExpiredTime !== NoWork) {\n    // Special case: Expired work should flush synchronously.\n    root.callbackExpirationTime = Sync;\n    root.callbackPriority = ImmediatePriority;\n    root.callbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n    return;\n  }\n\n  var expirationTime = getNextRootExpirationTimeToWorkOn(root);\n  var existingCallbackNode = root.callbackNode;\n\n  if (expirationTime === NoWork) {\n    // There's nothing to work on.\n    if (existingCallbackNode !== null) {\n      root.callbackNode = null;\n      root.callbackExpirationTime = NoWork;\n      root.callbackPriority = NoPriority;\n    }\n\n    return;\n  } // TODO: If this is an update, we already read the current time. Pass the\n  // time as an argument.\n\n\n  var currentTime = requestCurrentTimeForUpdate();\n  var priorityLevel = inferPriorityFromExpirationTime(currentTime, expirationTime); // If there's an existing render task, confirm it has the correct priority and\n  // expiration time. Otherwise, we'll cancel it and schedule a new one.\n\n  if (existingCallbackNode !== null) {\n    var existingCallbackPriority = root.callbackPriority;\n    var existingCallbackExpirationTime = root.callbackExpirationTime;\n\n    if ( // Callback must have the exact same expiration time.\n    existingCallbackExpirationTime === expirationTime && // Callback must have greater or equal priority.\n    existingCallbackPriority >= priorityLevel) {\n      // Existing callback is sufficient.\n      return;\n    } // Need to schedule a new task.\n    // TODO: Instead of scheduling a new task, we should be able to change the\n    // priority of the existing one.\n\n\n    cancelCallback(existingCallbackNode);\n  }\n\n  root.callbackExpirationTime = expirationTime;\n  root.callbackPriority = priorityLevel;\n  var callbackNode;\n\n  if (expirationTime === Sync) {\n    // Sync React callbacks are scheduled on a special internal queue\n    callbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n  } else {\n    callbackNode = scheduleCallback(priorityLevel, performConcurrentWorkOnRoot.bind(null, root), // Compute a task timeout based on the expiration time. This also affects\n    // ordering because tasks are processed in timeout order.\n    {\n      timeout: expirationTimeToMs(expirationTime) - now()\n    });\n  }\n\n  root.callbackNode = callbackNode;\n} // This is the entry point for every concurrent task, i.e. anything that\n// goes through Scheduler.\n\n\nfunction performConcurrentWorkOnRoot(root, didTimeout) {\n  // Since we know we're in a React event, we can clear the current\n  // event time. The next update will compute a new event time.\n  currentEventTime = NoWork;\n\n  if (didTimeout) {\n    // The render task took too long to complete. Mark the current time as\n    // expired to synchronously render all expired work in a single batch.\n    var currentTime = requestCurrentTimeForUpdate();\n    markRootExpiredAtTime(root, currentTime); // This will schedule a synchronous callback.\n\n    ensureRootIsScheduled(root);\n    return null;\n  } // Determine the next expiration time to work on, using the fields stored\n  // on the root.\n\n\n  var expirationTime = getNextRootExpirationTimeToWorkOn(root);\n\n  if (expirationTime !== NoWork) {\n    var originalCallbackNode = root.callbackNode;\n\n    if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n      {\n        throw Error( \"Should not already be working.\" );\n      }\n    }\n\n    flushPassiveEffects(); // If the root or expiration time have changed, throw out the existing stack\n    // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n    if (root !== workInProgressRoot || expirationTime !== renderExpirationTime$1) {\n      prepareFreshStack(root, expirationTime);\n      startWorkOnPendingInteractions(root, expirationTime);\n    } // If we have a work-in-progress fiber, it means there's still work to do\n    // in this root.\n\n\n    if (workInProgress !== null) {\n      var prevExecutionContext = executionContext;\n      executionContext |= RenderContext;\n      var prevDispatcher = pushDispatcher();\n      var prevInteractions = pushInteractions(root);\n      startWorkLoopTimer(workInProgress);\n\n      do {\n        try {\n          workLoopConcurrent();\n          break;\n        } catch (thrownValue) {\n          handleError(root, thrownValue);\n        }\n      } while (true);\n\n      resetContextDependencies();\n      executionContext = prevExecutionContext;\n      popDispatcher(prevDispatcher);\n\n      {\n        popInteractions(prevInteractions);\n      }\n\n      if (workInProgressRootExitStatus === RootFatalErrored) {\n        var fatalError = workInProgressRootFatalError;\n        stopInterruptedWorkLoopTimer();\n        prepareFreshStack(root, expirationTime);\n        markRootSuspendedAtTime(root, expirationTime);\n        ensureRootIsScheduled(root);\n        throw fatalError;\n      }\n\n      if (workInProgress !== null) {\n        // There's still work left over. Exit without committing.\n        stopInterruptedWorkLoopTimer();\n      } else {\n        // We now have a consistent tree. The next step is either to commit it,\n        // or, if something suspended, wait to commit it after a timeout.\n        stopFinishedWorkLoopTimer();\n        var finishedWork = root.finishedWork = root.current.alternate;\n        root.finishedExpirationTime = expirationTime;\n        finishConcurrentRender(root, finishedWork, workInProgressRootExitStatus, expirationTime);\n      }\n\n      ensureRootIsScheduled(root);\n\n      if (root.callbackNode === originalCallbackNode) {\n        // The task node scheduled for this root is the same one that's\n        // currently executed. Need to return a continuation.\n        return performConcurrentWorkOnRoot.bind(null, root);\n      }\n    }\n  }\n\n  return null;\n}\n\nfunction finishConcurrentRender(root, finishedWork, exitStatus, expirationTime) {\n  // Set this to null to indicate there's no in-progress render.\n  workInProgressRoot = null;\n\n  switch (exitStatus) {\n    case RootIncomplete:\n    case RootFatalErrored:\n      {\n        {\n          {\n            throw Error( \"Root did not complete. This is a bug in React.\" );\n          }\n        }\n      }\n    // Flow knows about invariant, so it complains if I add a break\n    // statement, but eslint doesn't know about invariant, so it complains\n    // if I do. eslint-disable-next-line no-fallthrough\n\n    case RootErrored:\n      {\n        // If this was an async render, the error may have happened due to\n        // a mutation in a concurrent event. Try rendering one more time,\n        // synchronously, to see if the error goes away. If there are\n        // lower priority updates, let's include those, too, in case they\n        // fix the inconsistency. Render at Idle to include all updates.\n        // If it was Idle or Never or some not-yet-invented time, render\n        // at that time.\n        markRootExpiredAtTime(root, expirationTime > Idle ? Idle : expirationTime); // We assume that this second render pass will be synchronous\n        // and therefore not hit this path again.\n\n        break;\n      }\n\n    case RootSuspended:\n      {\n        markRootSuspendedAtTime(root, expirationTime);\n        var lastSuspendedTime = root.lastSuspendedTime;\n\n        if (expirationTime === lastSuspendedTime) {\n          root.nextKnownPendingLevel = getRemainingExpirationTime(finishedWork);\n        } // We have an acceptable loading state. We need to figure out if we\n        // should immediately commit it or wait a bit.\n        // If we have processed new updates during this render, we may now\n        // have a new loading state ready. We want to ensure that we commit\n        // that as soon as possible.\n\n\n        var hasNotProcessedNewUpdates = workInProgressRootLatestProcessedExpirationTime === Sync;\n\n        if (hasNotProcessedNewUpdates && // do not delay if we're inside an act() scope\n        !( IsThisRendererActing.current)) {\n          // If we have not processed any new updates during this pass, then\n          // this is either a retry of an existing fallback state or a\n          // hidden tree. Hidden trees shouldn't be batched with other work\n          // and after that's fixed it can only be a retry. We're going to\n          // throttle committing retries so that we don't show too many\n          // loading states too quickly.\n          var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time.\n\n          if (msUntilTimeout > 10) {\n            if (workInProgressRootHasPendingPing) {\n              var lastPingedTime = root.lastPingedTime;\n\n              if (lastPingedTime === NoWork || lastPingedTime >= expirationTime) {\n                // This render was pinged but we didn't get to restart\n                // earlier so try restarting now instead.\n                root.lastPingedTime = expirationTime;\n                prepareFreshStack(root, expirationTime);\n                break;\n              }\n            }\n\n            var nextTime = getNextRootExpirationTimeToWorkOn(root);\n\n            if (nextTime !== NoWork && nextTime !== expirationTime) {\n              // There's additional work on this root.\n              break;\n            }\n\n            if (lastSuspendedTime !== NoWork && lastSuspendedTime !== expirationTime) {\n              // We should prefer to render the fallback of at the last\n              // suspended level. Ping the last suspended level to try\n              // rendering it again.\n              root.lastPingedTime = lastSuspendedTime;\n              break;\n            } // The render is suspended, it hasn't timed out, and there's no\n            // lower priority work to do. Instead of committing the fallback\n            // immediately, wait for more data to arrive.\n\n\n            root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), msUntilTimeout);\n            break;\n          }\n        } // The work expired. Commit immediately.\n\n\n        commitRoot(root);\n        break;\n      }\n\n    case RootSuspendedWithDelay:\n      {\n        markRootSuspendedAtTime(root, expirationTime);\n        var _lastSuspendedTime = root.lastSuspendedTime;\n\n        if (expirationTime === _lastSuspendedTime) {\n          root.nextKnownPendingLevel = getRemainingExpirationTime(finishedWork);\n        }\n\n        if ( // do not delay if we're inside an act() scope\n        !( IsThisRendererActing.current)) {\n          // We're suspended in a state that should be avoided. We'll try to\n          // avoid committing it for as long as the timeouts let us.\n          if (workInProgressRootHasPendingPing) {\n            var _lastPingedTime = root.lastPingedTime;\n\n            if (_lastPingedTime === NoWork || _lastPingedTime >= expirationTime) {\n              // This render was pinged but we didn't get to restart earlier\n              // so try restarting now instead.\n              root.lastPingedTime = expirationTime;\n              prepareFreshStack(root, expirationTime);\n              break;\n            }\n          }\n\n          var _nextTime = getNextRootExpirationTimeToWorkOn(root);\n\n          if (_nextTime !== NoWork && _nextTime !== expirationTime) {\n            // There's additional work on this root.\n            break;\n          }\n\n          if (_lastSuspendedTime !== NoWork && _lastSuspendedTime !== expirationTime) {\n            // We should prefer to render the fallback of at the last\n            // suspended level. Ping the last suspended level to try\n            // rendering it again.\n            root.lastPingedTime = _lastSuspendedTime;\n            break;\n          }\n\n          var _msUntilTimeout;\n\n          if (workInProgressRootLatestSuspenseTimeout !== Sync) {\n            // We have processed a suspense config whose expiration time we\n            // can use as the timeout.\n            _msUntilTimeout = expirationTimeToMs(workInProgressRootLatestSuspenseTimeout) - now();\n          } else if (workInProgressRootLatestProcessedExpirationTime === Sync) {\n            // This should never normally happen because only new updates\n            // cause delayed states, so we should have processed something.\n            // However, this could also happen in an offscreen tree.\n            _msUntilTimeout = 0;\n          } else {\n            // If we don't have a suspense config, we're going to use a\n            // heuristic to determine how long we can suspend.\n            var eventTimeMs = inferTimeFromExpirationTime(workInProgressRootLatestProcessedExpirationTime);\n            var currentTimeMs = now();\n            var timeUntilExpirationMs = expirationTimeToMs(expirationTime) - currentTimeMs;\n            var timeElapsed = currentTimeMs - eventTimeMs;\n\n            if (timeElapsed < 0) {\n              // We get this wrong some time since we estimate the time.\n              timeElapsed = 0;\n            }\n\n            _msUntilTimeout = jnd(timeElapsed) - timeElapsed; // Clamp the timeout to the expiration time. TODO: Once the\n            // event time is exact instead of inferred from expiration time\n            // we don't need this.\n\n            if (timeUntilExpirationMs < _msUntilTimeout) {\n              _msUntilTimeout = timeUntilExpirationMs;\n            }\n          } // Don't bother with a very short suspense time.\n\n\n          if (_msUntilTimeout > 10) {\n            // The render is suspended, it hasn't timed out, and there's no\n            // lower priority work to do. Instead of committing the fallback\n            // immediately, wait for more data to arrive.\n            root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout);\n            break;\n          }\n        } // The work expired. Commit immediately.\n\n\n        commitRoot(root);\n        break;\n      }\n\n    case RootCompleted:\n      {\n        // The work completed. Ready to commit.\n        if ( // do not delay if we're inside an act() scope\n        !( IsThisRendererActing.current) && workInProgressRootLatestProcessedExpirationTime !== Sync && workInProgressRootCanSuspendUsingConfig !== null) {\n          // If we have exceeded the minimum loading delay, which probably\n          // means we have shown a spinner already, we might have to suspend\n          // a bit longer to ensure that the spinner is shown for\n          // enough time.\n          var _msUntilTimeout2 = computeMsUntilSuspenseLoadingDelay(workInProgressRootLatestProcessedExpirationTime, expirationTime, workInProgressRootCanSuspendUsingConfig);\n\n          if (_msUntilTimeout2 > 10) {\n            markRootSuspendedAtTime(root, expirationTime);\n            root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout2);\n            break;\n          }\n        }\n\n        commitRoot(root);\n        break;\n      }\n\n    default:\n      {\n        {\n          {\n            throw Error( \"Unknown root exit status.\" );\n          }\n        }\n      }\n  }\n} // This is the entry point for synchronous tasks that don't go\n// through Scheduler\n\n\nfunction performSyncWorkOnRoot(root) {\n  // Check if there's expired work on this root. Otherwise, render at Sync.\n  var lastExpiredTime = root.lastExpiredTime;\n  var expirationTime = lastExpiredTime !== NoWork ? lastExpiredTime : Sync;\n\n  if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n    {\n      throw Error( \"Should not already be working.\" );\n    }\n  }\n\n  flushPassiveEffects(); // If the root or expiration time have changed, throw out the existing stack\n  // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n  if (root !== workInProgressRoot || expirationTime !== renderExpirationTime$1) {\n    prepareFreshStack(root, expirationTime);\n    startWorkOnPendingInteractions(root, expirationTime);\n  } // If we have a work-in-progress fiber, it means there's still work to do\n  // in this root.\n\n\n  if (workInProgress !== null) {\n    var prevExecutionContext = executionContext;\n    executionContext |= RenderContext;\n    var prevDispatcher = pushDispatcher();\n    var prevInteractions = pushInteractions(root);\n    startWorkLoopTimer(workInProgress);\n\n    do {\n      try {\n        workLoopSync();\n        break;\n      } catch (thrownValue) {\n        handleError(root, thrownValue);\n      }\n    } while (true);\n\n    resetContextDependencies();\n    executionContext = prevExecutionContext;\n    popDispatcher(prevDispatcher);\n\n    {\n      popInteractions(prevInteractions);\n    }\n\n    if (workInProgressRootExitStatus === RootFatalErrored) {\n      var fatalError = workInProgressRootFatalError;\n      stopInterruptedWorkLoopTimer();\n      prepareFreshStack(root, expirationTime);\n      markRootSuspendedAtTime(root, expirationTime);\n      ensureRootIsScheduled(root);\n      throw fatalError;\n    }\n\n    if (workInProgress !== null) {\n      // This is a sync render, so we should have finished the whole tree.\n      {\n        {\n          throw Error( \"Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.\" );\n        }\n      }\n    } else {\n      // We now have a consistent tree. Because this is a sync render, we\n      // will commit it even if something suspended.\n      stopFinishedWorkLoopTimer();\n      root.finishedWork = root.current.alternate;\n      root.finishedExpirationTime = expirationTime;\n      finishSyncRender(root);\n    } // Before exiting, make sure there's a callback scheduled for the next\n    // pending level.\n\n\n    ensureRootIsScheduled(root);\n  }\n\n  return null;\n}\n\nfunction finishSyncRender(root) {\n  // Set this to null to indicate there's no in-progress render.\n  workInProgressRoot = null;\n  commitRoot(root);\n}\nfunction flushDiscreteUpdates() {\n  // TODO: Should be able to flush inside batchedUpdates, but not inside `act`.\n  // However, `act` uses `batchedUpdates`, so there's no way to distinguish\n  // those two cases. Need to fix this before exposing flushDiscreteUpdates\n  // as a public API.\n  if ((executionContext & (BatchedContext | RenderContext | CommitContext)) !== NoContext) {\n    {\n      if ((executionContext & RenderContext) !== NoContext) {\n        error('unstable_flushDiscreteUpdates: Cannot flush updates when React is ' + 'already rendering.');\n      }\n    } // We're already rendering, so we can't synchronously flush pending work.\n    // This is probably a nested event dispatch triggered by a lifecycle/effect,\n    // like `el.focus()`. Exit.\n\n\n    return;\n  }\n\n  flushPendingDiscreteUpdates(); // If the discrete updates scheduled passive effects, flush them now so that\n  // they fire before the next serial event.\n\n  flushPassiveEffects();\n}\nfunction syncUpdates(fn, a, b, c) {\n  return runWithPriority$1(ImmediatePriority, fn.bind(null, a, b, c));\n}\n\nfunction flushPendingDiscreteUpdates() {\n  if (rootsWithPendingDiscreteUpdates !== null) {\n    // For each root with pending discrete updates, schedule a callback to\n    // immediately flush them.\n    var roots = rootsWithPendingDiscreteUpdates;\n    rootsWithPendingDiscreteUpdates = null;\n    roots.forEach(function (expirationTime, root) {\n      markRootExpiredAtTime(root, expirationTime);\n      ensureRootIsScheduled(root);\n    }); // Now flush the immediate queue.\n\n    flushSyncCallbackQueue();\n  }\n}\n\nfunction batchedUpdates$1(fn, a) {\n  var prevExecutionContext = executionContext;\n  executionContext |= BatchedContext;\n\n  try {\n    return fn(a);\n  } finally {\n    executionContext = prevExecutionContext;\n\n    if (executionContext === NoContext) {\n      // Flush the immediate callbacks that were scheduled during this batch\n      flushSyncCallbackQueue();\n    }\n  }\n}\nfunction batchedEventUpdates$1(fn, a) {\n  var prevExecutionContext = executionContext;\n  executionContext |= EventContext;\n\n  try {\n    return fn(a);\n  } finally {\n    executionContext = prevExecutionContext;\n\n    if (executionContext === NoContext) {\n      // Flush the immediate callbacks that were scheduled during this batch\n      flushSyncCallbackQueue();\n    }\n  }\n}\nfunction discreteUpdates$1(fn, a, b, c, d) {\n  var prevExecutionContext = executionContext;\n  executionContext |= DiscreteEventContext;\n\n  try {\n    // Should this\n    return runWithPriority$1(UserBlockingPriority$1, fn.bind(null, a, b, c, d));\n  } finally {\n    executionContext = prevExecutionContext;\n\n    if (executionContext === NoContext) {\n      // Flush the immediate callbacks that were scheduled during this batch\n      flushSyncCallbackQueue();\n    }\n  }\n}\nfunction unbatchedUpdates(fn, a) {\n  var prevExecutionContext = executionContext;\n  executionContext &= ~BatchedContext;\n  executionContext |= LegacyUnbatchedContext;\n\n  try {\n    return fn(a);\n  } finally {\n    executionContext = prevExecutionContext;\n\n    if (executionContext === NoContext) {\n      // Flush the immediate callbacks that were scheduled during this batch\n      flushSyncCallbackQueue();\n    }\n  }\n}\nfunction flushSync(fn, a) {\n  if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n    {\n      {\n        throw Error( \"flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.\" );\n      }\n    }\n  }\n\n  var prevExecutionContext = executionContext;\n  executionContext |= BatchedContext;\n\n  try {\n    return runWithPriority$1(ImmediatePriority, fn.bind(null, a));\n  } finally {\n    executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.\n    // Note that this will happen even if batchedUpdates is higher up\n    // the stack.\n\n    flushSyncCallbackQueue();\n  }\n}\n\nfunction prepareFreshStack(root, expirationTime) {\n  root.finishedWork = null;\n  root.finishedExpirationTime = NoWork;\n  var timeoutHandle = root.timeoutHandle;\n\n  if (timeoutHandle !== noTimeout) {\n    // The root previous suspended and scheduled a timeout to commit a fallback\n    // state. Now that we have additional work, cancel the timeout.\n    root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above\n\n    cancelTimeout(timeoutHandle);\n  }\n\n  if (workInProgress !== null) {\n    var interruptedWork = workInProgress.return;\n\n    while (interruptedWork !== null) {\n      unwindInterruptedWork(interruptedWork);\n      interruptedWork = interruptedWork.return;\n    }\n  }\n\n  workInProgressRoot = root;\n  workInProgress = createWorkInProgress(root.current, null);\n  renderExpirationTime$1 = expirationTime;\n  workInProgressRootExitStatus = RootIncomplete;\n  workInProgressRootFatalError = null;\n  workInProgressRootLatestProcessedExpirationTime = Sync;\n  workInProgressRootLatestSuspenseTimeout = Sync;\n  workInProgressRootCanSuspendUsingConfig = null;\n  workInProgressRootNextUnprocessedUpdateTime = NoWork;\n  workInProgressRootHasPendingPing = false;\n\n  {\n    spawnedWorkDuringRender = null;\n  }\n\n  {\n    ReactStrictModeWarnings.discardPendingWarnings();\n  }\n}\n\nfunction handleError(root, thrownValue) {\n  do {\n    try {\n      // Reset module-level state that was set during the render phase.\n      resetContextDependencies();\n      resetHooksAfterThrow();\n      resetCurrentFiber();\n\n      if (workInProgress === null || workInProgress.return === null) {\n        // Expected to be working on a non-root fiber. This is a fatal error\n        // because there's no ancestor that can handle it; the root is\n        // supposed to capture all errors that weren't caught by an error\n        // boundary.\n        workInProgressRootExitStatus = RootFatalErrored;\n        workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next\n        // sibling, or the parent if there are no siblings. But since the root\n        // has no siblings nor a parent, we set it to null. Usually this is\n        // handled by `completeUnitOfWork` or `unwindWork`, but since we're\n        // interntionally not calling those, we need set it here.\n        // TODO: Consider calling `unwindWork` to pop the contexts.\n\n        workInProgress = null;\n        return null;\n      }\n\n      if (enableProfilerTimer && workInProgress.mode & ProfileMode) {\n        // Record the time spent rendering before an error was thrown. This\n        // avoids inaccurate Profiler durations in the case of a\n        // suspended render.\n        stopProfilerTimerIfRunningAndRecordDelta(workInProgress, true);\n      }\n\n      throwException(root, workInProgress.return, workInProgress, thrownValue, renderExpirationTime$1);\n      workInProgress = completeUnitOfWork(workInProgress);\n    } catch (yetAnotherThrownValue) {\n      // Something in the return path also threw.\n      thrownValue = yetAnotherThrownValue;\n      continue;\n    } // Return to the normal work loop.\n\n\n    return;\n  } while (true);\n}\n\nfunction pushDispatcher(root) {\n  var prevDispatcher = ReactCurrentDispatcher$1.current;\n  ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n  if (prevDispatcher === null) {\n    // The React isomorphic package does not include a default dispatcher.\n    // Instead the first renderer will lazily attach one, in order to give\n    // nicer error messages.\n    return ContextOnlyDispatcher;\n  } else {\n    return prevDispatcher;\n  }\n}\n\nfunction popDispatcher(prevDispatcher) {\n  ReactCurrentDispatcher$1.current = prevDispatcher;\n}\n\nfunction pushInteractions(root) {\n  {\n    var prevInteractions = tracing.__interactionsRef.current;\n    tracing.__interactionsRef.current = root.memoizedInteractions;\n    return prevInteractions;\n  }\n}\n\nfunction popInteractions(prevInteractions) {\n  {\n    tracing.__interactionsRef.current = prevInteractions;\n  }\n}\n\nfunction markCommitTimeOfFallback() {\n  globalMostRecentFallbackTime = now();\n}\nfunction markRenderEventTimeAndConfig(expirationTime, suspenseConfig) {\n  if (expirationTime < workInProgressRootLatestProcessedExpirationTime && expirationTime > Idle) {\n    workInProgressRootLatestProcessedExpirationTime = expirationTime;\n  }\n\n  if (suspenseConfig !== null) {\n    if (expirationTime < workInProgressRootLatestSuspenseTimeout && expirationTime > Idle) {\n      workInProgressRootLatestSuspenseTimeout = expirationTime; // Most of the time we only have one config and getting wrong is not bad.\n\n      workInProgressRootCanSuspendUsingConfig = suspenseConfig;\n    }\n  }\n}\nfunction markUnprocessedUpdateTime(expirationTime) {\n  if (expirationTime > workInProgressRootNextUnprocessedUpdateTime) {\n    workInProgressRootNextUnprocessedUpdateTime = expirationTime;\n  }\n}\nfunction renderDidSuspend() {\n  if (workInProgressRootExitStatus === RootIncomplete) {\n    workInProgressRootExitStatus = RootSuspended;\n  }\n}\nfunction renderDidSuspendDelayIfPossible() {\n  if (workInProgressRootExitStatus === RootIncomplete || workInProgressRootExitStatus === RootSuspended) {\n    workInProgressRootExitStatus = RootSuspendedWithDelay;\n  } // Check if there's a lower priority update somewhere else in the tree.\n\n\n  if (workInProgressRootNextUnprocessedUpdateTime !== NoWork && workInProgressRoot !== null) {\n    // Mark the current render as suspended, and then mark that there's a\n    // pending update.\n    // TODO: This should immediately interrupt the current render, instead\n    // of waiting until the next time we yield.\n    markRootSuspendedAtTime(workInProgressRoot, renderExpirationTime$1);\n    markRootUpdatedAtTime(workInProgressRoot, workInProgressRootNextUnprocessedUpdateTime);\n  }\n}\nfunction renderDidError() {\n  if (workInProgressRootExitStatus !== RootCompleted) {\n    workInProgressRootExitStatus = RootErrored;\n  }\n} // Called during render to determine if anything has suspended.\n// Returns false if we're not sure.\n\nfunction renderHasNotSuspendedYet() {\n  // If something errored or completed, we can't really be sure,\n  // so those are false.\n  return workInProgressRootExitStatus === RootIncomplete;\n}\n\nfunction inferTimeFromExpirationTime(expirationTime) {\n  // We don't know exactly when the update was scheduled, but we can infer an\n  // approximate start time from the expiration time.\n  var earliestExpirationTimeMs = expirationTimeToMs(expirationTime);\n  return earliestExpirationTimeMs - LOW_PRIORITY_EXPIRATION;\n}\n\nfunction inferTimeFromExpirationTimeWithSuspenseConfig(expirationTime, suspenseConfig) {\n  // We don't know exactly when the update was scheduled, but we can infer an\n  // approximate start time from the expiration time by subtracting the timeout\n  // that was added to the event time.\n  var earliestExpirationTimeMs = expirationTimeToMs(expirationTime);\n  return earliestExpirationTimeMs - (suspenseConfig.timeoutMs | 0 || LOW_PRIORITY_EXPIRATION);\n} // The work loop is an extremely hot path. Tell Closure not to inline it.\n\n/** @noinline */\n\n\nfunction workLoopSync() {\n  // Already timed out, so perform work without checking if we need to yield.\n  while (workInProgress !== null) {\n    workInProgress = performUnitOfWork(workInProgress);\n  }\n}\n/** @noinline */\n\n\nfunction workLoopConcurrent() {\n  // Perform work until Scheduler asks us to yield\n  while (workInProgress !== null && !shouldYield()) {\n    workInProgress = performUnitOfWork(workInProgress);\n  }\n}\n\nfunction performUnitOfWork(unitOfWork) {\n  // The current, flushed, state of this fiber is the alternate. Ideally\n  // nothing should rely on this, but relying on it here means that we don't\n  // need an additional field on the work in progress.\n  var current = unitOfWork.alternate;\n  startWorkTimer(unitOfWork);\n  setCurrentFiber(unitOfWork);\n  var next;\n\n  if ( (unitOfWork.mode & ProfileMode) !== NoMode) {\n    startProfilerTimer(unitOfWork);\n    next = beginWork$1(current, unitOfWork, renderExpirationTime$1);\n    stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);\n  } else {\n    next = beginWork$1(current, unitOfWork, renderExpirationTime$1);\n  }\n\n  resetCurrentFiber();\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n\n  if (next === null) {\n    // If this doesn't spawn new work, complete the current work.\n    next = completeUnitOfWork(unitOfWork);\n  }\n\n  ReactCurrentOwner$2.current = null;\n  return next;\n}\n\nfunction completeUnitOfWork(unitOfWork) {\n  // Attempt to complete the current unit of work, then move to the next\n  // sibling. If there are no more siblings, return to the parent fiber.\n  workInProgress = unitOfWork;\n\n  do {\n    // The current, flushed, state of this fiber is the alternate. Ideally\n    // nothing should rely on this, but relying on it here means that we don't\n    // need an additional field on the work in progress.\n    var current = workInProgress.alternate;\n    var returnFiber = workInProgress.return; // Check if the work completed or if something threw.\n\n    if ((workInProgress.effectTag & Incomplete) === NoEffect) {\n      setCurrentFiber(workInProgress);\n      var next = void 0;\n\n      if ( (workInProgress.mode & ProfileMode) === NoMode) {\n        next = completeWork(current, workInProgress, renderExpirationTime$1);\n      } else {\n        startProfilerTimer(workInProgress);\n        next = completeWork(current, workInProgress, renderExpirationTime$1); // Update render duration assuming we didn't error.\n\n        stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false);\n      }\n\n      stopWorkTimer(workInProgress);\n      resetCurrentFiber();\n      resetChildExpirationTime(workInProgress);\n\n      if (next !== null) {\n        // Completing this fiber spawned new work. Work on that next.\n        return next;\n      }\n\n      if (returnFiber !== null && // Do not append effects to parents if a sibling failed to complete\n      (returnFiber.effectTag & Incomplete) === NoEffect) {\n        // Append all the effects of the subtree and this fiber onto the effect\n        // list of the parent. The completion order of the children affects the\n        // side-effect order.\n        if (returnFiber.firstEffect === null) {\n          returnFiber.firstEffect = workInProgress.firstEffect;\n        }\n\n        if (workInProgress.lastEffect !== null) {\n          if (returnFiber.lastEffect !== null) {\n            returnFiber.lastEffect.nextEffect = workInProgress.firstEffect;\n          }\n\n          returnFiber.lastEffect = workInProgress.lastEffect;\n        } // If this fiber had side-effects, we append it AFTER the children's\n        // side-effects. We can perform certain side-effects earlier if needed,\n        // by doing multiple passes over the effect list. We don't want to\n        // schedule our own side-effect on our own list because if end up\n        // reusing children we'll schedule this effect onto itself since we're\n        // at the end.\n\n\n        var effectTag = workInProgress.effectTag; // Skip both NoWork and PerformedWork tags when creating the effect\n        // list. PerformedWork effect is read by React DevTools but shouldn't be\n        // committed.\n\n        if (effectTag > PerformedWork) {\n          if (returnFiber.lastEffect !== null) {\n            returnFiber.lastEffect.nextEffect = workInProgress;\n          } else {\n            returnFiber.firstEffect = workInProgress;\n          }\n\n          returnFiber.lastEffect = workInProgress;\n        }\n      }\n    } else {\n      // This fiber did not complete because something threw. Pop values off\n      // the stack without entering the complete phase. If this is a boundary,\n      // capture values if possible.\n      var _next = unwindWork(workInProgress); // Because this fiber did not complete, don't reset its expiration time.\n\n\n      if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n        // Record the render duration for the fiber that errored.\n        stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false); // Include the time spent working on failed children before continuing.\n\n        var actualDuration = workInProgress.actualDuration;\n        var child = workInProgress.child;\n\n        while (child !== null) {\n          actualDuration += child.actualDuration;\n          child = child.sibling;\n        }\n\n        workInProgress.actualDuration = actualDuration;\n      }\n\n      if (_next !== null) {\n        // If completing this work spawned new work, do that next. We'll come\n        // back here again.\n        // Since we're restarting, remove anything that is not a host effect\n        // from the effect tag.\n        // TODO: The name stopFailedWorkTimer is misleading because Suspense\n        // also captures and restarts.\n        stopFailedWorkTimer(workInProgress);\n        _next.effectTag &= HostEffectMask;\n        return _next;\n      }\n\n      stopWorkTimer(workInProgress);\n\n      if (returnFiber !== null) {\n        // Mark the parent fiber as incomplete and clear its effect list.\n        returnFiber.firstEffect = returnFiber.lastEffect = null;\n        returnFiber.effectTag |= Incomplete;\n      }\n    }\n\n    var siblingFiber = workInProgress.sibling;\n\n    if (siblingFiber !== null) {\n      // If there is more work to do in this returnFiber, do that next.\n      return siblingFiber;\n    } // Otherwise, return to the parent\n\n\n    workInProgress = returnFiber;\n  } while (workInProgress !== null); // We've reached the root.\n\n\n  if (workInProgressRootExitStatus === RootIncomplete) {\n    workInProgressRootExitStatus = RootCompleted;\n  }\n\n  return null;\n}\n\nfunction getRemainingExpirationTime(fiber) {\n  var updateExpirationTime = fiber.expirationTime;\n  var childExpirationTime = fiber.childExpirationTime;\n  return updateExpirationTime > childExpirationTime ? updateExpirationTime : childExpirationTime;\n}\n\nfunction resetChildExpirationTime(completedWork) {\n  if (renderExpirationTime$1 !== Never && completedWork.childExpirationTime === Never) {\n    // The children of this component are hidden. Don't bubble their\n    // expiration times.\n    return;\n  }\n\n  var newChildExpirationTime = NoWork; // Bubble up the earliest expiration time.\n\n  if ( (completedWork.mode & ProfileMode) !== NoMode) {\n    // In profiling mode, resetChildExpirationTime is also used to reset\n    // profiler durations.\n    var actualDuration = completedWork.actualDuration;\n    var treeBaseDuration = completedWork.selfBaseDuration; // When a fiber is cloned, its actualDuration is reset to 0. This value will\n    // only be updated if work is done on the fiber (i.e. it doesn't bailout).\n    // When work is done, it should bubble to the parent's actualDuration. If\n    // the fiber has not been cloned though, (meaning no work was done), then\n    // this value will reflect the amount of time spent working on a previous\n    // render. In that case it should not bubble. We determine whether it was\n    // cloned by comparing the child pointer.\n\n    var shouldBubbleActualDurations = completedWork.alternate === null || completedWork.child !== completedWork.alternate.child;\n    var child = completedWork.child;\n\n    while (child !== null) {\n      var childUpdateExpirationTime = child.expirationTime;\n      var childChildExpirationTime = child.childExpirationTime;\n\n      if (childUpdateExpirationTime > newChildExpirationTime) {\n        newChildExpirationTime = childUpdateExpirationTime;\n      }\n\n      if (childChildExpirationTime > newChildExpirationTime) {\n        newChildExpirationTime = childChildExpirationTime;\n      }\n\n      if (shouldBubbleActualDurations) {\n        actualDuration += child.actualDuration;\n      }\n\n      treeBaseDuration += child.treeBaseDuration;\n      child = child.sibling;\n    }\n\n    completedWork.actualDuration = actualDuration;\n    completedWork.treeBaseDuration = treeBaseDuration;\n  } else {\n    var _child = completedWork.child;\n\n    while (_child !== null) {\n      var _childUpdateExpirationTime = _child.expirationTime;\n      var _childChildExpirationTime = _child.childExpirationTime;\n\n      if (_childUpdateExpirationTime > newChildExpirationTime) {\n        newChildExpirationTime = _childUpdateExpirationTime;\n      }\n\n      if (_childChildExpirationTime > newChildExpirationTime) {\n        newChildExpirationTime = _childChildExpirationTime;\n      }\n\n      _child = _child.sibling;\n    }\n  }\n\n  completedWork.childExpirationTime = newChildExpirationTime;\n}\n\nfunction commitRoot(root) {\n  var renderPriorityLevel = getCurrentPriorityLevel();\n  runWithPriority$1(ImmediatePriority, commitRootImpl.bind(null, root, renderPriorityLevel));\n  return null;\n}\n\nfunction commitRootImpl(root, renderPriorityLevel) {\n  do {\n    // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which\n    // means `flushPassiveEffects` will sometimes result in additional\n    // passive effects. So we need to keep flushing in a loop until there are\n    // no more pending effects.\n    // TODO: Might be better if `flushPassiveEffects` did not automatically\n    // flush synchronous work at the end, to avoid factoring hazards like this.\n    flushPassiveEffects();\n  } while (rootWithPendingPassiveEffects !== null);\n\n  flushRenderPhaseStrictModeWarningsInDEV();\n\n  if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n    {\n      throw Error( \"Should not already be working.\" );\n    }\n  }\n\n  var finishedWork = root.finishedWork;\n  var expirationTime = root.finishedExpirationTime;\n\n  if (finishedWork === null) {\n    return null;\n  }\n\n  root.finishedWork = null;\n  root.finishedExpirationTime = NoWork;\n\n  if (!(finishedWork !== root.current)) {\n    {\n      throw Error( \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  } // commitRoot never returns a continuation; it always finishes synchronously.\n  // So we can clear these now to allow a new callback to be scheduled.\n\n\n  root.callbackNode = null;\n  root.callbackExpirationTime = NoWork;\n  root.callbackPriority = NoPriority;\n  root.nextKnownPendingLevel = NoWork;\n  startCommitTimer(); // Update the first and last pending times on this root. The new first\n  // pending time is whatever is left on the root fiber.\n\n  var remainingExpirationTimeBeforeCommit = getRemainingExpirationTime(finishedWork);\n  markRootFinishedAtTime(root, expirationTime, remainingExpirationTimeBeforeCommit);\n\n  if (root === workInProgressRoot) {\n    // We can reset these now that they are finished.\n    workInProgressRoot = null;\n    workInProgress = null;\n    renderExpirationTime$1 = NoWork;\n  } // This indicates that the last root we worked on is not the same one that\n  // we're committing now. This most commonly happens when a suspended root\n  // times out.\n  // Get the list of effects.\n\n\n  var firstEffect;\n\n  if (finishedWork.effectTag > PerformedWork) {\n    // A fiber's effect list consists only of its children, not itself. So if\n    // the root has an effect, we need to add it to the end of the list. The\n    // resulting list is the set that would belong to the root's parent, if it\n    // had one; that is, all the effects in the tree including the root.\n    if (finishedWork.lastEffect !== null) {\n      finishedWork.lastEffect.nextEffect = finishedWork;\n      firstEffect = finishedWork.firstEffect;\n    } else {\n      firstEffect = finishedWork;\n    }\n  } else {\n    // There is no effect on the root.\n    firstEffect = finishedWork.firstEffect;\n  }\n\n  if (firstEffect !== null) {\n    var prevExecutionContext = executionContext;\n    executionContext |= CommitContext;\n    var prevInteractions = pushInteractions(root); // Reset this to null before calling lifecycles\n\n    ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass\n    // of the effect list for each phase: all mutation effects come before all\n    // layout effects, and so on.\n    // The first phase a \"before mutation\" phase. We use this phase to read the\n    // state of the host tree right before we mutate it. This is where\n    // getSnapshotBeforeUpdate is called.\n\n    startCommitSnapshotEffectsTimer();\n    prepareForCommit(root.containerInfo);\n    nextEffect = firstEffect;\n\n    do {\n      {\n        invokeGuardedCallback(null, commitBeforeMutationEffects, null);\n\n        if (hasCaughtError()) {\n          if (!(nextEffect !== null)) {\n            {\n              throw Error( \"Should be working on an effect.\" );\n            }\n          }\n\n          var error = clearCaughtError();\n          captureCommitPhaseError(nextEffect, error);\n          nextEffect = nextEffect.nextEffect;\n        }\n      }\n    } while (nextEffect !== null);\n\n    stopCommitSnapshotEffectsTimer();\n\n    {\n      // Mark the current commit time to be shared by all Profilers in this\n      // batch. This enables them to be grouped later.\n      recordCommitTime();\n    } // The next phase is the mutation phase, where we mutate the host tree.\n\n\n    startCommitHostEffectsTimer();\n    nextEffect = firstEffect;\n\n    do {\n      {\n        invokeGuardedCallback(null, commitMutationEffects, null, root, renderPriorityLevel);\n\n        if (hasCaughtError()) {\n          if (!(nextEffect !== null)) {\n            {\n              throw Error( \"Should be working on an effect.\" );\n            }\n          }\n\n          var _error = clearCaughtError();\n\n          captureCommitPhaseError(nextEffect, _error);\n          nextEffect = nextEffect.nextEffect;\n        }\n      }\n    } while (nextEffect !== null);\n\n    stopCommitHostEffectsTimer();\n    resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after\n    // the mutation phase, so that the previous tree is still current during\n    // componentWillUnmount, but before the layout phase, so that the finished\n    // work is current during componentDidMount/Update.\n\n    root.current = finishedWork; // The next phase is the layout phase, where we call effects that read\n    // the host tree after it's been mutated. The idiomatic use case for this is\n    // layout, but class component lifecycles also fire here for legacy reasons.\n\n    startCommitLifeCyclesTimer();\n    nextEffect = firstEffect;\n\n    do {\n      {\n        invokeGuardedCallback(null, commitLayoutEffects, null, root, expirationTime);\n\n        if (hasCaughtError()) {\n          if (!(nextEffect !== null)) {\n            {\n              throw Error( \"Should be working on an effect.\" );\n            }\n          }\n\n          var _error2 = clearCaughtError();\n\n          captureCommitPhaseError(nextEffect, _error2);\n          nextEffect = nextEffect.nextEffect;\n        }\n      }\n    } while (nextEffect !== null);\n\n    stopCommitLifeCyclesTimer();\n    nextEffect = null; // Tell Scheduler to yield at the end of the frame, so the browser has an\n    // opportunity to paint.\n\n    requestPaint();\n\n    {\n      popInteractions(prevInteractions);\n    }\n\n    executionContext = prevExecutionContext;\n  } else {\n    // No effects.\n    root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were\n    // no effects.\n    // TODO: Maybe there's a better way to report this.\n\n    startCommitSnapshotEffectsTimer();\n    stopCommitSnapshotEffectsTimer();\n\n    {\n      recordCommitTime();\n    }\n\n    startCommitHostEffectsTimer();\n    stopCommitHostEffectsTimer();\n    startCommitLifeCyclesTimer();\n    stopCommitLifeCyclesTimer();\n  }\n\n  stopCommitTimer();\n  var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;\n\n  if (rootDoesHavePassiveEffects) {\n    // This commit has passive effects. Stash a reference to them. But don't\n    // schedule a callback until after flushing layout work.\n    rootDoesHavePassiveEffects = false;\n    rootWithPendingPassiveEffects = root;\n    pendingPassiveEffectsExpirationTime = expirationTime;\n    pendingPassiveEffectsRenderPriority = renderPriorityLevel;\n  } else {\n    // We are done with the effect chain at this point so let's clear the\n    // nextEffect pointers to assist with GC. If we have passive effects, we'll\n    // clear this in flushPassiveEffects.\n    nextEffect = firstEffect;\n\n    while (nextEffect !== null) {\n      var nextNextEffect = nextEffect.nextEffect;\n      nextEffect.nextEffect = null;\n      nextEffect = nextNextEffect;\n    }\n  } // Check if there's remaining work on this root\n\n\n  var remainingExpirationTime = root.firstPendingTime;\n\n  if (remainingExpirationTime !== NoWork) {\n    {\n      if (spawnedWorkDuringRender !== null) {\n        var expirationTimes = spawnedWorkDuringRender;\n        spawnedWorkDuringRender = null;\n\n        for (var i = 0; i < expirationTimes.length; i++) {\n          scheduleInteractions(root, expirationTimes[i], root.memoizedInteractions);\n        }\n      }\n\n      schedulePendingInteractions(root, remainingExpirationTime);\n    }\n  } else {\n    // If there's no remaining work, we can clear the set of already failed\n    // error boundaries.\n    legacyErrorBoundariesThatAlreadyFailed = null;\n  }\n\n  {\n    if (!rootDidHavePassiveEffects) {\n      // If there are no passive effects, then we can complete the pending interactions.\n      // Otherwise, we'll wait until after the passive effects are flushed.\n      // Wait to do this until after remaining work has been scheduled,\n      // so that we don't prematurely signal complete for interactions when there's e.g. hidden work.\n      finishPendingInteractions(root, expirationTime);\n    }\n  }\n\n  if (remainingExpirationTime === Sync) {\n    // Count the number of times the root synchronously re-renders without\n    // finishing. If there are too many, it indicates an infinite update loop.\n    if (root === rootWithNestedUpdates) {\n      nestedUpdateCount++;\n    } else {\n      nestedUpdateCount = 0;\n      rootWithNestedUpdates = root;\n    }\n  } else {\n    nestedUpdateCount = 0;\n  }\n\n  onCommitRoot(finishedWork.stateNode, expirationTime); // Always call this before exiting `commitRoot`, to ensure that any\n  // additional work on this root is scheduled.\n\n  ensureRootIsScheduled(root);\n\n  if (hasUncaughtError) {\n    hasUncaughtError = false;\n    var _error3 = firstUncaughtError;\n    firstUncaughtError = null;\n    throw _error3;\n  }\n\n  if ((executionContext & LegacyUnbatchedContext) !== NoContext) {\n    // This is a legacy edge case. We just committed the initial mount of\n    // a ReactDOM.render-ed root inside of batchedUpdates. The commit fired\n    // synchronously, but layout updates should be deferred until the end\n    // of the batch.\n    return null;\n  } // If layout work was scheduled, flush it now.\n\n\n  flushSyncCallbackQueue();\n  return null;\n}\n\nfunction commitBeforeMutationEffects() {\n  while (nextEffect !== null) {\n    var effectTag = nextEffect.effectTag;\n\n    if ((effectTag & Snapshot) !== NoEffect) {\n      setCurrentFiber(nextEffect);\n      recordEffect();\n      var current = nextEffect.alternate;\n      commitBeforeMutationLifeCycles(current, nextEffect);\n      resetCurrentFiber();\n    }\n\n    if ((effectTag & Passive) !== NoEffect) {\n      // If there are passive effects, schedule a callback to flush at\n      // the earliest opportunity.\n      if (!rootDoesHavePassiveEffects) {\n        rootDoesHavePassiveEffects = true;\n        scheduleCallback(NormalPriority, function () {\n          flushPassiveEffects();\n          return null;\n        });\n      }\n    }\n\n    nextEffect = nextEffect.nextEffect;\n  }\n}\n\nfunction commitMutationEffects(root, renderPriorityLevel) {\n  // TODO: Should probably move the bulk of this function to commitWork.\n  while (nextEffect !== null) {\n    setCurrentFiber(nextEffect);\n    var effectTag = nextEffect.effectTag;\n\n    if (effectTag & ContentReset) {\n      commitResetTextContent(nextEffect);\n    }\n\n    if (effectTag & Ref) {\n      var current = nextEffect.alternate;\n\n      if (current !== null) {\n        commitDetachRef(current);\n      }\n    } // The following switch statement is only concerned about placement,\n    // updates, and deletions. To avoid needing to add a case for every possible\n    // bitmap value, we remove the secondary effects from the effect tag and\n    // switch on that value.\n\n\n    var primaryEffectTag = effectTag & (Placement | Update | Deletion | Hydrating);\n\n    switch (primaryEffectTag) {\n      case Placement:\n        {\n          commitPlacement(nextEffect); // Clear the \"placement\" from effect tag so that we know that this is\n          // inserted, before any life-cycles like componentDidMount gets called.\n          // TODO: findDOMNode doesn't rely on this any more but isMounted does\n          // and isMounted is deprecated anyway so we should be able to kill this.\n\n          nextEffect.effectTag &= ~Placement;\n          break;\n        }\n\n      case PlacementAndUpdate:\n        {\n          // Placement\n          commitPlacement(nextEffect); // Clear the \"placement\" from effect tag so that we know that this is\n          // inserted, before any life-cycles like componentDidMount gets called.\n\n          nextEffect.effectTag &= ~Placement; // Update\n\n          var _current = nextEffect.alternate;\n          commitWork(_current, nextEffect);\n          break;\n        }\n\n      case Hydrating:\n        {\n          nextEffect.effectTag &= ~Hydrating;\n          break;\n        }\n\n      case HydratingAndUpdate:\n        {\n          nextEffect.effectTag &= ~Hydrating; // Update\n\n          var _current2 = nextEffect.alternate;\n          commitWork(_current2, nextEffect);\n          break;\n        }\n\n      case Update:\n        {\n          var _current3 = nextEffect.alternate;\n          commitWork(_current3, nextEffect);\n          break;\n        }\n\n      case Deletion:\n        {\n          commitDeletion(root, nextEffect, renderPriorityLevel);\n          break;\n        }\n    } // TODO: Only record a mutation effect if primaryEffectTag is non-zero.\n\n\n    recordEffect();\n    resetCurrentFiber();\n    nextEffect = nextEffect.nextEffect;\n  }\n}\n\nfunction commitLayoutEffects(root, committedExpirationTime) {\n  // TODO: Should probably move the bulk of this function to commitWork.\n  while (nextEffect !== null) {\n    setCurrentFiber(nextEffect);\n    var effectTag = nextEffect.effectTag;\n\n    if (effectTag & (Update | Callback)) {\n      recordEffect();\n      var current = nextEffect.alternate;\n      commitLifeCycles(root, current, nextEffect);\n    }\n\n    if (effectTag & Ref) {\n      recordEffect();\n      commitAttachRef(nextEffect);\n    }\n\n    resetCurrentFiber();\n    nextEffect = nextEffect.nextEffect;\n  }\n}\n\nfunction flushPassiveEffects() {\n  if (pendingPassiveEffectsRenderPriority !== NoPriority) {\n    var priorityLevel = pendingPassiveEffectsRenderPriority > NormalPriority ? NormalPriority : pendingPassiveEffectsRenderPriority;\n    pendingPassiveEffectsRenderPriority = NoPriority;\n    return runWithPriority$1(priorityLevel, flushPassiveEffectsImpl);\n  }\n}\n\nfunction flushPassiveEffectsImpl() {\n  if (rootWithPendingPassiveEffects === null) {\n    return false;\n  }\n\n  var root = rootWithPendingPassiveEffects;\n  var expirationTime = pendingPassiveEffectsExpirationTime;\n  rootWithPendingPassiveEffects = null;\n  pendingPassiveEffectsExpirationTime = NoWork;\n\n  if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n    {\n      throw Error( \"Cannot flush passive effects while already rendering.\" );\n    }\n  }\n\n  var prevExecutionContext = executionContext;\n  executionContext |= CommitContext;\n  var prevInteractions = pushInteractions(root);\n\n  {\n    // Note: This currently assumes there are no passive effects on the root fiber\n    // because the root is not part of its own effect list.\n    // This could change in the future.\n    var _effect2 = root.current.firstEffect;\n\n    while (_effect2 !== null) {\n      {\n        setCurrentFiber(_effect2);\n        invokeGuardedCallback(null, commitPassiveHookEffects, null, _effect2);\n\n        if (hasCaughtError()) {\n          if (!(_effect2 !== null)) {\n            {\n              throw Error( \"Should be working on an effect.\" );\n            }\n          }\n\n          var _error5 = clearCaughtError();\n\n          captureCommitPhaseError(_effect2, _error5);\n        }\n\n        resetCurrentFiber();\n      }\n\n      var nextNextEffect = _effect2.nextEffect; // Remove nextEffect pointer to assist GC\n\n      _effect2.nextEffect = null;\n      _effect2 = nextNextEffect;\n    }\n  }\n\n  {\n    popInteractions(prevInteractions);\n    finishPendingInteractions(root, expirationTime);\n  }\n\n  executionContext = prevExecutionContext;\n  flushSyncCallbackQueue(); // If additional passive effects were scheduled, increment a counter. If this\n  // exceeds the limit, we'll fire a warning.\n\n  nestedPassiveUpdateCount = rootWithPendingPassiveEffects === null ? 0 : nestedPassiveUpdateCount + 1;\n  return true;\n}\n\nfunction isAlreadyFailedLegacyErrorBoundary(instance) {\n  return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);\n}\nfunction markLegacyErrorBoundaryAsFailed(instance) {\n  if (legacyErrorBoundariesThatAlreadyFailed === null) {\n    legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);\n  } else {\n    legacyErrorBoundariesThatAlreadyFailed.add(instance);\n  }\n}\n\nfunction prepareToThrowUncaughtError(error) {\n  if (!hasUncaughtError) {\n    hasUncaughtError = true;\n    firstUncaughtError = error;\n  }\n}\n\nvar onUncaughtError = prepareToThrowUncaughtError;\n\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  var errorInfo = createCapturedValue(error, sourceFiber);\n  var update = createRootErrorUpdate(rootFiber, errorInfo, Sync);\n  enqueueUpdate(rootFiber, update);\n  var root = markUpdateTimeFromFiberToRoot(rootFiber, Sync);\n\n  if (root !== null) {\n    ensureRootIsScheduled(root);\n    schedulePendingInteractions(root, Sync);\n  }\n}\n\nfunction captureCommitPhaseError(sourceFiber, error) {\n  if (sourceFiber.tag === HostRoot) {\n    // Error was thrown at the root. There is no parent, so the root\n    // itself should capture it.\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n    return;\n  }\n\n  var fiber = sourceFiber.return;\n\n  while (fiber !== null) {\n    if (fiber.tag === HostRoot) {\n      captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error);\n      return;\n    } else if (fiber.tag === ClassComponent) {\n      var ctor = fiber.type;\n      var instance = fiber.stateNode;\n\n      if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {\n        var errorInfo = createCapturedValue(error, sourceFiber);\n        var update = createClassErrorUpdate(fiber, errorInfo, // TODO: This is always sync\n        Sync);\n        enqueueUpdate(fiber, update);\n        var root = markUpdateTimeFromFiberToRoot(fiber, Sync);\n\n        if (root !== null) {\n          ensureRootIsScheduled(root);\n          schedulePendingInteractions(root, Sync);\n        }\n\n        return;\n      }\n    }\n\n    fiber = fiber.return;\n  }\n}\nfunction pingSuspendedRoot(root, thenable, suspendedTime) {\n  var pingCache = root.pingCache;\n\n  if (pingCache !== null) {\n    // The thenable resolved, so we no longer need to memoize, because it will\n    // never be thrown again.\n    pingCache.delete(thenable);\n  }\n\n  if (workInProgressRoot === root && renderExpirationTime$1 === suspendedTime) {\n    // Received a ping at the same priority level at which we're currently\n    // rendering. We might want to restart this render. This should mirror\n    // the logic of whether or not a root suspends once it completes.\n    // TODO: If we're rendering sync either due to Sync, Batched or expired,\n    // we should probably never restart.\n    // If we're suspended with delay, we'll always suspend so we can always\n    // restart. If we're suspended without any updates, it might be a retry.\n    // If it's early in the retry we can restart. We can't know for sure\n    // whether we'll eventually process an update during this render pass,\n    // but it's somewhat unlikely that we get to a ping before that, since\n    // getting to the root most update is usually very fast.\n    if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && workInProgressRootLatestProcessedExpirationTime === Sync && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {\n      // Restart from the root. Don't need to schedule a ping because\n      // we're already working on this tree.\n      prepareFreshStack(root, renderExpirationTime$1);\n    } else {\n      // Even though we can't restart right now, we might get an\n      // opportunity later. So we mark this render as having a ping.\n      workInProgressRootHasPendingPing = true;\n    }\n\n    return;\n  }\n\n  if (!isRootSuspendedAtTime(root, suspendedTime)) {\n    // The root is no longer suspended at this time.\n    return;\n  }\n\n  var lastPingedTime = root.lastPingedTime;\n\n  if (lastPingedTime !== NoWork && lastPingedTime < suspendedTime) {\n    // There's already a lower priority ping scheduled.\n    return;\n  } // Mark the time at which this ping was scheduled.\n\n\n  root.lastPingedTime = suspendedTime;\n\n  ensureRootIsScheduled(root);\n  schedulePendingInteractions(root, suspendedTime);\n}\n\nfunction retryTimedOutBoundary(boundaryFiber, retryTime) {\n  // The boundary fiber (a Suspense component or SuspenseList component)\n  // previously was rendered in its fallback state. One of the promises that\n  // suspended it has resolved, which means at least part of the tree was\n  // likely unblocked. Try rendering again, at a new expiration time.\n  if (retryTime === NoWork) {\n    var suspenseConfig = null; // Retries don't carry over the already committed update.\n\n    var currentTime = requestCurrentTimeForUpdate();\n    retryTime = computeExpirationForFiber(currentTime, boundaryFiber, suspenseConfig);\n  } // TODO: Special case idle priority?\n\n\n  var root = markUpdateTimeFromFiberToRoot(boundaryFiber, retryTime);\n\n  if (root !== null) {\n    ensureRootIsScheduled(root);\n    schedulePendingInteractions(root, retryTime);\n  }\n}\nfunction resolveRetryThenable(boundaryFiber, thenable) {\n  var retryTime = NoWork; // Default\n\n  var retryCache;\n\n  {\n    retryCache = boundaryFiber.stateNode;\n  }\n\n  if (retryCache !== null) {\n    // The thenable resolved, so we no longer need to memoize, because it will\n    // never be thrown again.\n    retryCache.delete(thenable);\n  }\n\n  retryTimedOutBoundary(boundaryFiber, retryTime);\n} // Computes the next Just Noticeable Difference (JND) boundary.\n// The theory is that a person can't tell the difference between small differences in time.\n// Therefore, if we wait a bit longer than necessary that won't translate to a noticeable\n// difference in the experience. However, waiting for longer might mean that we can avoid\n// showing an intermediate loading state. The longer we have already waited, the harder it\n// is to tell small differences in time. Therefore, the longer we've already waited,\n// the longer we can wait additionally. At some point we have to give up though.\n// We pick a train model where the next boundary commits at a consistent schedule.\n// These particular numbers are vague estimates. We expect to adjust them based on research.\n\nfunction jnd(timeElapsed) {\n  return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960;\n}\n\nfunction computeMsUntilSuspenseLoadingDelay(mostRecentEventTime, committedExpirationTime, suspenseConfig) {\n  var busyMinDurationMs = suspenseConfig.busyMinDurationMs | 0;\n\n  if (busyMinDurationMs <= 0) {\n    return 0;\n  }\n\n  var busyDelayMs = suspenseConfig.busyDelayMs | 0; // Compute the time until this render pass would expire.\n\n  var currentTimeMs = now();\n  var eventTimeMs = inferTimeFromExpirationTimeWithSuspenseConfig(mostRecentEventTime, suspenseConfig);\n  var timeElapsed = currentTimeMs - eventTimeMs;\n\n  if (timeElapsed <= busyDelayMs) {\n    // If we haven't yet waited longer than the initial delay, we don't\n    // have to wait any additional time.\n    return 0;\n  }\n\n  var msUntilTimeout = busyDelayMs + busyMinDurationMs - timeElapsed; // This is the value that is passed to `setTimeout`.\n\n  return msUntilTimeout;\n}\n\nfunction checkForNestedUpdates() {\n  if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {\n    nestedUpdateCount = 0;\n    rootWithNestedUpdates = null;\n\n    {\n      {\n        throw Error( \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\" );\n      }\n    }\n  }\n\n  {\n    if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {\n      nestedPassiveUpdateCount = 0;\n\n      error('Maximum update depth exceeded. This can happen when a component ' + \"calls setState inside useEffect, but useEffect either doesn't \" + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');\n    }\n  }\n}\n\nfunction flushRenderPhaseStrictModeWarningsInDEV() {\n  {\n    ReactStrictModeWarnings.flushLegacyContextWarning();\n\n    {\n      ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n    }\n  }\n}\n\nfunction stopFinishedWorkLoopTimer() {\n  var didCompleteRoot = true;\n  stopWorkLoopTimer(interruptedBy, didCompleteRoot);\n  interruptedBy = null;\n}\n\nfunction stopInterruptedWorkLoopTimer() {\n  // TODO: Track which fiber caused the interruption.\n  var didCompleteRoot = false;\n  stopWorkLoopTimer(interruptedBy, didCompleteRoot);\n  interruptedBy = null;\n}\n\nfunction checkForInterruption(fiberThatReceivedUpdate, updateExpirationTime) {\n  if ( workInProgressRoot !== null && updateExpirationTime > renderExpirationTime$1) {\n    interruptedBy = fiberThatReceivedUpdate;\n  }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = null;\n\nfunction warnAboutUpdateOnUnmountedFiberInDEV(fiber) {\n  {\n    var tag = fiber.tag;\n\n    if (tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent && tag !== Block) {\n      // Only warn for user-defined components, not internal ones like Suspense.\n      return;\n    }\n    // the problematic code almost always lies inside that component.\n\n\n    var componentName = getComponentName(fiber.type) || 'ReactComponent';\n\n    if (didWarnStateUpdateForUnmountedComponent !== null) {\n      if (didWarnStateUpdateForUnmountedComponent.has(componentName)) {\n        return;\n      }\n\n      didWarnStateUpdateForUnmountedComponent.add(componentName);\n    } else {\n      didWarnStateUpdateForUnmountedComponent = new Set([componentName]);\n    }\n\n    error(\"Can't perform a React state update on an unmounted component. This \" + 'is a no-op, but it indicates a memory leak in your application. To ' + 'fix, cancel all subscriptions and asynchronous tasks in %s.%s', tag === ClassComponent ? 'the componentWillUnmount method' : 'a useEffect cleanup function', getStackByFiberInDevAndProd(fiber));\n  }\n}\n\nvar beginWork$1;\n\n{\n  var dummyFiber = null;\n\n  beginWork$1 = function (current, unitOfWork, expirationTime) {\n    // If a component throws an error, we replay it again in a synchronously\n    // dispatched event, so that the debugger will treat it as an uncaught\n    // error See ReactErrorUtils for more information.\n    // Before entering the begin phase, copy the work-in-progress onto a dummy\n    // fiber. If beginWork throws, we'll use this to reset the state.\n    var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);\n\n    try {\n      return beginWork(current, unitOfWork, expirationTime);\n    } catch (originalError) {\n      if (originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {\n        // Don't replay promises. Treat everything else like an error.\n        throw originalError;\n      } // Keep this code in sync with handleError; any changes here must have\n      // corresponding changes there.\n\n\n      resetContextDependencies();\n      resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the\n      // same fiber again.\n      // Unwind the failed stack frame\n\n      unwindInterruptedWork(unitOfWork); // Restore the original properties of the fiber.\n\n      assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);\n\n      if ( unitOfWork.mode & ProfileMode) {\n        // Reset the profiler timer.\n        startProfilerTimer(unitOfWork);\n      } // Run beginWork again.\n\n\n      invokeGuardedCallback(null, beginWork, null, current, unitOfWork, expirationTime);\n\n      if (hasCaughtError()) {\n        var replayError = clearCaughtError(); // `invokeGuardedCallback` sometimes sets an expando `_suppressLogging`.\n        // Rethrow this error instead of the original one.\n\n        throw replayError;\n      } else {\n        // This branch is reachable if the render phase is impure.\n        throw originalError;\n      }\n    }\n  };\n}\n\nvar didWarnAboutUpdateInRender = false;\nvar didWarnAboutUpdateInRenderForAnotherComponent;\n\n{\n  didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n}\n\nfunction warnAboutRenderPhaseUpdatesInDEV(fiber) {\n  {\n    if (isRendering && (executionContext & RenderContext) !== NoContext) {\n      switch (fiber.tag) {\n        case FunctionComponent:\n        case ForwardRef:\n        case SimpleMemoComponent:\n          {\n            var renderingComponentName = workInProgress && getComponentName(workInProgress.type) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.\n\n            var dedupeKey = renderingComponentName;\n\n            if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {\n              didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);\n              var setStateComponentName = getComponentName(fiber.type) || 'Unknown';\n\n              error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://fb.me/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);\n            }\n\n            break;\n          }\n\n        case ClassComponent:\n          {\n            if (!didWarnAboutUpdateInRender) {\n              error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');\n\n              didWarnAboutUpdateInRender = true;\n            }\n\n            break;\n          }\n      }\n    }\n  }\n} // a 'shared' variable that changes when act() opens/closes in tests.\n\n\nvar IsThisRendererActing = {\n  current: false\n};\nfunction warnIfNotScopedWithMatchingAct(fiber) {\n  {\n    if ( IsSomeRendererActing.current === true && IsThisRendererActing.current !== true) {\n      error(\"It looks like you're using the wrong act() around your test interactions.\\n\" + 'Be sure to use the matching version of act() corresponding to your renderer:\\n\\n' + '// for react-dom:\\n' + \"import {act} from 'react-dom/test-utils';\\n\" + '// ...\\n' + 'act(() => ...);\\n\\n' + '// for react-test-renderer:\\n' + \"import TestRenderer from 'react-test-renderer';\\n\" + 'const {act} = TestRenderer;\\n' + '// ...\\n' + 'act(() => ...);' + '%s', getStackByFiberInDevAndProd(fiber));\n    }\n  }\n}\nfunction warnIfNotCurrentlyActingEffectsInDEV(fiber) {\n  {\n    if ( (fiber.mode & StrictMode) !== NoMode && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {\n      error('An update to %s ran an effect, but was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + '  /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://fb.me/react-wrap-tests-with-act' + '%s', getComponentName(fiber.type), getStackByFiberInDevAndProd(fiber));\n    }\n  }\n}\n\nfunction warnIfNotCurrentlyActingUpdatesInDEV(fiber) {\n  {\n    if ( executionContext === NoContext && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {\n      error('An update to %s inside a test was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + '  /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://fb.me/react-wrap-tests-with-act' + '%s', getComponentName(fiber.type), getStackByFiberInDevAndProd(fiber));\n    }\n  }\n}\n\nvar warnIfNotCurrentlyActingUpdatesInDev = warnIfNotCurrentlyActingUpdatesInDEV; // In tests, we want to enforce a mocked scheduler.\n\nvar didWarnAboutUnmockedScheduler = false; // TODO Before we release concurrent mode, revisit this and decide whether a mocked\n// scheduler is the actual recommendation. The alternative could be a testing build,\n// a new lib, or whatever; we dunno just yet. This message is for early adopters\n// to get their tests right.\n\nfunction warnIfUnmockedScheduler(fiber) {\n  {\n    if (didWarnAboutUnmockedScheduler === false && Scheduler.unstable_flushAllWithoutAsserting === undefined) {\n      if (fiber.mode & BlockingMode || fiber.mode & ConcurrentMode) {\n        didWarnAboutUnmockedScheduler = true;\n\n        error('In Concurrent or Sync modes, the \"scheduler\" module needs to be mocked ' + 'to guarantee consistent behaviour across tests and browsers. ' + 'For example, with jest: \\n' + \"jest.mock('scheduler', () => require('scheduler/unstable_mock'));\\n\\n\" + 'For more info, visit https://fb.me/react-mock-scheduler');\n      }\n    }\n  }\n}\n\nfunction computeThreadID(root, expirationTime) {\n  // Interaction threads are unique per root and expiration time.\n  return expirationTime * 1000 + root.interactionThreadID;\n}\n\nfunction markSpawnedWork(expirationTime) {\n\n  if (spawnedWorkDuringRender === null) {\n    spawnedWorkDuringRender = [expirationTime];\n  } else {\n    spawnedWorkDuringRender.push(expirationTime);\n  }\n}\n\nfunction scheduleInteractions(root, expirationTime, interactions) {\n\n  if (interactions.size > 0) {\n    var pendingInteractionMap = root.pendingInteractionMap;\n    var pendingInteractions = pendingInteractionMap.get(expirationTime);\n\n    if (pendingInteractions != null) {\n      interactions.forEach(function (interaction) {\n        if (!pendingInteractions.has(interaction)) {\n          // Update the pending async work count for previously unscheduled interaction.\n          interaction.__count++;\n        }\n\n        pendingInteractions.add(interaction);\n      });\n    } else {\n      pendingInteractionMap.set(expirationTime, new Set(interactions)); // Update the pending async work count for the current interactions.\n\n      interactions.forEach(function (interaction) {\n        interaction.__count++;\n      });\n    }\n\n    var subscriber = tracing.__subscriberRef.current;\n\n    if (subscriber !== null) {\n      var threadID = computeThreadID(root, expirationTime);\n      subscriber.onWorkScheduled(interactions, threadID);\n    }\n  }\n}\n\nfunction schedulePendingInteractions(root, expirationTime) {\n\n  scheduleInteractions(root, expirationTime, tracing.__interactionsRef.current);\n}\n\nfunction startWorkOnPendingInteractions(root, expirationTime) {\n  // we can accurately attribute time spent working on it, And so that cascading\n  // work triggered during the render phase will be associated with it.\n\n\n  var interactions = new Set();\n  root.pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n    if (scheduledExpirationTime >= expirationTime) {\n      scheduledInteractions.forEach(function (interaction) {\n        return interactions.add(interaction);\n      });\n    }\n  }); // Store the current set of interactions on the FiberRoot for a few reasons:\n  // We can re-use it in hot functions like performConcurrentWorkOnRoot()\n  // without having to recalculate it. We will also use it in commitWork() to\n  // pass to any Profiler onRender() hooks. This also provides DevTools with a\n  // way to access it when the onCommitRoot() hook is called.\n\n  root.memoizedInteractions = interactions;\n\n  if (interactions.size > 0) {\n    var subscriber = tracing.__subscriberRef.current;\n\n    if (subscriber !== null) {\n      var threadID = computeThreadID(root, expirationTime);\n\n      try {\n        subscriber.onWorkStarted(interactions, threadID);\n      } catch (error) {\n        // If the subscriber throws, rethrow it in a separate task\n        scheduleCallback(ImmediatePriority, function () {\n          throw error;\n        });\n      }\n    }\n  }\n}\n\nfunction finishPendingInteractions(root, committedExpirationTime) {\n\n  var earliestRemainingTimeAfterCommit = root.firstPendingTime;\n  var subscriber;\n\n  try {\n    subscriber = tracing.__subscriberRef.current;\n\n    if (subscriber !== null && root.memoizedInteractions.size > 0) {\n      var threadID = computeThreadID(root, committedExpirationTime);\n      subscriber.onWorkStopped(root.memoizedInteractions, threadID);\n    }\n  } catch (error) {\n    // If the subscriber throws, rethrow it in a separate task\n    scheduleCallback(ImmediatePriority, function () {\n      throw error;\n    });\n  } finally {\n    // Clear completed interactions from the pending Map.\n    // Unless the render was suspended or cascading work was scheduled,\n    // In which case– leave pending interactions until the subsequent render.\n    var pendingInteractionMap = root.pendingInteractionMap;\n    pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n      // Only decrement the pending interaction count if we're done.\n      // If there's still work at the current priority,\n      // That indicates that we are waiting for suspense data.\n      if (scheduledExpirationTime > earliestRemainingTimeAfterCommit) {\n        pendingInteractionMap.delete(scheduledExpirationTime);\n        scheduledInteractions.forEach(function (interaction) {\n          interaction.__count--;\n\n          if (subscriber !== null && interaction.__count === 0) {\n            try {\n              subscriber.onInteractionScheduledWorkCompleted(interaction);\n            } catch (error) {\n              // If the subscriber throws, rethrow it in a separate task\n              scheduleCallback(ImmediatePriority, function () {\n                throw error;\n              });\n            }\n          }\n        });\n      }\n    });\n  }\n}\n\nvar onScheduleFiberRoot = null;\nvar onCommitFiberRoot = null;\nvar onCommitFiberUnmount = null;\nvar hasLoggedError = false;\nvar isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';\nfunction injectInternals(internals) {\n  if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n    // No DevTools\n    return false;\n  }\n\n  var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n  if (hook.isDisabled) {\n    // This isn't a real property on the hook, but it can be set to opt out\n    // of DevTools integration and associated warnings and logs.\n    // https://github.com/facebook/react/issues/3877\n    return true;\n  }\n\n  if (!hook.supportsFiber) {\n    {\n      error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://fb.me/react-devtools');\n    } // DevTools exists, even though it doesn't support Fiber.\n\n\n    return true;\n  }\n\n  try {\n    var rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.\n\n    if (true) {\n      // Only used by Fast Refresh\n      if (typeof hook.onScheduleFiberRoot === 'function') {\n        onScheduleFiberRoot = function (root, children) {\n          try {\n            hook.onScheduleFiberRoot(rendererID, root, children);\n          } catch (err) {\n            if ( true && !hasLoggedError) {\n              hasLoggedError = true;\n\n              error('React instrumentation encountered an error: %s', err);\n            }\n          }\n        };\n      }\n    }\n\n    onCommitFiberRoot = function (root, expirationTime) {\n      try {\n        var didError = (root.current.effectTag & DidCapture) === DidCapture;\n\n        if (enableProfilerTimer) {\n          var currentTime = getCurrentTime();\n          var priorityLevel = inferPriorityFromExpirationTime(currentTime, expirationTime);\n          hook.onCommitFiberRoot(rendererID, root, priorityLevel, didError);\n        } else {\n          hook.onCommitFiberRoot(rendererID, root, undefined, didError);\n        }\n      } catch (err) {\n        if (true) {\n          if (!hasLoggedError) {\n            hasLoggedError = true;\n\n            error('React instrumentation encountered an error: %s', err);\n          }\n        }\n      }\n    };\n\n    onCommitFiberUnmount = function (fiber) {\n      try {\n        hook.onCommitFiberUnmount(rendererID, fiber);\n      } catch (err) {\n        if (true) {\n          if (!hasLoggedError) {\n            hasLoggedError = true;\n\n            error('React instrumentation encountered an error: %s', err);\n          }\n        }\n      }\n    };\n  } catch (err) {\n    // Catch all errors because it is unsafe to throw during initialization.\n    {\n      error('React instrumentation encountered an error: %s.', err);\n    }\n  } // DevTools exists\n\n\n  return true;\n}\nfunction onScheduleRoot(root, children) {\n  if (typeof onScheduleFiberRoot === 'function') {\n    onScheduleFiberRoot(root, children);\n  }\n}\nfunction onCommitRoot(root, expirationTime) {\n  if (typeof onCommitFiberRoot === 'function') {\n    onCommitFiberRoot(root, expirationTime);\n  }\n}\nfunction onCommitUnmount(fiber) {\n  if (typeof onCommitFiberUnmount === 'function') {\n    onCommitFiberUnmount(fiber);\n  }\n}\n\nvar hasBadMapPolyfill;\n\n{\n  hasBadMapPolyfill = false;\n\n  try {\n    var nonExtensibleObject = Object.preventExtensions({});\n    var testMap = new Map([[nonExtensibleObject, null]]);\n    var testSet = new Set([nonExtensibleObject]); // This is necessary for Rollup to not consider these unused.\n    // https://github.com/rollup/rollup/issues/1771\n    // TODO: we can remove these if Rollup fixes the bug.\n\n    testMap.set(0, 0);\n    testSet.add(0);\n  } catch (e) {\n    // TODO: Consider warning about bad polyfills\n    hasBadMapPolyfill = true;\n  }\n}\n\nvar debugCounter = 1;\n\nfunction FiberNode(tag, pendingProps, key, mode) {\n  // Instance\n  this.tag = tag;\n  this.key = key;\n  this.elementType = null;\n  this.type = null;\n  this.stateNode = null; // Fiber\n\n  this.return = null;\n  this.child = null;\n  this.sibling = null;\n  this.index = 0;\n  this.ref = null;\n  this.pendingProps = pendingProps;\n  this.memoizedProps = null;\n  this.updateQueue = null;\n  this.memoizedState = null;\n  this.dependencies = null;\n  this.mode = mode; // Effects\n\n  this.effectTag = NoEffect;\n  this.nextEffect = null;\n  this.firstEffect = null;\n  this.lastEffect = null;\n  this.expirationTime = NoWork;\n  this.childExpirationTime = NoWork;\n  this.alternate = null;\n\n  {\n    // Note: The following is done to avoid a v8 performance cliff.\n    //\n    // Initializing the fields below to smis and later updating them with\n    // double values will cause Fibers to end up having separate shapes.\n    // This behavior/bug has something to do with Object.preventExtension().\n    // Fortunately this only impacts DEV builds.\n    // Unfortunately it makes React unusably slow for some applications.\n    // To work around this, initialize the fields below with doubles.\n    //\n    // Learn more about this here:\n    // https://github.com/facebook/react/issues/14365\n    // https://bugs.chromium.org/p/v8/issues/detail?id=8538\n    this.actualDuration = Number.NaN;\n    this.actualStartTime = Number.NaN;\n    this.selfBaseDuration = Number.NaN;\n    this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.\n    // This won't trigger the performance cliff mentioned above,\n    // and it simplifies other profiler code (including DevTools).\n\n    this.actualDuration = 0;\n    this.actualStartTime = -1;\n    this.selfBaseDuration = 0;\n    this.treeBaseDuration = 0;\n  } // This is normally DEV-only except www when it adds listeners.\n  // TODO: remove the User Timing integration in favor of Root Events.\n\n\n  {\n    this._debugID = debugCounter++;\n    this._debugIsCurrentlyTiming = false;\n  }\n\n  {\n    this._debugSource = null;\n    this._debugOwner = null;\n    this._debugNeedsRemount = false;\n    this._debugHookTypes = null;\n\n    if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {\n      Object.preventExtensions(this);\n    }\n  }\n} // This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n//    more difficult to predict when they get optimized and they are almost\n//    never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n//    always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n//    to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n//    is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n//    compatible.\n\n\nvar createFiber = function (tag, pendingProps, key, mode) {\n  // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors\n  return new FiberNode(tag, pendingProps, key, mode);\n};\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction isSimpleFunctionComponent(type) {\n  return typeof type === 'function' && !shouldConstruct(type) && type.defaultProps === undefined;\n}\nfunction resolveLazyComponentTag(Component) {\n  if (typeof Component === 'function') {\n    return shouldConstruct(Component) ? ClassComponent : FunctionComponent;\n  } else if (Component !== undefined && Component !== null) {\n    var $$typeof = Component.$$typeof;\n\n    if ($$typeof === REACT_FORWARD_REF_TYPE) {\n      return ForwardRef;\n    }\n\n    if ($$typeof === REACT_MEMO_TYPE) {\n      return MemoComponent;\n    }\n  }\n\n  return IndeterminateComponent;\n} // This is used to create an alternate fiber to do work on.\n\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n\n  if (workInProgress === null) {\n    // We use a double buffering pooling technique because we know that we'll\n    // only ever need at most two versions of a tree. We pool the \"other\" unused\n    // node that we're free to reuse. This is lazily created to avoid allocating\n    // extra objects for things that are never updated. It also allow us to\n    // reclaim the extra memory if needed.\n    workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);\n    workInProgress.elementType = current.elementType;\n    workInProgress.type = current.type;\n    workInProgress.stateNode = current.stateNode;\n\n    {\n      // DEV-only fields\n      {\n        workInProgress._debugID = current._debugID;\n      }\n\n      workInProgress._debugSource = current._debugSource;\n      workInProgress._debugOwner = current._debugOwner;\n      workInProgress._debugHookTypes = current._debugHookTypes;\n    }\n\n    workInProgress.alternate = current;\n    current.alternate = workInProgress;\n  } else {\n    workInProgress.pendingProps = pendingProps; // We already have an alternate.\n    // Reset the effect tag.\n\n    workInProgress.effectTag = NoEffect; // The effect list is no longer valid.\n\n    workInProgress.nextEffect = null;\n    workInProgress.firstEffect = null;\n    workInProgress.lastEffect = null;\n\n    {\n      // We intentionally reset, rather than copy, actualDuration & actualStartTime.\n      // This prevents time from endlessly accumulating in new commits.\n      // This has the downside of resetting values for different priority renders,\n      // But works for yielding (the common case) and should support resuming.\n      workInProgress.actualDuration = 0;\n      workInProgress.actualStartTime = -1;\n    }\n  }\n\n  workInProgress.childExpirationTime = current.childExpirationTime;\n  workInProgress.expirationTime = current.expirationTime;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n  // it cannot be shared with the current fiber.\n\n  var currentDependencies = current.dependencies;\n  workInProgress.dependencies = currentDependencies === null ? null : {\n    expirationTime: currentDependencies.expirationTime,\n    firstContext: currentDependencies.firstContext,\n    responders: currentDependencies.responders\n  }; // These will be overridden during the parent's reconciliation\n\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n\n  {\n    workInProgress.selfBaseDuration = current.selfBaseDuration;\n    workInProgress.treeBaseDuration = current.treeBaseDuration;\n  }\n\n  {\n    workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n\n    switch (workInProgress.tag) {\n      case IndeterminateComponent:\n      case FunctionComponent:\n      case SimpleMemoComponent:\n        workInProgress.type = resolveFunctionForHotReloading(current.type);\n        break;\n\n      case ClassComponent:\n        workInProgress.type = resolveClassForHotReloading(current.type);\n        break;\n\n      case ForwardRef:\n        workInProgress.type = resolveForwardRefForHotReloading(current.type);\n        break;\n    }\n  }\n\n  return workInProgress;\n} // Used to reuse a Fiber for a second pass.\n\nfunction resetWorkInProgress(workInProgress, renderExpirationTime) {\n  // This resets the Fiber to what createFiber or createWorkInProgress would\n  // have set the values to before during the first pass. Ideally this wouldn't\n  // be necessary but unfortunately many code paths reads from the workInProgress\n  // when they should be reading from current and writing to workInProgress.\n  // We assume pendingProps, index, key, ref, return are still untouched to\n  // avoid doing another reconciliation.\n  // Reset the effect tag but keep any Placement tags, since that's something\n  // that child fiber is setting, not the reconciliation.\n  workInProgress.effectTag &= Placement; // The effect list is no longer valid.\n\n  workInProgress.nextEffect = null;\n  workInProgress.firstEffect = null;\n  workInProgress.lastEffect = null;\n  var current = workInProgress.alternate;\n\n  if (current === null) {\n    // Reset to createFiber's initial values.\n    workInProgress.childExpirationTime = NoWork;\n    workInProgress.expirationTime = renderExpirationTime;\n    workInProgress.child = null;\n    workInProgress.memoizedProps = null;\n    workInProgress.memoizedState = null;\n    workInProgress.updateQueue = null;\n    workInProgress.dependencies = null;\n\n    {\n      // Note: We don't reset the actualTime counts. It's useful to accumulate\n      // actual time across multiple render passes.\n      workInProgress.selfBaseDuration = 0;\n      workInProgress.treeBaseDuration = 0;\n    }\n  } else {\n    // Reset to the cloned values that createWorkInProgress would've.\n    workInProgress.childExpirationTime = current.childExpirationTime;\n    workInProgress.expirationTime = current.expirationTime;\n    workInProgress.child = current.child;\n    workInProgress.memoizedProps = current.memoizedProps;\n    workInProgress.memoizedState = current.memoizedState;\n    workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n    // it cannot be shared with the current fiber.\n\n    var currentDependencies = current.dependencies;\n    workInProgress.dependencies = currentDependencies === null ? null : {\n      expirationTime: currentDependencies.expirationTime,\n      firstContext: currentDependencies.firstContext,\n      responders: currentDependencies.responders\n    };\n\n    {\n      // Note: We don't reset the actualTime counts. It's useful to accumulate\n      // actual time across multiple render passes.\n      workInProgress.selfBaseDuration = current.selfBaseDuration;\n      workInProgress.treeBaseDuration = current.treeBaseDuration;\n    }\n  }\n\n  return workInProgress;\n}\nfunction createHostRootFiber(tag) {\n  var mode;\n\n  if (tag === ConcurrentRoot) {\n    mode = ConcurrentMode | BlockingMode | StrictMode;\n  } else if (tag === BlockingRoot) {\n    mode = BlockingMode | StrictMode;\n  } else {\n    mode = NoMode;\n  }\n\n  if ( isDevToolsPresent) {\n    // Always collect profile timings when DevTools are present.\n    // This enables DevTools to start capturing timing at any point–\n    // Without some nodes in the tree having empty base times.\n    mode |= ProfileMode;\n  }\n\n  return createFiber(HostRoot, null, null, mode);\n}\nfunction createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {\n  var fiber;\n  var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.\n\n  var resolvedType = type;\n\n  if (typeof type === 'function') {\n    if (shouldConstruct(type)) {\n      fiberTag = ClassComponent;\n\n      {\n        resolvedType = resolveClassForHotReloading(resolvedType);\n      }\n    } else {\n      {\n        resolvedType = resolveFunctionForHotReloading(resolvedType);\n      }\n    }\n  } else if (typeof type === 'string') {\n    fiberTag = HostComponent;\n  } else {\n    getTag: switch (type) {\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, expirationTime, key);\n\n      case REACT_CONCURRENT_MODE_TYPE:\n        fiberTag = Mode;\n        mode |= ConcurrentMode | BlockingMode | StrictMode;\n        break;\n\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = Mode;\n        mode |= StrictMode;\n        break;\n\n      case REACT_PROFILER_TYPE:\n        return createFiberFromProfiler(pendingProps, mode, expirationTime, key);\n\n      case REACT_SUSPENSE_TYPE:\n        return createFiberFromSuspense(pendingProps, mode, expirationTime, key);\n\n      case REACT_SUSPENSE_LIST_TYPE:\n        return createFiberFromSuspenseList(pendingProps, mode, expirationTime, key);\n\n      default:\n        {\n          if (typeof type === 'object' && type !== null) {\n            switch (type.$$typeof) {\n              case REACT_PROVIDER_TYPE:\n                fiberTag = ContextProvider;\n                break getTag;\n\n              case REACT_CONTEXT_TYPE:\n                // This is a consumer\n                fiberTag = ContextConsumer;\n                break getTag;\n\n              case REACT_FORWARD_REF_TYPE:\n                fiberTag = ForwardRef;\n\n                {\n                  resolvedType = resolveForwardRefForHotReloading(resolvedType);\n                }\n\n                break getTag;\n\n              case REACT_MEMO_TYPE:\n                fiberTag = MemoComponent;\n                break getTag;\n\n              case REACT_LAZY_TYPE:\n                fiberTag = LazyComponent;\n                resolvedType = null;\n                break getTag;\n\n              case REACT_BLOCK_TYPE:\n                fiberTag = Block;\n                break getTag;\n\n            }\n          }\n\n          var info = '';\n\n          {\n            if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n              info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and \" + 'named imports.';\n            }\n\n            var ownerName = owner ? getComponentName(owner.type) : null;\n\n            if (ownerName) {\n              info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n            }\n          }\n\n          {\n            {\n              throw Error( \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" + (type == null ? type : typeof type) + \".\" + info );\n            }\n          }\n        }\n    }\n  }\n\n  fiber = createFiber(fiberTag, pendingProps, key, mode);\n  fiber.elementType = type;\n  fiber.type = resolvedType;\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\nfunction createFiberFromElement(element, mode, expirationTime) {\n  var owner = null;\n\n  {\n    owner = element._owner;\n  }\n\n  var type = element.type;\n  var key = element.key;\n  var pendingProps = element.props;\n  var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, expirationTime);\n\n  {\n    fiber._debugSource = element._source;\n    fiber._debugOwner = element._owner;\n  }\n\n  return fiber;\n}\nfunction createFiberFromFragment(elements, mode, expirationTime, key) {\n  var fiber = createFiber(Fragment, elements, key, mode);\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\n\nfunction createFiberFromProfiler(pendingProps, mode, expirationTime, key) {\n  {\n    if (typeof pendingProps.id !== 'string' || typeof pendingProps.onRender !== 'function') {\n      error('Profiler must specify an \"id\" string and \"onRender\" function as props');\n    }\n  }\n\n  var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode); // TODO: The Profiler fiber shouldn't have a type. It has a tag.\n\n  fiber.elementType = REACT_PROFILER_TYPE;\n  fiber.type = REACT_PROFILER_TYPE;\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\n\nfunction createFiberFromSuspense(pendingProps, mode, expirationTime, key) {\n  var fiber = createFiber(SuspenseComponent, pendingProps, key, mode); // TODO: The SuspenseComponent fiber shouldn't have a type. It has a tag.\n  // This needs to be fixed in getComponentName so that it relies on the tag\n  // instead.\n\n  fiber.type = REACT_SUSPENSE_TYPE;\n  fiber.elementType = REACT_SUSPENSE_TYPE;\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\nfunction createFiberFromSuspenseList(pendingProps, mode, expirationTime, key) {\n  var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);\n\n  {\n    // TODO: The SuspenseListComponent fiber shouldn't have a type. It has a tag.\n    // This needs to be fixed in getComponentName so that it relies on the tag\n    // instead.\n    fiber.type = REACT_SUSPENSE_LIST_TYPE;\n  }\n\n  fiber.elementType = REACT_SUSPENSE_LIST_TYPE;\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\nfunction createFiberFromText(content, mode, expirationTime) {\n  var fiber = createFiber(HostText, content, null, mode);\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\nfunction createFiberFromHostInstanceForDeletion() {\n  var fiber = createFiber(HostComponent, null, null, NoMode); // TODO: These should not need a type.\n\n  fiber.elementType = 'DELETED';\n  fiber.type = 'DELETED';\n  return fiber;\n}\nfunction createFiberFromPortal(portal, mode, expirationTime) {\n  var pendingProps = portal.children !== null ? portal.children : [];\n  var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);\n  fiber.expirationTime = expirationTime;\n  fiber.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    // Used by persistent updates\n    implementation: portal.implementation\n  };\n  return fiber;\n} // Used for stashing WIP properties to replay failed work in DEV.\n\nfunction assignFiberPropertiesInDEV(target, source) {\n  if (target === null) {\n    // This Fiber's initial properties will always be overwritten.\n    // We only use a Fiber to ensure the same hidden class so DEV isn't slow.\n    target = createFiber(IndeterminateComponent, null, null, NoMode);\n  } // This is intentionally written as a list of all properties.\n  // We tried to use Object.assign() instead but this is called in\n  // the hottest path, and Object.assign() was too slow:\n  // https://github.com/facebook/react/issues/12502\n  // This code is DEV-only so size is not a concern.\n\n\n  target.tag = source.tag;\n  target.key = source.key;\n  target.elementType = source.elementType;\n  target.type = source.type;\n  target.stateNode = source.stateNode;\n  target.return = source.return;\n  target.child = source.child;\n  target.sibling = source.sibling;\n  target.index = source.index;\n  target.ref = source.ref;\n  target.pendingProps = source.pendingProps;\n  target.memoizedProps = source.memoizedProps;\n  target.updateQueue = source.updateQueue;\n  target.memoizedState = source.memoizedState;\n  target.dependencies = source.dependencies;\n  target.mode = source.mode;\n  target.effectTag = source.effectTag;\n  target.nextEffect = source.nextEffect;\n  target.firstEffect = source.firstEffect;\n  target.lastEffect = source.lastEffect;\n  target.expirationTime = source.expirationTime;\n  target.childExpirationTime = source.childExpirationTime;\n  target.alternate = source.alternate;\n\n  {\n    target.actualDuration = source.actualDuration;\n    target.actualStartTime = source.actualStartTime;\n    target.selfBaseDuration = source.selfBaseDuration;\n    target.treeBaseDuration = source.treeBaseDuration;\n  }\n\n  {\n    target._debugID = source._debugID;\n  }\n\n  target._debugSource = source._debugSource;\n  target._debugOwner = source._debugOwner;\n  target._debugIsCurrentlyTiming = source._debugIsCurrentlyTiming;\n  target._debugNeedsRemount = source._debugNeedsRemount;\n  target._debugHookTypes = source._debugHookTypes;\n  return target;\n}\n\nfunction FiberRootNode(containerInfo, tag, hydrate) {\n  this.tag = tag;\n  this.current = null;\n  this.containerInfo = containerInfo;\n  this.pendingChildren = null;\n  this.pingCache = null;\n  this.finishedExpirationTime = NoWork;\n  this.finishedWork = null;\n  this.timeoutHandle = noTimeout;\n  this.context = null;\n  this.pendingContext = null;\n  this.hydrate = hydrate;\n  this.callbackNode = null;\n  this.callbackPriority = NoPriority;\n  this.firstPendingTime = NoWork;\n  this.firstSuspendedTime = NoWork;\n  this.lastSuspendedTime = NoWork;\n  this.nextKnownPendingLevel = NoWork;\n  this.lastPingedTime = NoWork;\n  this.lastExpiredTime = NoWork;\n\n  {\n    this.interactionThreadID = tracing.unstable_getThreadID();\n    this.memoizedInteractions = new Set();\n    this.pendingInteractionMap = new Map();\n  }\n}\n\nfunction createFiberRoot(containerInfo, tag, hydrate, hydrationCallbacks) {\n  var root = new FiberRootNode(containerInfo, tag, hydrate);\n  // stateNode is any.\n\n\n  var uninitializedFiber = createHostRootFiber(tag);\n  root.current = uninitializedFiber;\n  uninitializedFiber.stateNode = root;\n  initializeUpdateQueue(uninitializedFiber);\n  return root;\n}\nfunction isRootSuspendedAtTime(root, expirationTime) {\n  var firstSuspendedTime = root.firstSuspendedTime;\n  var lastSuspendedTime = root.lastSuspendedTime;\n  return firstSuspendedTime !== NoWork && firstSuspendedTime >= expirationTime && lastSuspendedTime <= expirationTime;\n}\nfunction markRootSuspendedAtTime(root, expirationTime) {\n  var firstSuspendedTime = root.firstSuspendedTime;\n  var lastSuspendedTime = root.lastSuspendedTime;\n\n  if (firstSuspendedTime < expirationTime) {\n    root.firstSuspendedTime = expirationTime;\n  }\n\n  if (lastSuspendedTime > expirationTime || firstSuspendedTime === NoWork) {\n    root.lastSuspendedTime = expirationTime;\n  }\n\n  if (expirationTime <= root.lastPingedTime) {\n    root.lastPingedTime = NoWork;\n  }\n\n  if (expirationTime <= root.lastExpiredTime) {\n    root.lastExpiredTime = NoWork;\n  }\n}\nfunction markRootUpdatedAtTime(root, expirationTime) {\n  // Update the range of pending times\n  var firstPendingTime = root.firstPendingTime;\n\n  if (expirationTime > firstPendingTime) {\n    root.firstPendingTime = expirationTime;\n  } // Update the range of suspended times. Treat everything lower priority or\n  // equal to this update as unsuspended.\n\n\n  var firstSuspendedTime = root.firstSuspendedTime;\n\n  if (firstSuspendedTime !== NoWork) {\n    if (expirationTime >= firstSuspendedTime) {\n      // The entire suspended range is now unsuspended.\n      root.firstSuspendedTime = root.lastSuspendedTime = root.nextKnownPendingLevel = NoWork;\n    } else if (expirationTime >= root.lastSuspendedTime) {\n      root.lastSuspendedTime = expirationTime + 1;\n    } // This is a pending level. Check if it's higher priority than the next\n    // known pending level.\n\n\n    if (expirationTime > root.nextKnownPendingLevel) {\n      root.nextKnownPendingLevel = expirationTime;\n    }\n  }\n}\nfunction markRootFinishedAtTime(root, finishedExpirationTime, remainingExpirationTime) {\n  // Update the range of pending times\n  root.firstPendingTime = remainingExpirationTime; // Update the range of suspended times. Treat everything higher priority or\n  // equal to this update as unsuspended.\n\n  if (finishedExpirationTime <= root.lastSuspendedTime) {\n    // The entire suspended range is now unsuspended.\n    root.firstSuspendedTime = root.lastSuspendedTime = root.nextKnownPendingLevel = NoWork;\n  } else if (finishedExpirationTime <= root.firstSuspendedTime) {\n    // Part of the suspended range is now unsuspended. Narrow the range to\n    // include everything between the unsuspended time (non-inclusive) and the\n    // last suspended time.\n    root.firstSuspendedTime = finishedExpirationTime - 1;\n  }\n\n  if (finishedExpirationTime <= root.lastPingedTime) {\n    // Clear the pinged time\n    root.lastPingedTime = NoWork;\n  }\n\n  if (finishedExpirationTime <= root.lastExpiredTime) {\n    // Clear the expired time\n    root.lastExpiredTime = NoWork;\n  }\n}\nfunction markRootExpiredAtTime(root, expirationTime) {\n  var lastExpiredTime = root.lastExpiredTime;\n\n  if (lastExpiredTime === NoWork || lastExpiredTime > expirationTime) {\n    root.lastExpiredTime = expirationTime;\n  }\n}\n\nvar didWarnAboutNestedUpdates;\nvar didWarnAboutFindNodeInStrictMode;\n\n{\n  didWarnAboutNestedUpdates = false;\n  didWarnAboutFindNodeInStrictMode = {};\n}\n\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) {\n    return emptyContextObject;\n  }\n\n  var fiber = get(parentComponent);\n  var parentContext = findCurrentUnmaskedContext(fiber);\n\n  if (fiber.tag === ClassComponent) {\n    var Component = fiber.type;\n\n    if (isContextProvider(Component)) {\n      return processChildContext(fiber, Component, parentContext);\n    }\n  }\n\n  return parentContext;\n}\n\nfunction findHostInstanceWithWarning(component, methodName) {\n  {\n    var fiber = get(component);\n\n    if (fiber === undefined) {\n      if (typeof component.render === 'function') {\n        {\n          {\n            throw Error( \"Unable to find node on an unmounted component.\" );\n          }\n        }\n      } else {\n        {\n          {\n            throw Error( \"Argument appears to not be a ReactComponent. Keys: \" + Object.keys(component) );\n          }\n        }\n      }\n    }\n\n    var hostFiber = findCurrentHostFiber(fiber);\n\n    if (hostFiber === null) {\n      return null;\n    }\n\n    if (hostFiber.mode & StrictMode) {\n      var componentName = getComponentName(fiber.type) || 'Component';\n\n      if (!didWarnAboutFindNodeInStrictMode[componentName]) {\n        didWarnAboutFindNodeInStrictMode[componentName] = true;\n\n        if (fiber.mode & StrictMode) {\n          error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-find-node%s', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n        } else {\n          error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-find-node%s', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n        }\n      }\n    }\n\n    return hostFiber.stateNode;\n  }\n}\n\nfunction createContainer(containerInfo, tag, hydrate, hydrationCallbacks) {\n  return createFiberRoot(containerInfo, tag, hydrate);\n}\nfunction updateContainer(element, container, parentComponent, callback) {\n  {\n    onScheduleRoot(container, element);\n  }\n\n  var current$1 = container.current;\n  var currentTime = requestCurrentTimeForUpdate();\n\n  {\n    // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n    if ('undefined' !== typeof jest) {\n      warnIfUnmockedScheduler(current$1);\n      warnIfNotScopedWithMatchingAct(current$1);\n    }\n  }\n\n  var suspenseConfig = requestCurrentSuspenseConfig();\n  var expirationTime = computeExpirationForFiber(currentTime, current$1, suspenseConfig);\n  var context = getContextForSubtree(parentComponent);\n\n  if (container.context === null) {\n    container.context = context;\n  } else {\n    container.pendingContext = context;\n  }\n\n  {\n    if (isRendering && current !== null && !didWarnAboutNestedUpdates) {\n      didWarnAboutNestedUpdates = true;\n\n      error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\\n\\n' + 'Check the render method of %s.', getComponentName(current.type) || 'Unknown');\n    }\n  }\n\n  var update = createUpdate(expirationTime, suspenseConfig); // Caution: React DevTools currently depends on this property\n  // being called \"element\".\n\n  update.payload = {\n    element: element\n  };\n  callback = callback === undefined ? null : callback;\n\n  if (callback !== null) {\n    {\n      if (typeof callback !== 'function') {\n        error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);\n      }\n    }\n\n    update.callback = callback;\n  }\n\n  enqueueUpdate(current$1, update);\n  scheduleWork(current$1, expirationTime);\n  return expirationTime;\n}\nfunction getPublicRootInstance(container) {\n  var containerFiber = container.current;\n\n  if (!containerFiber.child) {\n    return null;\n  }\n\n  switch (containerFiber.child.tag) {\n    case HostComponent:\n      return getPublicInstance(containerFiber.child.stateNode);\n\n    default:\n      return containerFiber.child.stateNode;\n  }\n}\n\nfunction markRetryTimeImpl(fiber, retryTime) {\n  var suspenseState = fiber.memoizedState;\n\n  if (suspenseState !== null && suspenseState.dehydrated !== null) {\n    if (suspenseState.retryTime < retryTime) {\n      suspenseState.retryTime = retryTime;\n    }\n  }\n} // Increases the priority of thennables when they resolve within this boundary.\n\n\nfunction markRetryTimeIfNotHydrated(fiber, retryTime) {\n  markRetryTimeImpl(fiber, retryTime);\n  var alternate = fiber.alternate;\n\n  if (alternate) {\n    markRetryTimeImpl(alternate, retryTime);\n  }\n}\n\nfunction attemptUserBlockingHydration$1(fiber) {\n  if (fiber.tag !== SuspenseComponent) {\n    // We ignore HostRoots here because we can't increase\n    // their priority and they should not suspend on I/O,\n    // since you have to wrap anything that might suspend in\n    // Suspense.\n    return;\n  }\n\n  var expTime = computeInteractiveExpiration(requestCurrentTimeForUpdate());\n  scheduleWork(fiber, expTime);\n  markRetryTimeIfNotHydrated(fiber, expTime);\n}\nfunction attemptContinuousHydration$1(fiber) {\n  if (fiber.tag !== SuspenseComponent) {\n    // We ignore HostRoots here because we can't increase\n    // their priority and they should not suspend on I/O,\n    // since you have to wrap anything that might suspend in\n    // Suspense.\n    return;\n  }\n\n  scheduleWork(fiber, ContinuousHydration);\n  markRetryTimeIfNotHydrated(fiber, ContinuousHydration);\n}\nfunction attemptHydrationAtCurrentPriority$1(fiber) {\n  if (fiber.tag !== SuspenseComponent) {\n    // We ignore HostRoots here because we can't increase\n    // their priority other than synchronously flush it.\n    return;\n  }\n\n  var currentTime = requestCurrentTimeForUpdate();\n  var expTime = computeExpirationForFiber(currentTime, fiber, null);\n  scheduleWork(fiber, expTime);\n  markRetryTimeIfNotHydrated(fiber, expTime);\n}\nfunction findHostInstanceWithNoPortals(fiber) {\n  var hostFiber = findCurrentHostFiberWithNoPortals(fiber);\n\n  if (hostFiber === null) {\n    return null;\n  }\n\n  if (hostFiber.tag === FundamentalComponent) {\n    return hostFiber.stateNode.instance;\n  }\n\n  return hostFiber.stateNode;\n}\n\nvar shouldSuspendImpl = function (fiber) {\n  return false;\n};\n\nfunction shouldSuspend(fiber) {\n  return shouldSuspendImpl(fiber);\n}\nvar overrideHookState = null;\nvar overrideProps = null;\nvar scheduleUpdate = null;\nvar setSuspenseHandler = null;\n\n{\n  var copyWithSetImpl = function (obj, path, idx, value) {\n    if (idx >= path.length) {\n      return value;\n    }\n\n    var key = path[idx];\n    var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj); // $FlowFixMe number or string is fine here\n\n    updated[key] = copyWithSetImpl(obj[key], path, idx + 1, value);\n    return updated;\n  };\n\n  var copyWithSet = function (obj, path, value) {\n    return copyWithSetImpl(obj, path, 0, value);\n  }; // Support DevTools editable values for useState and useReducer.\n\n\n  overrideHookState = function (fiber, id, path, value) {\n    // For now, the \"id\" of stateful hooks is just the stateful hook index.\n    // This may change in the future with e.g. nested hooks.\n    var currentHook = fiber.memoizedState;\n\n    while (currentHook !== null && id > 0) {\n      currentHook = currentHook.next;\n      id--;\n    }\n\n    if (currentHook !== null) {\n      var newState = copyWithSet(currentHook.memoizedState, path, value);\n      currentHook.memoizedState = newState;\n      currentHook.baseState = newState; // We aren't actually adding an update to the queue,\n      // because there is no update we can add for useReducer hooks that won't trigger an error.\n      // (There's no appropriate action type for DevTools overrides.)\n      // As a result though, React will see the scheduled update as a noop and bailout.\n      // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n      fiber.memoizedProps = _assign({}, fiber.memoizedProps);\n      scheduleWork(fiber, Sync);\n    }\n  }; // Support DevTools props for function components, forwardRef, memo, host components, etc.\n\n\n  overrideProps = function (fiber, path, value) {\n    fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);\n\n    if (fiber.alternate) {\n      fiber.alternate.pendingProps = fiber.pendingProps;\n    }\n\n    scheduleWork(fiber, Sync);\n  };\n\n  scheduleUpdate = function (fiber) {\n    scheduleWork(fiber, Sync);\n  };\n\n  setSuspenseHandler = function (newShouldSuspendImpl) {\n    shouldSuspendImpl = newShouldSuspendImpl;\n  };\n}\n\nfunction injectIntoDevTools(devToolsConfig) {\n  var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;\n  var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\n  return injectInternals(_assign({}, devToolsConfig, {\n    overrideHookState: overrideHookState,\n    overrideProps: overrideProps,\n    setSuspenseHandler: setSuspenseHandler,\n    scheduleUpdate: scheduleUpdate,\n    currentDispatcherRef: ReactCurrentDispatcher,\n    findHostInstanceByFiber: function (fiber) {\n      var hostFiber = findCurrentHostFiber(fiber);\n\n      if (hostFiber === null) {\n        return null;\n      }\n\n      return hostFiber.stateNode;\n    },\n    findFiberByHostInstance: function (instance) {\n      if (!findFiberByHostInstance) {\n        // Might not be implemented by the renderer.\n        return null;\n      }\n\n      return findFiberByHostInstance(instance);\n    },\n    // React Refresh\n    findHostInstancesForRefresh:  findHostInstancesForRefresh ,\n    scheduleRefresh:  scheduleRefresh ,\n    scheduleRoot:  scheduleRoot ,\n    setRefreshHandler:  setRefreshHandler ,\n    // Enables DevTools to append owner stacks to error messages in DEV mode.\n    getCurrentFiber:  function () {\n      return current;\n    } \n  }));\n}\nvar IsSomeRendererActing$1 = ReactSharedInternals.IsSomeRendererActing;\n\nfunction ReactDOMRoot(container, options) {\n  this._internalRoot = createRootImpl(container, ConcurrentRoot, options);\n}\n\nfunction ReactDOMBlockingRoot(container, tag, options) {\n  this._internalRoot = createRootImpl(container, tag, options);\n}\n\nReactDOMRoot.prototype.render = ReactDOMBlockingRoot.prototype.render = function (children) {\n  var root = this._internalRoot;\n\n  {\n    if (typeof arguments[1] === 'function') {\n      error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n    }\n\n    var container = root.containerInfo;\n\n    if (container.nodeType !== COMMENT_NODE) {\n      var hostInstance = findHostInstanceWithNoPortals(root.current);\n\n      if (hostInstance) {\n        if (hostInstance.parentNode !== container) {\n          error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + \"root.unmount() to empty a root's container.\");\n        }\n      }\n    }\n  }\n\n  updateContainer(children, root, null, null);\n};\n\nReactDOMRoot.prototype.unmount = ReactDOMBlockingRoot.prototype.unmount = function () {\n  {\n    if (typeof arguments[0] === 'function') {\n      error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n    }\n  }\n\n  var root = this._internalRoot;\n  var container = root.containerInfo;\n  updateContainer(null, root, null, function () {\n    unmarkContainerAsRoot(container);\n  });\n};\n\nfunction createRootImpl(container, tag, options) {\n  // Tag is either LegacyRoot or Concurrent Root\n  var hydrate = options != null && options.hydrate === true;\n  var hydrationCallbacks = options != null && options.hydrationOptions || null;\n  var root = createContainer(container, tag, hydrate);\n  markContainerAsRoot(root.current, container);\n\n  if (hydrate && tag !== LegacyRoot) {\n    var doc = container.nodeType === DOCUMENT_NODE ? container : container.ownerDocument;\n    eagerlyTrapReplayableEvents(container, doc);\n  }\n\n  return root;\n}\nfunction createLegacyRoot(container, options) {\n  return new ReactDOMBlockingRoot(container, LegacyRoot, options);\n}\nfunction isValidContainer(node) {\n  return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));\n}\n\nvar ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;\nvar topLevelUpdateWarnings;\nvar warnedAboutHydrateAPI = false;\n\n{\n  topLevelUpdateWarnings = function (container) {\n    if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {\n      var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer._internalRoot.current);\n\n      if (hostInstance) {\n        if (hostInstance.parentNode !== container) {\n          error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');\n        }\n      }\n    }\n\n    var isRootRenderedBySomeReact = !!container._reactRootContainer;\n    var rootEl = getReactRootElementInContainer(container);\n    var hasNonRootReactChild = !!(rootEl && getInstanceFromNode$1(rootEl));\n\n    if (hasNonRootReactChild && !isRootRenderedBySomeReact) {\n      error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');\n    }\n\n    if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {\n      error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.');\n    }\n  };\n}\n\nfunction getReactRootElementInContainer(container) {\n  if (!container) {\n    return null;\n  }\n\n  if (container.nodeType === DOCUMENT_NODE) {\n    return container.documentElement;\n  } else {\n    return container.firstChild;\n  }\n}\n\nfunction shouldHydrateDueToLegacyHeuristic(container) {\n  var rootElement = getReactRootElementInContainer(container);\n  return !!(rootElement && rootElement.nodeType === ELEMENT_NODE && rootElement.hasAttribute(ROOT_ATTRIBUTE_NAME));\n}\n\nfunction legacyCreateRootFromDOMContainer(container, forceHydrate) {\n  var shouldHydrate = forceHydrate || shouldHydrateDueToLegacyHeuristic(container); // First clear any existing content.\n\n  if (!shouldHydrate) {\n    var warned = false;\n    var rootSibling;\n\n    while (rootSibling = container.lastChild) {\n      {\n        if (!warned && rootSibling.nodeType === ELEMENT_NODE && rootSibling.hasAttribute(ROOT_ATTRIBUTE_NAME)) {\n          warned = true;\n\n          error('render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.');\n        }\n      }\n\n      container.removeChild(rootSibling);\n    }\n  }\n\n  {\n    if (shouldHydrate && !forceHydrate && !warnedAboutHydrateAPI) {\n      warnedAboutHydrateAPI = true;\n\n      warn('render(): Calling ReactDOM.render() to hydrate server-rendered markup ' + 'will stop working in React v17. Replace the ReactDOM.render() call ' + 'with ReactDOM.hydrate() if you want React to attach to the server HTML.');\n    }\n  }\n\n  return createLegacyRoot(container, shouldHydrate ? {\n    hydrate: true\n  } : undefined);\n}\n\nfunction warnOnInvalidCallback$1(callback, callerName) {\n  {\n    if (callback !== null && typeof callback !== 'function') {\n      error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n    }\n  }\n}\n\nfunction legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {\n  {\n    topLevelUpdateWarnings(container);\n    warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render');\n  } // TODO: Without `any` type, Flow says \"Property cannot be accessed on any\n  // member of intersection type.\" Whyyyyyy.\n\n\n  var root = container._reactRootContainer;\n  var fiberRoot;\n\n  if (!root) {\n    // Initial mount\n    root = container._reactRootContainer = legacyCreateRootFromDOMContainer(container, forceHydrate);\n    fiberRoot = root._internalRoot;\n\n    if (typeof callback === 'function') {\n      var originalCallback = callback;\n\n      callback = function () {\n        var instance = getPublicRootInstance(fiberRoot);\n        originalCallback.call(instance);\n      };\n    } // Initial mount should not be batched.\n\n\n    unbatchedUpdates(function () {\n      updateContainer(children, fiberRoot, parentComponent, callback);\n    });\n  } else {\n    fiberRoot = root._internalRoot;\n\n    if (typeof callback === 'function') {\n      var _originalCallback = callback;\n\n      callback = function () {\n        var instance = getPublicRootInstance(fiberRoot);\n\n        _originalCallback.call(instance);\n      };\n    } // Update\n\n\n    updateContainer(children, fiberRoot, parentComponent, callback);\n  }\n\n  return getPublicRootInstance(fiberRoot);\n}\n\nfunction findDOMNode(componentOrElement) {\n  {\n    var owner = ReactCurrentOwner$3.current;\n\n    if (owner !== null && owner.stateNode !== null) {\n      var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;\n\n      if (!warnedAboutRefsInRender) {\n        error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(owner.type) || 'A component');\n      }\n\n      owner.stateNode._warnedAboutRefsInRender = true;\n    }\n  }\n\n  if (componentOrElement == null) {\n    return null;\n  }\n\n  if (componentOrElement.nodeType === ELEMENT_NODE) {\n    return componentOrElement;\n  }\n\n  {\n    return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');\n  }\n}\nfunction hydrate(element, container, callback) {\n  if (!isValidContainer(container)) {\n    {\n      throw Error( \"Target container is not a DOM element.\" );\n    }\n  }\n\n  {\n    var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n    if (isModernRoot) {\n      error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call createRoot(container, {hydrate: true}).render(element)?');\n    }\n  } // TODO: throw or warn if we couldn't hydrate?\n\n\n  return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);\n}\nfunction render(element, container, callback) {\n  if (!isValidContainer(container)) {\n    {\n      throw Error( \"Target container is not a DOM element.\" );\n    }\n  }\n\n  {\n    var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n    if (isModernRoot) {\n      error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');\n    }\n  }\n\n  return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);\n}\nfunction unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n  if (!isValidContainer(containerNode)) {\n    {\n      throw Error( \"Target container is not a DOM element.\" );\n    }\n  }\n\n  if (!(parentComponent != null && has(parentComponent))) {\n    {\n      throw Error( \"parentComponent must be a valid React Component\" );\n    }\n  }\n\n  return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);\n}\nfunction unmountComponentAtNode(container) {\n  if (!isValidContainer(container)) {\n    {\n      throw Error( \"unmountComponentAtNode(...): Target container is not a DOM element.\" );\n    }\n  }\n\n  {\n    var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n    if (isModernRoot) {\n      error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. Did you mean to call root.unmount()?');\n    }\n  }\n\n  if (container._reactRootContainer) {\n    {\n      var rootEl = getReactRootElementInContainer(container);\n      var renderedByDifferentReact = rootEl && !getInstanceFromNode$1(rootEl);\n\n      if (renderedByDifferentReact) {\n        error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by another copy of React.');\n      }\n    } // Unmount should not be batched.\n\n\n    unbatchedUpdates(function () {\n      legacyRenderSubtreeIntoContainer(null, null, container, false, function () {\n        // $FlowFixMe This should probably use `delete container._reactRootContainer`\n        container._reactRootContainer = null;\n        unmarkContainerAsRoot(container);\n      });\n    }); // If you call unmountComponentAtNode twice in quick succession, you'll\n    // get `true` twice. That's probably fine?\n\n    return true;\n  } else {\n    {\n      var _rootEl = getReactRootElementInContainer(container);\n\n      var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode$1(_rootEl)); // Check if the container itself is a React root node.\n\n      var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainer(container.parentNode) && !!container.parentNode._reactRootContainer;\n\n      if (hasNonRootReactChild) {\n        error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');\n      }\n    }\n\n    return false;\n  }\n}\n\nfunction createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.\nimplementation) {\n  var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n  return {\n    // This tag allow us to uniquely identify this as a React Portal\n    $$typeof: REACT_PORTAL_TYPE,\n    key: key == null ? null : '' + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\n\nvar ReactVersion = '16.13.1';\n\nsetAttemptUserBlockingHydration(attemptUserBlockingHydration$1);\nsetAttemptContinuousHydration(attemptContinuousHydration$1);\nsetAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);\nvar didWarnAboutUnstableCreatePortal = false;\n\n{\n  if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype\n  Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype\n  Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {\n    error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n  }\n}\n\nsetRestoreImplementation(restoreControlledState$3);\nsetBatchingImplementation(batchedUpdates$1, discreteUpdates$1, flushDiscreteUpdates, batchedEventUpdates$1);\n\nfunction createPortal$1(children, container) {\n  var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n  if (!isValidContainer(container)) {\n    {\n      throw Error( \"Target container is not a DOM element.\" );\n    }\n  } // TODO: pass ReactDOM portal implementation as third argument\n  // $FlowFixMe The Flow type is opaque but there's no way to actually create it.\n\n\n  return createPortal(children, container, null, key);\n}\n\nfunction renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n\n  return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);\n}\n\nfunction unstable_createPortal(children, container) {\n  var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n  {\n    if (!didWarnAboutUnstableCreatePortal) {\n      didWarnAboutUnstableCreatePortal = true;\n\n      warn('The ReactDOM.unstable_createPortal() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactDOM.createPortal() instead. It has the exact same API, ' + 'but without the \"unstable_\" prefix.');\n    }\n  }\n\n  return createPortal$1(children, container, key);\n}\n\nvar Internals = {\n  // Keep in sync with ReactDOMUnstableNativeDependencies.js\n  // ReactTestUtils.js, and ReactTestUtilsAct.js. This is an array for better minification.\n  Events: [getInstanceFromNode$1, getNodeFromInstance$1, getFiberCurrentPropsFromNode$1, injectEventPluginsByName, eventNameDispatchConfigs, accumulateTwoPhaseDispatches, accumulateDirectDispatches, enqueueStateRestore, restoreStateIfNeeded, dispatchEvent, runEventsInBatch, flushPassiveEffects, IsThisRendererActing]\n};\nvar foundDevTools = injectIntoDevTools({\n  findFiberByHostInstance: getClosestInstanceFromNode,\n  bundleType:  1 ,\n  version: ReactVersion,\n  rendererPackageName: 'react-dom'\n});\n\n{\n  if (!foundDevTools && canUseDOM && window.top === window.self) {\n    // If we're in Chrome or Firefox, provide a download link if not installed.\n    if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n      var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.\n\n      if (/^(https?|file):$/.test(protocol)) {\n        // eslint-disable-next-line react-internal/no-production-logging\n        console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://fb.me/react-devtools' + (protocol === 'file:' ? '\\nYou might need to use a local HTTP server (instead of file://): ' + 'https://fb.me/react-devtools-faq' : ''), 'font-weight:bold');\n      }\n    }\n  }\n}\n\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;\nexports.createPortal = createPortal$1;\nexports.findDOMNode = findDOMNode;\nexports.flushSync = flushSync;\nexports.hydrate = hydrate;\nexports.render = render;\nexports.unmountComponentAtNode = unmountComponentAtNode;\nexports.unstable_batchedUpdates = batchedUpdates$1;\nexports.unstable_createPortal = unstable_createPortal;\nexports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;\nexports.version = ReactVersion;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-dom/cjs/react-dom.development.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-dom/index.js":
/*!*****************************************************!*\
  !*** ./jaas-client/node_modules/react-dom/index.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (true) {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"./jaas-client/node_modules/react-dom/cjs/react-dom.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-dom/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-input-emoji/dist/index.es.js":
/*!*********************************************************************!*\
  !*** ./jaas-client/node_modules/react-input-emoji/dist/index.es.js ***!
  \*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nfunction styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css = \".emoji-mart,\\n.emoji-mart * {\\n  box-sizing: border-box;\\n  line-height: 1.15;\\n}\\n\\n.emoji-mart {\\n  font-family: -apple-system, BlinkMacSystemFont, \\\"Helvetica Neue\\\", sans-serif;\\n  font-size: 16px;\\n  display: inline-block;\\n  color: #222427;\\n  border: 1px solid #d9d9d9;\\n  border-radius: 5px;\\n  background: #fff;\\n}\\n\\n.emoji-mart .emoji-mart-emoji {\\n  padding: 6px;\\n}\\n\\n.emoji-mart-bar {\\n  border: 0 solid #d9d9d9;\\n}\\n.emoji-mart-bar:first-child {\\n  border-bottom-width: 1px;\\n  border-top-left-radius: 5px;\\n  border-top-right-radius: 5px;\\n}\\n.emoji-mart-bar:last-child {\\n  border-top-width: 1px;\\n  border-bottom-left-radius: 5px;\\n  border-bottom-right-radius: 5px;\\n}\\n\\n.emoji-mart-anchors {\\n  display: flex;\\n  flex-direction: row;\\n  justify-content: space-between;\\n  padding: 0 6px;\\n  color: #858585;\\n  line-height: 0;\\n}\\n\\n.emoji-mart-anchor {\\n  position: relative;\\n  display: block;\\n  flex: 1 1 auto;\\n  text-align: center;\\n  padding: 12px 4px;\\n  overflow: hidden;\\n  transition: color .1s ease-out;\\n  margin: 0;\\n  box-shadow: none;\\n  background: none;\\n  border: none;\\n}\\n.emoji-mart-anchor:hover,\\n.emoji-mart-anchor-selected {\\n  color: #464646;\\n}\\n\\n.emoji-mart-anchor-selected .emoji-mart-anchor-bar {\\n  bottom: 0;\\n}\\n\\n.emoji-mart-anchor-bar {\\n  position: absolute;\\n  bottom: -3px; left: 0;\\n  width: 100%; height: 3px;\\n  background-color: #464646;\\n}\\n\\n.emoji-mart-anchors i {\\n  display: inline-block;\\n  width: 100%;\\n  max-width: 22px;\\n}\\n\\n.emoji-mart-anchors svg,\\n.emoji-mart-anchors img {\\n  fill: #858585;\\n  height: 18px;\\n  width: 18px;\\n}\\n\\n.emoji-mart-scroll {\\n  overflow-y: scroll;\\n  height: 270px;\\n  padding: 0 6px 6px 6px;\\n  will-change: transform; /* avoids \\\"repaints on scroll\\\" in mobile Chrome */\\n}\\n\\n.emoji-mart-search {\\n  margin-top: 6px;\\n  padding: 0 6px;\\n  position: relative;\\n}\\n\\n.emoji-mart-search input {\\n  font-size: 16px;\\n  display: block;\\n  width: 100%;\\n  padding: 5px 25px 6px 10px;\\n  border-radius: 5px;\\n  border: 1px solid #d9d9d9;\\n  outline: 0;\\n}\\n\\n.emoji-mart-search input,\\n.emoji-mart-search input::-webkit-search-decoration,\\n.emoji-mart-search input::-webkit-search-cancel-button,\\n.emoji-mart-search input::-webkit-search-results-button,\\n.emoji-mart-search input::-webkit-search-results-decoration {\\n  /* remove webkit/blink styles for <input type=\\\"search\\\">\\n   * via https://stackoverflow.com/a/9422689 */\\n  -webkit-appearance: none;\\n}\\n\\n.emoji-mart-search-icon {\\n  position: absolute;\\n  top: 7px;\\n  right: 11px;\\n  z-index: 2;\\n  padding: 2px 5px 1px;\\n  border: none;\\n  background: none;\\n}\\n\\n.emoji-mart-category .emoji-mart-emoji span {\\n  z-index: 1;\\n  position: relative;\\n  text-align: center;\\n  cursor: default;\\n}\\n\\n.emoji-mart-category .emoji-mart-emoji:hover:before {\\n  z-index: 0;\\n  content: \\\"\\\";\\n  position: absolute;\\n  top: 0; left: 0;\\n  width: 100%; height: 100%;\\n  background-color: #f4f4f4;\\n  border-radius: 100%;\\n}\\n\\n.emoji-mart-category-label {\\n  z-index: 2;\\n  position: relative;\\n  position: -webkit-sticky;\\n  position: sticky;\\n  top: 0;\\n}\\n\\n.emoji-mart-category-label span {\\n  display: block;\\n  width: 100%;\\n  font-weight: 500;\\n  padding: 5px 6px;\\n  background-color: #fff;\\n  background-color: rgba(255, 255, 255, .95);\\n}\\n\\n.emoji-mart-category-list {\\n  margin: 0;\\n  padding: 0;\\n}\\n\\n.emoji-mart-category-list li {\\n  list-style: none;\\n  margin: 0;\\n  padding: 0;\\n  display: inline-block;\\n}\\n\\n.emoji-mart-emoji {\\n  position: relative;\\n  display: inline-block;\\n  font-size: 0;\\n  margin: 0;\\n  padding: 0;\\n  border: none;\\n  background: none;\\n  box-shadow: none;\\n}\\n\\n.emoji-mart-emoji-native {\\n  font-family: \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Segoe UI\\\", \\\"Apple Color Emoji\\\", \\\"Twemoji Mozilla\\\", \\\"Noto Color Emoji\\\", \\\"EmojiOne Color\\\", \\\"Android Emoji\\\";\\n}\\n\\n.emoji-mart-no-results {\\n  font-size: 14px;\\n  text-align: center;\\n  padding-top: 70px;\\n  color: #858585;\\n}\\n.emoji-mart-no-results-img {\\n  display: block;\\n  margin-left: auto;\\n  margin-right: auto;\\n  width: 50%;\\n}\\n.emoji-mart-no-results .emoji-mart-category-label {\\n  display: none;\\n}\\n.emoji-mart-no-results .emoji-mart-no-results-label {\\n  margin-top: .2em;\\n}\\n.emoji-mart-no-results .emoji-mart-emoji:hover:before {\\n  content: none;\\n}\\n\\n.emoji-mart-preview {\\n  position: relative;\\n  height: 70px;\\n}\\n\\n.emoji-mart-preview-emoji,\\n.emoji-mart-preview-data,\\n.emoji-mart-preview-skins {\\n  position: absolute;\\n  top: 50%;\\n  transform: translateY(-50%);\\n}\\n\\n.emoji-mart-preview-emoji {\\n  left: 12px;\\n}\\n\\n.emoji-mart-preview-data {\\n  left: 68px; right: 12px;\\n  word-break: break-all;\\n}\\n\\n.emoji-mart-preview-skins {\\n  right: 30px;\\n  text-align: right;\\n}\\n\\n.emoji-mart-preview-skins.custom {\\n  right: 10px;\\n  text-align: right;\\n}\\n\\n.emoji-mart-preview-name {\\n  font-size: 14px;\\n}\\n\\n.emoji-mart-preview-shortname {\\n  font-size: 12px;\\n  color: #888;\\n}\\n.emoji-mart-preview-shortname + .emoji-mart-preview-shortname,\\n.emoji-mart-preview-shortname + .emoji-mart-preview-emoticon,\\n.emoji-mart-preview-emoticon + .emoji-mart-preview-emoticon {\\n  margin-left: .5em;\\n}\\n\\n.emoji-mart-preview-emoticon {\\n  font-size: 11px;\\n  color: #bbb;\\n}\\n\\n.emoji-mart-title span {\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n\\n.emoji-mart-title .emoji-mart-emoji {\\n  padding: 0;\\n}\\n\\n.emoji-mart-title-label {\\n  color: #999A9C;\\n  font-size: 26px;\\n  font-weight: 300;\\n}\\n\\n.emoji-mart-skin-swatches {\\n  font-size: 0;\\n  padding: 2px 0;\\n  border: 1px solid #d9d9d9;\\n  border-radius: 12px;\\n  background-color: #fff;\\n}\\n\\n.emoji-mart-skin-swatches.custom {\\n  font-size: 0;\\n  border: none;\\n  background-color: #fff;\\n}\\n\\n.emoji-mart-skin-swatches.opened .emoji-mart-skin-swatch {\\n  width: 16px;\\n  padding: 0 2px;\\n}\\n\\n.emoji-mart-skin-swatches.opened .emoji-mart-skin-swatch.selected:after {\\n  opacity: .75;\\n}\\n\\n.emoji-mart-skin-swatch {\\n  display: inline-block;\\n  width: 0;\\n  vertical-align: middle;\\n  transition-property: width, padding;\\n  transition-duration: .125s;\\n  transition-timing-function: ease-out;\\n}\\n\\n.emoji-mart-skin-swatch:nth-child(1) { transition-delay: 0s }\\n.emoji-mart-skin-swatch:nth-child(2) { transition-delay: .03s }\\n.emoji-mart-skin-swatch:nth-child(3) { transition-delay: .06s }\\n.emoji-mart-skin-swatch:nth-child(4) { transition-delay: .09s }\\n.emoji-mart-skin-swatch:nth-child(5) { transition-delay: .12s }\\n.emoji-mart-skin-swatch:nth-child(6) { transition-delay: .15s }\\n\\n.emoji-mart-skin-swatch.selected {\\n  position: relative;\\n  width: 16px;\\n  padding: 0 2px;\\n}\\n\\n.emoji-mart-skin-swatch.selected:after {\\n  content: \\\"\\\";\\n  position: absolute;\\n  top: 50%; left: 50%;\\n  width: 4px; height: 4px;\\n  margin: -2px 0 0 -2px;\\n  background-color: #fff;\\n  border-radius: 100%;\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: opacity .2s ease-out;\\n}\\n\\n.emoji-mart-skin-swatch.custom {\\n  display: inline-block;\\n  width: 0;\\n  height: 38px;\\n  overflow: hidden;\\n  vertical-align: middle;\\n  transition-property: width, height;\\n  transition-duration: .125s;\\n  transition-timing-function: ease-out;\\n  cursor: default;\\n}\\n\\n.emoji-mart-skin-swatch.custom.selected {\\n  position: relative;\\n  width: 36px;\\n  height: 38px;\\n  padding: 0 2px 0 0;\\n}\\n\\n.emoji-mart-skin-swatch.custom.selected:after {\\n  content: \\\"\\\";\\n  width: 0;\\n  height: 0;\\n}\\n\\n.emoji-mart-skin-swatches.custom .emoji-mart-skin-swatch.custom:hover {\\n  background-color: #f4f4f4;\\n  border-radius: 10%;\\n}\\n\\n.emoji-mart-skin-swatches.custom.opened .emoji-mart-skin-swatch.custom {\\n  width: 36px;\\n  height: 38px;\\n  padding: 0 2px 0 0;\\n}\\n\\n.emoji-mart-skin-swatches.custom.opened .emoji-mart-skin-swatch.custom.selected:after {\\n  opacity: .75;\\n}\\n\\n.emoji-mart-skin-text.opened {\\n  display: inline-block;\\n  vertical-align: middle;\\n  text-align: left;\\n  color: #888;\\n  font-size: 11px;\\n  padding: 5px 2px;\\n  width: 95px;\\n  height: 40px;\\n  border-radius: 10%;\\n  background-color: #fff;\\n}\\n\\n.emoji-mart-skin {\\n  display: inline-block;\\n  width: 100%;\\n  padding-top: 100%;\\n  max-width: 12px;\\n  border-radius: 100%;\\n}\\n\\n.emoji-mart-skin-tone-1 { background-color: #ffc93a }\\n.emoji-mart-skin-tone-2 { background-color: #fadcbc }\\n.emoji-mart-skin-tone-3 { background-color: #e0bb95 }\\n.emoji-mart-skin-tone-4 { background-color: #bf8f68 }\\n.emoji-mart-skin-tone-5 { background-color: #9b643d }\\n.emoji-mart-skin-tone-6 { background-color: #594539 }\\n\\n/* For screenreaders only, via https://stackoverflow.com/a/19758620 */\\n.emoji-mart-sr-only {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  border: 0;\\n}\\n\\n\\n\";\nstyleInject(css);\n\nvar compressed = true;\nvar categories = [\n\t{\n\t\tid: \"people\",\n\t\tname: \"Smileys & People\",\n\t\temojis: [\n\t\t\t\"grinning\",\n\t\t\t\"grin\",\n\t\t\t\"joy\",\n\t\t\t\"rolling_on_the_floor_laughing\",\n\t\t\t\"smiley\",\n\t\t\t\"smile\",\n\t\t\t\"sweat_smile\",\n\t\t\t\"laughing\",\n\t\t\t\"wink\",\n\t\t\t\"blush\",\n\t\t\t\"yum\",\n\t\t\t\"sunglasses\",\n\t\t\t\"heart_eyes\",\n\t\t\t\"kissing_heart\",\n\t\t\t\"kissing\",\n\t\t\t\"kissing_smiling_eyes\",\n\t\t\t\"kissing_closed_eyes\",\n\t\t\t\"relaxed\",\n\t\t\t\"slightly_smiling_face\",\n\t\t\t\"hugging_face\",\n\t\t\t\"star-struck\",\n\t\t\t\"thinking_face\",\n\t\t\t\"face_with_raised_eyebrow\",\n\t\t\t\"neutral_face\",\n\t\t\t\"expressionless\",\n\t\t\t\"no_mouth\",\n\t\t\t\"face_with_rolling_eyes\",\n\t\t\t\"smirk\",\n\t\t\t\"persevere\",\n\t\t\t\"disappointed_relieved\",\n\t\t\t\"open_mouth\",\n\t\t\t\"zipper_mouth_face\",\n\t\t\t\"hushed\",\n\t\t\t\"sleepy\",\n\t\t\t\"tired_face\",\n\t\t\t\"sleeping\",\n\t\t\t\"relieved\",\n\t\t\t\"stuck_out_tongue\",\n\t\t\t\"stuck_out_tongue_winking_eye\",\n\t\t\t\"stuck_out_tongue_closed_eyes\",\n\t\t\t\"drooling_face\",\n\t\t\t\"unamused\",\n\t\t\t\"sweat\",\n\t\t\t\"pensive\",\n\t\t\t\"confused\",\n\t\t\t\"upside_down_face\",\n\t\t\t\"money_mouth_face\",\n\t\t\t\"astonished\",\n\t\t\t\"white_frowning_face\",\n\t\t\t\"slightly_frowning_face\",\n\t\t\t\"confounded\",\n\t\t\t\"disappointed\",\n\t\t\t\"worried\",\n\t\t\t\"triumph\",\n\t\t\t\"cry\",\n\t\t\t\"sob\",\n\t\t\t\"frowning\",\n\t\t\t\"anguished\",\n\t\t\t\"fearful\",\n\t\t\t\"weary\",\n\t\t\t\"exploding_head\",\n\t\t\t\"grimacing\",\n\t\t\t\"cold_sweat\",\n\t\t\t\"scream\",\n\t\t\t\"flushed\",\n\t\t\t\"zany_face\",\n\t\t\t\"dizzy_face\",\n\t\t\t\"rage\",\n\t\t\t\"angry\",\n\t\t\t\"face_with_symbols_on_mouth\",\n\t\t\t\"mask\",\n\t\t\t\"face_with_thermometer\",\n\t\t\t\"face_with_head_bandage\",\n\t\t\t\"nauseated_face\",\n\t\t\t\"face_vomiting\",\n\t\t\t\"sneezing_face\",\n\t\t\t\"innocent\",\n\t\t\t\"face_with_cowboy_hat\",\n\t\t\t\"clown_face\",\n\t\t\t\"lying_face\",\n\t\t\t\"shushing_face\",\n\t\t\t\"face_with_hand_over_mouth\",\n\t\t\t\"face_with_monocle\",\n\t\t\t\"nerd_face\",\n\t\t\t\"smiling_imp\",\n\t\t\t\"imp\",\n\t\t\t\"japanese_ogre\",\n\t\t\t\"japanese_goblin\",\n\t\t\t\"skull\",\n\t\t\t\"skull_and_crossbones\",\n\t\t\t\"ghost\",\n\t\t\t\"alien\",\n\t\t\t\"space_invader\",\n\t\t\t\"robot_face\",\n\t\t\t\"hankey\",\n\t\t\t\"smiley_cat\",\n\t\t\t\"smile_cat\",\n\t\t\t\"joy_cat\",\n\t\t\t\"heart_eyes_cat\",\n\t\t\t\"smirk_cat\",\n\t\t\t\"kissing_cat\",\n\t\t\t\"scream_cat\",\n\t\t\t\"crying_cat_face\",\n\t\t\t\"pouting_cat\",\n\t\t\t\"see_no_evil\",\n\t\t\t\"hear_no_evil\",\n\t\t\t\"speak_no_evil\",\n\t\t\t\"baby\",\n\t\t\t\"child\",\n\t\t\t\"boy\",\n\t\t\t\"girl\",\n\t\t\t\"adult\",\n\t\t\t\"man\",\n\t\t\t\"woman\",\n\t\t\t\"older_adult\",\n\t\t\t\"older_man\",\n\t\t\t\"older_woman\",\n\t\t\t\"male-doctor\",\n\t\t\t\"female-doctor\",\n\t\t\t\"male-student\",\n\t\t\t\"female-student\",\n\t\t\t\"male-teacher\",\n\t\t\t\"female-teacher\",\n\t\t\t\"male-judge\",\n\t\t\t\"female-judge\",\n\t\t\t\"male-farmer\",\n\t\t\t\"female-farmer\",\n\t\t\t\"male-cook\",\n\t\t\t\"female-cook\",\n\t\t\t\"male-mechanic\",\n\t\t\t\"female-mechanic\",\n\t\t\t\"male-factory-worker\",\n\t\t\t\"female-factory-worker\",\n\t\t\t\"male-office-worker\",\n\t\t\t\"female-office-worker\",\n\t\t\t\"male-scientist\",\n\t\t\t\"female-scientist\",\n\t\t\t\"male-technologist\",\n\t\t\t\"female-technologist\",\n\t\t\t\"male-singer\",\n\t\t\t\"female-singer\",\n\t\t\t\"male-artist\",\n\t\t\t\"female-artist\",\n\t\t\t\"male-pilot\",\n\t\t\t\"female-pilot\",\n\t\t\t\"male-astronaut\",\n\t\t\t\"female-astronaut\",\n\t\t\t\"male-firefighter\",\n\t\t\t\"female-firefighter\",\n\t\t\t\"cop\",\n\t\t\t\"male-police-officer\",\n\t\t\t\"female-police-officer\",\n\t\t\t\"sleuth_or_spy\",\n\t\t\t\"male-detective\",\n\t\t\t\"female-detective\",\n\t\t\t\"guardsman\",\n\t\t\t\"male-guard\",\n\t\t\t\"female-guard\",\n\t\t\t\"construction_worker\",\n\t\t\t\"male-construction-worker\",\n\t\t\t\"female-construction-worker\",\n\t\t\t\"prince\",\n\t\t\t\"princess\",\n\t\t\t\"man_with_turban\",\n\t\t\t\"man-wearing-turban\",\n\t\t\t\"woman-wearing-turban\",\n\t\t\t\"man_with_gua_pi_mao\",\n\t\t\t\"person_with_headscarf\",\n\t\t\t\"bearded_person\",\n\t\t\t\"person_with_blond_hair\",\n\t\t\t\"blond-haired-man\",\n\t\t\t\"blond-haired-woman\",\n\t\t\t\"man_in_tuxedo\",\n\t\t\t\"bride_with_veil\",\n\t\t\t\"pregnant_woman\",\n\t\t\t\"breast-feeding\",\n\t\t\t\"angel\",\n\t\t\t\"santa\",\n\t\t\t\"mrs_claus\",\n\t\t\t\"mage\",\n\t\t\t\"female_mage\",\n\t\t\t\"male_mage\",\n\t\t\t\"fairy\",\n\t\t\t\"female_fairy\",\n\t\t\t\"male_fairy\",\n\t\t\t\"vampire\",\n\t\t\t\"female_vampire\",\n\t\t\t\"male_vampire\",\n\t\t\t\"merperson\",\n\t\t\t\"mermaid\",\n\t\t\t\"merman\",\n\t\t\t\"elf\",\n\t\t\t\"female_elf\",\n\t\t\t\"male_elf\",\n\t\t\t\"genie\",\n\t\t\t\"female_genie\",\n\t\t\t\"male_genie\",\n\t\t\t\"zombie\",\n\t\t\t\"female_zombie\",\n\t\t\t\"male_zombie\",\n\t\t\t\"person_frowning\",\n\t\t\t\"man-frowning\",\n\t\t\t\"woman-frowning\",\n\t\t\t\"person_with_pouting_face\",\n\t\t\t\"man-pouting\",\n\t\t\t\"woman-pouting\",\n\t\t\t\"no_good\",\n\t\t\t\"man-gesturing-no\",\n\t\t\t\"woman-gesturing-no\",\n\t\t\t\"ok_woman\",\n\t\t\t\"man-gesturing-ok\",\n\t\t\t\"woman-gesturing-ok\",\n\t\t\t\"information_desk_person\",\n\t\t\t\"man-tipping-hand\",\n\t\t\t\"woman-tipping-hand\",\n\t\t\t\"raising_hand\",\n\t\t\t\"man-raising-hand\",\n\t\t\t\"woman-raising-hand\",\n\t\t\t\"bow\",\n\t\t\t\"man-bowing\",\n\t\t\t\"woman-bowing\",\n\t\t\t\"face_palm\",\n\t\t\t\"man-facepalming\",\n\t\t\t\"woman-facepalming\",\n\t\t\t\"shrug\",\n\t\t\t\"man-shrugging\",\n\t\t\t\"woman-shrugging\",\n\t\t\t\"massage\",\n\t\t\t\"man-getting-massage\",\n\t\t\t\"woman-getting-massage\",\n\t\t\t\"haircut\",\n\t\t\t\"man-getting-haircut\",\n\t\t\t\"woman-getting-haircut\",\n\t\t\t\"walking\",\n\t\t\t\"man-walking\",\n\t\t\t\"woman-walking\",\n\t\t\t\"runner\",\n\t\t\t\"man-running\",\n\t\t\t\"woman-running\",\n\t\t\t\"dancer\",\n\t\t\t\"man_dancing\",\n\t\t\t\"dancers\",\n\t\t\t\"man-with-bunny-ears-partying\",\n\t\t\t\"woman-with-bunny-ears-partying\",\n\t\t\t\"person_in_steamy_room\",\n\t\t\t\"woman_in_steamy_room\",\n\t\t\t\"man_in_steamy_room\",\n\t\t\t\"person_climbing\",\n\t\t\t\"woman_climbing\",\n\t\t\t\"man_climbing\",\n\t\t\t\"person_in_lotus_position\",\n\t\t\t\"woman_in_lotus_position\",\n\t\t\t\"man_in_lotus_position\",\n\t\t\t\"bath\",\n\t\t\t\"sleeping_accommodation\",\n\t\t\t\"man_in_business_suit_levitating\",\n\t\t\t\"speaking_head_in_silhouette\",\n\t\t\t\"bust_in_silhouette\",\n\t\t\t\"busts_in_silhouette\",\n\t\t\t\"fencer\",\n\t\t\t\"horse_racing\",\n\t\t\t\"skier\",\n\t\t\t\"snowboarder\",\n\t\t\t\"golfer\",\n\t\t\t\"man-golfing\",\n\t\t\t\"woman-golfing\",\n\t\t\t\"surfer\",\n\t\t\t\"man-surfing\",\n\t\t\t\"woman-surfing\",\n\t\t\t\"rowboat\",\n\t\t\t\"man-rowing-boat\",\n\t\t\t\"woman-rowing-boat\",\n\t\t\t\"swimmer\",\n\t\t\t\"man-swimming\",\n\t\t\t\"woman-swimming\",\n\t\t\t\"person_with_ball\",\n\t\t\t\"man-bouncing-ball\",\n\t\t\t\"woman-bouncing-ball\",\n\t\t\t\"weight_lifter\",\n\t\t\t\"man-lifting-weights\",\n\t\t\t\"woman-lifting-weights\",\n\t\t\t\"bicyclist\",\n\t\t\t\"man-biking\",\n\t\t\t\"woman-biking\",\n\t\t\t\"mountain_bicyclist\",\n\t\t\t\"man-mountain-biking\",\n\t\t\t\"woman-mountain-biking\",\n\t\t\t\"racing_car\",\n\t\t\t\"racing_motorcycle\",\n\t\t\t\"person_doing_cartwheel\",\n\t\t\t\"man-cartwheeling\",\n\t\t\t\"woman-cartwheeling\",\n\t\t\t\"wrestlers\",\n\t\t\t\"man-wrestling\",\n\t\t\t\"woman-wrestling\",\n\t\t\t\"water_polo\",\n\t\t\t\"man-playing-water-polo\",\n\t\t\t\"woman-playing-water-polo\",\n\t\t\t\"handball\",\n\t\t\t\"man-playing-handball\",\n\t\t\t\"woman-playing-handball\",\n\t\t\t\"juggling\",\n\t\t\t\"man-juggling\",\n\t\t\t\"woman-juggling\",\n\t\t\t\"couple\",\n\t\t\t\"two_men_holding_hands\",\n\t\t\t\"two_women_holding_hands\",\n\t\t\t\"couplekiss\",\n\t\t\t\"woman-kiss-man\",\n\t\t\t\"man-kiss-man\",\n\t\t\t\"woman-kiss-woman\",\n\t\t\t\"couple_with_heart\",\n\t\t\t\"woman-heart-man\",\n\t\t\t\"man-heart-man\",\n\t\t\t\"woman-heart-woman\",\n\t\t\t\"family\",\n\t\t\t\"man-woman-boy\",\n\t\t\t\"man-woman-girl\",\n\t\t\t\"man-woman-girl-boy\",\n\t\t\t\"man-woman-boy-boy\",\n\t\t\t\"man-woman-girl-girl\",\n\t\t\t\"man-man-boy\",\n\t\t\t\"man-man-girl\",\n\t\t\t\"man-man-girl-boy\",\n\t\t\t\"man-man-boy-boy\",\n\t\t\t\"man-man-girl-girl\",\n\t\t\t\"woman-woman-boy\",\n\t\t\t\"woman-woman-girl\",\n\t\t\t\"woman-woman-girl-boy\",\n\t\t\t\"woman-woman-boy-boy\",\n\t\t\t\"woman-woman-girl-girl\",\n\t\t\t\"man-boy\",\n\t\t\t\"man-boy-boy\",\n\t\t\t\"man-girl\",\n\t\t\t\"man-girl-boy\",\n\t\t\t\"man-girl-girl\",\n\t\t\t\"woman-boy\",\n\t\t\t\"woman-boy-boy\",\n\t\t\t\"woman-girl\",\n\t\t\t\"woman-girl-boy\",\n\t\t\t\"woman-girl-girl\",\n\t\t\t\"selfie\",\n\t\t\t\"muscle\",\n\t\t\t\"point_left\",\n\t\t\t\"point_right\",\n\t\t\t\"point_up\",\n\t\t\t\"point_up_2\",\n\t\t\t\"middle_finger\",\n\t\t\t\"point_down\",\n\t\t\t\"v\",\n\t\t\t\"crossed_fingers\",\n\t\t\t\"spock-hand\",\n\t\t\t\"the_horns\",\n\t\t\t\"call_me_hand\",\n\t\t\t\"raised_hand_with_fingers_splayed\",\n\t\t\t\"hand\",\n\t\t\t\"ok_hand\",\n\t\t\t\"+1\",\n\t\t\t\"-1\",\n\t\t\t\"fist\",\n\t\t\t\"facepunch\",\n\t\t\t\"left-facing_fist\",\n\t\t\t\"right-facing_fist\",\n\t\t\t\"raised_back_of_hand\",\n\t\t\t\"wave\",\n\t\t\t\"i_love_you_hand_sign\",\n\t\t\t\"writing_hand\",\n\t\t\t\"clap\",\n\t\t\t\"open_hands\",\n\t\t\t\"raised_hands\",\n\t\t\t\"palms_up_together\",\n\t\t\t\"pray\",\n\t\t\t\"handshake\",\n\t\t\t\"nail_care\",\n\t\t\t\"ear\",\n\t\t\t\"nose\",\n\t\t\t\"footprints\",\n\t\t\t\"eyes\",\n\t\t\t\"eye\",\n\t\t\t\"eye-in-speech-bubble\",\n\t\t\t\"brain\",\n\t\t\t\"tongue\",\n\t\t\t\"lips\",\n\t\t\t\"kiss\",\n\t\t\t\"cupid\",\n\t\t\t\"heart\",\n\t\t\t\"heartbeat\",\n\t\t\t\"broken_heart\",\n\t\t\t\"two_hearts\",\n\t\t\t\"sparkling_heart\",\n\t\t\t\"heartpulse\",\n\t\t\t\"blue_heart\",\n\t\t\t\"green_heart\",\n\t\t\t\"yellow_heart\",\n\t\t\t\"orange_heart\",\n\t\t\t\"purple_heart\",\n\t\t\t\"black_heart\",\n\t\t\t\"gift_heart\",\n\t\t\t\"revolving_hearts\",\n\t\t\t\"heart_decoration\",\n\t\t\t\"heavy_heart_exclamation_mark_ornament\",\n\t\t\t\"love_letter\",\n\t\t\t\"zzz\",\n\t\t\t\"anger\",\n\t\t\t\"bomb\",\n\t\t\t\"boom\",\n\t\t\t\"sweat_drops\",\n\t\t\t\"dash\",\n\t\t\t\"dizzy\",\n\t\t\t\"speech_balloon\",\n\t\t\t\"left_speech_bubble\",\n\t\t\t\"right_anger_bubble\",\n\t\t\t\"thought_balloon\",\n\t\t\t\"hole\",\n\t\t\t\"eyeglasses\",\n\t\t\t\"dark_sunglasses\",\n\t\t\t\"necktie\",\n\t\t\t\"shirt\",\n\t\t\t\"jeans\",\n\t\t\t\"scarf\",\n\t\t\t\"gloves\",\n\t\t\t\"coat\",\n\t\t\t\"socks\",\n\t\t\t\"dress\",\n\t\t\t\"kimono\",\n\t\t\t\"bikini\",\n\t\t\t\"womans_clothes\",\n\t\t\t\"purse\",\n\t\t\t\"handbag\",\n\t\t\t\"pouch\",\n\t\t\t\"shopping_bags\",\n\t\t\t\"school_satchel\",\n\t\t\t\"mans_shoe\",\n\t\t\t\"athletic_shoe\",\n\t\t\t\"high_heel\",\n\t\t\t\"sandal\",\n\t\t\t\"boot\",\n\t\t\t\"crown\",\n\t\t\t\"womans_hat\",\n\t\t\t\"tophat\",\n\t\t\t\"mortar_board\",\n\t\t\t\"billed_cap\",\n\t\t\t\"helmet_with_white_cross\",\n\t\t\t\"prayer_beads\",\n\t\t\t\"lipstick\",\n\t\t\t\"ring\",\n\t\t\t\"gem\"\n\t\t]\n\t},\n\t{\n\t\tid: \"nature\",\n\t\tname: \"Animals & Nature\",\n\t\temojis: [\n\t\t\t\"monkey_face\",\n\t\t\t\"monkey\",\n\t\t\t\"gorilla\",\n\t\t\t\"dog\",\n\t\t\t\"dog2\",\n\t\t\t\"poodle\",\n\t\t\t\"wolf\",\n\t\t\t\"fox_face\",\n\t\t\t\"cat\",\n\t\t\t\"cat2\",\n\t\t\t\"lion_face\",\n\t\t\t\"tiger\",\n\t\t\t\"tiger2\",\n\t\t\t\"leopard\",\n\t\t\t\"horse\",\n\t\t\t\"racehorse\",\n\t\t\t\"unicorn_face\",\n\t\t\t\"zebra_face\",\n\t\t\t\"deer\",\n\t\t\t\"cow\",\n\t\t\t\"ox\",\n\t\t\t\"water_buffalo\",\n\t\t\t\"cow2\",\n\t\t\t\"pig\",\n\t\t\t\"pig2\",\n\t\t\t\"boar\",\n\t\t\t\"pig_nose\",\n\t\t\t\"ram\",\n\t\t\t\"sheep\",\n\t\t\t\"goat\",\n\t\t\t\"dromedary_camel\",\n\t\t\t\"camel\",\n\t\t\t\"giraffe_face\",\n\t\t\t\"elephant\",\n\t\t\t\"rhinoceros\",\n\t\t\t\"mouse\",\n\t\t\t\"mouse2\",\n\t\t\t\"rat\",\n\t\t\t\"hamster\",\n\t\t\t\"rabbit\",\n\t\t\t\"rabbit2\",\n\t\t\t\"chipmunk\",\n\t\t\t\"hedgehog\",\n\t\t\t\"bat\",\n\t\t\t\"bear\",\n\t\t\t\"koala\",\n\t\t\t\"panda_face\",\n\t\t\t\"feet\",\n\t\t\t\"turkey\",\n\t\t\t\"chicken\",\n\t\t\t\"rooster\",\n\t\t\t\"hatching_chick\",\n\t\t\t\"baby_chick\",\n\t\t\t\"hatched_chick\",\n\t\t\t\"bird\",\n\t\t\t\"penguin\",\n\t\t\t\"dove_of_peace\",\n\t\t\t\"eagle\",\n\t\t\t\"duck\",\n\t\t\t\"owl\",\n\t\t\t\"frog\",\n\t\t\t\"crocodile\",\n\t\t\t\"turtle\",\n\t\t\t\"lizard\",\n\t\t\t\"snake\",\n\t\t\t\"dragon_face\",\n\t\t\t\"dragon\",\n\t\t\t\"sauropod\",\n\t\t\t\"t-rex\",\n\t\t\t\"whale\",\n\t\t\t\"whale2\",\n\t\t\t\"dolphin\",\n\t\t\t\"fish\",\n\t\t\t\"tropical_fish\",\n\t\t\t\"blowfish\",\n\t\t\t\"shark\",\n\t\t\t\"octopus\",\n\t\t\t\"shell\",\n\t\t\t\"crab\",\n\t\t\t\"shrimp\",\n\t\t\t\"squid\",\n\t\t\t\"snail\",\n\t\t\t\"butterfly\",\n\t\t\t\"bug\",\n\t\t\t\"ant\",\n\t\t\t\"bee\",\n\t\t\t\"beetle\",\n\t\t\t\"cricket\",\n\t\t\t\"spider\",\n\t\t\t\"spider_web\",\n\t\t\t\"scorpion\",\n\t\t\t\"bouquet\",\n\t\t\t\"cherry_blossom\",\n\t\t\t\"white_flower\",\n\t\t\t\"rosette\",\n\t\t\t\"rose\",\n\t\t\t\"wilted_flower\",\n\t\t\t\"hibiscus\",\n\t\t\t\"sunflower\",\n\t\t\t\"blossom\",\n\t\t\t\"tulip\",\n\t\t\t\"seedling\",\n\t\t\t\"evergreen_tree\",\n\t\t\t\"deciduous_tree\",\n\t\t\t\"palm_tree\",\n\t\t\t\"cactus\",\n\t\t\t\"ear_of_rice\",\n\t\t\t\"herb\",\n\t\t\t\"shamrock\",\n\t\t\t\"four_leaf_clover\",\n\t\t\t\"maple_leaf\",\n\t\t\t\"fallen_leaf\",\n\t\t\t\"leaves\"\n\t\t]\n\t},\n\t{\n\t\tid: \"foods\",\n\t\tname: \"Food & Drink\",\n\t\temojis: [\n\t\t\t\"grapes\",\n\t\t\t\"melon\",\n\t\t\t\"watermelon\",\n\t\t\t\"tangerine\",\n\t\t\t\"lemon\",\n\t\t\t\"banana\",\n\t\t\t\"pineapple\",\n\t\t\t\"apple\",\n\t\t\t\"green_apple\",\n\t\t\t\"pear\",\n\t\t\t\"peach\",\n\t\t\t\"cherries\",\n\t\t\t\"strawberry\",\n\t\t\t\"kiwifruit\",\n\t\t\t\"tomato\",\n\t\t\t\"coconut\",\n\t\t\t\"avocado\",\n\t\t\t\"eggplant\",\n\t\t\t\"potato\",\n\t\t\t\"carrot\",\n\t\t\t\"corn\",\n\t\t\t\"hot_pepper\",\n\t\t\t\"cucumber\",\n\t\t\t\"broccoli\",\n\t\t\t\"mushroom\",\n\t\t\t\"peanuts\",\n\t\t\t\"chestnut\",\n\t\t\t\"bread\",\n\t\t\t\"croissant\",\n\t\t\t\"baguette_bread\",\n\t\t\t\"pretzel\",\n\t\t\t\"pancakes\",\n\t\t\t\"cheese_wedge\",\n\t\t\t\"meat_on_bone\",\n\t\t\t\"poultry_leg\",\n\t\t\t\"cut_of_meat\",\n\t\t\t\"bacon\",\n\t\t\t\"hamburger\",\n\t\t\t\"fries\",\n\t\t\t\"pizza\",\n\t\t\t\"hotdog\",\n\t\t\t\"sandwich\",\n\t\t\t\"taco\",\n\t\t\t\"burrito\",\n\t\t\t\"stuffed_flatbread\",\n\t\t\t\"egg\",\n\t\t\t\"fried_egg\",\n\t\t\t\"shallow_pan_of_food\",\n\t\t\t\"stew\",\n\t\t\t\"bowl_with_spoon\",\n\t\t\t\"green_salad\",\n\t\t\t\"popcorn\",\n\t\t\t\"canned_food\",\n\t\t\t\"bento\",\n\t\t\t\"rice_cracker\",\n\t\t\t\"rice_ball\",\n\t\t\t\"rice\",\n\t\t\t\"curry\",\n\t\t\t\"ramen\",\n\t\t\t\"spaghetti\",\n\t\t\t\"sweet_potato\",\n\t\t\t\"oden\",\n\t\t\t\"sushi\",\n\t\t\t\"fried_shrimp\",\n\t\t\t\"fish_cake\",\n\t\t\t\"dango\",\n\t\t\t\"dumpling\",\n\t\t\t\"fortune_cookie\",\n\t\t\t\"takeout_box\",\n\t\t\t\"icecream\",\n\t\t\t\"shaved_ice\",\n\t\t\t\"ice_cream\",\n\t\t\t\"doughnut\",\n\t\t\t\"cookie\",\n\t\t\t\"birthday\",\n\t\t\t\"cake\",\n\t\t\t\"pie\",\n\t\t\t\"chocolate_bar\",\n\t\t\t\"candy\",\n\t\t\t\"lollipop\",\n\t\t\t\"custard\",\n\t\t\t\"honey_pot\",\n\t\t\t\"baby_bottle\",\n\t\t\t\"glass_of_milk\",\n\t\t\t\"coffee\",\n\t\t\t\"tea\",\n\t\t\t\"sake\",\n\t\t\t\"champagne\",\n\t\t\t\"wine_glass\",\n\t\t\t\"cocktail\",\n\t\t\t\"tropical_drink\",\n\t\t\t\"beer\",\n\t\t\t\"beers\",\n\t\t\t\"clinking_glasses\",\n\t\t\t\"tumbler_glass\",\n\t\t\t\"cup_with_straw\",\n\t\t\t\"chopsticks\",\n\t\t\t\"knife_fork_plate\",\n\t\t\t\"fork_and_knife\",\n\t\t\t\"spoon\",\n\t\t\t\"hocho\",\n\t\t\t\"amphora\"\n\t\t]\n\t},\n\t{\n\t\tid: \"activity\",\n\t\tname: \"Activities\",\n\t\temojis: [\n\t\t\t\"jack_o_lantern\",\n\t\t\t\"christmas_tree\",\n\t\t\t\"fireworks\",\n\t\t\t\"sparkler\",\n\t\t\t\"sparkles\",\n\t\t\t\"balloon\",\n\t\t\t\"tada\",\n\t\t\t\"confetti_ball\",\n\t\t\t\"tanabata_tree\",\n\t\t\t\"bamboo\",\n\t\t\t\"dolls\",\n\t\t\t\"flags\",\n\t\t\t\"wind_chime\",\n\t\t\t\"rice_scene\",\n\t\t\t\"ribbon\",\n\t\t\t\"gift\",\n\t\t\t\"reminder_ribbon\",\n\t\t\t\"admission_tickets\",\n\t\t\t\"ticket\",\n\t\t\t\"medal\",\n\t\t\t\"trophy\",\n\t\t\t\"sports_medal\",\n\t\t\t\"first_place_medal\",\n\t\t\t\"second_place_medal\",\n\t\t\t\"third_place_medal\",\n\t\t\t\"soccer\",\n\t\t\t\"baseball\",\n\t\t\t\"basketball\",\n\t\t\t\"volleyball\",\n\t\t\t\"football\",\n\t\t\t\"rugby_football\",\n\t\t\t\"tennis\",\n\t\t\t\"8ball\",\n\t\t\t\"bowling\",\n\t\t\t\"cricket_bat_and_ball\",\n\t\t\t\"field_hockey_stick_and_ball\",\n\t\t\t\"ice_hockey_stick_and_puck\",\n\t\t\t\"table_tennis_paddle_and_ball\",\n\t\t\t\"badminton_racquet_and_shuttlecock\",\n\t\t\t\"boxing_glove\",\n\t\t\t\"martial_arts_uniform\",\n\t\t\t\"goal_net\",\n\t\t\t\"dart\",\n\t\t\t\"golf\",\n\t\t\t\"ice_skate\",\n\t\t\t\"fishing_pole_and_fish\",\n\t\t\t\"running_shirt_with_sash\",\n\t\t\t\"ski\",\n\t\t\t\"sled\",\n\t\t\t\"curling_stone\",\n\t\t\t\"video_game\",\n\t\t\t\"joystick\",\n\t\t\t\"game_die\",\n\t\t\t\"spades\",\n\t\t\t\"hearts\",\n\t\t\t\"diamonds\",\n\t\t\t\"clubs\",\n\t\t\t\"black_joker\",\n\t\t\t\"mahjong\",\n\t\t\t\"flower_playing_cards\"\n\t\t]\n\t},\n\t{\n\t\tid: \"places\",\n\t\tname: \"Travel & Places\",\n\t\temojis: [\n\t\t\t\"earth_africa\",\n\t\t\t\"earth_americas\",\n\t\t\t\"earth_asia\",\n\t\t\t\"globe_with_meridians\",\n\t\t\t\"world_map\",\n\t\t\t\"japan\",\n\t\t\t\"snow_capped_mountain\",\n\t\t\t\"mountain\",\n\t\t\t\"volcano\",\n\t\t\t\"mount_fuji\",\n\t\t\t\"camping\",\n\t\t\t\"beach_with_umbrella\",\n\t\t\t\"desert\",\n\t\t\t\"desert_island\",\n\t\t\t\"national_park\",\n\t\t\t\"stadium\",\n\t\t\t\"classical_building\",\n\t\t\t\"building_construction\",\n\t\t\t\"house_buildings\",\n\t\t\t\"cityscape\",\n\t\t\t\"derelict_house_building\",\n\t\t\t\"house\",\n\t\t\t\"house_with_garden\",\n\t\t\t\"office\",\n\t\t\t\"post_office\",\n\t\t\t\"european_post_office\",\n\t\t\t\"hospital\",\n\t\t\t\"bank\",\n\t\t\t\"hotel\",\n\t\t\t\"love_hotel\",\n\t\t\t\"convenience_store\",\n\t\t\t\"school\",\n\t\t\t\"department_store\",\n\t\t\t\"factory\",\n\t\t\t\"japanese_castle\",\n\t\t\t\"european_castle\",\n\t\t\t\"wedding\",\n\t\t\t\"tokyo_tower\",\n\t\t\t\"statue_of_liberty\",\n\t\t\t\"church\",\n\t\t\t\"mosque\",\n\t\t\t\"synagogue\",\n\t\t\t\"shinto_shrine\",\n\t\t\t\"kaaba\",\n\t\t\t\"fountain\",\n\t\t\t\"tent\",\n\t\t\t\"foggy\",\n\t\t\t\"night_with_stars\",\n\t\t\t\"sunrise_over_mountains\",\n\t\t\t\"sunrise\",\n\t\t\t\"city_sunset\",\n\t\t\t\"city_sunrise\",\n\t\t\t\"bridge_at_night\",\n\t\t\t\"hotsprings\",\n\t\t\t\"milky_way\",\n\t\t\t\"carousel_horse\",\n\t\t\t\"ferris_wheel\",\n\t\t\t\"roller_coaster\",\n\t\t\t\"barber\",\n\t\t\t\"circus_tent\",\n\t\t\t\"performing_arts\",\n\t\t\t\"frame_with_picture\",\n\t\t\t\"art\",\n\t\t\t\"slot_machine\",\n\t\t\t\"steam_locomotive\",\n\t\t\t\"railway_car\",\n\t\t\t\"bullettrain_side\",\n\t\t\t\"bullettrain_front\",\n\t\t\t\"train2\",\n\t\t\t\"metro\",\n\t\t\t\"light_rail\",\n\t\t\t\"station\",\n\t\t\t\"tram\",\n\t\t\t\"monorail\",\n\t\t\t\"mountain_railway\",\n\t\t\t\"train\",\n\t\t\t\"bus\",\n\t\t\t\"oncoming_bus\",\n\t\t\t\"trolleybus\",\n\t\t\t\"minibus\",\n\t\t\t\"ambulance\",\n\t\t\t\"fire_engine\",\n\t\t\t\"police_car\",\n\t\t\t\"oncoming_police_car\",\n\t\t\t\"taxi\",\n\t\t\t\"oncoming_taxi\",\n\t\t\t\"car\",\n\t\t\t\"oncoming_automobile\",\n\t\t\t\"blue_car\",\n\t\t\t\"truck\",\n\t\t\t\"articulated_lorry\",\n\t\t\t\"tractor\",\n\t\t\t\"bike\",\n\t\t\t\"scooter\",\n\t\t\t\"motor_scooter\",\n\t\t\t\"busstop\",\n\t\t\t\"motorway\",\n\t\t\t\"railway_track\",\n\t\t\t\"fuelpump\",\n\t\t\t\"rotating_light\",\n\t\t\t\"traffic_light\",\n\t\t\t\"vertical_traffic_light\",\n\t\t\t\"construction\",\n\t\t\t\"octagonal_sign\",\n\t\t\t\"anchor\",\n\t\t\t\"boat\",\n\t\t\t\"canoe\",\n\t\t\t\"speedboat\",\n\t\t\t\"passenger_ship\",\n\t\t\t\"ferry\",\n\t\t\t\"motor_boat\",\n\t\t\t\"ship\",\n\t\t\t\"airplane\",\n\t\t\t\"small_airplane\",\n\t\t\t\"airplane_departure\",\n\t\t\t\"airplane_arriving\",\n\t\t\t\"seat\",\n\t\t\t\"helicopter\",\n\t\t\t\"suspension_railway\",\n\t\t\t\"mountain_cableway\",\n\t\t\t\"aerial_tramway\",\n\t\t\t\"satellite\",\n\t\t\t\"rocket\",\n\t\t\t\"flying_saucer\",\n\t\t\t\"bellhop_bell\",\n\t\t\t\"door\",\n\t\t\t\"bed\",\n\t\t\t\"couch_and_lamp\",\n\t\t\t\"toilet\",\n\t\t\t\"shower\",\n\t\t\t\"bathtub\",\n\t\t\t\"hourglass\",\n\t\t\t\"hourglass_flowing_sand\",\n\t\t\t\"watch\",\n\t\t\t\"alarm_clock\",\n\t\t\t\"stopwatch\",\n\t\t\t\"timer_clock\",\n\t\t\t\"mantelpiece_clock\",\n\t\t\t\"clock12\",\n\t\t\t\"clock1230\",\n\t\t\t\"clock1\",\n\t\t\t\"clock130\",\n\t\t\t\"clock2\",\n\t\t\t\"clock230\",\n\t\t\t\"clock3\",\n\t\t\t\"clock330\",\n\t\t\t\"clock4\",\n\t\t\t\"clock430\",\n\t\t\t\"clock5\",\n\t\t\t\"clock530\",\n\t\t\t\"clock6\",\n\t\t\t\"clock630\",\n\t\t\t\"clock7\",\n\t\t\t\"clock730\",\n\t\t\t\"clock8\",\n\t\t\t\"clock830\",\n\t\t\t\"clock9\",\n\t\t\t\"clock930\",\n\t\t\t\"clock10\",\n\t\t\t\"clock1030\",\n\t\t\t\"clock11\",\n\t\t\t\"clock1130\",\n\t\t\t\"new_moon\",\n\t\t\t\"waxing_crescent_moon\",\n\t\t\t\"first_quarter_moon\",\n\t\t\t\"moon\",\n\t\t\t\"full_moon\",\n\t\t\t\"waning_gibbous_moon\",\n\t\t\t\"last_quarter_moon\",\n\t\t\t\"waning_crescent_moon\",\n\t\t\t\"crescent_moon\",\n\t\t\t\"new_moon_with_face\",\n\t\t\t\"first_quarter_moon_with_face\",\n\t\t\t\"last_quarter_moon_with_face\",\n\t\t\t\"thermometer\",\n\t\t\t\"sunny\",\n\t\t\t\"full_moon_with_face\",\n\t\t\t\"sun_with_face\",\n\t\t\t\"star\",\n\t\t\t\"star2\",\n\t\t\t\"stars\",\n\t\t\t\"cloud\",\n\t\t\t\"partly_sunny\",\n\t\t\t\"thunder_cloud_and_rain\",\n\t\t\t\"mostly_sunny\",\n\t\t\t\"barely_sunny\",\n\t\t\t\"partly_sunny_rain\",\n\t\t\t\"rain_cloud\",\n\t\t\t\"snow_cloud\",\n\t\t\t\"lightning\",\n\t\t\t\"tornado\",\n\t\t\t\"fog\",\n\t\t\t\"wind_blowing_face\",\n\t\t\t\"cyclone\",\n\t\t\t\"rainbow\",\n\t\t\t\"closed_umbrella\",\n\t\t\t\"umbrella\",\n\t\t\t\"umbrella_with_rain_drops\",\n\t\t\t\"umbrella_on_ground\",\n\t\t\t\"zap\",\n\t\t\t\"snowflake\",\n\t\t\t\"snowman\",\n\t\t\t\"snowman_without_snow\",\n\t\t\t\"comet\",\n\t\t\t\"fire\",\n\t\t\t\"droplet\",\n\t\t\t\"ocean\"\n\t\t]\n\t},\n\t{\n\t\tid: \"objects\",\n\t\tname: \"Objects\",\n\t\temojis: [\n\t\t\t\"mute\",\n\t\t\t\"speaker\",\n\t\t\t\"sound\",\n\t\t\t\"loud_sound\",\n\t\t\t\"loudspeaker\",\n\t\t\t\"mega\",\n\t\t\t\"postal_horn\",\n\t\t\t\"bell\",\n\t\t\t\"no_bell\",\n\t\t\t\"musical_score\",\n\t\t\t\"musical_note\",\n\t\t\t\"notes\",\n\t\t\t\"studio_microphone\",\n\t\t\t\"level_slider\",\n\t\t\t\"control_knobs\",\n\t\t\t\"microphone\",\n\t\t\t\"headphones\",\n\t\t\t\"radio\",\n\t\t\t\"saxophone\",\n\t\t\t\"guitar\",\n\t\t\t\"musical_keyboard\",\n\t\t\t\"trumpet\",\n\t\t\t\"violin\",\n\t\t\t\"drum_with_drumsticks\",\n\t\t\t\"iphone\",\n\t\t\t\"calling\",\n\t\t\t\"phone\",\n\t\t\t\"telephone_receiver\",\n\t\t\t\"pager\",\n\t\t\t\"fax\",\n\t\t\t\"battery\",\n\t\t\t\"electric_plug\",\n\t\t\t\"computer\",\n\t\t\t\"desktop_computer\",\n\t\t\t\"printer\",\n\t\t\t\"keyboard\",\n\t\t\t\"three_button_mouse\",\n\t\t\t\"trackball\",\n\t\t\t\"minidisc\",\n\t\t\t\"floppy_disk\",\n\t\t\t\"cd\",\n\t\t\t\"dvd\",\n\t\t\t\"movie_camera\",\n\t\t\t\"film_frames\",\n\t\t\t\"film_projector\",\n\t\t\t\"clapper\",\n\t\t\t\"tv\",\n\t\t\t\"camera\",\n\t\t\t\"camera_with_flash\",\n\t\t\t\"video_camera\",\n\t\t\t\"vhs\",\n\t\t\t\"mag\",\n\t\t\t\"mag_right\",\n\t\t\t\"microscope\",\n\t\t\t\"telescope\",\n\t\t\t\"satellite_antenna\",\n\t\t\t\"candle\",\n\t\t\t\"bulb\",\n\t\t\t\"flashlight\",\n\t\t\t\"izakaya_lantern\",\n\t\t\t\"notebook_with_decorative_cover\",\n\t\t\t\"closed_book\",\n\t\t\t\"book\",\n\t\t\t\"green_book\",\n\t\t\t\"blue_book\",\n\t\t\t\"orange_book\",\n\t\t\t\"books\",\n\t\t\t\"notebook\",\n\t\t\t\"ledger\",\n\t\t\t\"page_with_curl\",\n\t\t\t\"scroll\",\n\t\t\t\"page_facing_up\",\n\t\t\t\"newspaper\",\n\t\t\t\"rolled_up_newspaper\",\n\t\t\t\"bookmark_tabs\",\n\t\t\t\"bookmark\",\n\t\t\t\"label\",\n\t\t\t\"moneybag\",\n\t\t\t\"yen\",\n\t\t\t\"dollar\",\n\t\t\t\"euro\",\n\t\t\t\"pound\",\n\t\t\t\"money_with_wings\",\n\t\t\t\"credit_card\",\n\t\t\t\"chart\",\n\t\t\t\"currency_exchange\",\n\t\t\t\"heavy_dollar_sign\",\n\t\t\t\"email\",\n\t\t\t\"e-mail\",\n\t\t\t\"incoming_envelope\",\n\t\t\t\"envelope_with_arrow\",\n\t\t\t\"outbox_tray\",\n\t\t\t\"inbox_tray\",\n\t\t\t\"package\",\n\t\t\t\"mailbox\",\n\t\t\t\"mailbox_closed\",\n\t\t\t\"mailbox_with_mail\",\n\t\t\t\"mailbox_with_no_mail\",\n\t\t\t\"postbox\",\n\t\t\t\"ballot_box_with_ballot\",\n\t\t\t\"pencil2\",\n\t\t\t\"black_nib\",\n\t\t\t\"lower_left_fountain_pen\",\n\t\t\t\"lower_left_ballpoint_pen\",\n\t\t\t\"lower_left_paintbrush\",\n\t\t\t\"lower_left_crayon\",\n\t\t\t\"memo\",\n\t\t\t\"briefcase\",\n\t\t\t\"file_folder\",\n\t\t\t\"open_file_folder\",\n\t\t\t\"card_index_dividers\",\n\t\t\t\"date\",\n\t\t\t\"calendar\",\n\t\t\t\"spiral_note_pad\",\n\t\t\t\"spiral_calendar_pad\",\n\t\t\t\"card_index\",\n\t\t\t\"chart_with_upwards_trend\",\n\t\t\t\"chart_with_downwards_trend\",\n\t\t\t\"bar_chart\",\n\t\t\t\"clipboard\",\n\t\t\t\"pushpin\",\n\t\t\t\"round_pushpin\",\n\t\t\t\"paperclip\",\n\t\t\t\"linked_paperclips\",\n\t\t\t\"straight_ruler\",\n\t\t\t\"triangular_ruler\",\n\t\t\t\"scissors\",\n\t\t\t\"card_file_box\",\n\t\t\t\"file_cabinet\",\n\t\t\t\"wastebasket\",\n\t\t\t\"lock\",\n\t\t\t\"unlock\",\n\t\t\t\"lock_with_ink_pen\",\n\t\t\t\"closed_lock_with_key\",\n\t\t\t\"key\",\n\t\t\t\"old_key\",\n\t\t\t\"hammer\",\n\t\t\t\"pick\",\n\t\t\t\"hammer_and_pick\",\n\t\t\t\"hammer_and_wrench\",\n\t\t\t\"dagger_knife\",\n\t\t\t\"crossed_swords\",\n\t\t\t\"gun\",\n\t\t\t\"bow_and_arrow\",\n\t\t\t\"shield\",\n\t\t\t\"wrench\",\n\t\t\t\"nut_and_bolt\",\n\t\t\t\"gear\",\n\t\t\t\"compression\",\n\t\t\t\"alembic\",\n\t\t\t\"scales\",\n\t\t\t\"link\",\n\t\t\t\"chains\",\n\t\t\t\"syringe\",\n\t\t\t\"pill\",\n\t\t\t\"smoking\",\n\t\t\t\"coffin\",\n\t\t\t\"funeral_urn\",\n\t\t\t\"moyai\",\n\t\t\t\"oil_drum\",\n\t\t\t\"crystal_ball\",\n\t\t\t\"shopping_trolley\"\n\t\t]\n\t},\n\t{\n\t\tid: \"symbols\",\n\t\tname: \"Symbols\",\n\t\temojis: [\n\t\t\t\"atm\",\n\t\t\t\"put_litter_in_its_place\",\n\t\t\t\"potable_water\",\n\t\t\t\"wheelchair\",\n\t\t\t\"mens\",\n\t\t\t\"womens\",\n\t\t\t\"restroom\",\n\t\t\t\"baby_symbol\",\n\t\t\t\"wc\",\n\t\t\t\"passport_control\",\n\t\t\t\"customs\",\n\t\t\t\"baggage_claim\",\n\t\t\t\"left_luggage\",\n\t\t\t\"warning\",\n\t\t\t\"children_crossing\",\n\t\t\t\"no_entry\",\n\t\t\t\"no_entry_sign\",\n\t\t\t\"no_bicycles\",\n\t\t\t\"no_smoking\",\n\t\t\t\"do_not_litter\",\n\t\t\t\"non-potable_water\",\n\t\t\t\"no_pedestrians\",\n\t\t\t\"no_mobile_phones\",\n\t\t\t\"underage\",\n\t\t\t\"radioactive_sign\",\n\t\t\t\"biohazard_sign\",\n\t\t\t\"arrow_up\",\n\t\t\t\"arrow_upper_right\",\n\t\t\t\"arrow_right\",\n\t\t\t\"arrow_lower_right\",\n\t\t\t\"arrow_down\",\n\t\t\t\"arrow_lower_left\",\n\t\t\t\"arrow_left\",\n\t\t\t\"arrow_upper_left\",\n\t\t\t\"arrow_up_down\",\n\t\t\t\"left_right_arrow\",\n\t\t\t\"leftwards_arrow_with_hook\",\n\t\t\t\"arrow_right_hook\",\n\t\t\t\"arrow_heading_up\",\n\t\t\t\"arrow_heading_down\",\n\t\t\t\"arrows_clockwise\",\n\t\t\t\"arrows_counterclockwise\",\n\t\t\t\"back\",\n\t\t\t\"end\",\n\t\t\t\"on\",\n\t\t\t\"soon\",\n\t\t\t\"top\",\n\t\t\t\"place_of_worship\",\n\t\t\t\"atom_symbol\",\n\t\t\t\"om_symbol\",\n\t\t\t\"star_of_david\",\n\t\t\t\"wheel_of_dharma\",\n\t\t\t\"yin_yang\",\n\t\t\t\"latin_cross\",\n\t\t\t\"orthodox_cross\",\n\t\t\t\"star_and_crescent\",\n\t\t\t\"peace_symbol\",\n\t\t\t\"menorah_with_nine_branches\",\n\t\t\t\"six_pointed_star\",\n\t\t\t\"aries\",\n\t\t\t\"taurus\",\n\t\t\t\"gemini\",\n\t\t\t\"cancer\",\n\t\t\t\"leo\",\n\t\t\t\"virgo\",\n\t\t\t\"libra\",\n\t\t\t\"scorpius\",\n\t\t\t\"sagittarius\",\n\t\t\t\"capricorn\",\n\t\t\t\"aquarius\",\n\t\t\t\"pisces\",\n\t\t\t\"ophiuchus\",\n\t\t\t\"twisted_rightwards_arrows\",\n\t\t\t\"repeat\",\n\t\t\t\"repeat_one\",\n\t\t\t\"arrow_forward\",\n\t\t\t\"fast_forward\",\n\t\t\t\"black_right_pointing_double_triangle_with_vertical_bar\",\n\t\t\t\"black_right_pointing_triangle_with_double_vertical_bar\",\n\t\t\t\"arrow_backward\",\n\t\t\t\"rewind\",\n\t\t\t\"black_left_pointing_double_triangle_with_vertical_bar\",\n\t\t\t\"arrow_up_small\",\n\t\t\t\"arrow_double_up\",\n\t\t\t\"arrow_down_small\",\n\t\t\t\"arrow_double_down\",\n\t\t\t\"double_vertical_bar\",\n\t\t\t\"black_square_for_stop\",\n\t\t\t\"black_circle_for_record\",\n\t\t\t\"eject\",\n\t\t\t\"cinema\",\n\t\t\t\"low_brightness\",\n\t\t\t\"high_brightness\",\n\t\t\t\"signal_strength\",\n\t\t\t\"vibration_mode\",\n\t\t\t\"mobile_phone_off\",\n\t\t\t\"female_sign\",\n\t\t\t\"male_sign\",\n\t\t\t\"medical_symbol\",\n\t\t\t\"recycle\",\n\t\t\t\"fleur_de_lis\",\n\t\t\t\"trident\",\n\t\t\t\"name_badge\",\n\t\t\t\"beginner\",\n\t\t\t\"o\",\n\t\t\t\"white_check_mark\",\n\t\t\t\"ballot_box_with_check\",\n\t\t\t\"heavy_check_mark\",\n\t\t\t\"heavy_multiplication_x\",\n\t\t\t\"x\",\n\t\t\t\"negative_squared_cross_mark\",\n\t\t\t\"heavy_plus_sign\",\n\t\t\t\"heavy_minus_sign\",\n\t\t\t\"heavy_division_sign\",\n\t\t\t\"curly_loop\",\n\t\t\t\"loop\",\n\t\t\t\"part_alternation_mark\",\n\t\t\t\"eight_spoked_asterisk\",\n\t\t\t\"eight_pointed_black_star\",\n\t\t\t\"sparkle\",\n\t\t\t\"bangbang\",\n\t\t\t\"interrobang\",\n\t\t\t\"question\",\n\t\t\t\"grey_question\",\n\t\t\t\"grey_exclamation\",\n\t\t\t\"exclamation\",\n\t\t\t\"wavy_dash\",\n\t\t\t\"copyright\",\n\t\t\t\"registered\",\n\t\t\t\"tm\",\n\t\t\t\"hash\",\n\t\t\t\"keycap_star\",\n\t\t\t\"zero\",\n\t\t\t\"one\",\n\t\t\t\"two\",\n\t\t\t\"three\",\n\t\t\t\"four\",\n\t\t\t\"five\",\n\t\t\t\"six\",\n\t\t\t\"seven\",\n\t\t\t\"eight\",\n\t\t\t\"nine\",\n\t\t\t\"keycap_ten\",\n\t\t\t\"100\",\n\t\t\t\"capital_abcd\",\n\t\t\t\"abcd\",\n\t\t\t\"1234\",\n\t\t\t\"symbols\",\n\t\t\t\"abc\",\n\t\t\t\"a\",\n\t\t\t\"ab\",\n\t\t\t\"b\",\n\t\t\t\"cl\",\n\t\t\t\"cool\",\n\t\t\t\"free\",\n\t\t\t\"information_source\",\n\t\t\t\"id\",\n\t\t\t\"m\",\n\t\t\t\"new\",\n\t\t\t\"ng\",\n\t\t\t\"o2\",\n\t\t\t\"ok\",\n\t\t\t\"parking\",\n\t\t\t\"sos\",\n\t\t\t\"up\",\n\t\t\t\"vs\",\n\t\t\t\"koko\",\n\t\t\t\"sa\",\n\t\t\t\"u6708\",\n\t\t\t\"u6709\",\n\t\t\t\"u6307\",\n\t\t\t\"ideograph_advantage\",\n\t\t\t\"u5272\",\n\t\t\t\"u7121\",\n\t\t\t\"u7981\",\n\t\t\t\"accept\",\n\t\t\t\"u7533\",\n\t\t\t\"u5408\",\n\t\t\t\"u7a7a\",\n\t\t\t\"congratulations\",\n\t\t\t\"secret\",\n\t\t\t\"u55b6\",\n\t\t\t\"u6e80\",\n\t\t\t\"black_small_square\",\n\t\t\t\"white_small_square\",\n\t\t\t\"white_medium_square\",\n\t\t\t\"black_medium_square\",\n\t\t\t\"white_medium_small_square\",\n\t\t\t\"black_medium_small_square\",\n\t\t\t\"black_large_square\",\n\t\t\t\"white_large_square\",\n\t\t\t\"large_orange_diamond\",\n\t\t\t\"large_blue_diamond\",\n\t\t\t\"small_orange_diamond\",\n\t\t\t\"small_blue_diamond\",\n\t\t\t\"small_red_triangle\",\n\t\t\t\"small_red_triangle_down\",\n\t\t\t\"diamond_shape_with_a_dot_inside\",\n\t\t\t\"radio_button\",\n\t\t\t\"black_square_button\",\n\t\t\t\"white_square_button\",\n\t\t\t\"white_circle\",\n\t\t\t\"black_circle\",\n\t\t\t\"red_circle\",\n\t\t\t\"large_blue_circle\"\n\t\t]\n\t},\n\t{\n\t\tid: \"flags\",\n\t\tname: \"Flags\",\n\t\temojis: [\n\t\t\t\"checkered_flag\",\n\t\t\t\"cn\",\n\t\t\t\"crossed_flags\",\n\t\t\t\"de\",\n\t\t\t\"es\",\n\t\t\t\"flag-ac\",\n\t\t\t\"flag-ad\",\n\t\t\t\"flag-ae\",\n\t\t\t\"flag-af\",\n\t\t\t\"flag-ag\",\n\t\t\t\"flag-ai\",\n\t\t\t\"flag-al\",\n\t\t\t\"flag-am\",\n\t\t\t\"flag-ao\",\n\t\t\t\"flag-aq\",\n\t\t\t\"flag-ar\",\n\t\t\t\"flag-as\",\n\t\t\t\"flag-at\",\n\t\t\t\"flag-au\",\n\t\t\t\"flag-aw\",\n\t\t\t\"flag-ax\",\n\t\t\t\"flag-az\",\n\t\t\t\"flag-ba\",\n\t\t\t\"flag-bb\",\n\t\t\t\"flag-bd\",\n\t\t\t\"flag-be\",\n\t\t\t\"flag-bf\",\n\t\t\t\"flag-bg\",\n\t\t\t\"flag-bh\",\n\t\t\t\"flag-bi\",\n\t\t\t\"flag-bj\",\n\t\t\t\"flag-bl\",\n\t\t\t\"flag-bm\",\n\t\t\t\"flag-bn\",\n\t\t\t\"flag-bo\",\n\t\t\t\"flag-bq\",\n\t\t\t\"flag-br\",\n\t\t\t\"flag-bs\",\n\t\t\t\"flag-bt\",\n\t\t\t\"flag-bv\",\n\t\t\t\"flag-bw\",\n\t\t\t\"flag-by\",\n\t\t\t\"flag-bz\",\n\t\t\t\"flag-ca\",\n\t\t\t\"flag-cc\",\n\t\t\t\"flag-cd\",\n\t\t\t\"flag-cf\",\n\t\t\t\"flag-cg\",\n\t\t\t\"flag-ch\",\n\t\t\t\"flag-ci\",\n\t\t\t\"flag-ck\",\n\t\t\t\"flag-cl\",\n\t\t\t\"flag-cm\",\n\t\t\t\"flag-co\",\n\t\t\t\"flag-cp\",\n\t\t\t\"flag-cr\",\n\t\t\t\"flag-cu\",\n\t\t\t\"flag-cv\",\n\t\t\t\"flag-cw\",\n\t\t\t\"flag-cx\",\n\t\t\t\"flag-cy\",\n\t\t\t\"flag-cz\",\n\t\t\t\"flag-dg\",\n\t\t\t\"flag-dj\",\n\t\t\t\"flag-dk\",\n\t\t\t\"flag-dm\",\n\t\t\t\"flag-do\",\n\t\t\t\"flag-dz\",\n\t\t\t\"flag-ea\",\n\t\t\t\"flag-ec\",\n\t\t\t\"flag-ee\",\n\t\t\t\"flag-eg\",\n\t\t\t\"flag-eh\",\n\t\t\t\"flag-england\",\n\t\t\t\"flag-er\",\n\t\t\t\"flag-et\",\n\t\t\t\"flag-eu\",\n\t\t\t\"flag-fi\",\n\t\t\t\"flag-fj\",\n\t\t\t\"flag-fk\",\n\t\t\t\"flag-fm\",\n\t\t\t\"flag-fo\",\n\t\t\t\"flag-ga\",\n\t\t\t\"flag-gd\",\n\t\t\t\"flag-ge\",\n\t\t\t\"flag-gf\",\n\t\t\t\"flag-gg\",\n\t\t\t\"flag-gh\",\n\t\t\t\"flag-gi\",\n\t\t\t\"flag-gl\",\n\t\t\t\"flag-gm\",\n\t\t\t\"flag-gn\",\n\t\t\t\"flag-gp\",\n\t\t\t\"flag-gq\",\n\t\t\t\"flag-gr\",\n\t\t\t\"flag-gs\",\n\t\t\t\"flag-gt\",\n\t\t\t\"flag-gu\",\n\t\t\t\"flag-gw\",\n\t\t\t\"flag-gy\",\n\t\t\t\"flag-hk\",\n\t\t\t\"flag-hm\",\n\t\t\t\"flag-hn\",\n\t\t\t\"flag-hr\",\n\t\t\t\"flag-ht\",\n\t\t\t\"flag-hu\",\n\t\t\t\"flag-ic\",\n\t\t\t\"flag-id\",\n\t\t\t\"flag-ie\",\n\t\t\t\"flag-il\",\n\t\t\t\"flag-im\",\n\t\t\t\"flag-in\",\n\t\t\t\"flag-io\",\n\t\t\t\"flag-iq\",\n\t\t\t\"flag-ir\",\n\t\t\t\"flag-is\",\n\t\t\t\"flag-je\",\n\t\t\t\"flag-jm\",\n\t\t\t\"flag-jo\",\n\t\t\t\"flag-ke\",\n\t\t\t\"flag-kg\",\n\t\t\t\"flag-kh\",\n\t\t\t\"flag-ki\",\n\t\t\t\"flag-km\",\n\t\t\t\"flag-kn\",\n\t\t\t\"flag-kp\",\n\t\t\t\"flag-kw\",\n\t\t\t\"flag-ky\",\n\t\t\t\"flag-kz\",\n\t\t\t\"flag-la\",\n\t\t\t\"flag-lb\",\n\t\t\t\"flag-lc\",\n\t\t\t\"flag-li\",\n\t\t\t\"flag-lk\",\n\t\t\t\"flag-lr\",\n\t\t\t\"flag-ls\",\n\t\t\t\"flag-lt\",\n\t\t\t\"flag-lu\",\n\t\t\t\"flag-lv\",\n\t\t\t\"flag-ly\",\n\t\t\t\"flag-ma\",\n\t\t\t\"flag-mc\",\n\t\t\t\"flag-md\",\n\t\t\t\"flag-me\",\n\t\t\t\"flag-mf\",\n\t\t\t\"flag-mg\",\n\t\t\t\"flag-mh\",\n\t\t\t\"flag-mk\",\n\t\t\t\"flag-ml\",\n\t\t\t\"flag-mm\",\n\t\t\t\"flag-mn\",\n\t\t\t\"flag-mo\",\n\t\t\t\"flag-mp\",\n\t\t\t\"flag-mq\",\n\t\t\t\"flag-mr\",\n\t\t\t\"flag-ms\",\n\t\t\t\"flag-mt\",\n\t\t\t\"flag-mu\",\n\t\t\t\"flag-mv\",\n\t\t\t\"flag-mw\",\n\t\t\t\"flag-mx\",\n\t\t\t\"flag-my\",\n\t\t\t\"flag-mz\",\n\t\t\t\"flag-na\",\n\t\t\t\"flag-nc\",\n\t\t\t\"flag-ne\",\n\t\t\t\"flag-nf\",\n\t\t\t\"flag-ng\",\n\t\t\t\"flag-ni\",\n\t\t\t\"flag-nl\",\n\t\t\t\"flag-no\",\n\t\t\t\"flag-np\",\n\t\t\t\"flag-nr\",\n\t\t\t\"flag-nu\",\n\t\t\t\"flag-nz\",\n\t\t\t\"flag-om\",\n\t\t\t\"flag-pa\",\n\t\t\t\"flag-pe\",\n\t\t\t\"flag-pf\",\n\t\t\t\"flag-pg\",\n\t\t\t\"flag-ph\",\n\t\t\t\"flag-pk\",\n\t\t\t\"flag-pl\",\n\t\t\t\"flag-pm\",\n\t\t\t\"flag-pn\",\n\t\t\t\"flag-pr\",\n\t\t\t\"flag-ps\",\n\t\t\t\"flag-pt\",\n\t\t\t\"flag-pw\",\n\t\t\t\"flag-py\",\n\t\t\t\"flag-qa\",\n\t\t\t\"flag-re\",\n\t\t\t\"flag-ro\",\n\t\t\t\"flag-rs\",\n\t\t\t\"flag-rw\",\n\t\t\t\"flag-sa\",\n\t\t\t\"flag-sb\",\n\t\t\t\"flag-sc\",\n\t\t\t\"flag-scotland\",\n\t\t\t\"flag-sd\",\n\t\t\t\"flag-se\",\n\t\t\t\"flag-sg\",\n\t\t\t\"flag-sh\",\n\t\t\t\"flag-si\",\n\t\t\t\"flag-sj\",\n\t\t\t\"flag-sk\",\n\t\t\t\"flag-sl\",\n\t\t\t\"flag-sm\",\n\t\t\t\"flag-sn\",\n\t\t\t\"flag-so\",\n\t\t\t\"flag-sr\",\n\t\t\t\"flag-ss\",\n\t\t\t\"flag-st\",\n\t\t\t\"flag-sv\",\n\t\t\t\"flag-sx\",\n\t\t\t\"flag-sy\",\n\t\t\t\"flag-sz\",\n\t\t\t\"flag-ta\",\n\t\t\t\"flag-tc\",\n\t\t\t\"flag-td\",\n\t\t\t\"flag-tf\",\n\t\t\t\"flag-tg\",\n\t\t\t\"flag-th\",\n\t\t\t\"flag-tj\",\n\t\t\t\"flag-tk\",\n\t\t\t\"flag-tl\",\n\t\t\t\"flag-tm\",\n\t\t\t\"flag-tn\",\n\t\t\t\"flag-to\",\n\t\t\t\"flag-tr\",\n\t\t\t\"flag-tt\",\n\t\t\t\"flag-tv\",\n\t\t\t\"flag-tw\",\n\t\t\t\"flag-tz\",\n\t\t\t\"flag-ua\",\n\t\t\t\"flag-ug\",\n\t\t\t\"flag-um\",\n\t\t\t\"flag-uy\",\n\t\t\t\"flag-uz\",\n\t\t\t\"flag-va\",\n\t\t\t\"flag-vc\",\n\t\t\t\"flag-ve\",\n\t\t\t\"flag-vg\",\n\t\t\t\"flag-vi\",\n\t\t\t\"flag-vn\",\n\t\t\t\"flag-vu\",\n\t\t\t\"flag-wales\",\n\t\t\t\"flag-wf\",\n\t\t\t\"flag-ws\",\n\t\t\t\"flag-xk\",\n\t\t\t\"flag-ye\",\n\t\t\t\"flag-yt\",\n\t\t\t\"flag-za\",\n\t\t\t\"flag-zm\",\n\t\t\t\"flag-zw\",\n\t\t\t\"fr\",\n\t\t\t\"gb\",\n\t\t\t\"it\",\n\t\t\t\"jp\",\n\t\t\t\"kr\",\n\t\t\t\"rainbow-flag\",\n\t\t\t\"ru\",\n\t\t\t\"triangular_flag_on_post\",\n\t\t\t\"us\",\n\t\t\t\"waving_black_flag\",\n\t\t\t\"waving_white_flag\"\n\t\t]\n\t}\n];\nvar emojis = {\n\t\"100\": {\n\t\ta: \"Hundred Points Symbol\",\n\t\tb: \"1F4AF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"score\",\n\t\t\t\"perfect\",\n\t\t\t\"numbers\",\n\t\t\t\"century\",\n\t\t\t\"exam\",\n\t\t\t\"quiz\",\n\t\t\t\"test\",\n\t\t\t\"pass\",\n\t\t\t\"hundred\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t26\n\t\t]\n\t},\n\t\"1234\": {\n\t\ta: \"Input Symbol for Numbers\",\n\t\tb: \"1F522\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t36\n\t\t]\n\t},\n\tmonkey_face: {\n\t\ta: \"Monkey Face\",\n\t\tb: \"1F435\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t31\n\t\t],\n\t\tl: [\n\t\t\t\":o)\"\n\t\t]\n\t},\n\tgrinning: {\n\t\ta: \"Grinning Face\",\n\t\tb: \"1F600\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"smile\",\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\":D\",\n\t\t\t\"grin\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t24\n\t\t],\n\t\tm: \":D\"\n\t},\n\tearth_africa: {\n\t\ta: \"Earth Globe Europe-Africa\",\n\t\tb: \"1F30D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"globe\",\n\t\t\t\"world\",\n\t\t\t\"international\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t5\n\t\t]\n\t},\n\tcheckered_flag: {\n\t\ta: \"Chequered Flag\",\n\t\tb: \"1F3C1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"contest\",\n\t\t\t\"finishline\",\n\t\t\t\"race\",\n\t\t\t\"gokart\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t27\n\t\t]\n\t},\n\tmute: {\n\t\ta: \"Speaker with Cancellation Stroke\",\n\t\tb: \"1F507\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"volume\",\n\t\t\t\"silence\",\n\t\t\t\"quiet\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t9\n\t\t]\n\t},\n\tjack_o_lantern: {\n\t\ta: \"Jack-O-Lantern\",\n\t\tb: \"1F383\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"halloween\",\n\t\t\t\"light\",\n\t\t\t\"pumpkin\",\n\t\t\t\"creepy\",\n\t\t\t\"fall\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t17\n\t\t]\n\t},\n\tatm: {\n\t\ta: \"Automated Teller Machine\",\n\t\tb: \"1F3E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"cash\",\n\t\t\t\"blue-square\",\n\t\t\t\"payment\",\n\t\t\t\"bank\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t4\n\t\t]\n\t},\n\tgrapes: {\n\t\ta: \"Grapes\",\n\t\tb: \"1F347\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"wine\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t9\n\t\t]\n\t},\n\tearth_americas: {\n\t\ta: \"Earth Globe Americas\",\n\t\tb: \"1F30E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"globe\",\n\t\t\t\"world\",\n\t\t\t\"USA\",\n\t\t\t\"international\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t6\n\t\t]\n\t},\n\tgrin: {\n\t\ta: \"Grinning Face with Smiling Eyes\",\n\t\tb: \"1F601\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"happy\",\n\t\t\t\"smile\",\n\t\t\t\"joy\",\n\t\t\t\"kawaii\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t25\n\t\t]\n\t},\n\tmelon: {\n\t\ta: \"Melon\",\n\t\tb: \"1F348\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t10\n\t\t]\n\t},\n\ttriangular_flag_on_post: {\n\t\ta: \"Triangular Flag on Post\",\n\t\tb: \"1F6A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mark\",\n\t\t\t\"milestone\",\n\t\t\t\"place\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t14\n\t\t]\n\t},\n\tmonkey: {\n\t\ta: \"Monkey\",\n\t\tb: \"1F412\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"banana\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t48\n\t\t]\n\t},\n\tchristmas_tree: {\n\t\ta: \"Christmas Tree\",\n\t\tb: \"1F384\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"festival\",\n\t\t\t\"vacation\",\n\t\t\t\"december\",\n\t\t\t\"xmas\",\n\t\t\t\"celebration\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t18\n\t\t]\n\t},\n\tput_litter_in_its_place: {\n\t\ta: \"Put Litter in Its Place Symbol\",\n\t\tb: \"1F6AE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"sign\",\n\t\t\t\"human\",\n\t\t\t\"info\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t19\n\t\t]\n\t},\n\tspeaker: {\n\t\ta: \"Speaker\",\n\t\tb: \"1F508\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"volume\",\n\t\t\t\"silence\",\n\t\t\t\"broadcast\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t10\n\t\t]\n\t},\n\tearth_asia: {\n\t\ta: \"Earth Globe Asia-Australia\",\n\t\tb: \"1F30F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"globe\",\n\t\t\t\"world\",\n\t\t\t\"east\",\n\t\t\t\"international\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t7\n\t\t]\n\t},\n\tcrossed_flags: {\n\t\ta: \"Crossed Flags\",\n\t\tb: \"1F38C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"border\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t31\n\t\t]\n\t},\n\tjoy: {\n\t\ta: \"Face with Tears of Joy\",\n\t\tb: \"1F602\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"cry\",\n\t\t\t\"tears\",\n\t\t\t\"weep\",\n\t\t\t\"happy\",\n\t\t\t\"happytears\",\n\t\t\t\"haha\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t26\n\t\t]\n\t},\n\tsound: {\n\t\ta: \"Speaker with One Sound Wave\",\n\t\tb: \"1F509\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"volume\",\n\t\t\t\"speaker\",\n\t\t\t\"broadcast\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t11\n\t\t]\n\t},\n\twatermelon: {\n\t\ta: \"Watermelon\",\n\t\tb: \"1F349\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"picnic\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t11\n\t\t]\n\t},\n\tgorilla: {\n\t\ta: \"Gorilla\",\n\t\tb: \"1F98D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t37\n\t\t],\n\t\to: 9\n\t},\n\tfireworks: {\n\t\ta: \"Fireworks\",\n\t\tb: \"1F386\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"festival\",\n\t\t\t\"carnival\",\n\t\t\t\"congratulations\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t25\n\t\t]\n\t},\n\tpotable_water: {\n\t\ta: \"Potable Water Symbol\",\n\t\tb: \"1F6B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"liquid\",\n\t\t\t\"restroom\",\n\t\t\t\"cleaning\",\n\t\t\t\"faucet\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t21\n\t\t]\n\t},\n\twheelchair: {\n\t\ta: \"Wheelchair Symbol\",\n\t\tb: \"267F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"disabled\",\n\t\t\t\"a11y\",\n\t\t\t\"accessibility\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t10\n\t\t],\n\t\to: 4\n\t},\n\trolling_on_the_floor_laughing: {\n\t\ta: \"Rolling on the Floor Laughing\",\n\t\tb: \"1F923\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t26\n\t\t],\n\t\to: 9\n\t},\n\tloud_sound: {\n\t\ta: \"Speaker with Three Sound Waves\",\n\t\tb: \"1F50A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"volume\",\n\t\t\t\"noise\",\n\t\t\t\"noisy\",\n\t\t\t\"speaker\",\n\t\t\t\"broadcast\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t12\n\t\t]\n\t},\n\twaving_black_flag: {\n\t\ta: \"Waving Black Flag\",\n\t\tb: \"1F3F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t19\n\t\t],\n\t\to: 7\n\t},\n\ttangerine: {\n\t\ta: \"Tangerine\",\n\t\tb: \"1F34A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"orange\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t12\n\t\t]\n\t},\n\tdog: {\n\t\ta: \"Dog Face\",\n\t\tb: \"1F436\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"friend\",\n\t\t\t\"nature\",\n\t\t\t\"woof\",\n\t\t\t\"puppy\",\n\t\t\t\"pet\",\n\t\t\t\"faithful\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t32\n\t\t]\n\t},\n\tsparkler: {\n\t\ta: \"Firework Sparkler\",\n\t\tb: \"1F387\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stars\",\n\t\t\t\"night\",\n\t\t\t\"shine\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t26\n\t\t]\n\t},\n\tglobe_with_meridians: {\n\t\ta: \"Globe with Meridians\",\n\t\tb: \"1F310\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"earth\",\n\t\t\t\"international\",\n\t\t\t\"world\",\n\t\t\t\"internet\",\n\t\t\t\"interweb\",\n\t\t\t\"i18n\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t8\n\t\t]\n\t},\n\tsmiley: {\n\t\ta: \"Smiling Face with Open Mouth\",\n\t\tb: \"1F603\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\"haha\",\n\t\t\t\":D\",\n\t\t\t\":)\",\n\t\t\t\"smile\",\n\t\t\t\"funny\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t27\n\t\t],\n\t\tl: [\n\t\t\t\"=)\",\n\t\t\t\"=-)\"\n\t\t],\n\t\tm: \":)\"\n\t},\n\tloudspeaker: {\n\t\ta: \"Public Address Loudspeaker\",\n\t\tb: \"1F4E2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"volume\",\n\t\t\t\"sound\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t25\n\t\t]\n\t},\n\tsparkles: {\n\t\ta: \"Sparkles\",\n\t\tb: \"2728\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stars\",\n\t\t\t\"shine\",\n\t\t\t\"shiny\",\n\t\t\t\"cool\",\n\t\t\t\"awesome\",\n\t\t\t\"good\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t48\n\t\t]\n\t},\n\tdog2: {\n\t\ta: \"Dog\",\n\t\tb: \"1F415\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"friend\",\n\t\t\t\"doge\",\n\t\t\t\"pet\",\n\t\t\t\"faithful\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t51\n\t\t]\n\t},\n\twaving_white_flag: {\n\t\ta: \"Waving White Flag\",\n\t\tb: \"1F3F3-FE0F\",\n\t\tc: \"1F3F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t15\n\t\t],\n\t\to: 7\n\t},\n\tworld_map: {\n\t\ta: \"World Map\",\n\t\tb: \"1F5FA-FE0F\",\n\t\tc: \"1F5FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"location\",\n\t\t\t\"direction\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\tlemon: {\n\t\ta: \"Lemon\",\n\t\tb: \"1F34B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t13\n\t\t]\n\t},\n\tmens: {\n\t\ta: \"Mens Symbol\",\n\t\tb: \"1F6B9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"toilet\",\n\t\t\t\"restroom\",\n\t\t\t\"wc\",\n\t\t\t\"blue-square\",\n\t\t\t\"gender\",\n\t\t\t\"male\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t29\n\t\t]\n\t},\n\twomens: {\n\t\ta: \"Womens Symbol\",\n\t\tb: \"1F6BA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"woman\",\n\t\t\t\"female\",\n\t\t\t\"toilet\",\n\t\t\t\"loo\",\n\t\t\t\"restroom\",\n\t\t\t\"gender\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t30\n\t\t]\n\t},\n\t\"rainbow-flag\": {\n\t\ta: \"Rainbow Flag\",\n\t\tb: \"1F3F3-FE0F-200D-1F308\",\n\t\tc: \"1F3F3-200D-1F308\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t12,\n\t\t\t14\n\t\t],\n\t\to: 7\n\t},\n\tsmile: {\n\t\ta: \"Smiling Face with Open Mouth and Smiling Eyes\",\n\t\tb: \"1F604\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\"funny\",\n\t\t\t\"haha\",\n\t\t\t\"laugh\",\n\t\t\t\"like\",\n\t\t\t\":D\",\n\t\t\t\":)\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t28\n\t\t],\n\t\tl: [\n\t\t\t\"C:\",\n\t\t\t\"c:\",\n\t\t\t\":D\",\n\t\t\t\":-D\"\n\t\t],\n\t\tm: \":)\"\n\t},\n\tbanana: {\n\t\ta: \"Banana\",\n\t\tb: \"1F34C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"monkey\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t14\n\t\t]\n\t},\n\tmega: {\n\t\ta: \"Cheering Megaphone\",\n\t\tb: \"1F4E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"speaker\",\n\t\t\t\"volume\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t26\n\t\t]\n\t},\n\tjapan: {\n\t\ta: \"Silhouette of Japan\",\n\t\tb: \"1F5FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"japanese\",\n\t\t\t\"asia\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t22\n\t\t]\n\t},\n\tpoodle: {\n\t\ta: \"Poodle\",\n\t\tb: \"1F429\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dog\",\n\t\t\t\"animal\",\n\t\t\t\"101\",\n\t\t\t\"nature\",\n\t\t\t\"pet\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t19\n\t\t]\n\t},\n\tballoon: {\n\t\ta: \"Balloon\",\n\t\tb: \"1F388\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"party\",\n\t\t\t\"celebration\",\n\t\t\t\"birthday\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t27\n\t\t]\n\t},\n\t\"flag-ac\": {\n\t\ta: \"Ascension Island Flag\",\n\t\tb: \"1F1E6-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t31\n\t\t]\n\t},\n\tsweat_smile: {\n\t\ta: \"Smiling Face with Open Mouth and Cold Sweat\",\n\t\tb: \"1F605\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"hot\",\n\t\t\t\"happy\",\n\t\t\t\"laugh\",\n\t\t\t\"sweat\",\n\t\t\t\"smile\",\n\t\t\t\"relief\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t29\n\t\t]\n\t},\n\tpineapple: {\n\t\ta: \"Pineapple\",\n\t\tb: \"1F34D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t15\n\t\t]\n\t},\n\trestroom: {\n\t\ta: \"Restroom\",\n\t\tb: \"1F6BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"toilet\",\n\t\t\t\"refresh\",\n\t\t\t\"wc\",\n\t\t\t\"gender\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t31\n\t\t]\n\t},\n\tpostal_horn: {\n\t\ta: \"Postal Horn\",\n\t\tb: \"1F4EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"instrument\",\n\t\t\t\"music\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t38\n\t\t]\n\t},\n\twolf: {\n\t\ta: \"Wolf Face\",\n\t\tb: \"1F43A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"wild\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t36\n\t\t]\n\t},\n\ttada: {\n\t\ta: \"Party Popper\",\n\t\tb: \"1F389\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"party\",\n\t\t\t\"congratulations\",\n\t\t\t\"birthday\",\n\t\t\t\"magic\",\n\t\t\t\"circus\",\n\t\t\t\"celebration\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t28\n\t\t]\n\t},\n\tsnow_capped_mountain: {\n\t\ta: \"Snow Capped Mountain\",\n\t\tb: \"1F3D4-FE0F\",\n\t\tc: \"1F3D4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t37\n\t\t],\n\t\to: 7\n\t},\n\tlaughing: {\n\t\ta: \"Smiling Face with Open Mouth and Tightly-Closed Eyes\",\n\t\tb: \"1F606\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\"lol\",\n\t\t\t\"satisfied\",\n\t\t\t\"haha\",\n\t\t\t\"face\",\n\t\t\t\"glad\",\n\t\t\t\"XD\",\n\t\t\t\"laugh\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\tl: [\n\t\t\t\":>\",\n\t\t\t\":->\"\n\t\t],\n\t\tn: [\n\t\t\t\"satisfied\"\n\t\t]\n\t},\n\tapple: {\n\t\ta: \"Red Apple\",\n\t\tb: \"1F34E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"mac\",\n\t\t\t\"school\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t16\n\t\t]\n\t},\n\t\"flag-ad\": {\n\t\ta: \"Andorra Flag\",\n\t\tb: \"1F1E6-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t32\n\t\t]\n\t},\n\tfox_face: {\n\t\ta: \"Fox Face\",\n\t\tb: \"1F98A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"face\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t34\n\t\t],\n\t\to: 9\n\t},\n\tconfetti_ball: {\n\t\ta: \"Confetti Ball\",\n\t\tb: \"1F38A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"festival\",\n\t\t\t\"party\",\n\t\t\t\"birthday\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t29\n\t\t]\n\t},\n\tbell: {\n\t\ta: \"Bell\",\n\t\tb: \"1F514\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"notification\",\n\t\t\t\"christmas\",\n\t\t\t\"xmas\",\n\t\t\t\"chime\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t22\n\t\t]\n\t},\n\tmountain: {\n\t\ta: \"Mountain\",\n\t\tb: \"26F0-FE0F\",\n\t\tc: \"26F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"nature\",\n\t\t\t\"environment\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t38\n\t\t],\n\t\to: 5\n\t},\n\tbaby_symbol: {\n\t\ta: \"Baby Symbol\",\n\t\tb: \"1F6BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"orange-square\",\n\t\t\t\"child\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t32\n\t\t]\n\t},\n\twc: {\n\t\ta: \"Water Closet\",\n\t\tb: \"1F6BE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"toilet\",\n\t\t\t\"restroom\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t34\n\t\t]\n\t},\n\twink: {\n\t\ta: \"Winking Face\",\n\t\tb: \"1F609\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"happy\",\n\t\t\t\"mischievous\",\n\t\t\t\"secret\",\n\t\t\t\";)\",\n\t\t\t\"smile\",\n\t\t\t\"eye\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t33\n\t\t],\n\t\tl: [\n\t\t\t\";)\",\n\t\t\t\";-)\"\n\t\t],\n\t\tm: \";)\"\n\t},\n\tno_bell: {\n\t\ta: \"Bell with Cancellation Stroke\",\n\t\tb: \"1F515\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"volume\",\n\t\t\t\"mute\",\n\t\t\t\"quiet\",\n\t\t\t\"silent\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t23\n\t\t]\n\t},\n\tgreen_apple: {\n\t\ta: \"Green Apple\",\n\t\tb: \"1F34F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t17\n\t\t]\n\t},\n\ttanabata_tree: {\n\t\ta: \"Tanabata Tree\",\n\t\tb: \"1F38B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"branch\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-ae\": {\n\t\ta: \"United Arab Emirates Flag\",\n\t\tb: \"1F1E6-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t33\n\t\t]\n\t},\n\tvolcano: {\n\t\ta: \"Volcano\",\n\t\tb: \"1F30B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"nature\",\n\t\t\t\"disaster\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t3\n\t\t]\n\t},\n\tcat: {\n\t\ta: \"Cat Face\",\n\t\tb: \"1F431\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"meow\",\n\t\t\t\"nature\",\n\t\t\t\"pet\",\n\t\t\t\"kitten\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t27\n\t\t]\n\t},\n\t\"flag-af\": {\n\t\ta: \"Afghanistan Flag\",\n\t\tb: \"1F1E6-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t34\n\t\t]\n\t},\n\tmusical_score: {\n\t\ta: \"Musical Score\",\n\t\tb: \"1F3BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"treble\",\n\t\t\t\"clef\",\n\t\t\t\"compose\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t22\n\t\t]\n\t},\n\tblush: {\n\t\ta: \"Smiling Face with Smiling Eyes\",\n\t\tb: \"1F60A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"smile\",\n\t\t\t\"happy\",\n\t\t\t\"flushed\",\n\t\t\t\"crush\",\n\t\t\t\"embarrassed\",\n\t\t\t\"shy\",\n\t\t\t\"joy\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t34\n\t\t],\n\t\tm: \":)\"\n\t},\n\tpear: {\n\t\ta: \"Pear\",\n\t\tb: \"1F350\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t18\n\t\t]\n\t},\n\tbamboo: {\n\t\ta: \"Pine Decoration\",\n\t\tb: \"1F38D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"vegetable\",\n\t\t\t\"panda\",\n\t\t\t\"pine_decoration\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t32\n\t\t]\n\t},\n\tpassport_control: {\n\t\ta: \"Passport Control\",\n\t\tb: \"1F6C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"custom\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t43\n\t\t]\n\t},\n\tmount_fuji: {\n\t\ta: \"Mount Fuji\",\n\t\tb: \"1F5FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"mountain\",\n\t\t\t\"nature\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t19\n\t\t]\n\t},\n\tcat2: {\n\t\ta: \"Cat\",\n\t\tb: \"1F408\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"meow\",\n\t\t\t\"pet\",\n\t\t\t\"cats\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t38\n\t\t]\n\t},\n\tmusical_note: {\n\t\ta: \"Musical Note\",\n\t\tb: \"1F3B5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"score\",\n\t\t\t\"tone\",\n\t\t\t\"sound\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t15\n\t\t]\n\t},\n\tdolls: {\n\t\ta: \"Japanese Dolls\",\n\t\tb: \"1F38E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"toy\",\n\t\t\t\"kimono\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t33\n\t\t]\n\t},\n\tlion_face: {\n\t\ta: \"Lion Face\",\n\t\tb: \"1F981\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t25\n\t\t],\n\t\to: 8\n\t},\n\tcamping: {\n\t\ta: \"Camping\",\n\t\tb: \"1F3D5-FE0F\",\n\t\tc: \"1F3D5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"outdoors\",\n\t\t\t\"tent\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t38\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-ag\": {\n\t\ta: \"Antigua & Barbuda Flag\",\n\t\tb: \"1F1E6-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t35\n\t\t]\n\t},\n\tcustoms: {\n\t\ta: \"Customs\",\n\t\tb: \"1F6C3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"passport\",\n\t\t\t\"border\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t44\n\t\t]\n\t},\n\tyum: {\n\t\ta: \"Face Savouring Delicious Food\",\n\t\tb: \"1F60B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\"tongue\",\n\t\t\t\"smile\",\n\t\t\t\"face\",\n\t\t\t\"silly\",\n\t\t\t\"yummy\",\n\t\t\t\"nom\",\n\t\t\t\"delicious\",\n\t\t\t\"savouring\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t35\n\t\t]\n\t},\n\tpeach: {\n\t\ta: \"Peach\",\n\t\tb: \"1F351\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t19\n\t\t]\n\t},\n\ttiger: {\n\t\ta: \"Tiger Face\",\n\t\tb: \"1F42F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cat\",\n\t\t\t\"danger\",\n\t\t\t\"wild\",\n\t\t\t\"nature\",\n\t\t\t\"roar\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t25\n\t\t]\n\t},\n\tnotes: {\n\t\ta: \"Multiple Musical Notes\",\n\t\tb: \"1F3B6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"score\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t16\n\t\t]\n\t},\n\tflags: {\n\t\ta: \"Carp Streamer\",\n\t\tb: \"1F38F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fish\",\n\t\t\t\"japanese\",\n\t\t\t\"koinobori\",\n\t\t\t\"carp\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t34\n\t\t]\n\t},\n\tbeach_with_umbrella: {\n\t\ta: \"Beach with Umbrella\",\n\t\tb: \"1F3D6-FE0F\",\n\t\tc: \"1F3D6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t39\n\t\t],\n\t\to: 7\n\t},\n\tcherries: {\n\t\ta: \"Cherries\",\n\t\tb: \"1F352\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"fruit\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t20\n\t\t]\n\t},\n\t\"flag-ai\": {\n\t\ta: \"Anguilla Flag\",\n\t\tb: \"1F1E6-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t36\n\t\t]\n\t},\n\tbaggage_claim: {\n\t\ta: \"Baggage Claim\",\n\t\tb: \"1F6C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"airport\",\n\t\t\t\"transport\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t45\n\t\t]\n\t},\n\tsunglasses: {\n\t\ta: \"Smiling Face with Sunglasses\",\n\t\tb: \"1F60E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"cool\",\n\t\t\t\"smile\",\n\t\t\t\"summer\",\n\t\t\t\"beach\",\n\t\t\t\"sunglass\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t38\n\t\t],\n\t\tl: [\n\t\t\t\"8)\"\n\t\t]\n\t},\n\tleft_luggage: {\n\t\ta: \"Left Luggage\",\n\t\tb: \"1F6C5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"travel\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t46\n\t\t]\n\t},\n\twind_chime: {\n\t\ta: \"Wind Chime\",\n\t\tb: \"1F390\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"ding\",\n\t\t\t\"spring\",\n\t\t\t\"bell\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t35\n\t\t]\n\t},\n\tstrawberry: {\n\t\ta: \"Strawberry\",\n\t\tb: \"1F353\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t21\n\t\t]\n\t},\n\tdesert: {\n\t\ta: \"Desert\",\n\t\tb: \"1F3DC-FE0F\",\n\t\tc: \"1F3DC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"warm\",\n\t\t\t\"saharah\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t45\n\t\t],\n\t\to: 7\n\t},\n\tstudio_microphone: {\n\t\ta: \"Studio Microphone\",\n\t\tb: \"1F399-FE0F\",\n\t\tc: \"1F399\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sing\",\n\t\t\t\"recording\",\n\t\t\t\"artist\",\n\t\t\t\"talkshow\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t41\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-al\": {\n\t\ta: \"Albania Flag\",\n\t\tb: \"1F1E6-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t37\n\t\t]\n\t},\n\ttiger2: {\n\t\ta: \"Tiger\",\n\t\tb: \"1F405\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"roar\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t35\n\t\t]\n\t},\n\theart_eyes: {\n\t\ta: \"Smiling Face with Heart-Shaped Eyes\",\n\t\tb: \"1F60D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"crush\",\n\t\t\t\"heart\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t37\n\t\t]\n\t},\n\tdesert_island: {\n\t\ta: \"Desert Island\",\n\t\tb: \"1F3DD-FE0F\",\n\t\tc: \"1F3DD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"tropical\",\n\t\t\t\"mojito\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t46\n\t\t],\n\t\to: 7\n\t},\n\tkiwifruit: {\n\t\ta: \"Kiwifruit\",\n\t\tb: \"1F95D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t9\n\t\t],\n\t\to: 9\n\t},\n\trice_scene: {\n\t\ta: \"Moon Viewing Ceremony\",\n\t\tb: \"1F391\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"japan\",\n\t\t\t\"asia\",\n\t\t\t\"tsukimi\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t36\n\t\t]\n\t},\n\tkissing_heart: {\n\t\ta: \"Face Throwing a Kiss\",\n\t\tb: \"1F618\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t48\n\t\t],\n\t\tl: [\n\t\t\t\":*\",\n\t\t\t\":-*\"\n\t\t]\n\t},\n\twarning: {\n\t\ta: \"Warning Sign\",\n\t\tb: \"26A0-FE0F\",\n\t\tc: \"26A0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"exclamation\",\n\t\t\t\"wip\",\n\t\t\t\"alert\",\n\t\t\t\"error\",\n\t\t\t\"problem\",\n\t\t\t\"issue\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t20\n\t\t],\n\t\to: 4\n\t},\n\t\"flag-am\": {\n\t\ta: \"Armenia Flag\",\n\t\tb: \"1F1E6-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t38\n\t\t]\n\t},\n\tleopard: {\n\t\ta: \"Leopard\",\n\t\tb: \"1F406\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t36\n\t\t]\n\t},\n\tlevel_slider: {\n\t\ta: \"Level Slider\",\n\t\tb: \"1F39A-FE0F\",\n\t\tc: \"1F39A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"scale\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t42\n\t\t],\n\t\to: 7\n\t},\n\thorse: {\n\t\ta: \"Horse Face\",\n\t\tb: \"1F434\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"brown\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t30\n\t\t]\n\t},\n\tchildren_crossing: {\n\t\ta: \"Children Crossing\",\n\t\tb: \"1F6B8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"school\",\n\t\t\t\"warning\",\n\t\t\t\"danger\",\n\t\t\t\"sign\",\n\t\t\t\"driving\",\n\t\t\t\"yellow-diamond\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t28\n\t\t]\n\t},\n\tribbon: {\n\t\ta: \"Ribbon\",\n\t\tb: \"1F380\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"decoration\",\n\t\t\t\"pink\",\n\t\t\t\"girl\",\n\t\t\t\"bowtie\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t14\n\t\t]\n\t},\n\tnational_park: {\n\t\ta: \"National Park\",\n\t\tb: \"1F3DE-FE0F\",\n\t\tc: \"1F3DE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"environment\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t47\n\t\t],\n\t\to: 7\n\t},\n\tcontrol_knobs: {\n\t\ta: \"Control Knobs\",\n\t\tb: \"1F39B-FE0F\",\n\t\tc: \"1F39B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"dial\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t43\n\t\t],\n\t\to: 7\n\t},\n\tkissing: {\n\t\ta: \"Kissing Face\",\n\t\tb: \"1F617\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"face\",\n\t\t\t\"3\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t47\n\t\t]\n\t},\n\ttomato: {\n\t\ta: \"Tomato\",\n\t\tb: \"1F345\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"vegetable\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t7\n\t\t]\n\t},\n\t\"flag-ao\": {\n\t\ta: \"Angola Flag\",\n\t\tb: \"1F1E6-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t39\n\t\t]\n\t},\n\tstadium: {\n\t\ta: \"Stadium\",\n\t\tb: \"1F3DF-FE0F\",\n\t\tc: \"1F3DF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"place\",\n\t\t\t\"sports\",\n\t\t\t\"concert\",\n\t\t\t\"venue\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t48\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-aq\": {\n\t\ta: \"Antarctica Flag\",\n\t\tb: \"1F1E6-1F1F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t40\n\t\t]\n\t},\n\tgift: {\n\t\ta: \"Wrapped Present\",\n\t\tb: \"1F381\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"present\",\n\t\t\t\"birthday\",\n\t\t\t\"christmas\",\n\t\t\t\"xmas\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t15\n\t\t]\n\t},\n\tno_entry: {\n\t\ta: \"No Entry\",\n\t\tb: \"26D4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"limit\",\n\t\t\t\"security\",\n\t\t\t\"privacy\",\n\t\t\t\"bad\",\n\t\t\t\"denied\",\n\t\t\t\"stop\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t35\n\t\t],\n\t\to: 5\n\t},\n\tkissing_smiling_eyes: {\n\t\ta: \"Kissing Face with Smiling Eyes\",\n\t\tb: \"1F619\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t49\n\t\t]\n\t},\n\tcoconut: {\n\t\ta: \"Coconut\",\n\t\tb: \"1F965\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t17\n\t\t],\n\t\to: 10\n\t},\n\tracehorse: {\n\t\ta: \"Horse\",\n\t\tb: \"1F40E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"gamble\",\n\t\t\t\"luck\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t44\n\t\t]\n\t},\n\tmicrophone: {\n\t\ta: \"Microphone\",\n\t\tb: \"1F3A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"music\",\n\t\t\t\"PA\",\n\t\t\t\"sing\",\n\t\t\t\"talkshow\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t50\n\t\t]\n\t},\n\tclassical_building: {\n\t\ta: \"Classical Building\",\n\t\tb: \"1F3DB-FE0F\",\n\t\tc: \"1F3DB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"art\",\n\t\t\t\"culture\",\n\t\t\t\"history\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\tno_entry_sign: {\n\t\ta: \"No Entry Sign\",\n\t\tb: \"1F6AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"forbid\",\n\t\t\t\"stop\",\n\t\t\t\"limit\",\n\t\t\t\"denied\",\n\t\t\t\"disallow\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t16\n\t\t]\n\t},\n\treminder_ribbon: {\n\t\ta: \"Reminder Ribbon\",\n\t\tb: \"1F397-FE0F\",\n\t\tc: \"1F397\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"cause\",\n\t\t\t\"support\",\n\t\t\t\"awareness\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t40\n\t\t],\n\t\to: 7\n\t},\n\tkissing_closed_eyes: {\n\t\ta: \"Kissing Face with Closed Eyes\",\n\t\tb: \"1F61A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t50\n\t\t]\n\t},\n\tunicorn_face: {\n\t\ta: \"Unicorn Face\",\n\t\tb: \"1F984\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t28\n\t\t],\n\t\to: 8\n\t},\n\t\"flag-ar\": {\n\t\ta: \"Argentina Flag\",\n\t\tb: \"1F1E6-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t41\n\t\t]\n\t},\n\theadphones: {\n\t\ta: \"Headphone\",\n\t\tb: \"1F3A7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"score\",\n\t\t\t\"gadgets\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t1\n\t\t]\n\t},\n\tavocado: {\n\t\ta: \"Avocado\",\n\t\tb: \"1F951\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t49\n\t\t],\n\t\to: 9\n\t},\n\trelaxed: {\n\t\ta: \"White Smiling Face\",\n\t\tb: \"263A-FE0F\",\n\t\tc: \"263A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"blush\",\n\t\t\t\"massage\",\n\t\t\t\"happiness\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t41\n\t\t],\n\t\to: 1\n\t},\n\tzebra_face: {\n\t\ta: \"Zebra Face\",\n\t\tb: \"1F993\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t43\n\t\t],\n\t\to: 10\n\t},\n\teggplant: {\n\t\ta: \"Aubergine\",\n\t\tb: \"1F346\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"nature\",\n\t\t\t\"food\",\n\t\t\t\"aubergine\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t8\n\t\t]\n\t},\n\tradio: {\n\t\ta: \"Radio\",\n\t\tb: \"1F4FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"communication\",\n\t\t\t\"music\",\n\t\t\t\"podcast\",\n\t\t\t\"program\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t50\n\t\t]\n\t},\n\tbuilding_construction: {\n\t\ta: \"Building Construction\",\n\t\tb: \"1F3D7-FE0F\",\n\t\tc: \"1F3D7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"wip\",\n\t\t\t\"working\",\n\t\t\t\"progress\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t40\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-as\": {\n\t\ta: \"American Samoa Flag\",\n\t\tb: \"1F1E6-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t42\n\t\t]\n\t},\n\tadmission_tickets: {\n\t\ta: \"Admission Tickets\",\n\t\tb: \"1F39F-FE0F\",\n\t\tc: \"1F39F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t8,\n\t\t\t45\n\t\t],\n\t\to: 7\n\t},\n\tno_bicycles: {\n\t\ta: \"No Bicycles\",\n\t\tb: \"1F6B3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cyclist\",\n\t\t\t\"prohibited\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t24\n\t\t]\n\t},\n\tno_smoking: {\n\t\ta: \"No Smoking Symbol\",\n\t\tb: \"1F6AD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cigarette\",\n\t\t\t\"blue-square\",\n\t\t\t\"smell\",\n\t\t\t\"smoke\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t18\n\t\t]\n\t},\n\tslightly_smiling_face: {\n\t\ta: \"Slightly Smiling Face\",\n\t\tb: \"1F642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"smile\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t38\n\t\t],\n\t\tl: [\n\t\t\t\":)\",\n\t\t\t\"(:\",\n\t\t\t\":-)\"\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-at\": {\n\t\ta: \"Austria Flag\",\n\t\tb: \"1F1E6-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t43\n\t\t]\n\t},\n\tticket: {\n\t\ta: \"Ticket\",\n\t\tb: \"1F3AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"event\",\n\t\t\t\"concert\",\n\t\t\t\"pass\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t5\n\t\t]\n\t},\n\tsaxophone: {\n\t\ta: \"Saxophone\",\n\t\tb: \"1F3B7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"instrument\",\n\t\t\t\"jazz\",\n\t\t\t\"blues\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t17\n\t\t]\n\t},\n\tdeer: {\n\t\ta: \"Deer\",\n\t\tb: \"1F98C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"horns\",\n\t\t\t\"venison\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t36\n\t\t],\n\t\to: 9\n\t},\n\thouse_buildings: {\n\t\ta: \"House Buildings\",\n\t\tb: \"1F3D8-FE0F\",\n\t\tc: \"1F3D8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t41\n\t\t],\n\t\to: 7\n\t},\n\tpotato: {\n\t\ta: \"Potato\",\n\t\tb: \"1F954\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"tuber\",\n\t\t\t\"vegatable\",\n\t\t\t\"starch\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t0\n\t\t],\n\t\to: 9\n\t},\n\tguitar: {\n\t\ta: \"Guitar\",\n\t\tb: \"1F3B8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"instrument\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t18\n\t\t]\n\t},\n\tcarrot: {\n\t\ta: \"Carrot\",\n\t\tb: \"1F955\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"food\",\n\t\t\t\"orange\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t1\n\t\t],\n\t\to: 9\n\t},\n\tcityscape: {\n\t\ta: \"Cityscape\",\n\t\tb: \"1F3D9-FE0F\",\n\t\tc: \"1F3D9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"night life\",\n\t\t\t\"urban\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t42\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-au\": {\n\t\ta: \"Australia Flag\",\n\t\tb: \"1F1E6-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t44\n\t\t]\n\t},\n\tdo_not_litter: {\n\t\ta: \"Do Not Litter Symbol\",\n\t\tb: \"1F6AF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"trash\",\n\t\t\t\"bin\",\n\t\t\t\"garbage\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t20\n\t\t]\n\t},\n\thugging_face: {\n\t\ta: \"Hugging Face\",\n\t\tb: \"1F917\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t31\n\t\t],\n\t\to: 8\n\t},\n\tcow: {\n\t\ta: \"Cow Face\",\n\t\tb: \"1F42E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beef\",\n\t\t\t\"ox\",\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"moo\",\n\t\t\t\"milk\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t24\n\t\t]\n\t},\n\tmedal: {\n\t\ta: \"Medal\",\n\t\tb: \"1F396-FE0F\",\n\t\tc: \"1F396\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t8,\n\t\t\t39\n\t\t],\n\t\to: 7\n\t},\n\tmusical_keyboard: {\n\t\ta: \"Musical Keyboard\",\n\t\tb: \"1F3B9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"piano\",\n\t\t\t\"instrument\",\n\t\t\t\"compose\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t19\n\t\t]\n\t},\n\tcorn: {\n\t\ta: \"Ear of Maize\",\n\t\tb: \"1F33D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"vegetable\",\n\t\t\t\"plant\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t51\n\t\t]\n\t},\n\tderelict_house_building: {\n\t\ta: \"Derelict House Building\",\n\t\tb: \"1F3DA-FE0F\",\n\t\tc: \"1F3DA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t43\n\t\t],\n\t\to: 7\n\t},\n\t\"non-potable_water\": {\n\t\ta: \"Non-Potable Water Symbol\",\n\t\tb: \"1F6B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"faucet\",\n\t\t\t\"tap\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t22\n\t\t]\n\t},\n\ttrophy: {\n\t\ta: \"Trophy\",\n\t\tb: \"1F3C6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"win\",\n\t\t\t\"award\",\n\t\t\t\"contest\",\n\t\t\t\"place\",\n\t\t\t\"ftw\",\n\t\t\t\"ceremony\"\n\t\t],\n\t\tk: [\n\t\t\t10,\n\t\t\t19\n\t\t]\n\t},\n\t\"flag-aw\": {\n\t\ta: \"Aruba Flag\",\n\t\tb: \"1F1E6-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t45\n\t\t]\n\t},\n\t\"star-struck\": {\n\t\ta: \"Grinning Face with Star Eyes\",\n\t\tb: \"1F929\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t49\n\t\t],\n\t\tn: [\n\t\t\t\"grinning_face_with_star_eyes\"\n\t\t],\n\t\to: 10\n\t},\n\tox: {\n\t\ta: \"Ox\",\n\t\tb: \"1F402\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cow\",\n\t\t\t\"beef\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t32\n\t\t]\n\t},\n\ttrumpet: {\n\t\ta: \"Trumpet\",\n\t\tb: \"1F3BA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"brass\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t20\n\t\t]\n\t},\n\thot_pepper: {\n\t\ta: \"Hot Pepper\",\n\t\tb: \"1F336-FE0F\",\n\t\tc: \"1F336\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"spicy\",\n\t\t\t\"chilli\",\n\t\t\t\"chili\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\tsports_medal: {\n\t\ta: \"Sports Medal\",\n\t\tb: \"1F3C5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-ax\": {\n\t\ta: \"Åland Islands Flag\",\n\t\tb: \"1F1E6-1F1FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t46\n\t\t]\n\t},\n\twater_buffalo: {\n\t\ta: \"Water Buffalo\",\n\t\tb: \"1F403\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"ox\",\n\t\t\t\"cow\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t33\n\t\t]\n\t},\n\tno_pedestrians: {\n\t\ta: \"No Pedestrians\",\n\t\tb: \"1F6B7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"rules\",\n\t\t\t\"crossing\",\n\t\t\t\"walking\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t27\n\t\t]\n\t},\n\tthinking_face: {\n\t\ta: \"Thinking Face\",\n\t\tb: \"1F914\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t28\n\t\t],\n\t\to: 8\n\t},\n\thouse: {\n\t\ta: \"House Building\",\n\t\tb: \"1F3E0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"home\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t49\n\t\t]\n\t},\n\tno_mobile_phones: {\n\t\ta: \"No Mobile Phones\",\n\t\tb: \"1F4F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"iphone\",\n\t\t\t\"mute\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t44\n\t\t]\n\t},\n\t\"flag-az\": {\n\t\ta: \"Azerbaijan Flag\",\n\t\tb: \"1F1E6-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t47\n\t\t]\n\t},\n\tfirst_place_medal: {\n\t\ta: \"First Place Medal\",\n\t\tb: \"1F947\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t42\n\t\t],\n\t\to: 9\n\t},\n\thouse_with_garden: {\n\t\ta: \"House with Garden\",\n\t\tb: \"1F3E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"home\",\n\t\t\t\"plant\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t50\n\t\t]\n\t},\n\tviolin: {\n\t\ta: \"Violin\",\n\t\tb: \"1F3BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"instrument\",\n\t\t\t\"orchestra\",\n\t\t\t\"symphony\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t21\n\t\t]\n\t},\n\tface_with_raised_eyebrow: {\n\t\ta: \"Face with One Eyebrow Raised\",\n\t\tb: \"1F928\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t48\n\t\t],\n\t\tn: [\n\t\t\t\"face_with_one_eyebrow_raised\"\n\t\t],\n\t\to: 10\n\t},\n\tcucumber: {\n\t\ta: \"Cucumber\",\n\t\tb: \"1F952\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"pickle\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t50\n\t\t],\n\t\to: 9\n\t},\n\tcow2: {\n\t\ta: \"Cow\",\n\t\tb: \"1F404\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beef\",\n\t\t\t\"ox\",\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"moo\",\n\t\t\t\"milk\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t34\n\t\t]\n\t},\n\t\"flag-ba\": {\n\t\ta: \"Bosnia & Herzegovina Flag\",\n\t\tb: \"1F1E7-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t0,\n\t\t\t48\n\t\t]\n\t},\n\tpig: {\n\t\ta: \"Pig Face\",\n\t\tb: \"1F437\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"oink\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t33\n\t\t]\n\t},\n\tdrum_with_drumsticks: {\n\t\ta: \"Drum with Drumsticks\",\n\t\tb: \"1F941\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t37\n\t\t],\n\t\to: 9\n\t},\n\tunderage: {\n\t\ta: \"No One Under Eighteen Symbol\",\n\t\tb: \"1F51E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"18\",\n\t\t\t\"drink\",\n\t\t\t\"pub\",\n\t\t\t\"night\",\n\t\t\t\"minor\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t32\n\t\t]\n\t},\n\tbroccoli: {\n\t\ta: \"Broccoli\",\n\t\tb: \"1F966\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t18\n\t\t],\n\t\to: 10\n\t},\n\toffice: {\n\t\ta: \"Office Building\",\n\t\tb: \"1F3E2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"bureau\",\n\t\t\t\"work\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t51\n\t\t]\n\t},\n\tsecond_place_medal: {\n\t\ta: \"Second Place Medal\",\n\t\tb: \"1F948\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t43\n\t\t],\n\t\to: 9\n\t},\n\tneutral_face: {\n\t\ta: \"Neutral Face\",\n\t\tb: \"1F610\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"indifference\",\n\t\t\t\"meh\",\n\t\t\t\":|\",\n\t\t\t\"neutral\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t40\n\t\t],\n\t\tl: [\n\t\t\t\":|\",\n\t\t\t\":-|\"\n\t\t]\n\t},\n\tthird_place_medal: {\n\t\ta: \"Third Place Medal\",\n\t\tb: \"1F949\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t44\n\t\t],\n\t\to: 9\n\t},\n\tmushroom: {\n\t\ta: \"Mushroom\",\n\t\tb: \"1F344\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"vegetable\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-bb\": {\n\t\ta: \"Barbados Flag\",\n\t\tb: \"1F1E7-1F1E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t49\n\t\t]\n\t},\n\tradioactive_sign: {\n\t\ta: \"Radioactive Sign\",\n\t\tb: \"2622-FE0F\",\n\t\tc: \"2622\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t33\n\t\t],\n\t\to: 1\n\t},\n\tpig2: {\n\t\ta: \"Pig\",\n\t\tb: \"1F416\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t0\n\t\t]\n\t},\n\texpressionless: {\n\t\ta: \"Expressionless Face\",\n\t\tb: \"1F611\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"indifferent\",\n\t\t\t\"-_-\",\n\t\t\t\"meh\",\n\t\t\t\"deadpan\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t41\n\t\t]\n\t},\n\tiphone: {\n\t\ta: \"Mobile Phone\",\n\t\tb: \"1F4F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"apple\",\n\t\t\t\"gadgets\",\n\t\t\t\"dial\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t40\n\t\t]\n\t},\n\tpost_office: {\n\t\ta: \"Japanese Post Office\",\n\t\tb: \"1F3E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"envelope\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t0\n\t\t]\n\t},\n\teuropean_post_office: {\n\t\ta: \"European Post Office\",\n\t\tb: \"1F3E4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"email\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t1\n\t\t]\n\t},\n\tsoccer: {\n\t\ta: \"Soccer Ball\",\n\t\tb: \"26BD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"football\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t26\n\t\t],\n\t\to: 5\n\t},\n\tboar: {\n\t\ta: \"Boar\",\n\t\tb: \"1F417\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t1\n\t\t]\n\t},\n\tpeanuts: {\n\t\ta: \"Peanuts\",\n\t\tb: \"1F95C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"nut\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t8\n\t\t],\n\t\to: 9\n\t},\n\tcalling: {\n\t\ta: \"Mobile Phone with Rightwards Arrow at Left\",\n\t\tb: \"1F4F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"iphone\",\n\t\t\t\"incoming\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t41\n\t\t]\n\t},\n\tbiohazard_sign: {\n\t\ta: \"Biohazard Sign\",\n\t\tb: \"2623-FE0F\",\n\t\tc: \"2623\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t34\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-bd\": {\n\t\ta: \"Bangladesh Flag\",\n\t\tb: \"1F1E7-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t50\n\t\t]\n\t},\n\tno_mouth: {\n\t\ta: \"Face Without Mouth\",\n\t\tb: \"1F636\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"hellokitty\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t26\n\t\t]\n\t},\n\tface_with_rolling_eyes: {\n\t\ta: \"Face with Rolling Eyes\",\n\t\tb: \"1F644\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t31,\n\t\t\t40\n\t\t],\n\t\to: 8\n\t},\n\tphone: {\n\t\ta: \"Black Telephone\",\n\t\tb: \"260E-FE0F\",\n\t\tc: \"260E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"communication\",\n\t\t\t\"dial\",\n\t\t\t\"telephone\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t21\n\t\t],\n\t\tn: [\n\t\t\t\"telephone\"\n\t\t],\n\t\to: 1\n\t},\n\tpig_nose: {\n\t\ta: \"Pig Nose\",\n\t\tb: \"1F43D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"oink\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t39\n\t\t]\n\t},\n\tchestnut: {\n\t\ta: \"Chestnut\",\n\t\tb: \"1F330\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"squirrel\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t38\n\t\t]\n\t},\n\tarrow_up: {\n\t\ta: \"Upwards Black Arrow\",\n\t\tb: \"2B06-FE0F\",\n\t\tc: \"2B06\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"continue\",\n\t\t\t\"top\",\n\t\t\t\"direction\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t18\n\t\t],\n\t\to: 4\n\t},\n\thospital: {\n\t\ta: \"Hospital\",\n\t\tb: \"1F3E5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"health\",\n\t\t\t\"surgery\",\n\t\t\t\"doctor\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-be\": {\n\t\ta: \"Belgium Flag\",\n\t\tb: \"1F1E7-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t51\n\t\t]\n\t},\n\tbaseball: {\n\t\ta: \"Baseball\",\n\t\tb: \"26BE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t27\n\t\t],\n\t\to: 5\n\t},\n\tsmirk: {\n\t\ta: \"Smirking Face\",\n\t\tb: \"1F60F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"smile\",\n\t\t\t\"mean\",\n\t\t\t\"prank\",\n\t\t\t\"smug\",\n\t\t\t\"sarcasm\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t39\n\t\t]\n\t},\n\tarrow_upper_right: {\n\t\ta: \"North East Arrow\",\n\t\tb: \"2197-FE0F\",\n\t\tc: \"2197\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"point\",\n\t\t\t\"direction\",\n\t\t\t\"diagonal\",\n\t\t\t\"northeast\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t36\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-bf\": {\n\t\ta: \"Burkina Faso Flag\",\n\t\tb: \"1F1E7-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t0\n\t\t]\n\t},\n\tbasketball: {\n\t\ta: \"Basketball and Hoop\",\n\t\tb: \"1F3C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\",\n\t\t\t\"NBA\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t26\n\t\t]\n\t},\n\tram: {\n\t\ta: \"Ram\",\n\t\tb: \"1F40F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"sheep\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t45\n\t\t]\n\t},\n\tbank: {\n\t\ta: \"Bank\",\n\t\tb: \"1F3E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"cash\",\n\t\t\t\"business\",\n\t\t\t\"enterprise\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t3\n\t\t]\n\t},\n\tbread: {\n\t\ta: \"Bread\",\n\t\tb: \"1F35E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"wheat\",\n\t\t\t\"breakfast\",\n\t\t\t\"toast\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t32\n\t\t]\n\t},\n\ttelephone_receiver: {\n\t\ta: \"Telephone Receiver\",\n\t\tb: \"1F4DE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"communication\",\n\t\t\t\"dial\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t21\n\t\t]\n\t},\n\tcroissant: {\n\t\ta: \"Croissant\",\n\t\tb: \"1F950\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"bread\",\n\t\t\t\"french\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t48\n\t\t],\n\t\to: 9\n\t},\n\tpager: {\n\t\ta: \"Pager\",\n\t\tb: \"1F4DF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bbcall\",\n\t\t\t\"oldschool\",\n\t\t\t\"90s\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t22\n\t\t]\n\t},\n\tsheep: {\n\t\ta: \"Sheep\",\n\t\tb: \"1F411\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"wool\",\n\t\t\t\"shipit\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t47\n\t\t]\n\t},\n\tarrow_right: {\n\t\ta: \"Black Rightwards Arrow\",\n\t\tb: \"27A1-FE0F\",\n\t\tc: \"27A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"next\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t12\n\t\t],\n\t\to: 1\n\t},\n\tpersevere: {\n\t\ta: \"Persevering Face\",\n\t\tb: \"1F623\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sick\",\n\t\t\t\"no\",\n\t\t\t\"upset\",\n\t\t\t\"oops\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t7\n\t\t]\n\t},\n\t\"flag-bg\": {\n\t\ta: \"Bulgaria Flag\",\n\t\tb: \"1F1E7-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\tvolleyball: {\n\t\ta: \"Volleyball\",\n\t\tb: \"1F3D0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t33\n\t\t],\n\t\to: 8\n\t},\n\thotel: {\n\t\ta: \"Hotel\",\n\t\tb: \"1F3E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"accomodation\",\n\t\t\t\"checkin\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t5\n\t\t]\n\t},\n\tarrow_lower_right: {\n\t\ta: \"South East Arrow\",\n\t\tb: \"2198-FE0F\",\n\t\tc: \"2198\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"diagonal\",\n\t\t\t\"southeast\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t37\n\t\t],\n\t\to: 1\n\t},\n\tgoat: {\n\t\ta: \"Goat\",\n\t\tb: \"1F410\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t46\n\t\t]\n\t},\n\t\"flag-bh\": {\n\t\ta: \"Bahrain Flag\",\n\t\tb: \"1F1E7-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t2\n\t\t]\n\t},\n\tlove_hotel: {\n\t\ta: \"Love Hotel\",\n\t\tb: \"1F3E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"dating\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t6\n\t\t]\n\t},\n\tdisappointed_relieved: {\n\t\ta: \"Disappointed but Relieved Face\",\n\t\tb: \"1F625\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"phew\",\n\t\t\t\"sweat\",\n\t\t\t\"nervous\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t9\n\t\t]\n\t},\n\tbaguette_bread: {\n\t\ta: \"Baguette Bread\",\n\t\tb: \"1F956\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"bread\",\n\t\t\t\"french\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t2\n\t\t],\n\t\to: 9\n\t},\n\tfootball: {\n\t\ta: \"American Football\",\n\t\tb: \"1F3C8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\",\n\t\t\t\"NFL\"\n\t\t],\n\t\tk: [\n\t\t\t10,\n\t\t\t26\n\t\t]\n\t},\n\tfax: {\n\t\ta: \"Fax Machine\",\n\t\tb: \"1F4E0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"communication\",\n\t\t\t\"technology\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t23\n\t\t]\n\t},\n\tconvenience_store: {\n\t\ta: \"Convenience Store\",\n\t\tb: \"1F3EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"shopping\",\n\t\t\t\"groceries\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t7\n\t\t]\n\t},\n\tdromedary_camel: {\n\t\ta: \"Dromedary Camel\",\n\t\tb: \"1F42A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"hot\",\n\t\t\t\"desert\",\n\t\t\t\"hump\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t20\n\t\t]\n\t},\n\tarrow_down: {\n\t\ta: \"Downwards Black Arrow\",\n\t\tb: \"2B07-FE0F\",\n\t\tc: \"2B07\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t19\n\t\t],\n\t\to: 4\n\t},\n\tbattery: {\n\t\ta: \"Battery\",\n\t\tb: \"1F50B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"power\",\n\t\t\t\"energy\",\n\t\t\t\"sustain\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t13\n\t\t]\n\t},\n\trugby_football: {\n\t\ta: \"Rugby Football\",\n\t\tb: \"1F3C9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"team\"\n\t\t],\n\t\tk: [\n\t\t\t10,\n\t\t\t27\n\t\t]\n\t},\n\tpretzel: {\n\t\ta: \"Pretzel\",\n\t\tb: \"1F968\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t20\n\t\t],\n\t\to: 10\n\t},\n\topen_mouth: {\n\t\ta: \"Face with Open Mouth\",\n\t\tb: \"1F62E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"surprise\",\n\t\t\t\"impressed\",\n\t\t\t\"wow\",\n\t\t\t\"whoa\",\n\t\t\t\":O\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t18\n\t\t],\n\t\tl: [\n\t\t\t\":o\",\n\t\t\t\":-o\",\n\t\t\t\":O\",\n\t\t\t\":-O\"\n\t\t]\n\t},\n\t\"flag-bi\": {\n\t\ta: \"Burundi Flag\",\n\t\tb: \"1F1E7-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t3\n\t\t]\n\t},\n\t\"flag-bj\": {\n\t\ta: \"Benin Flag\",\n\t\tb: \"1F1E7-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t4\n\t\t]\n\t},\n\tpancakes: {\n\t\ta: \"Pancakes\",\n\t\tb: \"1F95E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"breakfast\",\n\t\t\t\"flapjacks\",\n\t\t\t\"hotcakes\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t10\n\t\t],\n\t\to: 9\n\t},\n\tschool: {\n\t\ta: \"School\",\n\t\tb: \"1F3EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"student\",\n\t\t\t\"education\",\n\t\t\t\"learn\",\n\t\t\t\"teach\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t8\n\t\t]\n\t},\n\ttennis: {\n\t\ta: \"Tennis Racquet and Ball\",\n\t\tb: \"1F3BE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\",\n\t\t\t\"green\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t24\n\t\t]\n\t},\n\tzipper_mouth_face: {\n\t\ta: \"Zipper-Mouth Face\",\n\t\tb: \"1F910\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sealed\",\n\t\t\t\"zipper\",\n\t\t\t\"secret\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t24\n\t\t],\n\t\to: 8\n\t},\n\tcamel: {\n\t\ta: \"Bactrian Camel\",\n\t\tb: \"1F42B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"hot\",\n\t\t\t\"desert\",\n\t\t\t\"hump\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t21\n\t\t]\n\t},\n\tarrow_lower_left: {\n\t\ta: \"South West Arrow\",\n\t\tb: \"2199-FE0F\",\n\t\tc: \"2199\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"diagonal\",\n\t\t\t\"southwest\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t38\n\t\t],\n\t\to: 1\n\t},\n\telectric_plug: {\n\t\ta: \"Electric Plug\",\n\t\tb: \"1F50C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"charger\",\n\t\t\t\"power\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t14\n\t\t]\n\t},\n\tcheese_wedge: {\n\t\ta: \"Cheese Wedge\",\n\t\tb: \"1F9C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t48\n\t\t],\n\t\to: 8\n\t},\n\thushed: {\n\t\ta: \"Hushed Face\",\n\t\tb: \"1F62F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"woo\",\n\t\t\t\"shh\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t19\n\t\t]\n\t},\n\tcomputer: {\n\t\ta: \"Personal Computer\",\n\t\tb: \"1F4BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"laptop\",\n\t\t\t\"screen\",\n\t\t\t\"display\",\n\t\t\t\"monitor\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t38\n\t\t]\n\t},\n\tgiraffe_face: {\n\t\ta: \"Giraffe Face\",\n\t\tb: \"1F992\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t42\n\t\t],\n\t\to: 10\n\t},\n\t\"8ball\": {\n\t\ta: \"Billiards\",\n\t\tb: \"1F3B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pool\",\n\t\t\t\"hobby\",\n\t\t\t\"game\",\n\t\t\t\"luck\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t11\n\t\t]\n\t},\n\t\"flag-bl\": {\n\t\ta: \"St. Barthélemy Flag\",\n\t\tb: \"1F1E7-1F1F1\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t5\n\t\t]\n\t},\n\tarrow_left: {\n\t\ta: \"Leftwards Black Arrow\",\n\t\tb: \"2B05-FE0F\",\n\t\tc: \"2B05\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"previous\",\n\t\t\t\"back\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t17\n\t\t],\n\t\to: 4\n\t},\n\tdepartment_store: {\n\t\ta: \"Department Store\",\n\t\tb: \"1F3EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"shopping\",\n\t\t\t\"mall\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t9\n\t\t]\n\t},\n\tmeat_on_bone: {\n\t\ta: \"Meat on Bone\",\n\t\tb: \"1F356\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"good\",\n\t\t\t\"food\",\n\t\t\t\"drumstick\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t24\n\t\t]\n\t},\n\tarrow_upper_left: {\n\t\ta: \"North West Arrow\",\n\t\tb: \"2196-FE0F\",\n\t\tc: \"2196\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"point\",\n\t\t\t\"direction\",\n\t\t\t\"diagonal\",\n\t\t\t\"northwest\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t35\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-bm\": {\n\t\ta: \"Bermuda Flag\",\n\t\tb: \"1F1E7-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t6\n\t\t]\n\t},\n\tsleepy: {\n\t\ta: \"Sleepy Face\",\n\t\tb: \"1F62A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"tired\",\n\t\t\t\"rest\",\n\t\t\t\"nap\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t14\n\t\t]\n\t},\n\tbowling: {\n\t\ta: \"Bowling\",\n\t\tb: \"1F3B3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"fun\",\n\t\t\t\"play\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t13\n\t\t]\n\t},\n\tfactory: {\n\t\ta: \"Factory\",\n\t\tb: \"1F3ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"industry\",\n\t\t\t\"pollution\",\n\t\t\t\"smoke\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t10\n\t\t]\n\t},\n\tdesktop_computer: {\n\t\ta: \"Desktop Computer\",\n\t\tb: \"1F5A5-FE0F\",\n\t\tc: \"1F5A5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"computing\",\n\t\t\t\"screen\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t51\n\t\t],\n\t\to: 7\n\t},\n\telephant: {\n\t\ta: \"Elephant\",\n\t\tb: \"1F418\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"nose\",\n\t\t\t\"th\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t2\n\t\t]\n\t},\n\trhinoceros: {\n\t\ta: \"Rhinoceros\",\n\t\tb: \"1F98F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"horn\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t39\n\t\t],\n\t\to: 9\n\t},\n\tarrow_up_down: {\n\t\ta: \"Up Down Arrow\",\n\t\tb: \"2195-FE0F\",\n\t\tc: \"2195\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"way\",\n\t\t\t\"vertical\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t34\n\t\t],\n\t\to: 1\n\t},\n\tcricket_bat_and_ball: {\n\t\ta: \"Cricket Bat and Ball\",\n\t\tb: \"1F3CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t32\n\t\t],\n\t\to: 8\n\t},\n\tprinter: {\n\t\ta: \"Printer\",\n\t\tb: \"1F5A8-FE0F\",\n\t\tc: \"1F5A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"paper\",\n\t\t\t\"ink\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t0\n\t\t],\n\t\to: 7\n\t},\n\tpoultry_leg: {\n\t\ta: \"Poultry Leg\",\n\t\tb: \"1F357\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"meat\",\n\t\t\t\"drumstick\",\n\t\t\t\"bird\",\n\t\t\t\"chicken\",\n\t\t\t\"turkey\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t25\n\t\t]\n\t},\n\ttired_face: {\n\t\ta: \"Tired Face\",\n\t\tb: \"1F62B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sick\",\n\t\t\t\"whine\",\n\t\t\t\"upset\",\n\t\t\t\"frustrated\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t15\n\t\t]\n\t},\n\tjapanese_castle: {\n\t\ta: \"Japanese Castle\",\n\t\tb: \"1F3EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"building\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t12\n\t\t]\n\t},\n\t\"flag-bn\": {\n\t\ta: \"Brunei Flag\",\n\t\tb: \"1F1E7-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t1,\n\t\t\t7\n\t\t]\n\t},\n\tfield_hockey_stick_and_ball: {\n\t\ta: \"Field Hockey Stick and Ball\",\n\t\tb: \"1F3D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t34\n\t\t],\n\t\to: 8\n\t},\n\tsleeping: {\n\t\ta: \"Sleeping Face\",\n\t\tb: \"1F634\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"tired\",\n\t\t\t\"sleepy\",\n\t\t\t\"night\",\n\t\t\t\"zzz\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t24\n\t\t]\n\t},\n\tleft_right_arrow: {\n\t\ta: \"Left Right Arrow\",\n\t\tb: \"2194-FE0F\",\n\t\tc: \"2194\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"direction\",\n\t\t\t\"horizontal\",\n\t\t\t\"sideways\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t33\n\t\t],\n\t\to: 1\n\t},\n\tkeyboard: {\n\t\ta: \"Keyboard\",\n\t\tb: \"2328-FE0F\",\n\t\tc: \"2328\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"computer\",\n\t\t\t\"type\",\n\t\t\t\"input\",\n\t\t\t\"text\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t43\n\t\t],\n\t\to: 1\n\t},\n\teuropean_castle: {\n\t\ta: \"European Castle\",\n\t\tb: \"1F3F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"royalty\",\n\t\t\t\"history\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t13\n\t\t]\n\t},\n\tmouse: {\n\t\ta: \"Mouse Face\",\n\t\tb: \"1F42D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"cheese_wedge\",\n\t\t\t\"rodent\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-bo\": {\n\t\ta: \"Bolivia Flag\",\n\t\tb: \"1F1E7-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t8\n\t\t]\n\t},\n\tcut_of_meat: {\n\t\ta: \"Cut of Meat\",\n\t\tb: \"1F969\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t21\n\t\t],\n\t\to: 10\n\t},\n\tice_hockey_stick_and_puck: {\n\t\ta: \"Ice Hockey Stick and Puck\",\n\t\tb: \"1F3D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t35\n\t\t],\n\t\to: 8\n\t},\n\tmouse2: {\n\t\ta: \"Mouse\",\n\t\tb: \"1F401\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"rodent\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t31\n\t\t]\n\t},\n\tthree_button_mouse: {\n\t\ta: \"Three Button Mouse\",\n\t\tb: \"1F5B1-FE0F\",\n\t\tc: \"1F5B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t1\n\t\t],\n\t\to: 7\n\t},\n\tleftwards_arrow_with_hook: {\n\t\ta: \"Leftwards Arrow with Hook\",\n\t\tb: \"21A9-FE0F\",\n\t\tc: \"21A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"back\",\n\t\t\t\"return\",\n\t\t\t\"blue-square\",\n\t\t\t\"undo\",\n\t\t\t\"enter\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t39\n\t\t],\n\t\to: 1\n\t},\n\tbacon: {\n\t\ta: \"Bacon\",\n\t\tb: \"1F953\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"breakfast\",\n\t\t\t\"pork\",\n\t\t\t\"pig\",\n\t\t\t\"meat\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t51\n\t\t],\n\t\to: 9\n\t},\n\trelieved: {\n\t\ta: \"Relieved Face\",\n\t\tb: \"1F60C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"relaxed\",\n\t\t\t\"phew\",\n\t\t\t\"massage\",\n\t\t\t\"happiness\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-bq\": {\n\t\ta: \"Caribbean Netherlands Flag\",\n\t\tb: \"1F1E7-1F1F6\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t9\n\t\t]\n\t},\n\twedding: {\n\t\ta: \"Wedding\",\n\t\tb: \"1F492\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"couple\",\n\t\t\t\"marriage\",\n\t\t\t\"bride\",\n\t\t\t\"groom\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t44\n\t\t]\n\t},\n\ttokyo_tower: {\n\t\ta: \"Tokyo Tower\",\n\t\tb: \"1F5FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t20\n\t\t]\n\t},\n\tarrow_right_hook: {\n\t\ta: \"Rightwards Arrow with Hook\",\n\t\tb: \"21AA-FE0F\",\n\t\tc: \"21AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"return\",\n\t\t\t\"rotate\",\n\t\t\t\"direction\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t40\n\t\t],\n\t\to: 1\n\t},\n\thamburger: {\n\t\ta: \"Hamburger\",\n\t\tb: \"1F354\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"meat\",\n\t\t\t\"fast food\",\n\t\t\t\"beef\",\n\t\t\t\"cheeseburger\",\n\t\t\t\"mcdonalds\",\n\t\t\t\"burger king\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t22\n\t\t]\n\t},\n\tstuck_out_tongue: {\n\t\ta: \"Face with Stuck-out Tongue\",\n\t\tb: \"1F61B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"prank\",\n\t\t\t\"childish\",\n\t\t\t\"playful\",\n\t\t\t\"mischievous\",\n\t\t\t\"smile\",\n\t\t\t\"tongue\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t51\n\t\t],\n\t\tl: [\n\t\t\t\":p\",\n\t\t\t\":-p\",\n\t\t\t\":P\",\n\t\t\t\":-P\",\n\t\t\t\":b\",\n\t\t\t\":-b\"\n\t\t],\n\t\tm: \":p\"\n\t},\n\ttrackball: {\n\t\ta: \"Trackball\",\n\t\tb: \"1F5B2-FE0F\",\n\t\tc: \"1F5B2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"trackpad\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t2\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-br\": {\n\t\ta: \"Brazil Flag\",\n\t\tb: \"1F1E7-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t10\n\t\t]\n\t},\n\trat: {\n\t\ta: \"Rat\",\n\t\tb: \"1F400\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"mouse\",\n\t\t\t\"rodent\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t30\n\t\t]\n\t},\n\ttable_tennis_paddle_and_ball: {\n\t\ta: \"Table Tennis Paddle and Ball\",\n\t\tb: \"1F3D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t36\n\t\t],\n\t\to: 8\n\t},\n\tminidisc: {\n\t\ta: \"Minidisc\",\n\t\tb: \"1F4BD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"record\",\n\t\t\t\"data\",\n\t\t\t\"disk\",\n\t\t\t\"90s\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t40\n\t\t]\n\t},\n\tstuck_out_tongue_winking_eye: {\n\t\ta: \"Face with Stuck-out Tongue and Winking Eye\",\n\t\tb: \"1F61C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"prank\",\n\t\t\t\"childish\",\n\t\t\t\"playful\",\n\t\t\t\"mischievous\",\n\t\t\t\"smile\",\n\t\t\t\"wink\",\n\t\t\t\"tongue\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t0\n\t\t],\n\t\tl: [\n\t\t\t\";p\",\n\t\t\t\";-p\",\n\t\t\t\";b\",\n\t\t\t\";-b\",\n\t\t\t\";P\",\n\t\t\t\";-P\"\n\t\t],\n\t\tm: \";p\"\n\t},\n\tfries: {\n\t\ta: \"French Fries\",\n\t\tb: \"1F35F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chips\",\n\t\t\t\"snack\",\n\t\t\t\"fast food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t33\n\t\t]\n\t},\n\tbadminton_racquet_and_shuttlecock: {\n\t\ta: \"Badminton Racquet and Shuttlecock\",\n\t\tb: \"1F3F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t22\n\t\t],\n\t\to: 8\n\t},\n\tstatue_of_liberty: {\n\t\ta: \"Statue of Liberty\",\n\t\tb: \"1F5FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"american\",\n\t\t\t\"newyork\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t21\n\t\t]\n\t},\n\t\"flag-bs\": {\n\t\ta: \"Bahamas Flag\",\n\t\tb: \"1F1E7-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t11\n\t\t]\n\t},\n\tarrow_heading_up: {\n\t\ta: \"Arrow Pointing Rightwards Then Curving Upwards\",\n\t\tb: \"2934-FE0F\",\n\t\tc: \"2934\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"top\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t15\n\t\t],\n\t\to: 3\n\t},\n\thamster: {\n\t\ta: \"Hamster Face\",\n\t\tb: \"1F439\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t35\n\t\t]\n\t},\n\tstuck_out_tongue_closed_eyes: {\n\t\ta: \"Face with Stuck-out Tongue and Tightly-Closed Eyes\",\n\t\tb: \"1F61D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"prank\",\n\t\t\t\"playful\",\n\t\t\t\"mischievous\",\n\t\t\t\"smile\",\n\t\t\t\"tongue\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t1\n\t\t]\n\t},\n\tpizza: {\n\t\ta: \"Slice of Pizza\",\n\t\tb: \"1F355\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"party\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t23\n\t\t]\n\t},\n\tboxing_glove: {\n\t\ta: \"Boxing Glove\",\n\t\tb: \"1F94A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"fighting\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t45\n\t\t],\n\t\to: 9\n\t},\n\tfloppy_disk: {\n\t\ta: \"Floppy Disk\",\n\t\tb: \"1F4BE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"oldschool\",\n\t\t\t\"technology\",\n\t\t\t\"save\",\n\t\t\t\"90s\",\n\t\t\t\"80s\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t41\n\t\t]\n\t},\n\tarrow_heading_down: {\n\t\ta: \"Arrow Pointing Rightwards Then Curving Downwards\",\n\t\tb: \"2935-FE0F\",\n\t\tc: \"2935\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t16\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-bt\": {\n\t\ta: \"Bhutan Flag\",\n\t\tb: \"1F1E7-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t12\n\t\t]\n\t},\n\trabbit: {\n\t\ta: \"Rabbit Face\",\n\t\tb: \"1F430\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"pet\",\n\t\t\t\"spring\",\n\t\t\t\"magic\",\n\t\t\t\"bunny\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t26\n\t\t]\n\t},\n\tchurch: {\n\t\ta: \"Church\",\n\t\tb: \"26EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"religion\",\n\t\t\t\"christ\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t37\n\t\t],\n\t\to: 5\n\t},\n\tdrooling_face: {\n\t\ta: \"Drooling Face\",\n\t\tb: \"1F924\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t27\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-bv\": {\n\t\ta: \"Bouvet Island Flag\",\n\t\tb: \"1F1E7-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t13\n\t\t]\n\t},\n\tmosque: {\n\t\ta: \"Mosque\",\n\t\tb: \"1F54C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"islam\",\n\t\t\t\"worship\",\n\t\t\t\"minaret\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t15\n\t\t],\n\t\to: 8\n\t},\n\trabbit2: {\n\t\ta: \"Rabbit\",\n\t\tb: \"1F407\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"pet\",\n\t\t\t\"magic\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t37\n\t\t]\n\t},\n\thotdog: {\n\t\ta: \"Hot Dog\",\n\t\tb: \"1F32D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"frankfurter\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t35\n\t\t],\n\t\to: 8\n\t},\n\tmartial_arts_uniform: {\n\t\ta: \"Martial Arts Uniform\",\n\t\tb: \"1F94B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"judo\",\n\t\t\t\"karate\",\n\t\t\t\"taekwondo\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t46\n\t\t],\n\t\to: 9\n\t},\n\tarrows_clockwise: {\n\t\ta: \"Clockwise Downwards and Upwards Open Circle Arrows\",\n\t\tb: \"1F503\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sync\",\n\t\t\t\"cycle\",\n\t\t\t\"round\",\n\t\t\t\"repeat\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t5\n\t\t]\n\t},\n\tcd: {\n\t\ta: \"Optical Disc\",\n\t\tb: \"1F4BF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"dvd\",\n\t\t\t\"disk\",\n\t\t\t\"disc\",\n\t\t\t\"90s\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t42\n\t\t]\n\t},\n\tarrows_counterclockwise: {\n\t\ta: \"Anticlockwise Downwards and Upwards Open Circle Arrows\",\n\t\tb: \"1F504\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"sync\",\n\t\t\t\"cycle\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t6\n\t\t]\n\t},\n\tsandwich: {\n\t\ta: \"Sandwich\",\n\t\tb: \"1F96A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t22\n\t\t],\n\t\to: 10\n\t},\n\tchipmunk: {\n\t\ta: \"Chipmunk\",\n\t\tb: \"1F43F-FE0F\",\n\t\tc: \"1F43F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"rodent\",\n\t\t\t\"squirrel\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t41\n\t\t],\n\t\to: 7\n\t},\n\tsynagogue: {\n\t\ta: \"Synagogue\",\n\t\tb: \"1F54D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"judaism\",\n\t\t\t\"worship\",\n\t\t\t\"temple\",\n\t\t\t\"jewish\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t16\n\t\t],\n\t\to: 8\n\t},\n\tunamused: {\n\t\ta: \"Unamused Face\",\n\t\tb: \"1F612\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"indifference\",\n\t\t\t\"bored\",\n\t\t\t\"straight face\",\n\t\t\t\"serious\",\n\t\t\t\"sarcasm\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t42\n\t\t],\n\t\tm: \":(\"\n\t},\n\tgoal_net: {\n\t\ta: \"Goal Net\",\n\t\tb: \"1F945\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t41\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-bw\": {\n\t\ta: \"Botswana Flag\",\n\t\tb: \"1F1E7-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t14\n\t\t]\n\t},\n\tdvd: {\n\t\ta: \"Dvd\",\n\t\tb: \"1F4C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cd\",\n\t\t\t\"disk\",\n\t\t\t\"disc\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t43\n\t\t]\n\t},\n\thedgehog: {\n\t\ta: \"Hedgehog\",\n\t\tb: \"1F994\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t44\n\t\t],\n\t\to: 10\n\t},\n\tdart: {\n\t\ta: \"Direct Hit\",\n\t\tb: \"1F3AF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"play\",\n\t\t\t\"bar\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t9\n\t\t]\n\t},\n\ttaco: {\n\t\ta: \"Taco\",\n\t\tb: \"1F32E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"mexican\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t36\n\t\t],\n\t\to: 8\n\t},\n\tback: {\n\t\ta: \"Back with Leftwards Arrow Above\",\n\t\tb: \"1F519\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arrow\",\n\t\t\t\"words\",\n\t\t\t\"return\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t27\n\t\t]\n\t},\n\t\"flag-by\": {\n\t\ta: \"Belarus Flag\",\n\t\tb: \"1F1E7-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t15\n\t\t]\n\t},\n\tshinto_shrine: {\n\t\ta: \"Shinto Shrine\",\n\t\tb: \"26E9-FE0F\",\n\t\tc: \"26E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"temple\",\n\t\t\t\"japan\",\n\t\t\t\"kyoto\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t36\n\t\t],\n\t\to: 5\n\t},\n\tmovie_camera: {\n\t\ta: \"Movie Camera\",\n\t\tb: \"1F3A5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"film\",\n\t\t\t\"record\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t51\n\t\t]\n\t},\n\tsweat: {\n\t\ta: \"Face with Cold Sweat\",\n\t\tb: \"1F613\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"hot\",\n\t\t\t\"sad\",\n\t\t\t\"tired\",\n\t\t\t\"exercise\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t43\n\t\t]\n\t},\n\tburrito: {\n\t\ta: \"Burrito\",\n\t\tb: \"1F32F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"mexican\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t37\n\t\t],\n\t\to: 8\n\t},\n\t\"flag-bz\": {\n\t\ta: \"Belize Flag\",\n\t\tb: \"1F1E7-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t16\n\t\t]\n\t},\n\tpensive: {\n\t\ta: \"Pensive Face\",\n\t\tb: \"1F614\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sad\",\n\t\t\t\"depressed\",\n\t\t\t\"upset\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t44\n\t\t]\n\t},\n\tkaaba: {\n\t\ta: \"Kaaba\",\n\t\tb: \"1F54B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"mecca\",\n\t\t\t\"mosque\",\n\t\t\t\"islam\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t14\n\t\t],\n\t\to: 8\n\t},\n\tfilm_frames: {\n\t\ta: \"Film Frames\",\n\t\tb: \"1F39E-FE0F\",\n\t\tc: \"1F39E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t8,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\tbat: {\n\t\ta: \"Bat\",\n\t\tb: \"1F987\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"blind\",\n\t\t\t\"vampire\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t31\n\t\t],\n\t\to: 9\n\t},\n\tgolf: {\n\t\ta: \"Flag in Hole\",\n\t\tb: \"26F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"business\",\n\t\t\t\"flag\",\n\t\t\t\"hole\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t41\n\t\t],\n\t\to: 5\n\t},\n\tend: {\n\t\ta: \"End with Leftwards Arrow Above\",\n\t\tb: \"1F51A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"arrow\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t28\n\t\t]\n\t},\n\tfilm_projector: {\n\t\ta: \"Film Projector\",\n\t\tb: \"1F4FD-FE0F\",\n\t\tc: \"1F4FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"video\",\n\t\t\t\"tape\",\n\t\t\t\"record\",\n\t\t\t\"movie\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t0\n\t\t],\n\t\to: 7\n\t},\n\tbear: {\n\t\ta: \"Bear Face\",\n\t\tb: \"1F43B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"wild\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t37\n\t\t]\n\t},\n\tice_skate: {\n\t\ta: \"Ice Skate\",\n\t\tb: \"26F8-FE0F\",\n\t\tc: \"26F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t45\n\t\t],\n\t\to: 5\n\t},\n\tfountain: {\n\t\ta: \"Fountain\",\n\t\tb: \"26F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"summer\",\n\t\t\t\"water\",\n\t\t\t\"fresh\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t40\n\t\t],\n\t\to: 5\n\t},\n\tconfused: {\n\t\ta: \"Confused Face\",\n\t\tb: \"1F615\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"indifference\",\n\t\t\t\"huh\",\n\t\t\t\"weird\",\n\t\t\t\"hmmm\",\n\t\t\t\":/\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t45\n\t\t],\n\t\tl: [\n\t\t\t\":\\\\\",\n\t\t\t\":-\\\\\",\n\t\t\t\":/\",\n\t\t\t\":-/\"\n\t\t]\n\t},\n\t\"flag-ca\": {\n\t\ta: \"Canada Flag\",\n\t\tb: \"1F1E8-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t17\n\t\t]\n\t},\n\ton: {\n\t\ta: \"On with Exclamation Mark with Left Right Arrow Above\",\n\t\tb: \"1F51B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arrow\",\n\t\t\t\"words\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t29\n\t\t]\n\t},\n\tstuffed_flatbread: {\n\t\ta: \"Stuffed Flatbread\",\n\t\tb: \"1F959\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"flatbread\",\n\t\t\t\"stuffed\",\n\t\t\t\"gyro\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t5\n\t\t],\n\t\to: 9\n\t},\n\tsoon: {\n\t\ta: \"Soon with Rightwards Arrow Above\",\n\t\tb: \"1F51C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arrow\",\n\t\t\t\"words\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t30\n\t\t]\n\t},\n\tupside_down_face: {\n\t\ta: \"Upside-Down Face\",\n\t\tb: \"1F643\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"flipped\",\n\t\t\t\"silly\",\n\t\t\t\"smile\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t39\n\t\t],\n\t\to: 8\n\t},\n\tfishing_pole_and_fish: {\n\t\ta: \"Fishing Pole and Fish\",\n\t\tb: \"1F3A3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"hobby\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t49\n\t\t]\n\t},\n\ttent: {\n\t\ta: \"Tent\",\n\t\tb: \"26FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"camping\",\n\t\t\t\"outdoors\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t12\n\t\t],\n\t\to: 5\n\t},\n\tclapper: {\n\t\ta: \"Clapper Board\",\n\t\tb: \"1F3AC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"movie\",\n\t\t\t\"film\",\n\t\t\t\"record\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t6\n\t\t]\n\t},\n\tegg: {\n\t\ta: \"Egg\",\n\t\tb: \"1F95A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"chicken\",\n\t\t\t\"breakfast\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t6\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-cc\": {\n\t\ta: \"Cocos (keeling) Islands Flag\",\n\t\tb: \"1F1E8-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t18\n\t\t]\n\t},\n\tkoala: {\n\t\ta: \"Koala\",\n\t\tb: \"1F428\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t18\n\t\t]\n\t},\n\tfoggy: {\n\t\ta: \"Foggy\",\n\t\tb: \"1F301\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"mountain\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t45\n\t\t]\n\t},\n\ttv: {\n\t\ta: \"Television\",\n\t\tb: \"1F4FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"program\",\n\t\t\t\"oldschool\",\n\t\t\t\"show\",\n\t\t\t\"television\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t49\n\t\t]\n\t},\n\tpanda_face: {\n\t\ta: \"Panda Face\",\n\t\tb: \"1F43C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"panda\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t38\n\t\t]\n\t},\n\tfried_egg: {\n\t\ta: \"Cooking\",\n\t\tb: \"1F373\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"breakfast\",\n\t\t\t\"kitchen\",\n\t\t\t\"egg\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t1\n\t\t],\n\t\tn: [\n\t\t\t\"cooking\"\n\t\t]\n\t},\n\ttop: {\n\t\ta: \"Top with Upwards Arrow Above\",\n\t\tb: \"1F51D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t31\n\t\t]\n\t},\n\t\"flag-cd\": {\n\t\ta: \"Congo - Kinshasa Flag\",\n\t\tb: \"1F1E8-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t19\n\t\t]\n\t},\n\tmoney_mouth_face: {\n\t\ta: \"Money-Mouth Face\",\n\t\tb: \"1F911\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"rich\",\n\t\t\t\"dollar\",\n\t\t\t\"money\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t25\n\t\t],\n\t\to: 8\n\t},\n\trunning_shirt_with_sash: {\n\t\ta: \"Running Shirt with Sash\",\n\t\tb: \"1F3BD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"play\",\n\t\t\t\"pageant\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t23\n\t\t]\n\t},\n\tastonished: {\n\t\ta: \"Astonished Face\",\n\t\tb: \"1F632\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"xox\",\n\t\t\t\"surprised\",\n\t\t\t\"poisoned\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t22\n\t\t]\n\t},\n\tfeet: {\n\t\ta: \"Paw Prints\",\n\t\tb: \"1F43E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t13,\n\t\t\t40\n\t\t],\n\t\tn: [\n\t\t\t\"paw_prints\"\n\t\t]\n\t},\n\tcamera: {\n\t\ta: \"Camera\",\n\t\tb: \"1F4F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"gadgets\",\n\t\t\t\"photography\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t46\n\t\t]\n\t},\n\t\"flag-cf\": {\n\t\ta: \"Central African Republic Flag\",\n\t\tb: \"1F1E8-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t20\n\t\t]\n\t},\n\tplace_of_worship: {\n\t\ta: \"Place of Worship\",\n\t\tb: \"1F6D0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"religion\",\n\t\t\t\"church\",\n\t\t\t\"temple\",\n\t\t\t\"prayer\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t5\n\t\t],\n\t\to: 8\n\t},\n\tnight_with_stars: {\n\t\ta: \"Night with Stars\",\n\t\tb: \"1F303\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"evening\",\n\t\t\t\"city\",\n\t\t\t\"downtown\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t47\n\t\t]\n\t},\n\tski: {\n\t\ta: \"Ski and Ski Boot\",\n\t\tb: \"1F3BF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"winter\",\n\t\t\t\"cold\",\n\t\t\t\"snow\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t25\n\t\t]\n\t},\n\tshallow_pan_of_food: {\n\t\ta: \"Shallow Pan of Food\",\n\t\tb: \"1F958\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"cooking\",\n\t\t\t\"casserole\",\n\t\t\t\"paella\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t4\n\t\t],\n\t\to: 9\n\t},\n\tcamera_with_flash: {\n\t\ta: \"Camera with Flash\",\n\t\tb: \"1F4F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t26,\n\t\t\t47\n\t\t],\n\t\to: 7\n\t},\n\tsunrise_over_mountains: {\n\t\ta: \"Sunrise over Mountains\",\n\t\tb: \"1F304\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"view\",\n\t\t\t\"vacation\",\n\t\t\t\"photo\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t48\n\t\t]\n\t},\n\tturkey: {\n\t\ta: \"Turkey\",\n\t\tb: \"1F983\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t27\n\t\t],\n\t\to: 8\n\t},\n\twhite_frowning_face: {\n\t\ta: \"White Frowning Face\",\n\t\tb: \"2639-FE0F\",\n\t\tc: \"2639\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t40\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-cg\": {\n\t\ta: \"Congo - Brazzaville Flag\",\n\t\tb: \"1F1E8-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t21\n\t\t]\n\t},\n\tstew: {\n\t\ta: \"Pot of Food\",\n\t\tb: \"1F372\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"meat\",\n\t\t\t\"soup\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t0\n\t\t]\n\t},\n\tsled: {\n\t\ta: \"Sled\",\n\t\tb: \"1F6F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t22\n\t\t],\n\t\to: 10\n\t},\n\tatom_symbol: {\n\t\ta: \"Atom Symbol\",\n\t\tb: \"269B-FE0F\",\n\t\tc: \"269B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"science\",\n\t\t\t\"physics\",\n\t\t\t\"chemistry\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t18\n\t\t],\n\t\to: 4\n\t},\n\tcurling_stone: {\n\t\ta: \"Curling Stone\",\n\t\tb: \"1F94C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t47\n\t\t],\n\t\to: 10\n\t},\n\tslightly_frowning_face: {\n\t\ta: \"Slightly Frowning Face\",\n\t\tb: \"1F641\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"frowning\",\n\t\t\t\"disappointed\",\n\t\t\t\"sad\",\n\t\t\t\"upset\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t37\n\t\t],\n\t\to: 7\n\t},\n\tsunrise: {\n\t\ta: \"Sunrise\",\n\t\tb: \"1F305\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"morning\",\n\t\t\t\"view\",\n\t\t\t\"vacation\",\n\t\t\t\"photo\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t49\n\t\t]\n\t},\n\tom_symbol: {\n\t\ta: \"Om Symbol\",\n\t\tb: \"1F549-FE0F\",\n\t\tc: \"1F549\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t12\n\t\t],\n\t\to: 7\n\t},\n\tchicken: {\n\t\ta: \"Chicken\",\n\t\tb: \"1F414\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cluck\",\n\t\t\t\"nature\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t50\n\t\t]\n\t},\n\tbowl_with_spoon: {\n\t\ta: \"Bowl with Spoon\",\n\t\tb: \"1F963\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t15\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-ch\": {\n\t\ta: \"Switzerland Flag\",\n\t\tb: \"1F1E8-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t22\n\t\t]\n\t},\n\tvideo_camera: {\n\t\ta: \"Video Camera\",\n\t\tb: \"1F4F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"film\",\n\t\t\t\"record\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t48\n\t\t]\n\t},\n\tvideo_game: {\n\t\ta: \"Video Game\",\n\t\tb: \"1F3AE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"play\",\n\t\t\t\"console\",\n\t\t\t\"PS4\",\n\t\t\t\"controller\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t8\n\t\t]\n\t},\n\trooster: {\n\t\ta: \"Rooster\",\n\t\tb: \"1F413\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"chicken\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t49\n\t\t]\n\t},\n\tvhs: {\n\t\ta: \"Videocassette\",\n\t\tb: \"1F4FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"record\",\n\t\t\t\"video\",\n\t\t\t\"oldschool\",\n\t\t\t\"90s\",\n\t\t\t\"80s\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t51\n\t\t]\n\t},\n\tcity_sunset: {\n\t\ta: \"Cityscape at Dusk\",\n\t\tb: \"1F306\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"evening\",\n\t\t\t\"sky\",\n\t\t\t\"buildings\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t50\n\t\t]\n\t},\n\tconfounded: {\n\t\ta: \"Confounded Face\",\n\t\tb: \"1F616\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"confused\",\n\t\t\t\"sick\",\n\t\t\t\"unwell\",\n\t\t\t\"oops\",\n\t\t\t\":S\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t46\n\t\t]\n\t},\n\tgreen_salad: {\n\t\ta: \"Green Salad\",\n\t\tb: \"1F957\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"healthy\",\n\t\t\t\"lettuce\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t3\n\t\t],\n\t\to: 9\n\t},\n\tstar_of_david: {\n\t\ta: \"Star of David\",\n\t\tb: \"2721-FE0F\",\n\t\tc: \"2721\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"judaism\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t47\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-ci\": {\n\t\ta: \"Côte D’ivoire Flag\",\n\t\tb: \"1F1E8-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t23\n\t\t]\n\t},\n\tpopcorn: {\n\t\ta: \"Popcorn\",\n\t\tb: \"1F37F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"movie theater\",\n\t\t\t\"films\",\n\t\t\t\"snack\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t13\n\t\t],\n\t\to: 8\n\t},\n\tcity_sunrise: {\n\t\ta: \"Sunset over Buildings\",\n\t\tb: \"1F307\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"good morning\",\n\t\t\t\"dawn\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t51\n\t\t]\n\t},\n\tdisappointed: {\n\t\ta: \"Disappointed Face\",\n\t\tb: \"1F61E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sad\",\n\t\t\t\"upset\",\n\t\t\t\"depressed\",\n\t\t\t\":(\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t2\n\t\t],\n\t\tl: [\n\t\t\t\"):\",\n\t\t\t\":(\",\n\t\t\t\":-(\"\n\t\t],\n\t\tm: \":(\"\n\t},\n\tmag: {\n\t\ta: \"Left-Pointing Magnifying Glass\",\n\t\tb: \"1F50D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"search\",\n\t\t\t\"zoom\",\n\t\t\t\"find\",\n\t\t\t\"detective\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t15\n\t\t]\n\t},\n\thatching_chick: {\n\t\ta: \"Hatching Chick\",\n\t\tb: \"1F423\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"chicken\",\n\t\t\t\"egg\",\n\t\t\t\"born\",\n\t\t\t\"baby\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t13\n\t\t]\n\t},\n\tjoystick: {\n\t\ta: \"Joystick\",\n\t\tb: \"1F579-FE0F\",\n\t\tc: \"1F579\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"play\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t20\n\t\t],\n\t\to: 7\n\t},\n\twheel_of_dharma: {\n\t\ta: \"Wheel of Dharma\",\n\t\tb: \"2638-FE0F\",\n\t\tc: \"2638\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"hinduism\",\n\t\t\t\"buddhism\",\n\t\t\t\"sikhism\",\n\t\t\t\"jainism\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t39\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-ck\": {\n\t\ta: \"Cook Islands Flag\",\n\t\tb: \"1F1E8-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t24\n\t\t]\n\t},\n\tcanned_food: {\n\t\ta: \"Canned Food\",\n\t\tb: \"1F96B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t23\n\t\t],\n\t\to: 10\n\t},\n\tworried: {\n\t\ta: \"Worried Face\",\n\t\tb: \"1F61F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"concern\",\n\t\t\t\"nervous\",\n\t\t\t\":(\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t3\n\t\t]\n\t},\n\tbaby_chick: {\n\t\ta: \"Baby Chick\",\n\t\tb: \"1F424\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"chicken\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t14\n\t\t]\n\t},\n\t\"flag-cl\": {\n\t\ta: \"Chile Flag\",\n\t\tb: \"1F1E8-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t25\n\t\t]\n\t},\n\tgame_die: {\n\t\ta: \"Game Die\",\n\t\tb: \"1F3B2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dice\",\n\t\t\t\"random\",\n\t\t\t\"tabletop\",\n\t\t\t\"play\",\n\t\t\t\"luck\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t12\n\t\t]\n\t},\n\tmag_right: {\n\t\ta: \"Right-Pointing Magnifying Glass\",\n\t\tb: \"1F50E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"search\",\n\t\t\t\"zoom\",\n\t\t\t\"find\",\n\t\t\t\"detective\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t16\n\t\t]\n\t},\n\tyin_yang: {\n\t\ta: \"Yin Yang\",\n\t\tb: \"262F-FE0F\",\n\t\tc: \"262F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"balance\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t38\n\t\t],\n\t\to: 1\n\t},\n\tbridge_at_night: {\n\t\ta: \"Bridge at Night\",\n\t\tb: \"1F309\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"sanfrancisco\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t1\n\t\t]\n\t},\n\tspades: {\n\t\ta: \"Black Spade Suit\",\n\t\tb: \"2660-FE0F\",\n\t\tc: \"2660\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"suits\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t4\n\t\t],\n\t\to: 1\n\t},\n\thatched_chick: {\n\t\ta: \"Front-Facing Baby Chick\",\n\t\tb: \"1F425\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"chicken\",\n\t\t\t\"baby\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t15\n\t\t]\n\t},\n\t\"flag-cm\": {\n\t\ta: \"Cameroon Flag\",\n\t\tb: \"1F1E8-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t26\n\t\t]\n\t},\n\tlatin_cross: {\n\t\ta: \"Latin Cross\",\n\t\tb: \"271D-FE0F\",\n\t\tc: \"271D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"christianity\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t46\n\t\t],\n\t\to: 1\n\t},\n\ttriumph: {\n\t\ta: \"Face with Look of Triumph\",\n\t\tb: \"1F624\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"gas\",\n\t\t\t\"phew\",\n\t\t\t\"proud\",\n\t\t\t\"pride\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t8\n\t\t]\n\t},\n\thotsprings: {\n\t\ta: \"Hot Springs\",\n\t\tb: \"2668-FE0F\",\n\t\tc: \"2668\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bath\",\n\t\t\t\"warm\",\n\t\t\t\"relax\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t8\n\t\t],\n\t\to: 1\n\t},\n\tbento: {\n\t\ta: \"Bento Box\",\n\t\tb: \"1F371\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\",\n\t\t\t\"box\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t51\n\t\t]\n\t},\n\tmicroscope: {\n\t\ta: \"Microscope\",\n\t\tb: \"1F52C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"laboratory\",\n\t\t\t\"experiment\",\n\t\t\t\"zoomin\",\n\t\t\t\"science\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t46\n\t\t]\n\t},\n\tcry: {\n\t\ta: \"Crying Face\",\n\t\tb: \"1F622\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"tears\",\n\t\t\t\"sad\",\n\t\t\t\"depressed\",\n\t\t\t\"upset\",\n\t\t\t\":'(\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t6\n\t\t],\n\t\tl: [\n\t\t\t\":'(\"\n\t\t],\n\t\tm: \":'(\"\n\t},\n\tbird: {\n\t\ta: \"Bird\",\n\t\tb: \"1F426\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"fly\",\n\t\t\t\"tweet\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t16\n\t\t]\n\t},\n\tcn: {\n\t\ta: \"China Flag\",\n\t\tb: \"1F1E8-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"china\",\n\t\t\t\"chinese\",\n\t\t\t\"prc\",\n\t\t\t\"flag\",\n\t\t\t\"country\",\n\t\t\t\"nation\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t1,\n\t\t\t27\n\t\t],\n\t\tn: [\n\t\t\t\"flag-cn\"\n\t\t]\n\t},\n\ttelescope: {\n\t\ta: \"Telescope\",\n\t\tb: \"1F52D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stars\",\n\t\t\t\"space\",\n\t\t\t\"zoom\",\n\t\t\t\"science\",\n\t\t\t\"astronomy\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t47\n\t\t]\n\t},\n\trice_cracker: {\n\t\ta: \"Rice Cracker\",\n\t\tb: \"1F358\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t26\n\t\t]\n\t},\n\thearts: {\n\t\ta: \"Black Heart Suit\",\n\t\tb: \"2665-FE0F\",\n\t\tc: \"2665\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"magic\",\n\t\t\t\"suits\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t6\n\t\t],\n\t\to: 1\n\t},\n\torthodox_cross: {\n\t\ta: \"Orthodox Cross\",\n\t\tb: \"2626-FE0F\",\n\t\tc: \"2626\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"suppedaneum\",\n\t\t\t\"religion\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t35\n\t\t],\n\t\to: 1\n\t},\n\tmilky_way: {\n\t\ta: \"Milky Way\",\n\t\tb: \"1F30C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"space\",\n\t\t\t\"stars\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t4\n\t\t]\n\t},\n\trice_ball: {\n\t\ta: \"Rice Ball\",\n\t\tb: \"1F359\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t27\n\t\t]\n\t},\n\tsatellite_antenna: {\n\t\ta: \"Satellite Antenna\",\n\t\tb: \"1F4E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t26,\n\t\t\t24\n\t\t]\n\t},\n\t\"flag-co\": {\n\t\ta: \"Colombia Flag\",\n\t\tb: \"1F1E8-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t28\n\t\t]\n\t},\n\tcarousel_horse: {\n\t\ta: \"Carousel Horse\",\n\t\tb: \"1F3A0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"carnival\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t46\n\t\t]\n\t},\n\tsob: {\n\t\ta: \"Loudly Crying Face\",\n\t\tb: \"1F62D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"cry\",\n\t\t\t\"tears\",\n\t\t\t\"sad\",\n\t\t\t\"upset\",\n\t\t\t\"depressed\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t17\n\t\t],\n\t\tm: \":'(\"\n\t},\n\tdiamonds: {\n\t\ta: \"Black Diamond Suit\",\n\t\tb: \"2666-FE0F\",\n\t\tc: \"2666\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"magic\",\n\t\t\t\"suits\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t7\n\t\t],\n\t\to: 1\n\t},\n\tstar_and_crescent: {\n\t\ta: \"Star and Crescent\",\n\t\tb: \"262A-FE0F\",\n\t\tc: \"262A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"islam\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t36\n\t\t],\n\t\to: 1\n\t},\n\tpenguin: {\n\t\ta: \"Penguin\",\n\t\tb: \"1F427\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t17\n\t\t]\n\t},\n\tdove_of_peace: {\n\t\ta: \"Dove of Peace\",\n\t\tb: \"1F54A-FE0F\",\n\t\tc: \"1F54A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t13\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-cp\": {\n\t\ta: \"Clipperton Island Flag\",\n\t\tb: \"1F1E8-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t1,\n\t\t\t29\n\t\t]\n\t},\n\tferris_wheel: {\n\t\ta: \"Ferris Wheel\",\n\t\tb: \"1F3A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"carnival\",\n\t\t\t\"londoneye\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t47\n\t\t]\n\t},\n\tclubs: {\n\t\ta: \"Black Club Suit\",\n\t\tb: \"2663-FE0F\",\n\t\tc: \"2663\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"magic\",\n\t\t\t\"suits\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t5\n\t\t],\n\t\to: 1\n\t},\n\tpeace_symbol: {\n\t\ta: \"Peace Symbol\",\n\t\tb: \"262E-FE0F\",\n\t\tc: \"262E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"hippie\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t37\n\t\t],\n\t\to: 1\n\t},\n\tcandle: {\n\t\ta: \"Candle\",\n\t\tb: \"1F56F-FE0F\",\n\t\tc: \"1F56F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"fire\",\n\t\t\t\"wax\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t42\n\t\t],\n\t\to: 7\n\t},\n\tfrowning: {\n\t\ta: \"Frowning Face with Open Mouth\",\n\t\tb: \"1F626\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"aw\",\n\t\t\t\"what\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t10\n\t\t]\n\t},\n\trice: {\n\t\ta: \"Cooked Rice\",\n\t\tb: \"1F35A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"china\",\n\t\t\t\"asian\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-cr\": {\n\t\ta: \"Costa Rica Flag\",\n\t\tb: \"1F1E8-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t30\n\t\t]\n\t},\n\troller_coaster: {\n\t\ta: \"Roller Coaster\",\n\t\tb: \"1F3A2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"carnival\",\n\t\t\t\"playground\",\n\t\t\t\"photo\",\n\t\t\t\"fun\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t48\n\t\t]\n\t},\n\tmenorah_with_nine_branches: {\n\t\ta: \"Menorah with Nine Branches\",\n\t\tb: \"1F54E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t17\n\t\t],\n\t\to: 8\n\t},\n\tblack_joker: {\n\t\ta: \"Playing Card Black Joker\",\n\t\tb: \"1F0CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"game\",\n\t\t\t\"play\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t15\n\t\t]\n\t},\n\teagle: {\n\t\ta: \"Eagle\",\n\t\tb: \"1F985\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t29\n\t\t],\n\t\to: 9\n\t},\n\tcurry: {\n\t\ta: \"Curry and Rice\",\n\t\tb: \"1F35B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"spicy\",\n\t\t\t\"hot\",\n\t\t\t\"indian\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t29\n\t\t]\n\t},\n\tbulb: {\n\t\ta: \"Electric Light Bulb\",\n\t\tb: \"1F4A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"light\",\n\t\t\t\"electricity\",\n\t\t\t\"idea\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t7\n\t\t]\n\t},\n\tanguished: {\n\t\ta: \"Anguished Face\",\n\t\tb: \"1F627\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"stunned\",\n\t\t\t\"nervous\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t11\n\t\t],\n\t\tl: [\n\t\t\t\"D:\"\n\t\t]\n\t},\n\t\"flag-cu\": {\n\t\ta: \"Cuba Flag\",\n\t\tb: \"1F1E8-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t31\n\t\t]\n\t},\n\tbarber: {\n\t\ta: \"Barber Pole\",\n\t\tb: \"1F488\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hair\",\n\t\t\t\"salon\",\n\t\t\t\"style\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t34\n\t\t]\n\t},\n\tduck: {\n\t\ta: \"Duck\",\n\t\tb: \"1F986\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"bird\",\n\t\t\t\"mallard\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t30\n\t\t],\n\t\to: 9\n\t},\n\tsix_pointed_star: {\n\t\ta: \"Six Pointed Star with Middle Dot\",\n\t\tb: \"1F52F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"religion\",\n\t\t\t\"jewish\",\n\t\t\t\"hexagram\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t49\n\t\t]\n\t},\n\tramen: {\n\t\ta: \"Steaming Bowl\",\n\t\tb: \"1F35C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\",\n\t\t\t\"noodle\",\n\t\t\t\"chopsticks\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t30\n\t\t]\n\t},\n\tflashlight: {\n\t\ta: \"Electric Torch\",\n\t\tb: \"1F526\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dark\",\n\t\t\t\"camping\",\n\t\t\t\"sight\",\n\t\t\t\"night\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t40\n\t\t]\n\t},\n\tmahjong: {\n\t\ta: \"Mahjong Tile Red Dragon\",\n\t\tb: \"1F004\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"play\",\n\t\t\t\"chinese\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t14\n\t\t],\n\t\to: 5\n\t},\n\tfearful: {\n\t\ta: \"Fearful Face\",\n\t\tb: \"1F628\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"scared\",\n\t\t\t\"terrified\",\n\t\t\t\"nervous\",\n\t\t\t\"oops\",\n\t\t\t\"huh\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t12\n\t\t]\n\t},\n\taries: {\n\t\ta: \"Aries\",\n\t\tb: \"2648\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t44\n\t\t],\n\t\to: 1\n\t},\n\tspaghetti: {\n\t\ta: \"Spaghetti\",\n\t\tb: \"1F35D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"italian\",\n\t\t\t\"noodle\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t31\n\t\t]\n\t},\n\tcircus_tent: {\n\t\ta: \"Circus Tent\",\n\t\tb: \"1F3AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"festival\",\n\t\t\t\"carnival\",\n\t\t\t\"party\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t4\n\t\t]\n\t},\n\tizakaya_lantern: {\n\t\ta: \"Izakaya Lantern\",\n\t\tb: \"1F3EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"light\",\n\t\t\t\"paper\",\n\t\t\t\"halloween\",\n\t\t\t\"spooky\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t11\n\t\t],\n\t\tn: [\n\t\t\t\"lantern\"\n\t\t]\n\t},\n\t\"flag-cv\": {\n\t\ta: \"Cape Verde Flag\",\n\t\tb: \"1F1E8-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t32\n\t\t]\n\t},\n\tweary: {\n\t\ta: \"Weary Face\",\n\t\tb: \"1F629\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"tired\",\n\t\t\t\"sleepy\",\n\t\t\t\"sad\",\n\t\t\t\"frustrated\",\n\t\t\t\"upset\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t13\n\t\t]\n\t},\n\tflower_playing_cards: {\n\t\ta: \"Flower Playing Cards\",\n\t\tb: \"1F3B4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"sunset\",\n\t\t\t\"red\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t14\n\t\t]\n\t},\n\towl: {\n\t\ta: \"Owl\",\n\t\tb: \"1F989\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"bird\",\n\t\t\t\"hoot\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t33\n\t\t],\n\t\to: 9\n\t},\n\tperforming_arts: {\n\t\ta: \"Performing Arts\",\n\t\tb: \"1F3AD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"acting\",\n\t\t\t\"theater\",\n\t\t\t\"drama\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t7\n\t\t]\n\t},\n\tfrog: {\n\t\ta: \"Frog Face\",\n\t\tb: \"1F438\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"croak\",\n\t\t\t\"toad\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t34\n\t\t]\n\t},\n\t\"flag-cw\": {\n\t\ta: \"Curaçao Flag\",\n\t\tb: \"1F1E8-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t33\n\t\t]\n\t},\n\tnotebook_with_decorative_cover: {\n\t\ta: \"Notebook with Decorative Cover\",\n\t\tb: \"1F4D4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"classroom\",\n\t\t\t\"notes\",\n\t\t\t\"record\",\n\t\t\t\"paper\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t11\n\t\t]\n\t},\n\texploding_head: {\n\t\ta: \"Shocked Face with Exploding Head\",\n\t\tb: \"1F92F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t3\n\t\t],\n\t\tn: [\n\t\t\t\"shocked_face_with_exploding_head\"\n\t\t],\n\t\to: 10\n\t},\n\ttaurus: {\n\t\ta: \"Taurus\",\n\t\tb: \"2649\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t45\n\t\t],\n\t\to: 1\n\t},\n\tsweet_potato: {\n\t\ta: \"Roasted Sweet Potato\",\n\t\tb: \"1F360\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t34\n\t\t]\n\t},\n\tclosed_book: {\n\t\ta: \"Closed Book\",\n\t\tb: \"1F4D5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"library\",\n\t\t\t\"knowledge\",\n\t\t\t\"textbook\",\n\t\t\t\"learn\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t12\n\t\t]\n\t},\n\tgemini: {\n\t\ta: \"Gemini\",\n\t\tb: \"264A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t46\n\t\t],\n\t\to: 1\n\t},\n\tframe_with_picture: {\n\t\ta: \"Frame with Picture\",\n\t\tb: \"1F5BC-FE0F\",\n\t\tc: \"1F5BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t3\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-cx\": {\n\t\ta: \"Christmas Island Flag\",\n\t\tb: \"1F1E8-1F1FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t34\n\t\t]\n\t},\n\tgrimacing: {\n\t\ta: \"Grimacing Face\",\n\t\tb: \"1F62C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"grimace\",\n\t\t\t\"teeth\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t16\n\t\t]\n\t},\n\tcrocodile: {\n\t\ta: \"Crocodile\",\n\t\tb: \"1F40A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"reptile\",\n\t\t\t\"lizard\",\n\t\t\t\"alligator\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t40\n\t\t]\n\t},\n\toden: {\n\t\ta: \"Oden\",\n\t\tb: \"1F362\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-cy\": {\n\t\ta: \"Cyprus Flag\",\n\t\tb: \"1F1E8-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t35\n\t\t]\n\t},\n\tbook: {\n\t\ta: \"Open Book\",\n\t\tb: \"1F4D6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t26,\n\t\t\t13\n\t\t],\n\t\tn: [\n\t\t\t\"open_book\"\n\t\t]\n\t},\n\tturtle: {\n\t\ta: \"Turtle\",\n\t\tb: \"1F422\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"slow\",\n\t\t\t\"nature\",\n\t\t\t\"tortoise\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t12\n\t\t]\n\t},\n\tart: {\n\t\ta: \"Artist Palette\",\n\t\tb: \"1F3A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"design\",\n\t\t\t\"paint\",\n\t\t\t\"draw\",\n\t\t\t\"colors\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t2\n\t\t]\n\t},\n\tsushi: {\n\t\ta: \"Sushi\",\n\t\tb: \"1F363\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"fish\",\n\t\t\t\"japanese\",\n\t\t\t\"rice\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t37\n\t\t]\n\t},\n\tcold_sweat: {\n\t\ta: \"Face with Open Mouth and Cold Sweat\",\n\t\tb: \"1F630\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"nervous\",\n\t\t\t\"sweat\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t20\n\t\t]\n\t},\n\tcancer: {\n\t\ta: \"Cancer\",\n\t\tb: \"264B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t47\n\t\t],\n\t\to: 1\n\t},\n\tfried_shrimp: {\n\t\ta: \"Fried Shrimp\",\n\t\tb: \"1F364\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"animal\",\n\t\t\t\"appetizer\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t38\n\t\t]\n\t},\n\tslot_machine: {\n\t\ta: \"Slot Machine\",\n\t\tb: \"1F3B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bet\",\n\t\t\t\"gamble\",\n\t\t\t\"vegas\",\n\t\t\t\"fruit machine\",\n\t\t\t\"luck\",\n\t\t\t\"casino\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t10\n\t\t]\n\t},\n\tscream: {\n\t\ta: \"Face Screaming in Fear\",\n\t\tb: \"1F631\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"munch\",\n\t\t\t\"scared\",\n\t\t\t\"omg\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t21\n\t\t]\n\t},\n\tgreen_book: {\n\t\ta: \"Green Book\",\n\t\tb: \"1F4D7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"library\",\n\t\t\t\"knowledge\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t14\n\t\t]\n\t},\n\tleo: {\n\t\ta: \"Leo\",\n\t\tb: \"264C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t48\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-cz\": {\n\t\ta: \"Czechia Flag\",\n\t\tb: \"1F1E8-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t36\n\t\t]\n\t},\n\tlizard: {\n\t\ta: \"Lizard\",\n\t\tb: \"1F98E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"reptile\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t38\n\t\t],\n\t\to: 9\n\t},\n\tvirgo: {\n\t\ta: \"Virgo\",\n\t\tb: \"264D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t49\n\t\t],\n\t\to: 1\n\t},\n\tsteam_locomotive: {\n\t\ta: \"Steam Locomotive\",\n\t\tb: \"1F682\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"train\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t10\n\t\t]\n\t},\n\tde: {\n\t\ta: \"Germany Flag\",\n\t\tb: \"1F1E9-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"german\",\n\t\t\t\"nation\",\n\t\t\t\"flag\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t1,\n\t\t\t37\n\t\t],\n\t\tn: [\n\t\t\t\"flag-de\"\n\t\t]\n\t},\n\tflushed: {\n\t\ta: \"Flushed Face\",\n\t\tb: \"1F633\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"blush\",\n\t\t\t\"shy\",\n\t\t\t\"flattered\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t23\n\t\t]\n\t},\n\tblue_book: {\n\t\ta: \"Blue Book\",\n\t\tb: \"1F4D8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"library\",\n\t\t\t\"knowledge\",\n\t\t\t\"learn\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t15\n\t\t]\n\t},\n\tsnake: {\n\t\ta: \"Snake\",\n\t\tb: \"1F40D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"evil\",\n\t\t\t\"nature\",\n\t\t\t\"hiss\",\n\t\t\t\"python\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t43\n\t\t]\n\t},\n\tfish_cake: {\n\t\ta: \"Fish Cake with Swirl Design\",\n\t\tb: \"1F365\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japan\",\n\t\t\t\"sea\",\n\t\t\t\"beach\",\n\t\t\t\"narutomaki\",\n\t\t\t\"pink\",\n\t\t\t\"swirl\",\n\t\t\t\"kamaboko\",\n\t\t\t\"surimi\",\n\t\t\t\"ramen\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t39\n\t\t]\n\t},\n\trailway_car: {\n\t\ta: \"Railway Car\",\n\t\tb: \"1F683\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t11\n\t\t]\n\t},\n\tdango: {\n\t\ta: \"Dango\",\n\t\tb: \"1F361\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"dessert\",\n\t\t\t\"sweet\",\n\t\t\t\"japanese\",\n\t\t\t\"barbecue\",\n\t\t\t\"meat\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t35\n\t\t]\n\t},\n\torange_book: {\n\t\ta: \"Orange Book\",\n\t\tb: \"1F4D9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"library\",\n\t\t\t\"knowledge\",\n\t\t\t\"textbook\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t16\n\t\t]\n\t},\n\tlibra: {\n\t\ta: \"Libra\",\n\t\tb: \"264E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t50\n\t\t],\n\t\to: 1\n\t},\n\tdragon_face: {\n\t\ta: \"Dragon Face\",\n\t\tb: \"1F432\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"myth\",\n\t\t\t\"nature\",\n\t\t\t\"chinese\",\n\t\t\t\"green\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-dg\": {\n\t\ta: \"Diego Garcia Flag\",\n\t\tb: \"1F1E9-1F1EC\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t38\n\t\t]\n\t},\n\tzany_face: {\n\t\ta: \"Grinning Face with One Large and One Small Eye\",\n\t\tb: \"1F92A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t50\n\t\t],\n\t\tn: [\n\t\t\t\"grinning_face_with_one_large_and_one_small_eye\"\n\t\t],\n\t\to: 10\n\t},\n\tbooks: {\n\t\ta: \"Books\",\n\t\tb: \"1F4DA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"literature\",\n\t\t\t\"library\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t17\n\t\t]\n\t},\n\tdragon: {\n\t\ta: \"Dragon\",\n\t\tb: \"1F409\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"myth\",\n\t\t\t\"nature\",\n\t\t\t\"chinese\",\n\t\t\t\"green\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t39\n\t\t]\n\t},\n\t\"flag-dj\": {\n\t\ta: \"Djibouti Flag\",\n\t\tb: \"1F1E9-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t39\n\t\t]\n\t},\n\tdumpling: {\n\t\ta: \"Dumpling\",\n\t\tb: \"1F95F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t11\n\t\t],\n\t\to: 10\n\t},\n\tdizzy_face: {\n\t\ta: \"Dizzy Face\",\n\t\tb: \"1F635\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"spent\",\n\t\t\t\"unconscious\",\n\t\t\t\"xox\",\n\t\t\t\"dizzy\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t25\n\t\t]\n\t},\n\tscorpius: {\n\t\ta: \"Scorpius\",\n\t\tb: \"264F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\",\n\t\t\t\"scorpio\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t51\n\t\t],\n\t\to: 1\n\t},\n\tbullettrain_side: {\n\t\ta: \"High-Speed Train\",\n\t\tb: \"1F684\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t12\n\t\t]\n\t},\n\tbullettrain_front: {\n\t\ta: \"High-Speed Train with Bullet Nose\",\n\t\tb: \"1F685\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"speed\",\n\t\t\t\"fast\",\n\t\t\t\"public\",\n\t\t\t\"travel\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t13\n\t\t]\n\t},\n\tnotebook: {\n\t\ta: \"Notebook\",\n\t\tb: \"1F4D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"record\",\n\t\t\t\"notes\",\n\t\t\t\"paper\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t10\n\t\t]\n\t},\n\tfortune_cookie: {\n\t\ta: \"Fortune Cookie\",\n\t\tb: \"1F960\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t12\n\t\t],\n\t\to: 10\n\t},\n\tsagittarius: {\n\t\ta: \"Sagittarius\",\n\t\tb: \"2650\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t0\n\t\t],\n\t\to: 1\n\t},\n\tsauropod: {\n\t\ta: \"Sauropod\",\n\t\tb: \"1F995\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t45\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-dk\": {\n\t\ta: \"Denmark Flag\",\n\t\tb: \"1F1E9-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t40\n\t\t]\n\t},\n\trage: {\n\t\ta: \"Pouting Face\",\n\t\tb: \"1F621\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"angry\",\n\t\t\t\"mad\",\n\t\t\t\"hate\",\n\t\t\t\"despise\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t5\n\t\t]\n\t},\n\tledger: {\n\t\ta: \"Ledger\",\n\t\tb: \"1F4D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"notes\",\n\t\t\t\"paper\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t9\n\t\t]\n\t},\n\tangry: {\n\t\ta: \"Angry Face\",\n\t\tb: \"1F620\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mad\",\n\t\t\t\"face\",\n\t\t\t\"annoyed\",\n\t\t\t\"frustrated\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t4\n\t\t],\n\t\tl: [\n\t\t\t\">:(\",\n\t\t\t\">:-(\"\n\t\t]\n\t},\n\t\"t-rex\": {\n\t\ta: \"T-Rex\",\n\t\tb: \"1F996\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t46\n\t\t],\n\t\to: 10\n\t},\n\tcapricorn: {\n\t\ta: \"Capricorn\",\n\t\tb: \"2651\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t1\n\t\t],\n\t\to: 1\n\t},\n\ttakeout_box: {\n\t\ta: \"Takeout Box\",\n\t\tb: \"1F961\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t13\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-dm\": {\n\t\ta: \"Dominica Flag\",\n\t\tb: \"1F1E9-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t41\n\t\t]\n\t},\n\ttrain2: {\n\t\ta: \"Train\",\n\t\tb: \"1F686\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t14\n\t\t]\n\t},\n\tpage_with_curl: {\n\t\ta: \"Page with Curl\",\n\t\tb: \"1F4C3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"office\",\n\t\t\t\"paper\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t46\n\t\t]\n\t},\n\twhale: {\n\t\ta: \"Spouting Whale\",\n\t\tb: \"1F433\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t29\n\t\t]\n\t},\n\tface_with_symbols_on_mouth: {\n\t\ta: \"Serious Face with Symbols Covering Mouth\",\n\t\tb: \"1F92C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t0\n\t\t],\n\t\tn: [\n\t\t\t\"serious_face_with_symbols_covering_mouth\"\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-do\": {\n\t\ta: \"Dominican Republic Flag\",\n\t\tb: \"1F1E9-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t42\n\t\t]\n\t},\n\tmetro: {\n\t\ta: \"Metro\",\n\t\tb: \"1F687\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"blue-square\",\n\t\t\t\"mrt\",\n\t\t\t\"underground\",\n\t\t\t\"tube\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t15\n\t\t]\n\t},\n\ticecream: {\n\t\ta: \"Soft Ice Cream\",\n\t\tb: \"1F366\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"hot\",\n\t\t\t\"dessert\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t40\n\t\t]\n\t},\n\taquarius: {\n\t\ta: \"Aquarius\",\n\t\tb: \"2652\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t2\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-dz\": {\n\t\ta: \"Algeria Flag\",\n\t\tb: \"1F1E9-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t43\n\t\t]\n\t},\n\twhale2: {\n\t\ta: \"Whale\",\n\t\tb: \"1F40B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t41\n\t\t]\n\t},\n\tmask: {\n\t\ta: \"Face with Medical Mask\",\n\t\tb: \"1F637\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sick\",\n\t\t\t\"ill\",\n\t\t\t\"disease\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t27\n\t\t]\n\t},\n\tscroll: {\n\t\ta: \"Scroll\",\n\t\tb: \"1F4DC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"ancient\",\n\t\t\t\"history\",\n\t\t\t\"paper\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t19\n\t\t]\n\t},\n\tshaved_ice: {\n\t\ta: \"Shaved Ice\",\n\t\tb: \"1F367\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hot\",\n\t\t\t\"dessert\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t41\n\t\t]\n\t},\n\tpisces: {\n\t\ta: \"Pisces\",\n\t\tb: \"2653\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t3\n\t\t],\n\t\to: 1\n\t},\n\tlight_rail: {\n\t\ta: \"Light Rail\",\n\t\tb: \"1F688\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t16\n\t\t]\n\t},\n\tdolphin: {\n\t\ta: \"Dolphin\",\n\t\tb: \"1F42C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"fish\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\",\n\t\t\t\"flipper\",\n\t\t\t\"fins\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t22\n\t\t],\n\t\tn: [\n\t\t\t\"flipper\"\n\t\t]\n\t},\n\tface_with_thermometer: {\n\t\ta: \"Face with Thermometer\",\n\t\tb: \"1F912\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sick\",\n\t\t\t\"temperature\",\n\t\t\t\"thermometer\",\n\t\t\t\"cold\",\n\t\t\t\"fever\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t26\n\t\t],\n\t\to: 8\n\t},\n\t\"flag-ea\": {\n\t\ta: \"Ceuta & Melilla Flag\",\n\t\tb: \"1F1EA-1F1E6\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t44\n\t\t]\n\t},\n\tophiuchus: {\n\t\ta: \"Ophiuchus\",\n\t\tb: \"26CE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"constellation\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t31\n\t\t]\n\t},\n\tstation: {\n\t\ta: \"Station\",\n\t\tb: \"1F689\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"public\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t17\n\t\t]\n\t},\n\tice_cream: {\n\t\ta: \"Ice Cream\",\n\t\tb: \"1F368\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"hot\",\n\t\t\t\"dessert\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t42\n\t\t]\n\t},\n\tpage_facing_up: {\n\t\ta: \"Page Facing Up\",\n\t\tb: \"1F4C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"office\",\n\t\t\t\"paper\",\n\t\t\t\"information\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t47\n\t\t]\n\t},\n\tdoughnut: {\n\t\ta: \"Doughnut\",\n\t\tb: \"1F369\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"dessert\",\n\t\t\t\"snack\",\n\t\t\t\"sweet\",\n\t\t\t\"donut\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t43\n\t\t]\n\t},\n\tface_with_head_bandage: {\n\t\ta: \"Face with Head-Bandage\",\n\t\tb: \"1F915\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"injured\",\n\t\t\t\"clumsy\",\n\t\t\t\"bandage\",\n\t\t\t\"hurt\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t29\n\t\t],\n\t\to: 8\n\t},\n\tfish: {\n\t\ta: \"Fish\",\n\t\tb: \"1F41F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"food\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t9\n\t\t]\n\t},\n\tnewspaper: {\n\t\ta: \"Newspaper\",\n\t\tb: \"1F4F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"press\",\n\t\t\t\"headline\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t39\n\t\t]\n\t},\n\ttram: {\n\t\ta: \"Tram\",\n\t\tb: \"1F68A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t18\n\t\t]\n\t},\n\t\"flag-ec\": {\n\t\ta: \"Ecuador Flag\",\n\t\tb: \"1F1EA-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t45\n\t\t]\n\t},\n\ttwisted_rightwards_arrows: {\n\t\ta: \"Twisted Rightwards Arrows\",\n\t\tb: \"1F500\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"shuffle\",\n\t\t\t\"music\",\n\t\t\t\"random\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-ee\": {\n\t\ta: \"Estonia Flag\",\n\t\tb: \"1F1EA-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t46\n\t\t]\n\t},\n\tcookie: {\n\t\ta: \"Cookie\",\n\t\tb: \"1F36A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"snack\",\n\t\t\t\"oreo\",\n\t\t\t\"chocolate\",\n\t\t\t\"sweet\",\n\t\t\t\"dessert\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t44\n\t\t]\n\t},\n\tmonorail: {\n\t\ta: \"Monorail\",\n\t\tb: \"1F69D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t37\n\t\t]\n\t},\n\ttropical_fish: {\n\t\ta: \"Tropical Fish\",\n\t\tb: \"1F420\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"swim\",\n\t\t\t\"ocean\",\n\t\t\t\"beach\",\n\t\t\t\"nemo\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t10\n\t\t]\n\t},\n\trolled_up_newspaper: {\n\t\ta: \"Rolled Up Newspaper\",\n\t\tb: \"1F5DE-FE0F\",\n\t\tc: \"1F5DE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t12\n\t\t],\n\t\to: 7\n\t},\n\tnauseated_face: {\n\t\ta: \"Nauseated Face\",\n\t\tb: \"1F922\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"vomit\",\n\t\t\t\"gross\",\n\t\t\t\"green\",\n\t\t\t\"sick\",\n\t\t\t\"throw up\",\n\t\t\t\"ill\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t25\n\t\t],\n\t\to: 9\n\t},\n\trepeat: {\n\t\ta: \"Clockwise Rightwards and Leftwards Open Circle Arrows\",\n\t\tb: \"1F501\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"loop\",\n\t\t\t\"record\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t3\n\t\t]\n\t},\n\tbookmark_tabs: {\n\t\ta: \"Bookmark Tabs\",\n\t\tb: \"1F4D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"favorite\",\n\t\t\t\"save\",\n\t\t\t\"order\",\n\t\t\t\"tidy\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t8\n\t\t]\n\t},\n\trepeat_one: {\n\t\ta: \"Clockwise Rightwards and Leftwards Open Circle Arrows with Circled One Overlay\",\n\t\tb: \"1F502\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"loop\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-eg\": {\n\t\ta: \"Egypt Flag\",\n\t\tb: \"1F1EA-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t47\n\t\t]\n\t},\n\tmountain_railway: {\n\t\ta: \"Mountain Railway\",\n\t\tb: \"1F69E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t38\n\t\t]\n\t},\n\tbirthday: {\n\t\ta: \"Birthday Cake\",\n\t\tb: \"1F382\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"dessert\",\n\t\t\t\"cake\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t16\n\t\t]\n\t},\n\tblowfish: {\n\t\ta: \"Blowfish\",\n\t\tb: \"1F421\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"food\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t11\n\t\t]\n\t},\n\tface_vomiting: {\n\t\ta: \"Face with Open Mouth Vomiting\",\n\t\tb: \"1F92E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t2\n\t\t],\n\t\tn: [\n\t\t\t\"face_with_open_mouth_vomiting\"\n\t\t],\n\t\to: 10\n\t},\n\tarrow_forward: {\n\t\ta: \"Black Right-Pointing Triangle\",\n\t\tb: \"25B6-FE0F\",\n\t\tc: \"25B6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"right\",\n\t\t\t\"direction\",\n\t\t\t\"play\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t10\n\t\t],\n\t\to: 1\n\t},\n\tbookmark: {\n\t\ta: \"Bookmark\",\n\t\tb: \"1F516\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"favorite\",\n\t\t\t\"label\",\n\t\t\t\"save\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t24\n\t\t]\n\t},\n\t\"flag-eh\": {\n\t\ta: \"Western Sahara Flag\",\n\t\tb: \"1F1EA-1F1ED\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t48\n\t\t]\n\t},\n\tshark: {\n\t\ta: \"Shark\",\n\t\tb: \"1F988\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"fish\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\",\n\t\t\t\"jaws\",\n\t\t\t\"fins\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t32\n\t\t],\n\t\to: 9\n\t},\n\ttrain: {\n\t\ta: \"Tram Car\",\n\t\tb: \"1F68B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"carriage\",\n\t\t\t\"public\",\n\t\t\t\"travel\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t19\n\t\t]\n\t},\n\tsneezing_face: {\n\t\ta: \"Sneezing Face\",\n\t\tb: \"1F927\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"gesundheit\",\n\t\t\t\"sneeze\",\n\t\t\t\"sick\",\n\t\t\t\"allergy\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t47\n\t\t],\n\t\to: 9\n\t},\n\tcake: {\n\t\ta: \"Shortcake\",\n\t\tb: \"1F370\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"dessert\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t50\n\t\t]\n\t},\n\tbus: {\n\t\ta: \"Bus\",\n\t\tb: \"1F68C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"car\",\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t20\n\t\t]\n\t},\n\tpie: {\n\t\ta: \"Pie\",\n\t\tb: \"1F967\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t19\n\t\t],\n\t\to: 10\n\t},\n\tinnocent: {\n\t\ta: \"Smiling Face with Halo\",\n\t\tb: \"1F607\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"angel\",\n\t\t\t\"heaven\",\n\t\t\t\"halo\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t31\n\t\t]\n\t},\n\tfast_forward: {\n\t\ta: \"Black Right-Pointing Double Triangle\",\n\t\tb: \"23E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"play\",\n\t\t\t\"speed\",\n\t\t\t\"continue\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t45\n\t\t]\n\t},\n\tlabel: {\n\t\ta: \"Label\",\n\t\tb: \"1F3F7-FE0F\",\n\t\tc: \"1F3F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sale\",\n\t\t\t\"tag\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t21\n\t\t],\n\t\to: 7\n\t},\n\toctopus: {\n\t\ta: \"Octopus\",\n\t\tb: \"1F419\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"creature\",\n\t\t\t\"ocean\",\n\t\t\t\"sea\",\n\t\t\t\"nature\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t3\n\t\t]\n\t},\n\t\"flag-er\": {\n\t\ta: \"Eritrea Flag\",\n\t\tb: \"1F1EA-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t49\n\t\t]\n\t},\n\tblack_right_pointing_double_triangle_with_vertical_bar: {\n\t\ta: \"Black Right Pointing Double Triangle with Vertical Bar\",\n\t\tb: \"23ED-FE0F\",\n\t\tc: \"23ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t49\n\t\t]\n\t},\n\tchocolate_bar: {\n\t\ta: \"Chocolate Bar\",\n\t\tb: \"1F36B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"snack\",\n\t\t\t\"dessert\",\n\t\t\t\"sweet\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t45\n\t\t]\n\t},\n\toncoming_bus: {\n\t\ta: \"Oncoming Bus\",\n\t\tb: \"1F68D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t21\n\t\t]\n\t},\n\tshell: {\n\t\ta: \"Spiral Shell\",\n\t\tb: \"1F41A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"sea\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t4\n\t\t]\n\t},\n\tface_with_cowboy_hat: {\n\t\ta: \"Face with Cowboy Hat\",\n\t\tb: \"1F920\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t23\n\t\t],\n\t\to: 9\n\t},\n\tmoneybag: {\n\t\ta: \"Money Bag\",\n\t\tb: \"1F4B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dollar\",\n\t\t\t\"payment\",\n\t\t\t\"coins\",\n\t\t\t\"sale\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t27\n\t\t]\n\t},\n\tes: {\n\t\ta: \"Spain Flag\",\n\t\tb: \"1F1EA-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"spain\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t1,\n\t\t\t50\n\t\t],\n\t\tn: [\n\t\t\t\"flag-es\"\n\t\t]\n\t},\n\tcrab: {\n\t\ta: \"Crab\",\n\t\tb: \"1F980\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"crustacean\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t24\n\t\t],\n\t\to: 8\n\t},\n\tyen: {\n\t\ta: \"Banknote with Yen Sign\",\n\t\tb: \"1F4B4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"japanese\",\n\t\t\t\"dollar\",\n\t\t\t\"currency\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t31\n\t\t]\n\t},\n\t\"flag-et\": {\n\t\ta: \"Ethiopia Flag\",\n\t\tb: \"1F1EA-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t51\n\t\t]\n\t},\n\tclown_face: {\n\t\ta: \"Clown Face\",\n\t\tb: \"1F921\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t24\n\t\t],\n\t\to: 9\n\t},\n\tblack_right_pointing_triangle_with_double_vertical_bar: {\n\t\ta: \"Black Right Pointing Triangle with Double Vertical Bar\",\n\t\tb: \"23EF-FE0F\",\n\t\tc: \"23EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t51\n\t\t]\n\t},\n\ttrolleybus: {\n\t\ta: \"Trolleybus\",\n\t\tb: \"1F68E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bart\",\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t22\n\t\t]\n\t},\n\tcandy: {\n\t\ta: \"Candy\",\n\t\tb: \"1F36C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"snack\",\n\t\t\t\"dessert\",\n\t\t\t\"sweet\",\n\t\t\t\"lolly\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t46\n\t\t]\n\t},\n\tlying_face: {\n\t\ta: \"Lying Face\",\n\t\tb: \"1F925\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"lie\",\n\t\t\t\"pinocchio\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t28\n\t\t],\n\t\to: 9\n\t},\n\tarrow_backward: {\n\t\ta: \"Black Left-Pointing Triangle\",\n\t\tb: \"25C0-FE0F\",\n\t\tc: \"25C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"left\",\n\t\t\t\"direction\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t11\n\t\t],\n\t\to: 1\n\t},\n\tdollar: {\n\t\ta: \"Banknote with Dollar Sign\",\n\t\tb: \"1F4B5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"bill\",\n\t\t\t\"currency\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t32\n\t\t]\n\t},\n\tshrimp: {\n\t\ta: \"Shrimp\",\n\t\tb: \"1F990\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"ocean\",\n\t\t\t\"nature\",\n\t\t\t\"seafood\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t40\n\t\t],\n\t\to: 9\n\t},\n\tminibus: {\n\t\ta: \"Minibus\",\n\t\tb: \"1F690\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"car\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t24\n\t\t]\n\t},\n\t\"flag-eu\": {\n\t\ta: \"European Union Flag\",\n\t\tb: \"1F1EA-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t0\n\t\t]\n\t},\n\tlollipop: {\n\t\ta: \"Lollipop\",\n\t\tb: \"1F36D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"snack\",\n\t\t\t\"candy\",\n\t\t\t\"sweet\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t47\n\t\t]\n\t},\n\tsquid: {\n\t\ta: \"Squid\",\n\t\tb: \"1F991\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"ocean\",\n\t\t\t\"sea\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t41\n\t\t],\n\t\to: 9\n\t},\n\teuro: {\n\t\ta: \"Banknote with Euro Sign\",\n\t\tb: \"1F4B6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"dollar\",\n\t\t\t\"currency\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t33\n\t\t]\n\t},\n\t\"flag-fi\": {\n\t\ta: \"Finland Flag\",\n\t\tb: \"1F1EB-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t1\n\t\t]\n\t},\n\tambulance: {\n\t\ta: \"Ambulance\",\n\t\tb: \"1F691\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"health\",\n\t\t\t\"911\",\n\t\t\t\"hospital\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t25\n\t\t]\n\t},\n\tcustard: {\n\t\ta: \"Custard\",\n\t\tb: \"1F36E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dessert\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t48\n\t\t]\n\t},\n\tshushing_face: {\n\t\ta: \"Face with Finger Covering Closed Lips\",\n\t\tb: \"1F92B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t51\n\t\t],\n\t\tn: [\n\t\t\t\"face_with_finger_covering_closed_lips\"\n\t\t],\n\t\to: 10\n\t},\n\trewind: {\n\t\ta: \"Black Left-Pointing Double Triangle\",\n\t\tb: \"23EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"play\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t46\n\t\t]\n\t},\n\tblack_left_pointing_double_triangle_with_vertical_bar: {\n\t\ta: \"Black Left Pointing Double Triangle with Vertical Bar\",\n\t\tb: \"23EE-FE0F\",\n\t\tc: \"23EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t50\n\t\t]\n\t},\n\tface_with_hand_over_mouth: {\n\t\ta: \"Smiling Face with Smiling Eyes and Hand Covering Mouth\",\n\t\tb: \"1F92D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t1\n\t\t],\n\t\tn: [\n\t\t\t\"smiling_face_with_smiling_eyes_and_hand_covering_mouth\"\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-fj\": {\n\t\ta: \"Fiji Flag\",\n\t\tb: \"1F1EB-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t2\n\t\t]\n\t},\n\thoney_pot: {\n\t\ta: \"Honey Pot\",\n\t\tb: \"1F36F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bees\",\n\t\t\t\"sweet\",\n\t\t\t\"kitchen\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t49\n\t\t]\n\t},\n\tsnail: {\n\t\ta: \"Snail\",\n\t\tb: \"1F40C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"slow\",\n\t\t\t\"animal\",\n\t\t\t\"shell\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t42\n\t\t]\n\t},\n\tpound: {\n\t\ta: \"Banknote with Pound Sign\",\n\t\tb: \"1F4B7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"british\",\n\t\t\t\"sterling\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"bills\",\n\t\t\t\"uk\",\n\t\t\t\"england\",\n\t\t\t\"currency\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t34\n\t\t]\n\t},\n\tfire_engine: {\n\t\ta: \"Fire Engine\",\n\t\tb: \"1F692\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"cars\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t26\n\t\t]\n\t},\n\tbaby_bottle: {\n\t\ta: \"Baby Bottle\",\n\t\tb: \"1F37C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"container\",\n\t\t\t\"milk\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t10\n\t\t]\n\t},\n\t\"flag-fk\": {\n\t\ta: \"Falkland Islands Flag\",\n\t\tb: \"1F1EB-1F1F0\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t3\n\t\t]\n\t},\n\tbutterfly: {\n\t\ta: \"Butterfly\",\n\t\tb: \"1F98B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"nature\",\n\t\t\t\"caterpillar\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t35\n\t\t],\n\t\to: 9\n\t},\n\tmoney_with_wings: {\n\t\ta: \"Money with Wings\",\n\t\tb: \"1F4B8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dollar\",\n\t\t\t\"bills\",\n\t\t\t\"payment\",\n\t\t\t\"sale\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t35\n\t\t]\n\t},\n\tface_with_monocle: {\n\t\ta: \"Face with Monocle\",\n\t\tb: \"1F9D0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t49\n\t\t],\n\t\to: 10\n\t},\n\tpolice_car: {\n\t\ta: \"Police Car\",\n\t\tb: \"1F693\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"cars\",\n\t\t\t\"transportation\",\n\t\t\t\"law\",\n\t\t\t\"legal\",\n\t\t\t\"enforcement\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t27\n\t\t]\n\t},\n\tarrow_up_small: {\n\t\ta: \"Up-Pointing Small Red Triangle\",\n\t\tb: \"1F53C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"triangle\",\n\t\t\t\"direction\",\n\t\t\t\"point\",\n\t\t\t\"forward\",\n\t\t\t\"top\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t10\n\t\t]\n\t},\n\t\"flag-fm\": {\n\t\ta: \"Micronesia Flag\",\n\t\tb: \"1F1EB-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t4\n\t\t]\n\t},\n\tglass_of_milk: {\n\t\ta: \"Glass of Milk\",\n\t\tb: \"1F95B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t7\n\t\t],\n\t\to: 9\n\t},\n\tcredit_card: {\n\t\ta: \"Credit Card\",\n\t\tb: \"1F4B3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"dollar\",\n\t\t\t\"bill\",\n\t\t\t\"payment\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t30\n\t\t]\n\t},\n\toncoming_police_car: {\n\t\ta: \"Oncoming Police Car\",\n\t\tb: \"1F694\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"law\",\n\t\t\t\"legal\",\n\t\t\t\"enforcement\",\n\t\t\t\"911\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t28\n\t\t]\n\t},\n\tbug: {\n\t\ta: \"Bug\",\n\t\tb: \"1F41B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"nature\",\n\t\t\t\"worm\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t5\n\t\t]\n\t},\n\tnerd_face: {\n\t\ta: \"Nerd Face\",\n\t\tb: \"1F913\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"nerdy\",\n\t\t\t\"geek\",\n\t\t\t\"dork\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t27\n\t\t],\n\t\to: 8\n\t},\n\tarrow_double_up: {\n\t\ta: \"Black Up-Pointing Double Triangle\",\n\t\tb: \"23EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"top\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t47\n\t\t]\n\t},\n\tchart: {\n\t\ta: \"Chart with Upwards Trend and Yen Sign\",\n\t\tb: \"1F4B9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"green-square\",\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-fo\": {\n\t\ta: \"Faroe Islands Flag\",\n\t\tb: \"1F1EB-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t5\n\t\t]\n\t},\n\tant: {\n\t\ta: \"Ant\",\n\t\tb: \"1F41C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"nature\",\n\t\t\t\"bug\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t6\n\t\t]\n\t},\n\tarrow_down_small: {\n\t\ta: \"Down-Pointing Small Red Triangle\",\n\t\tb: \"1F53D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t11\n\t\t]\n\t},\n\tsmiling_imp: {\n\t\ta: \"Smiling Face with Horns\",\n\t\tb: \"1F608\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"devil\",\n\t\t\t\"horns\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t32\n\t\t]\n\t},\n\ttaxi: {\n\t\ta: \"Taxi\",\n\t\tb: \"1F695\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"uber\",\n\t\t\t\"vehicle\",\n\t\t\t\"cars\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t29\n\t\t]\n\t},\n\tcoffee: {\n\t\ta: \"Hot Beverage\",\n\t\tb: \"2615\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beverage\",\n\t\t\t\"caffeine\",\n\t\t\t\"latte\",\n\t\t\t\"espresso\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t24\n\t\t],\n\t\to: 4\n\t},\n\tfr: {\n\t\ta: \"France Flag\",\n\t\tb: \"1F1EB-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"banner\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"france\",\n\t\t\t\"french\",\n\t\t\t\"country\"\n\t\t],\n\t\tk: [\n\t\t\t2,\n\t\t\t6\n\t\t],\n\t\tn: [\n\t\t\t\"flag-fr\"\n\t\t]\n\t},\n\toncoming_taxi: {\n\t\ta: \"Oncoming Taxi\",\n\t\tb: \"1F696\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"cars\",\n\t\t\t\"uber\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t30\n\t\t]\n\t},\n\tarrow_double_down: {\n\t\ta: \"Black Down-Pointing Double Triangle\",\n\t\tb: \"23EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t48\n\t\t]\n\t},\n\timp: {\n\t\ta: \"Imp\",\n\t\tb: \"1F47F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"devil\",\n\t\t\t\"angry\",\n\t\t\t\"horns\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t51\n\t\t]\n\t},\n\tcurrency_exchange: {\n\t\ta: \"Currency Exchange\",\n\t\tb: \"1F4B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"dollar\",\n\t\t\t\"travel\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t28\n\t\t]\n\t},\n\ttea: {\n\t\ta: \"Teacup Without Handle\",\n\t\tb: \"1F375\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"bowl\",\n\t\t\t\"breakfast\",\n\t\t\t\"green\",\n\t\t\t\"british\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t3\n\t\t]\n\t},\n\tbee: {\n\t\ta: \"Honeybee\",\n\t\tb: \"1F41D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t13,\n\t\t\t7\n\t\t],\n\t\tn: [\n\t\t\t\"honeybee\"\n\t\t]\n\t},\n\theavy_dollar_sign: {\n\t\ta: \"Heavy Dollar Sign\",\n\t\tb: \"1F4B2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"payment\",\n\t\t\t\"currency\",\n\t\t\t\"buck\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t29\n\t\t]\n\t},\n\tcar: {\n\t\ta: \"Automobile\",\n\t\tb: \"1F697\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t34,\n\t\t\t31\n\t\t],\n\t\tn: [\n\t\t\t\"red_car\"\n\t\t]\n\t},\n\tsake: {\n\t\ta: \"Sake Bottle and Cup\",\n\t\tb: \"1F376\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wine\",\n\t\t\t\"drink\",\n\t\t\t\"drunk\",\n\t\t\t\"beverage\",\n\t\t\t\"japanese\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-ga\": {\n\t\ta: \"Gabon Flag\",\n\t\tb: \"1F1EC-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t7\n\t\t]\n\t},\n\tbeetle: {\n\t\ta: \"Lady Beetle\",\n\t\tb: \"1F41E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"nature\",\n\t\t\t\"ladybug\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t8\n\t\t]\n\t},\n\tjapanese_ogre: {\n\t\ta: \"Japanese Ogre\",\n\t\tb: \"1F479\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"monster\",\n\t\t\t\"red\",\n\t\t\t\"mask\",\n\t\t\t\"halloween\",\n\t\t\t\"scary\",\n\t\t\t\"creepy\",\n\t\t\t\"devil\",\n\t\t\t\"demon\",\n\t\t\t\"japanese\",\n\t\t\t\"ogre\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t40\n\t\t]\n\t},\n\tdouble_vertical_bar: {\n\t\ta: \"Double Vertical Bar\",\n\t\tb: \"23F8-FE0F\",\n\t\tc: \"23F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t4\n\t\t],\n\t\to: 7\n\t},\n\tchampagne: {\n\t\ta: \"Bottle with Popping Cork\",\n\t\tb: \"1F37E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"wine\",\n\t\t\t\"bottle\",\n\t\t\t\"celebration\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t12\n\t\t],\n\t\to: 8\n\t},\n\tjapanese_goblin: {\n\t\ta: \"Japanese Goblin\",\n\t\tb: \"1F47A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"red\",\n\t\t\t\"evil\",\n\t\t\t\"mask\",\n\t\t\t\"monster\",\n\t\t\t\"scary\",\n\t\t\t\"creepy\",\n\t\t\t\"japanese\",\n\t\t\t\"goblin\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t41\n\t\t]\n\t},\n\tblack_square_for_stop: {\n\t\ta: \"Black Square for Stop\",\n\t\tb: \"23F9-FE0F\",\n\t\tc: \"23F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t5\n\t\t],\n\t\to: 7\n\t},\n\toncoming_automobile: {\n\t\ta: \"Oncoming Automobile\",\n\t\tb: \"1F698\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"car\",\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t32\n\t\t]\n\t},\n\temail: {\n\t\ta: \"Envelope\",\n\t\tb: \"2709-FE0F\",\n\t\tc: \"2709\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"letter\",\n\t\t\t\"postal\",\n\t\t\t\"inbox\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t17\n\t\t],\n\t\tn: [\n\t\t\t\"envelope\"\n\t\t],\n\t\to: 1\n\t},\n\tcricket: {\n\t\ta: \"Cricket\",\n\t\tb: \"1F997\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t47\n\t\t],\n\t\to: 10\n\t},\n\tgb: {\n\t\ta: \"United Kingdom Flag\",\n\t\tb: \"1F1EC-1F1E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t8\n\t\t],\n\t\tn: [\n\t\t\t\"uk\",\n\t\t\t\"flag-gb\"\n\t\t]\n\t},\n\tblack_circle_for_record: {\n\t\ta: \"Black Circle for Record\",\n\t\tb: \"23FA-FE0F\",\n\t\tc: \"23FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t6\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-gd\": {\n\t\ta: \"Grenada Flag\",\n\t\tb: \"1F1EC-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t9\n\t\t]\n\t},\n\tspider: {\n\t\ta: \"Spider\",\n\t\tb: \"1F577-FE0F\",\n\t\tc: \"1F577\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"arachnid\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\tblue_car: {\n\t\ta: \"Recreational Vehicle\",\n\t\tb: \"1F699\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t33\n\t\t]\n\t},\n\tskull: {\n\t\ta: \"Skull\",\n\t\tb: \"1F480\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dead\",\n\t\t\t\"skeleton\",\n\t\t\t\"creepy\",\n\t\t\t\"death\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t0\n\t\t]\n\t},\n\t\"e-mail\": {\n\t\ta: \"E-Mail Symbol\",\n\t\tb: \"1F4E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"communication\",\n\t\t\t\"inbox\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t30\n\t\t]\n\t},\n\twine_glass: {\n\t\ta: \"Wine Glass\",\n\t\tb: \"1F377\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"beverage\",\n\t\t\t\"drunk\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t5\n\t\t]\n\t},\n\tspider_web: {\n\t\ta: \"Spider Web\",\n\t\tb: \"1F578-FE0F\",\n\t\tc: \"1F578\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"arachnid\",\n\t\t\t\"silk\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t19\n\t\t],\n\t\to: 7\n\t},\n\tcocktail: {\n\t\ta: \"Cocktail Glass\",\n\t\tb: \"1F378\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"drunk\",\n\t\t\t\"alcohol\",\n\t\t\t\"beverage\",\n\t\t\t\"booze\",\n\t\t\t\"mojito\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t6\n\t\t]\n\t},\n\tskull_and_crossbones: {\n\t\ta: \"Skull and Crossbones\",\n\t\tb: \"2620-FE0F\",\n\t\tc: \"2620\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"poison\",\n\t\t\t\"danger\",\n\t\t\t\"deadly\",\n\t\t\t\"scary\",\n\t\t\t\"death\",\n\t\t\t\"pirate\",\n\t\t\t\"evil\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t32\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-ge\": {\n\t\ta: \"Georgia Flag\",\n\t\tb: \"1F1EC-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t10\n\t\t]\n\t},\n\teject: {\n\t\ta: \"Eject\",\n\t\tb: \"23CF-FE0F\",\n\t\tc: \"23CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t44\n\t\t],\n\t\to: 4\n\t},\n\ttruck: {\n\t\ta: \"Delivery Truck\",\n\t\tb: \"1F69A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cars\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t34\n\t\t]\n\t},\n\tincoming_envelope: {\n\t\ta: \"Incoming Envelope\",\n\t\tb: \"1F4E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"inbox\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t31\n\t\t]\n\t},\n\ttropical_drink: {\n\t\ta: \"Tropical Drink\",\n\t\tb: \"1F379\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beverage\",\n\t\t\t\"cocktail\",\n\t\t\t\"summer\",\n\t\t\t\"beach\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\",\n\t\t\t\"mojito\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t7\n\t\t]\n\t},\n\tscorpion: {\n\t\ta: \"Scorpion\",\n\t\tb: \"1F982\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"arachnid\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t26\n\t\t],\n\t\to: 8\n\t},\n\tcinema: {\n\t\ta: \"Cinema\",\n\t\tb: \"1F3A6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"record\",\n\t\t\t\"film\",\n\t\t\t\"movie\",\n\t\t\t\"curtain\",\n\t\t\t\"stage\",\n\t\t\t\"theater\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t0\n\t\t]\n\t},\n\tarticulated_lorry: {\n\t\ta: \"Articulated Lorry\",\n\t\tb: \"1F69B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"cars\",\n\t\t\t\"transportation\",\n\t\t\t\"express\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t35\n\t\t]\n\t},\n\tenvelope_with_arrow: {\n\t\ta: \"Envelope with Downwards Arrow Above\",\n\t\tb: \"1F4E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t32\n\t\t]\n\t},\n\tghost: {\n\t\ta: \"Ghost\",\n\t\tb: \"1F47B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"halloween\",\n\t\t\t\"spooky\",\n\t\t\t\"scary\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t42\n\t\t]\n\t},\n\t\"flag-gf\": {\n\t\ta: \"French Guiana Flag\",\n\t\tb: \"1F1EC-1F1EB\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t11\n\t\t]\n\t},\n\tbouquet: {\n\t\ta: \"Bouquet\",\n\t\tb: \"1F490\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"flowers\",\n\t\t\t\"nature\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t42\n\t\t]\n\t},\n\ttractor: {\n\t\ta: \"Tractor\",\n\t\tb: \"1F69C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"car\",\n\t\t\t\"farming\",\n\t\t\t\"agriculture\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t36\n\t\t]\n\t},\n\tbeer: {\n\t\ta: \"Beer Mug\",\n\t\tb: \"1F37A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"relax\",\n\t\t\t\"beverage\",\n\t\t\t\"drink\",\n\t\t\t\"drunk\",\n\t\t\t\"party\",\n\t\t\t\"pub\",\n\t\t\t\"summer\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t8\n\t\t]\n\t},\n\toutbox_tray: {\n\t\ta: \"Outbox Tray\",\n\t\tb: \"1F4E4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"inbox\",\n\t\t\t\"email\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t27\n\t\t]\n\t},\n\tlow_brightness: {\n\t\ta: \"Low Brightness Symbol\",\n\t\tb: \"1F505\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sun\",\n\t\t\t\"afternoon\",\n\t\t\t\"warm\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t7\n\t\t]\n\t},\n\talien: {\n\t\ta: \"Extraterrestrial Alien\",\n\t\tb: \"1F47D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"UFO\",\n\t\t\t\"paul\",\n\t\t\t\"weird\",\n\t\t\t\"outer_space\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t49\n\t\t]\n\t},\n\t\"flag-gg\": {\n\t\ta: \"Guernsey Flag\",\n\t\tb: \"1F1EC-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t12\n\t\t]\n\t},\n\tcherry_blossom: {\n\t\ta: \"Cherry Blossom\",\n\t\tb: \"1F338\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"spring\",\n\t\t\t\"flower\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t46\n\t\t]\n\t},\n\tinbox_tray: {\n\t\ta: \"Inbox Tray\",\n\t\tb: \"1F4E5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"documents\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-gh\": {\n\t\ta: \"Ghana Flag\",\n\t\tb: \"1F1EC-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t13\n\t\t]\n\t},\n\tbike: {\n\t\ta: \"Bicycle\",\n\t\tb: \"1F6B2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"bicycle\",\n\t\t\t\"exercise\",\n\t\t\t\"hipster\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t23\n\t\t]\n\t},\n\tspace_invader: {\n\t\ta: \"Alien Monster\",\n\t\tb: \"1F47E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"arcade\",\n\t\t\t\"play\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t50\n\t\t]\n\t},\n\tbeers: {\n\t\ta: \"Clinking Beer Mugs\",\n\t\tb: \"1F37B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"relax\",\n\t\t\t\"beverage\",\n\t\t\t\"drink\",\n\t\t\t\"drunk\",\n\t\t\t\"party\",\n\t\t\t\"pub\",\n\t\t\t\"summer\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t9\n\t\t]\n\t},\n\thigh_brightness: {\n\t\ta: \"High Brightness Symbol\",\n\t\tb: \"1F506\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sun\",\n\t\t\t\"light\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t8\n\t\t]\n\t},\n\t\"package\": {\n\t\ta: \"Package\",\n\t\tb: \"1F4E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mail\",\n\t\t\t\"gift\",\n\t\t\t\"cardboard\",\n\t\t\t\"box\",\n\t\t\t\"moving\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t29\n\t\t]\n\t},\n\tscooter: {\n\t\ta: \"Scooter\",\n\t\tb: \"1F6F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t19\n\t\t],\n\t\to: 9\n\t},\n\twhite_flower: {\n\t\ta: \"White Flower\",\n\t\tb: \"1F4AE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t25\n\t\t]\n\t},\n\tclinking_glasses: {\n\t\ta: \"Clinking Glasses\",\n\t\tb: \"1F942\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"beverage\",\n\t\t\t\"drink\",\n\t\t\t\"party\",\n\t\t\t\"alcohol\",\n\t\t\t\"celebrate\",\n\t\t\t\"cheers\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t38\n\t\t],\n\t\to: 9\n\t},\n\trobot_face: {\n\t\ta: \"Robot Face\",\n\t\tb: \"1F916\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t30\n\t\t],\n\t\to: 8\n\t},\n\tsignal_strength: {\n\t\ta: \"Antenna with Bars\",\n\t\tb: \"1F4F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"reception\",\n\t\t\t\"phone\",\n\t\t\t\"internet\",\n\t\t\t\"connection\",\n\t\t\t\"wifi\",\n\t\t\t\"bluetooth\",\n\t\t\t\"bars\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t45\n\t\t]\n\t},\n\t\"flag-gi\": {\n\t\ta: \"Gibraltar Flag\",\n\t\tb: \"1F1EC-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t14\n\t\t]\n\t},\n\t\"flag-gl\": {\n\t\ta: \"Greenland Flag\",\n\t\tb: \"1F1EC-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t15\n\t\t]\n\t},\n\tmotor_scooter: {\n\t\ta: \"Motor Scooter\",\n\t\tb: \"1F6F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"vespa\",\n\t\t\t\"sasha\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t20\n\t\t],\n\t\to: 9\n\t},\n\tmailbox: {\n\t\ta: \"Closed Mailbox with Raised Flag\",\n\t\tb: \"1F4EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"inbox\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t34\n\t\t]\n\t},\n\tvibration_mode: {\n\t\ta: \"Vibration Mode\",\n\t\tb: \"1F4F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"orange-square\",\n\t\t\t\"phone\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t42\n\t\t]\n\t},\n\thankey: {\n\t\ta: \"Pile of Poo\",\n\t\tb: \"1F4A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t25,\n\t\t\t15\n\t\t],\n\t\tn: [\n\t\t\t\"poop\",\n\t\t\t\"shit\"\n\t\t]\n\t},\n\trosette: {\n\t\ta: \"Rosette\",\n\t\tb: \"1F3F5-FE0F\",\n\t\tc: \"1F3F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"flower\",\n\t\t\t\"decoration\",\n\t\t\t\"military\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t20\n\t\t],\n\t\to: 7\n\t},\n\ttumbler_glass: {\n\t\ta: \"Tumbler Glass\",\n\t\tb: \"1F943\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"beverage\",\n\t\t\t\"drunk\",\n\t\t\t\"alcohol\",\n\t\t\t\"liquor\",\n\t\t\t\"booze\",\n\t\t\t\"bourbon\",\n\t\t\t\"scotch\",\n\t\t\t\"whisky\",\n\t\t\t\"glass\",\n\t\t\t\"shot\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t39\n\t\t],\n\t\to: 9\n\t},\n\tcup_with_straw: {\n\t\ta: \"Cup with Straw\",\n\t\tb: \"1F964\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t16\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-gm\": {\n\t\ta: \"Gambia Flag\",\n\t\tb: \"1F1EC-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t16\n\t\t]\n\t},\n\tmailbox_closed: {\n\t\ta: \"Closed Mailbox with Lowered Flag\",\n\t\tb: \"1F4EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"communication\",\n\t\t\t\"inbox\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t33\n\t\t]\n\t},\n\tmobile_phone_off: {\n\t\ta: \"Mobile Phone off\",\n\t\tb: \"1F4F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mute\",\n\t\t\t\"orange-square\",\n\t\t\t\"silence\",\n\t\t\t\"quiet\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t43\n\t\t]\n\t},\n\tbusstop: {\n\t\ta: \"Bus Stop\",\n\t\tb: \"1F68F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"wait\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t23\n\t\t]\n\t},\n\tsmiley_cat: {\n\t\ta: \"Smiling Cat Face with Open Mouth\",\n\t\tb: \"1F63A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"happy\",\n\t\t\t\"smile\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t30\n\t\t]\n\t},\n\trose: {\n\t\ta: \"Rose\",\n\t\tb: \"1F339\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"flowers\",\n\t\t\t\"valentines\",\n\t\t\t\"love\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t47\n\t\t]\n\t},\n\tmotorway: {\n\t\ta: \"Motorway\",\n\t\tb: \"1F6E3-FE0F\",\n\t\tc: \"1F6E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"road\",\n\t\t\t\"cupertino\",\n\t\t\t\"interstate\",\n\t\t\t\"highway\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t11\n\t\t],\n\t\to: 7\n\t},\n\tsmile_cat: {\n\t\ta: \"Grinning Cat Face with Smiling Eyes\",\n\t\tb: \"1F638\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"smile\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-gn\": {\n\t\ta: \"Guinea Flag\",\n\t\tb: \"1F1EC-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t17\n\t\t]\n\t},\n\twilted_flower: {\n\t\ta: \"Wilted Flower\",\n\t\tb: \"1F940\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"flower\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t36\n\t\t],\n\t\to: 9\n\t},\n\tmailbox_with_mail: {\n\t\ta: \"Open Mailbox with Raised Flag\",\n\t\tb: \"1F4EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"inbox\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t35\n\t\t]\n\t},\n\tchopsticks: {\n\t\ta: \"Chopsticks\",\n\t\tb: \"1F962\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t14\n\t\t],\n\t\to: 10\n\t},\n\tfemale_sign: {\n\t\ta: \"Female Sign\",\n\t\tb: \"2640-FE0F\",\n\t\tc: \"2640\",\n\t\td: false,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t42\n\t\t],\n\t\to: 1\n\t},\n\tmailbox_with_no_mail: {\n\t\ta: \"Open Mailbox with Lowered Flag\",\n\t\tb: \"1F4ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"inbox\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t36\n\t\t]\n\t},\n\tknife_fork_plate: {\n\t\ta: \"Knife Fork Plate\",\n\t\tb: \"1F37D-FE0F\",\n\t\tc: \"1F37D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t8,\n\t\t\t11\n\t\t],\n\t\to: 7\n\t},\n\thibiscus: {\n\t\ta: \"Hibiscus\",\n\t\tb: \"1F33A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"vegetable\",\n\t\t\t\"flowers\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t48\n\t\t]\n\t},\n\t\"flag-gp\": {\n\t\ta: \"Guadeloupe Flag\",\n\t\tb: \"1F1EC-1F1F5\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t18\n\t\t]\n\t},\n\trailway_track: {\n\t\ta: \"Railway Track\",\n\t\tb: \"1F6E4-FE0F\",\n\t\tc: \"1F6E4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"train\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t12\n\t\t],\n\t\to: 7\n\t},\n\tmale_sign: {\n\t\ta: \"Male Sign\",\n\t\tb: \"2642-FE0F\",\n\t\tc: \"2642\",\n\t\td: false,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t43\n\t\t],\n\t\to: 1\n\t},\n\tjoy_cat: {\n\t\ta: \"Cat Face with Tears of Joy\",\n\t\tb: \"1F639\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"haha\",\n\t\t\t\"happy\",\n\t\t\t\"tears\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t29\n\t\t]\n\t},\n\tfuelpump: {\n\t\ta: \"Fuel Pump\",\n\t\tb: \"26FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"gas station\",\n\t\t\t\"petroleum\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t13\n\t\t],\n\t\to: 5\n\t},\n\tsunflower: {\n\t\ta: \"Sunflower\",\n\t\tb: \"1F33B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"fall\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t49\n\t\t]\n\t},\n\tpostbox: {\n\t\ta: \"Postbox\",\n\t\tb: \"1F4EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"letter\",\n\t\t\t\"envelope\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t37\n\t\t]\n\t},\n\t\"flag-gq\": {\n\t\ta: \"Equatorial Guinea Flag\",\n\t\tb: \"1F1EC-1F1F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t19\n\t\t]\n\t},\n\theart_eyes_cat: {\n\t\ta: \"Smiling Cat Face with Heart-Shaped Eyes\",\n\t\tb: \"1F63B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"cats\",\n\t\t\t\"valentines\",\n\t\t\t\"heart\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t31\n\t\t]\n\t},\n\tfork_and_knife: {\n\t\ta: \"Fork and Knife\",\n\t\tb: \"1F374\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cutlery\",\n\t\t\t\"kitchen\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t2\n\t\t]\n\t},\n\tmedical_symbol: {\n\t\ta: \"Medical Symbol\",\n\t\tb: \"2695-FE0F\",\n\t\tc: \"2695\",\n\t\td: false,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t14\n\t\t],\n\t\tn: [\n\t\t\t\"staff_of_aesculapius\"\n\t\t],\n\t\to: 4\n\t},\n\trecycle: {\n\t\ta: \"Black Universal Recycling Symbol\",\n\t\tb: \"267B-FE0F\",\n\t\tc: \"267B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arrow\",\n\t\t\t\"environment\",\n\t\t\t\"garbage\",\n\t\t\t\"trash\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t9\n\t\t],\n\t\to: 3\n\t},\n\tspoon: {\n\t\ta: \"Spoon\",\n\t\tb: \"1F944\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"cutlery\",\n\t\t\t\"kitchen\",\n\t\t\t\"tableware\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t40\n\t\t],\n\t\to: 9\n\t},\n\tblossom: {\n\t\ta: \"Blossom\",\n\t\tb: \"1F33C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"flowers\",\n\t\t\t\"yellow\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t50\n\t\t]\n\t},\n\trotating_light: {\n\t\ta: \"Police Cars Revolving Light\",\n\t\tb: \"1F6A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"police\",\n\t\t\t\"ambulance\",\n\t\t\t\"911\",\n\t\t\t\"emergency\",\n\t\t\t\"alert\",\n\t\t\t\"error\",\n\t\t\t\"pinged\",\n\t\t\t\"law\",\n\t\t\t\"legal\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t13\n\t\t]\n\t},\n\tsmirk_cat: {\n\t\ta: \"Cat Face with Wry Smile\",\n\t\tb: \"1F63C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"smirk\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t32\n\t\t]\n\t},\n\tballot_box_with_ballot: {\n\t\ta: \"Ballot Box with Ballot\",\n\t\tb: \"1F5F3-FE0F\",\n\t\tc: \"1F5F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t17\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-gr\": {\n\t\ta: \"Greece Flag\",\n\t\tb: \"1F1EC-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t20\n\t\t]\n\t},\n\tkissing_cat: {\n\t\ta: \"Kissing Cat Face with Closed Eyes\",\n\t\tb: \"1F63D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t33\n\t\t]\n\t},\n\tpencil2: {\n\t\ta: \"Pencil\",\n\t\tb: \"270F-FE0F\",\n\t\tc: \"270F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"write\",\n\t\t\t\"paper\",\n\t\t\t\"writing\",\n\t\t\t\"school\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t42\n\t\t],\n\t\to: 1\n\t},\n\ttraffic_light: {\n\t\ta: \"Horizontal Traffic Light\",\n\t\tb: \"1F6A5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"signal\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t10\n\t\t]\n\t},\n\tfleur_de_lis: {\n\t\ta: \"Fleur De Lis\",\n\t\tb: \"269C-FE0F\",\n\t\tc: \"269C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"decorative\",\n\t\t\t\"scout\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t19\n\t\t],\n\t\to: 4\n\t},\n\ttulip: {\n\t\ta: \"Tulip\",\n\t\tb: \"1F337\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"flowers\",\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"summer\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t45\n\t\t]\n\t},\n\thocho: {\n\t\ta: \"Hocho\",\n\t\tb: \"1F52A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"knife\",\n\t\t\t\"blade\",\n\t\t\t\"cutlery\",\n\t\t\t\"kitchen\",\n\t\t\t\"weapon\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t44\n\t\t],\n\t\tn: [\n\t\t\t\"knife\"\n\t\t]\n\t},\n\t\"flag-gs\": {\n\t\ta: \"South Georgia & South Sandwich Islands Flag\",\n\t\tb: \"1F1EC-1F1F8\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t21\n\t\t]\n\t},\n\tseedling: {\n\t\ta: \"Seedling\",\n\t\tb: \"1F331\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"grass\",\n\t\t\t\"lawn\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t39\n\t\t]\n\t},\n\tamphora: {\n\t\ta: \"Amphora\",\n\t\tb: \"1F3FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vase\",\n\t\t\t\"jar\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t24\n\t\t],\n\t\to: 8\n\t},\n\tscream_cat: {\n\t\ta: \"Weary Cat Face\",\n\t\tb: \"1F640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"munch\",\n\t\t\t\"scared\",\n\t\t\t\"scream\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t36\n\t\t]\n\t},\n\tvertical_traffic_light: {\n\t\ta: \"Vertical Traffic Light\",\n\t\tb: \"1F6A6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"driving\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t11\n\t\t]\n\t},\n\tblack_nib: {\n\t\ta: \"Black Nib\",\n\t\tb: \"2712-FE0F\",\n\t\tc: \"2712\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pen\",\n\t\t\t\"stationery\",\n\t\t\t\"writing\",\n\t\t\t\"write\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t43\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-gt\": {\n\t\ta: \"Guatemala Flag\",\n\t\tb: \"1F1EC-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t22\n\t\t]\n\t},\n\ttrident: {\n\t\ta: \"Trident Emblem\",\n\t\tb: \"1F531\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weapon\",\n\t\t\t\"spear\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t51\n\t\t]\n\t},\n\t\"flag-gu\": {\n\t\ta: \"Guam Flag\",\n\t\tb: \"1F1EC-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t23\n\t\t]\n\t},\n\tname_badge: {\n\t\ta: \"Name Badge\",\n\t\tb: \"1F4DB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fire\",\n\t\t\t\"forbid\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t18\n\t\t]\n\t},\n\tconstruction: {\n\t\ta: \"Construction Sign\",\n\t\tb: \"1F6A7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wip\",\n\t\t\t\"progress\",\n\t\t\t\"caution\",\n\t\t\t\"warning\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t12\n\t\t]\n\t},\n\tlower_left_fountain_pen: {\n\t\ta: \"Lower Left Fountain Pen\",\n\t\tb: \"1F58B-FE0F\",\n\t\tc: \"1F58B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t29\n\t\t],\n\t\to: 7\n\t},\n\tevergreen_tree: {\n\t\ta: \"Evergreen Tree\",\n\t\tb: \"1F332\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t40\n\t\t]\n\t},\n\tcrying_cat_face: {\n\t\ta: \"Crying Cat Face\",\n\t\tb: \"1F63F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"tears\",\n\t\t\t\"weep\",\n\t\t\t\"sad\",\n\t\t\t\"cats\",\n\t\t\t\"upset\",\n\t\t\t\"cry\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t35\n\t\t]\n\t},\n\t\"flag-gw\": {\n\t\ta: \"Guinea-Bissau Flag\",\n\t\tb: \"1F1EC-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t24\n\t\t]\n\t},\n\tlower_left_ballpoint_pen: {\n\t\ta: \"Lower Left Ballpoint Pen\",\n\t\tb: \"1F58A-FE0F\",\n\t\tc: \"1F58A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t28\n\t\t],\n\t\to: 7\n\t},\n\tpouting_cat: {\n\t\ta: \"Pouting Cat Face\",\n\t\tb: \"1F63E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t34\n\t\t]\n\t},\n\tdeciduous_tree: {\n\t\ta: \"Deciduous Tree\",\n\t\tb: \"1F333\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t41\n\t\t]\n\t},\n\toctagonal_sign: {\n\t\ta: \"Octagonal Sign\",\n\t\tb: \"1F6D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t6\n\t\t],\n\t\to: 9\n\t},\n\tbeginner: {\n\t\ta: \"Japanese Symbol for Beginner\",\n\t\tb: \"1F530\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"badge\",\n\t\t\t\"shield\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t50\n\t\t]\n\t},\n\t\"flag-gy\": {\n\t\ta: \"Guyana Flag\",\n\t\tb: \"1F1EC-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t25\n\t\t]\n\t},\n\tlower_left_paintbrush: {\n\t\ta: \"Lower Left Paintbrush\",\n\t\tb: \"1F58C-FE0F\",\n\t\tc: \"1F58C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t30\n\t\t],\n\t\to: 7\n\t},\n\to: {\n\t\ta: \"Heavy Large Circle\",\n\t\tb: \"2B55\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"circle\",\n\t\t\t\"round\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t23\n\t\t],\n\t\to: 5\n\t},\n\tpalm_tree: {\n\t\ta: \"Palm Tree\",\n\t\tb: \"1F334\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"vegetable\",\n\t\t\t\"nature\",\n\t\t\t\"summer\",\n\t\t\t\"beach\",\n\t\t\t\"mojito\",\n\t\t\t\"tropical\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t42\n\t\t]\n\t},\n\tanchor: {\n\t\ta: \"Anchor\",\n\t\tb: \"2693\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ship\",\n\t\t\t\"ferry\",\n\t\t\t\"sea\",\n\t\t\t\"boat\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t12\n\t\t],\n\t\to: 4\n\t},\n\tsee_no_evil: {\n\t\ta: \"See-No-Evil Monkey\",\n\t\tb: \"1F648\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"monkey\",\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"haha\"\n\t\t],\n\t\tk: [\n\t\t\t32,\n\t\t\t43\n\t\t]\n\t},\n\tboat: {\n\t\ta: \"Sailboat\",\n\t\tb: \"26F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t48,\n\t\t\t43\n\t\t],\n\t\tn: [\n\t\t\t\"sailboat\"\n\t\t],\n\t\to: 5\n\t},\n\twhite_check_mark: {\n\t\ta: \"White Heavy Check Mark\",\n\t\tb: \"2705\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"green-square\",\n\t\t\t\"ok\",\n\t\t\t\"agree\",\n\t\t\t\"vote\",\n\t\t\t\"election\",\n\t\t\t\"answer\",\n\t\t\t\"tick\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t15\n\t\t]\n\t},\n\t\"flag-hk\": {\n\t\ta: \"Hong Kong Sar China Flag\",\n\t\tb: \"1F1ED-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t26\n\t\t]\n\t},\n\tlower_left_crayon: {\n\t\ta: \"Lower Left Crayon\",\n\t\tb: \"1F58D-FE0F\",\n\t\tc: \"1F58D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\to: 7\n\t},\n\thear_no_evil: {\n\t\ta: \"Hear-No-Evil Monkey\",\n\t\tb: \"1F649\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"monkey\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t32,\n\t\t\t44\n\t\t]\n\t},\n\tcactus: {\n\t\ta: \"Cactus\",\n\t\tb: \"1F335\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"plant\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t43\n\t\t]\n\t},\n\tear_of_rice: {\n\t\ta: \"Ear of Rice\",\n\t\tb: \"1F33E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t0\n\t\t]\n\t},\n\tspeak_no_evil: {\n\t\ta: \"Speak-No-Evil Monkey\",\n\t\tb: \"1F64A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"monkey\",\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"omg\"\n\t\t],\n\t\tk: [\n\t\t\t32,\n\t\t\t45\n\t\t]\n\t},\n\t\"flag-hm\": {\n\t\ta: \"Heard & Mcdonald Islands Flag\",\n\t\tb: \"1F1ED-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t27\n\t\t]\n\t},\n\tballot_box_with_check: {\n\t\ta: \"Ballot Box with Check\",\n\t\tb: \"2611-FE0F\",\n\t\tc: \"2611\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ok\",\n\t\t\t\"agree\",\n\t\t\t\"confirm\",\n\t\t\t\"black-square\",\n\t\t\t\"vote\",\n\t\t\t\"election\",\n\t\t\t\"yes\",\n\t\t\t\"tick\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t22\n\t\t],\n\t\to: 1\n\t},\n\tcanoe: {\n\t\ta: \"Canoe\",\n\t\tb: \"1F6F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"boat\",\n\t\t\t\"paddle\",\n\t\t\t\"water\",\n\t\t\t\"ship\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t21\n\t\t],\n\t\to: 9\n\t},\n\tmemo: {\n\t\ta: \"Memo\",\n\t\tb: \"1F4DD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"write\",\n\t\t\t\"documents\",\n\t\t\t\"stationery\",\n\t\t\t\"pencil\",\n\t\t\t\"paper\",\n\t\t\t\"writing\",\n\t\t\t\"legal\",\n\t\t\t\"exam\",\n\t\t\t\"quiz\",\n\t\t\t\"test\",\n\t\t\t\"study\",\n\t\t\t\"compose\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t20\n\t\t],\n\t\tn: [\n\t\t\t\"pencil\"\n\t\t]\n\t},\n\therb: {\n\t\ta: \"Herb\",\n\t\tb: \"1F33F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"plant\",\n\t\t\t\"medicine\",\n\t\t\t\"weed\",\n\t\t\t\"grass\",\n\t\t\t\"lawn\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-hn\": {\n\t\ta: \"Honduras Flag\",\n\t\tb: \"1F1ED-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t28\n\t\t]\n\t},\n\theavy_check_mark: {\n\t\ta: \"Heavy Check Mark\",\n\t\tb: \"2714-FE0F\",\n\t\tc: \"2714\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ok\",\n\t\t\t\"nike\",\n\t\t\t\"answer\",\n\t\t\t\"yes\",\n\t\t\t\"tick\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t44\n\t\t],\n\t\to: 1\n\t},\n\tbriefcase: {\n\t\ta: \"Briefcase\",\n\t\tb: \"1F4BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"business\",\n\t\t\t\"documents\",\n\t\t\t\"work\",\n\t\t\t\"law\",\n\t\t\t\"legal\",\n\t\t\t\"job\",\n\t\t\t\"career\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t39\n\t\t]\n\t},\n\tspeedboat: {\n\t\ta: \"Speedboat\",\n\t\tb: \"1F6A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ship\",\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t9\n\t\t]\n\t},\n\tbaby: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F476-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F476-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F476-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F476-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F476-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Baby\",\n\t\tb: \"1F476\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"child\",\n\t\t\t\"boy\",\n\t\t\t\"girl\",\n\t\t\t\"toddler\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t10\n\t\t]\n\t},\n\theavy_multiplication_x: {\n\t\ta: \"Heavy Multiplication X\",\n\t\tb: \"2716-FE0F\",\n\t\tc: \"2716\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"math\",\n\t\t\t\"calculation\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t45\n\t\t],\n\t\to: 1\n\t},\n\tchild: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D2-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D2-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D2-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D2-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D2-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Child\",\n\t\tb: \"1F9D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t4\n\t\t],\n\t\to: 10\n\t},\n\tshamrock: {\n\t\ta: \"Shamrock\",\n\t\tb: \"2618-FE0F\",\n\t\tc: \"2618\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"irish\",\n\t\t\t\"clover\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t25\n\t\t],\n\t\to: 4\n\t},\n\tpassenger_ship: {\n\t\ta: \"Passenger Ship\",\n\t\tb: \"1F6F3-FE0F\",\n\t\tc: \"1F6F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"yacht\",\n\t\t\t\"cruise\",\n\t\t\t\"ferry\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-hr\": {\n\t\ta: \"Croatia Flag\",\n\t\tb: \"1F1ED-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t29\n\t\t]\n\t},\n\tfile_folder: {\n\t\ta: \"File Folder\",\n\t\tb: \"1F4C1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"business\",\n\t\t\t\"office\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t44\n\t\t]\n\t},\n\tx: {\n\t\ta: \"Cross Mark\",\n\t\tb: \"274C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"no\",\n\t\t\t\"delete\",\n\t\t\t\"remove\",\n\t\t\t\"cancel\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t1\n\t\t]\n\t},\n\tfour_leaf_clover: {\n\t\ta: \"Four Leaf Clover\",\n\t\tb: \"1F340\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"lucky\",\n\t\t\t\"irish\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t2\n\t\t]\n\t},\n\topen_file_folder: {\n\t\ta: \"Open File Folder\",\n\t\tb: \"1F4C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"load\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t45\n\t\t]\n\t},\n\tboy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F466-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F466-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F466-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F466-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F466-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Boy\",\n\t\tb: \"1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"man\",\n\t\t\t\"male\",\n\t\t\t\"guy\",\n\t\t\t\"teenager\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t42\n\t\t]\n\t},\n\tferry: {\n\t\ta: \"Ferry\",\n\t\tb: \"26F4-FE0F\",\n\t\tc: \"26F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"boat\",\n\t\t\t\"ship\",\n\t\t\t\"yacht\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t42\n\t\t],\n\t\to: 5\n\t},\n\t\"flag-ht\": {\n\t\ta: \"Haiti Flag\",\n\t\tb: \"1F1ED-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t30\n\t\t]\n\t},\n\tgirl: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F467-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F467-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F467-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F467-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3fe.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F467-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3ff.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Girl\",\n\t\tb: \"1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"female\",\n\t\t\t\"woman\",\n\t\t\t\"teenager\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t48\n\t\t]\n\t},\n\tnegative_squared_cross_mark: {\n\t\ta: \"Negative Squared Cross Mark\",\n\t\tb: \"274E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"x\",\n\t\t\t\"green-square\",\n\t\t\t\"no\",\n\t\t\t\"deny\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-hu\": {\n\t\ta: \"Hungary Flag\",\n\t\tb: \"1F1ED-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t31\n\t\t]\n\t},\n\tcard_index_dividers: {\n\t\ta: \"Card Index Dividers\",\n\t\tb: \"1F5C2-FE0F\",\n\t\tc: \"1F5C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"organizing\",\n\t\t\t\"business\",\n\t\t\t\"stationery\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t4\n\t\t],\n\t\to: 7\n\t},\n\tmaple_leaf: {\n\t\ta: \"Maple Leaf\",\n\t\tb: \"1F341\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"vegetable\",\n\t\t\t\"ca\",\n\t\t\t\"fall\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t3\n\t\t]\n\t},\n\tmotor_boat: {\n\t\ta: \"Motor Boat\",\n\t\tb: \"1F6E5-FE0F\",\n\t\tc: \"1F6E5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"ship\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t13\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-ic\": {\n\t\ta: \"Canary Islands Flag\",\n\t\tb: \"1F1EE-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t32\n\t\t]\n\t},\n\tfallen_leaf: {\n\t\ta: \"Fallen Leaf\",\n\t\tb: \"1F342\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"vegetable\",\n\t\t\t\"leaves\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t4\n\t\t]\n\t},\n\tadult: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D1-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3fb.png\",\n\t\t\t\tsheet_x: 42,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D1-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D1-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D1-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D1-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Adult\",\n\t\tb: \"1F9D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t50\n\t\t],\n\t\to: 10\n\t},\n\tship: {\n\t\ta: \"Ship\",\n\t\tb: \"1F6A2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"titanic\",\n\t\t\t\"deploy\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t42\n\t\t]\n\t},\n\theavy_plus_sign: {\n\t\ta: \"Heavy Plus Sign\",\n\t\tb: \"2795\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"math\",\n\t\t\t\"calculation\",\n\t\t\t\"addition\",\n\t\t\t\"more\",\n\t\t\t\"increase\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t9\n\t\t]\n\t},\n\tdate: {\n\t\ta: \"Calendar\",\n\t\tb: \"1F4C5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"calendar\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t48\n\t\t]\n\t},\n\tman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Man\",\n\t\tb: \"1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mustache\",\n\t\t\t\"father\",\n\t\t\t\"dad\",\n\t\t\t\"guy\",\n\t\t\t\"classy\",\n\t\t\t\"sir\",\n\t\t\t\"moustache\"\n\t\t],\n\t\tk: [\n\t\t\t18,\n\t\t\t11\n\t\t]\n\t},\n\t\"flag-id\": {\n\t\ta: \"Indonesia Flag\",\n\t\tb: \"1F1EE-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t33\n\t\t]\n\t},\n\tleaves: {\n\t\ta: \"Leaf Fluttering in Wind\",\n\t\tb: \"1F343\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"tree\",\n\t\t\t\"vegetable\",\n\t\t\t\"grass\",\n\t\t\t\"lawn\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t5\n\t\t]\n\t},\n\theavy_minus_sign: {\n\t\ta: \"Heavy Minus Sign\",\n\t\tb: \"2796\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"math\",\n\t\t\t\"calculation\",\n\t\t\t\"subtract\",\n\t\t\t\"less\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t10\n\t\t]\n\t},\n\tcalendar: {\n\t\ta: \"Tear-off Calendar\",\n\t\tb: \"1F4C6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"schedule\",\n\t\t\t\"date\",\n\t\t\t\"planning\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t49\n\t\t]\n\t},\n\tairplane: {\n\t\ta: \"Airplane\",\n\t\tb: \"2708-FE0F\",\n\t\tc: \"2708\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\",\n\t\t\t\"flight\",\n\t\t\t\"fly\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t16\n\t\t],\n\t\to: 1\n\t},\n\tspiral_note_pad: {\n\t\ta: \"Spiral Note Pad\",\n\t\tb: \"1F5D2-FE0F\",\n\t\tc: \"1F5D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t8\n\t\t],\n\t\to: 7\n\t},\n\theavy_division_sign: {\n\t\ta: \"Heavy Division Sign\",\n\t\tb: \"2797\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"divide\",\n\t\t\t\"math\",\n\t\t\t\"calculation\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t11\n\t\t]\n\t},\n\tsmall_airplane: {\n\t\ta: \"Small Airplane\",\n\t\tb: \"1F6E9-FE0F\",\n\t\tc: \"1F6E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"flight\",\n\t\t\t\"transportation\",\n\t\t\t\"fly\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t14\n\t\t],\n\t\to: 7\n\t},\n\twoman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Woman\",\n\t\tb: \"1F469\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"female\",\n\t\t\t\"girls\",\n\t\t\t\"lady\"\n\t\t],\n\t\tk: [\n\t\t\t20,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-ie\": {\n\t\ta: \"Ireland Flag\",\n\t\tb: \"1F1EE-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t34\n\t\t]\n\t},\n\tcurly_loop: {\n\t\ta: \"Curly Loop\",\n\t\tb: \"27B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"scribble\",\n\t\t\t\"draw\",\n\t\t\t\"shape\",\n\t\t\t\"squiggle\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t13\n\t\t]\n\t},\n\t\"flag-il\": {\n\t\ta: \"Israel Flag\",\n\t\tb: \"1F1EE-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t35\n\t\t]\n\t},\n\tairplane_departure: {\n\t\ta: \"Airplane Departure\",\n\t\tb: \"1F6EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t15\n\t\t],\n\t\to: 7\n\t},\n\tspiral_calendar_pad: {\n\t\ta: \"Spiral Calendar Pad\",\n\t\tb: \"1F5D3-FE0F\",\n\t\tc: \"1F5D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t9\n\t\t],\n\t\to: 7\n\t},\n\tolder_adult: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D3-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D3-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D3-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D3-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D3-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Older Adult\",\n\t\tb: \"1F9D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t10\n\t\t],\n\t\to: 10\n\t},\n\tairplane_arriving: {\n\t\ta: \"Airplane Arriving\",\n\t\tb: \"1F6EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t16\n\t\t],\n\t\to: 7\n\t},\n\tcard_index: {\n\t\ta: \"Card Index\",\n\t\tb: \"1F4C7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"business\",\n\t\t\t\"stationery\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t50\n\t\t]\n\t},\n\tloop: {\n\t\ta: \"Double Curly Loop\",\n\t\tb: \"27BF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"tape\",\n\t\t\t\"cassette\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t14\n\t\t]\n\t},\n\tolder_man: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F474-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F474-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F474-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F474-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F474-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Older Man\",\n\t\tb: \"1F474\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"human\",\n\t\t\t\"male\",\n\t\t\t\"men\",\n\t\t\t\"old\",\n\t\t\t\"elder\",\n\t\t\t\"senior\"\n\t\t],\n\t\tk: [\n\t\t\t21,\n\t\t\t50\n\t\t]\n\t},\n\t\"flag-im\": {\n\t\ta: \"Isle of Man Flag\",\n\t\tb: \"1F1EE-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-in\": {\n\t\ta: \"India Flag\",\n\t\tb: \"1F1EE-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t37\n\t\t]\n\t},\n\tchart_with_upwards_trend: {\n\t\ta: \"Chart with Upwards Trend\",\n\t\tb: \"1F4C8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\",\n\t\t\t\"recovery\",\n\t\t\t\"business\",\n\t\t\t\"economics\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"good\",\n\t\t\t\"success\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t51\n\t\t]\n\t},\n\tpart_alternation_mark: {\n\t\ta: \"Part Alternation Mark\",\n\t\tb: \"303D-FE0F\",\n\t\tc: \"303D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\",\n\t\t\t\"business\",\n\t\t\t\"economics\",\n\t\t\t\"bad\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t25\n\t\t],\n\t\to: 3\n\t},\n\tseat: {\n\t\ta: \"Seat\",\n\t\tb: \"1F4BA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sit\",\n\t\t\t\"airplane\",\n\t\t\t\"transport\",\n\t\t\t\"bus\",\n\t\t\t\"flight\",\n\t\t\t\"fly\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t37\n\t\t]\n\t},\n\tolder_woman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F475-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F475-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F475-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F475-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F475-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Older Woman\",\n\t\tb: \"1F475\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"human\",\n\t\t\t\"female\",\n\t\t\t\"women\",\n\t\t\t\"lady\",\n\t\t\t\"old\",\n\t\t\t\"elder\",\n\t\t\t\"senior\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t4\n\t\t]\n\t},\n\teight_spoked_asterisk: {\n\t\ta: \"Eight Spoked Asterisk\",\n\t\tb: \"2733-FE0F\",\n\t\tc: \"2733\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"star\",\n\t\t\t\"sparkle\",\n\t\t\t\"green-square\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t49\n\t\t],\n\t\to: 1\n\t},\n\tchart_with_downwards_trend: {\n\t\ta: \"Chart with Downwards Trend\",\n\t\tb: \"1F4C9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\",\n\t\t\t\"recession\",\n\t\t\t\"business\",\n\t\t\t\"economics\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"bad\",\n\t\t\t\"failure\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t0\n\t\t]\n\t},\n\t\"flag-io\": {\n\t\ta: \"British Indian Ocean Territory Flag\",\n\t\tb: \"1F1EE-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t38\n\t\t]\n\t},\n\t\"male-doctor\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FB-200D-2695\",\n\t\t\t\timage: \"1f468-1f3fb-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FC-200D-2695\",\n\t\t\t\timage: \"1f468-1f3fc-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FD-200D-2695\",\n\t\t\t\timage: \"1f468-1f3fd-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FE-200D-2695\",\n\t\t\t\timage: \"1f468-1f3fe-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FF-200D-2695\",\n\t\t\t\timage: \"1f468-1f3ff-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Doctor\",\n\t\tb: \"1F468-200D-2695-FE0F\",\n\t\tc: \"1F468-200D-2695\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t43\n\t\t]\n\t},\n\thelicopter: {\n\t\ta: \"Helicopter\",\n\t\tb: \"1F681\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"fly\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t9\n\t\t]\n\t},\n\t\"female-doctor\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FB-200D-2695\",\n\t\t\t\timage: \"1f469-1f3fb-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FC-200D-2695\",\n\t\t\t\timage: \"1f469-1f3fc-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FD-200D-2695\",\n\t\t\t\timage: \"1f469-1f3fd-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FE-200D-2695\",\n\t\t\t\timage: \"1f469-1f3fe-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FF-200D-2695\",\n\t\t\t\timage: \"1f469-1f3ff-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Doctor\",\n\t\tb: \"1F469-200D-2695-FE0F\",\n\t\tc: \"1F469-200D-2695\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t1\n\t\t]\n\t},\n\tsuspension_railway: {\n\t\ta: \"Suspension Railway\",\n\t\tb: \"1F69F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t39\n\t\t]\n\t},\n\tbar_chart: {\n\t\ta: \"Bar Chart\",\n\t\tb: \"1F4CA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-iq\": {\n\t\ta: \"Iraq Flag\",\n\t\tb: \"1F1EE-1F1F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t39\n\t\t]\n\t},\n\teight_pointed_black_star: {\n\t\ta: \"Eight Pointed Black Star\",\n\t\tb: \"2734-FE0F\",\n\t\tc: \"2734\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"orange-square\",\n\t\t\t\"shape\",\n\t\t\t\"polygon\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t50\n\t\t],\n\t\to: 1\n\t},\n\tmountain_cableway: {\n\t\ta: \"Mountain Cableway\",\n\t\tb: \"1F6A0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"ski\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t40\n\t\t]\n\t},\n\t\"male-student\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Student\",\n\t\tb: \"1F468-200D-1F393\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t14\n\t\t]\n\t},\n\tclipboard: {\n\t\ta: \"Clipboard\",\n\t\tb: \"1F4CB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"documents\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-ir\": {\n\t\ta: \"Iran Flag\",\n\t\tb: \"1F1EE-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t40\n\t\t]\n\t},\n\tsparkle: {\n\t\ta: \"Sparkle\",\n\t\tb: \"2747-FE0F\",\n\t\tc: \"2747\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stars\",\n\t\t\t\"green-square\",\n\t\t\t\"awesome\",\n\t\t\t\"good\",\n\t\t\t\"fireworks\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t0\n\t\t],\n\t\to: 1\n\t},\n\t\"female-student\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Student\",\n\t\tb: \"1F469-200D-1F393\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t29\n\t\t]\n\t},\n\tpushpin: {\n\t\ta: \"Pushpin\",\n\t\tb: \"1F4CC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"mark\",\n\t\t\t\"here\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t3\n\t\t]\n\t},\n\taerial_tramway: {\n\t\ta: \"Aerial Tramway\",\n\t\tb: \"1F6A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"ski\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-is\": {\n\t\ta: \"Iceland Flag\",\n\t\tb: \"1F1EE-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t41\n\t\t]\n\t},\n\tbangbang: {\n\t\ta: \"Double Exclamation Mark\",\n\t\tb: \"203C-FE0F\",\n\t\tc: \"203C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"exclamation\",\n\t\t\t\"surprise\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t29\n\t\t],\n\t\to: 1\n\t},\n\tinterrobang: {\n\t\ta: \"Exclamation Question Mark\",\n\t\tb: \"2049-FE0F\",\n\t\tc: \"2049\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wat\",\n\t\t\t\"punctuation\",\n\t\t\t\"surprise\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t30\n\t\t],\n\t\to: 3\n\t},\n\tsatellite: {\n\t\ta: \"Satellite\",\n\t\tb: \"1F6F0-FE0F\",\n\t\tc: \"1F6F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"communication\",\n\t\t\t\"future\",\n\t\t\t\"radio\",\n\t\t\t\"space\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t17\n\t\t],\n\t\to: 7\n\t},\n\tit: {\n\t\ta: \"Italy Flag\",\n\t\tb: \"1F1EE-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"italy\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t2,\n\t\t\t42\n\t\t],\n\t\tn: [\n\t\t\t\"flag-it\"\n\t\t]\n\t},\n\t\"male-teacher\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Teacher\",\n\t\tb: \"1F468-200D-1F3EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t32\n\t\t]\n\t},\n\tround_pushpin: {\n\t\ta: \"Round Pushpin\",\n\t\tb: \"1F4CD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"location\",\n\t\t\t\"map\",\n\t\t\t\"here\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-je\": {\n\t\ta: \"Jersey Flag\",\n\t\tb: \"1F1EF-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t43\n\t\t]\n\t},\n\tquestion: {\n\t\ta: \"Black Question Mark Ornament\",\n\t\tb: \"2753\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"doubt\",\n\t\t\t\"confused\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t3\n\t\t]\n\t},\n\trocket: {\n\t\ta: \"Rocket\",\n\t\tb: \"1F680\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"launch\",\n\t\t\t\"ship\",\n\t\t\t\"staffmode\",\n\t\t\t\"NASA\",\n\t\t\t\"outer space\",\n\t\t\t\"outer_space\",\n\t\t\t\"fly\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t8\n\t\t]\n\t},\n\t\"female-teacher\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Teacher\",\n\t\tb: \"1F469-200D-1F3EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t47\n\t\t]\n\t},\n\tpaperclip: {\n\t\ta: \"Paperclip\",\n\t\tb: \"1F4CE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"stationery\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t5\n\t\t]\n\t},\n\tlinked_paperclips: {\n\t\ta: \"Linked Paperclips\",\n\t\tb: \"1F587-FE0F\",\n\t\tc: \"1F587\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t27\n\t\t],\n\t\to: 7\n\t},\n\tflying_saucer: {\n\t\ta: \"Flying Saucer\",\n\t\tb: \"1F6F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t23\n\t\t],\n\t\to: 10\n\t},\n\t\"male-judge\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FB-200D-2696\",\n\t\t\t\timage: \"1f468-1f3fb-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FC-200D-2696\",\n\t\t\t\timage: \"1f468-1f3fc-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FD-200D-2696\",\n\t\t\t\timage: \"1f468-1f3fd-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FE-200D-2696\",\n\t\t\t\timage: \"1f468-1f3fe-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FF-200D-2696\",\n\t\t\t\timage: \"1f468-1f3ff-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Judge\",\n\t\tb: \"1F468-200D-2696-FE0F\",\n\t\tc: \"1F468-200D-2696\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t49\n\t\t]\n\t},\n\tgrey_question: {\n\t\ta: \"White Question Mark Ornament\",\n\t\tb: \"2754\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"doubts\",\n\t\t\t\"gray\",\n\t\t\t\"huh\",\n\t\t\t\"confused\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-jm\": {\n\t\ta: \"Jamaica Flag\",\n\t\tb: \"1F1EF-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t44\n\t\t]\n\t},\n\tbellhop_bell: {\n\t\ta: \"Bellhop Bell\",\n\t\tb: \"1F6CE-FE0F\",\n\t\tc: \"1F6CE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"service\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t3\n\t\t],\n\t\to: 7\n\t},\n\tstraight_ruler: {\n\t\ta: \"Straight Ruler\",\n\t\tb: \"1F4CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"calculate\",\n\t\t\t\"length\",\n\t\t\t\"math\",\n\t\t\t\"school\",\n\t\t\t\"drawing\",\n\t\t\t\"architect\",\n\t\t\t\"sketch\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-jo\": {\n\t\ta: \"Jordan Flag\",\n\t\tb: \"1F1EF-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t45\n\t\t]\n\t},\n\t\"female-judge\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FB-200D-2696\",\n\t\t\t\timage: \"1f469-1f3fb-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FC-200D-2696\",\n\t\t\t\timage: \"1f469-1f3fc-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FD-200D-2696\",\n\t\t\t\timage: \"1f469-1f3fd-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FE-200D-2696\",\n\t\t\t\timage: \"1f469-1f3fe-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FF-200D-2696\",\n\t\t\t\timage: \"1f469-1f3ff-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Judge\",\n\t\tb: \"1F469-200D-2696-FE0F\",\n\t\tc: \"1F469-200D-2696\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t7\n\t\t]\n\t},\n\tgrey_exclamation: {\n\t\ta: \"White Exclamation Mark Ornament\",\n\t\tb: \"2755\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"surprise\",\n\t\t\t\"punctuation\",\n\t\t\t\"gray\",\n\t\t\t\"wow\",\n\t\t\t\"warning\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t5\n\t\t]\n\t},\n\tdoor: {\n\t\ta: \"Door\",\n\t\tb: \"1F6AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"house\",\n\t\t\t\"entry\",\n\t\t\t\"exit\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t15\n\t\t]\n\t},\n\t\"male-farmer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Farmer\",\n\t\tb: \"1F468-200D-1F33E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t2\n\t\t]\n\t},\n\tjp: {\n\t\ta: \"Japan Flag\",\n\t\tb: \"1F1EF-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"nation\",\n\t\t\t\"flag\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t2,\n\t\t\t46\n\t\t],\n\t\tn: [\n\t\t\t\"flag-jp\"\n\t\t]\n\t},\n\ttriangular_ruler: {\n\t\ta: \"Triangular Ruler\",\n\t\tb: \"1F4D0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"math\",\n\t\t\t\"architect\",\n\t\t\t\"sketch\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t7\n\t\t]\n\t},\n\texclamation: {\n\t\ta: \"Heavy Exclamation Mark Symbol\",\n\t\tb: \"2757\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"heavy_exclamation_mark\",\n\t\t\t\"danger\",\n\t\t\t\"surprise\",\n\t\t\t\"punctuation\",\n\t\t\t\"wow\",\n\t\t\t\"warning\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t6\n\t\t],\n\t\tn: [\n\t\t\t\"heavy_exclamation_mark\"\n\t\t],\n\t\to: 5\n\t},\n\tbed: {\n\t\ta: \"Bed\",\n\t\tb: \"1F6CF-FE0F\",\n\t\tc: \"1F6CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sleep\",\n\t\t\t\"rest\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t4\n\t\t],\n\t\to: 7\n\t},\n\t\"female-farmer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Farmer\",\n\t\tb: \"1F469-200D-1F33E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t17\n\t\t]\n\t},\n\tscissors: {\n\t\ta: \"Black Scissors\",\n\t\tb: \"2702-FE0F\",\n\t\tc: \"2702\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"cut\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t14\n\t\t],\n\t\to: 1\n\t},\n\twavy_dash: {\n\t\ta: \"Wavy Dash\",\n\t\tb: \"3030-FE0F\",\n\t\tc: \"3030\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"draw\",\n\t\t\t\"line\",\n\t\t\t\"moustache\",\n\t\t\t\"mustache\",\n\t\t\t\"squiggle\",\n\t\t\t\"scribble\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t24\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-ke\": {\n\t\ta: \"Kenya Flag\",\n\t\tb: \"1F1F0-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t47\n\t\t]\n\t},\n\t\"flag-kg\": {\n\t\ta: \"Kyrgyzstan Flag\",\n\t\tb: \"1F1F0-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t48\n\t\t]\n\t},\n\tcouch_and_lamp: {\n\t\ta: \"Couch and Lamp\",\n\t\tb: \"1F6CB-FE0F\",\n\t\tc: \"1F6CB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"chill\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t47\n\t\t],\n\t\to: 7\n\t},\n\t\"male-cook\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Cook\",\n\t\tb: \"1F468-200D-1F373\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t8\n\t\t]\n\t},\n\tcard_file_box: {\n\t\ta: \"Card File Box\",\n\t\tb: \"1F5C3-FE0F\",\n\t\tc: \"1F5C3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"business\",\n\t\t\t\"stationery\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t5\n\t\t],\n\t\to: 7\n\t},\n\tcopyright: {\n\t\ta: \"Copyright Sign\",\n\t\tb: \"00A9-FE0F\",\n\t\tc: \"00A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: false,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"ip\",\n\t\t\t\"license\",\n\t\t\t\"circle\",\n\t\t\t\"law\",\n\t\t\t\"legal\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t12\n\t\t],\n\t\to: 1\n\t},\n\tfile_cabinet: {\n\t\ta: \"File Cabinet\",\n\t\tb: \"1F5C4-FE0F\",\n\t\tc: \"1F5C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"filing\",\n\t\t\t\"organizing\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t6\n\t\t],\n\t\to: 7\n\t},\n\tregistered: {\n\t\ta: \"Registered Sign\",\n\t\tb: \"00AE-FE0F\",\n\t\tc: \"00AE\",\n\t\td: true,\n\t\te: true,\n\t\tf: false,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t13\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-kh\": {\n\t\ta: \"Cambodia Flag\",\n\t\tb: \"1F1F0-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t49\n\t\t]\n\t},\n\t\"female-cook\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Cook\",\n\t\tb: \"1F469-200D-1F373\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t23\n\t\t]\n\t},\n\ttoilet: {\n\t\ta: \"Toilet\",\n\t\tb: \"1F6BD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"restroom\",\n\t\t\t\"wc\",\n\t\t\t\"washroom\",\n\t\t\t\"bathroom\",\n\t\t\t\"potty\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t33\n\t\t]\n\t},\n\twastebasket: {\n\t\ta: \"Wastebasket\",\n\t\tb: \"1F5D1-FE0F\",\n\t\tc: \"1F5D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"bin\",\n\t\t\t\"trash\",\n\t\t\t\"rubbish\",\n\t\t\t\"garbage\",\n\t\t\t\"toss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t7\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-ki\": {\n\t\ta: \"Kiribati Flag\",\n\t\tb: \"1F1F0-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t50\n\t\t]\n\t},\n\tshower: {\n\t\ta: \"Shower\",\n\t\tb: \"1F6BF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"clean\",\n\t\t\t\"water\",\n\t\t\t\"bathroom\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t35\n\t\t]\n\t},\n\t\"male-mechanic\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Mechanic\",\n\t\tb: \"1F468-200D-1F527\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t19\n\t\t]\n\t},\n\ttm: {\n\t\ta: \"Trade Mark Sign\",\n\t\tb: \"2122-FE0F\",\n\t\tc: \"2122\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"trademark\",\n\t\t\t\"brand\",\n\t\t\t\"law\",\n\t\t\t\"legal\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t31\n\t\t],\n\t\to: 1\n\t},\n\thash: {\n\t\ta: \"Hash Key\",\n\t\tb: \"0023-FE0F-20E3\",\n\t\tc: \"0023-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"symbol\",\n\t\t\t\"blue-square\",\n\t\t\t\"twitter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t0\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-km\": {\n\t\ta: \"Comoros Flag\",\n\t\tb: \"1F1F0-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t51\n\t\t]\n\t},\n\tbathtub: {\n\t\ta: \"Bathtub\",\n\t\tb: \"1F6C1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"clean\",\n\t\t\t\"shower\",\n\t\t\t\"bathroom\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t42\n\t\t]\n\t},\n\t\"female-mechanic\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Mechanic\",\n\t\tb: \"1F469-200D-1F527\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t29\n\t\t]\n\t},\n\tlock: {\n\t\ta: \"Lock\",\n\t\tb: \"1F512\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"security\",\n\t\t\t\"password\",\n\t\t\t\"padlock\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t20\n\t\t]\n\t},\n\t\"male-factory-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Factory Worker\",\n\t\tb: \"1F468-200D-1F3ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t38\n\t\t]\n\t},\n\t\"flag-kn\": {\n\t\ta: \"St. Kitts & Nevis Flag\",\n\t\tb: \"1F1F0-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t0\n\t\t]\n\t},\n\thourglass: {\n\t\ta: \"Hourglass\",\n\t\tb: \"231B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"clock\",\n\t\t\t\"oldschool\",\n\t\t\t\"limit\",\n\t\t\t\"exam\",\n\t\t\t\"quiz\",\n\t\t\t\"test\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t42\n\t\t],\n\t\to: 1\n\t},\n\tkeycap_star: {\n\t\ta: \"Keycap Star\",\n\t\tb: \"002A-FE0F-20E3\",\n\t\tc: \"002A-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t0,\n\t\t\t1\n\t\t],\n\t\to: 3\n\t},\n\tunlock: {\n\t\ta: \"Open Lock\",\n\t\tb: \"1F513\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"privacy\",\n\t\t\t\"security\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t21\n\t\t]\n\t},\n\t\"flag-kp\": {\n\t\ta: \"North Korea Flag\",\n\t\tb: \"1F1F0-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t1\n\t\t]\n\t},\n\t\"female-factory-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Factory Worker\",\n\t\tb: \"1F469-200D-1F3ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t1\n\t\t]\n\t},\n\tzero: {\n\t\ta: \"Keycap 0\",\n\t\tb: \"0030-FE0F-20E3\",\n\t\tc: \"0030-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"0\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\",\n\t\t\t\"null\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t2\n\t\t],\n\t\to: 3\n\t},\n\tlock_with_ink_pen: {\n\t\ta: \"Lock with Ink Pen\",\n\t\tb: \"1F50F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"security\",\n\t\t\t\"secret\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t17\n\t\t]\n\t},\n\thourglass_flowing_sand: {\n\t\ta: \"Hourglass with Flowing Sand\",\n\t\tb: \"23F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"oldschool\",\n\t\t\t\"time\",\n\t\t\t\"countdown\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t3\n\t\t]\n\t},\n\tone: {\n\t\ta: \"Keycap 1\",\n\t\tb: \"0031-FE0F-20E3\",\n\t\tc: \"0031-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"numbers\",\n\t\t\t\"1\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t3\n\t\t],\n\t\to: 3\n\t},\n\tkr: {\n\t\ta: \"South Korea Flag\",\n\t\tb: \"1F1F0-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"south\",\n\t\t\t\"korea\",\n\t\t\t\"nation\",\n\t\t\t\"flag\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t3,\n\t\t\t2\n\t\t],\n\t\tn: [\n\t\t\t\"flag-kr\"\n\t\t]\n\t},\n\twatch: {\n\t\ta: \"Watch\",\n\t\tb: \"231A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"accessories\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t41\n\t\t],\n\t\to: 1\n\t},\n\t\"male-office-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Office Worker\",\n\t\tb: \"1F468-200D-1F4BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t13\n\t\t]\n\t},\n\tclosed_lock_with_key: {\n\t\ta: \"Closed Lock with Key\",\n\t\tb: \"1F510\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"security\",\n\t\t\t\"privacy\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t18\n\t\t]\n\t},\n\t\"female-office-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Office Worker\",\n\t\tb: \"1F469-200D-1F4BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t23\n\t\t]\n\t},\n\ttwo: {\n\t\ta: \"Keycap 2\",\n\t\tb: \"0032-FE0F-20E3\",\n\t\tc: \"0032-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"numbers\",\n\t\t\t\"2\",\n\t\t\t\"prime\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t4\n\t\t],\n\t\to: 3\n\t},\n\talarm_clock: {\n\t\ta: \"Alarm Clock\",\n\t\tb: \"23F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"wake\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t0\n\t\t]\n\t},\n\tkey: {\n\t\ta: \"Key\",\n\t\tb: \"1F511\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"lock\",\n\t\t\t\"door\",\n\t\t\t\"password\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t19\n\t\t]\n\t},\n\t\"flag-kw\": {\n\t\ta: \"Kuwait Flag\",\n\t\tb: \"1F1F0-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t3\n\t\t]\n\t},\n\tstopwatch: {\n\t\ta: \"Stopwatch\",\n\t\tb: \"23F1-FE0F\",\n\t\tc: \"23F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"deadline\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t1\n\t\t]\n\t},\n\t\"male-scientist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Scientist\",\n\t\tb: \"1F468-200D-1F52C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t25\n\t\t]\n\t},\n\tthree: {\n\t\ta: \"Keycap 3\",\n\t\tb: \"0033-FE0F-20E3\",\n\t\tc: \"0033-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"3\",\n\t\t\t\"numbers\",\n\t\t\t\"prime\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t5\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-ky\": {\n\t\ta: \"Cayman Islands Flag\",\n\t\tb: \"1F1F0-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t4\n\t\t]\n\t},\n\told_key: {\n\t\ta: \"Old Key\",\n\t\tb: \"1F5DD-FE0F\",\n\t\tc: \"1F5DD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"lock\",\n\t\t\t\"door\",\n\t\t\t\"password\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t11\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-kz\": {\n\t\ta: \"Kazakhstan Flag\",\n\t\tb: \"1F1F0-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t5\n\t\t]\n\t},\n\thammer: {\n\t\ta: \"Hammer\",\n\t\tb: \"1F528\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"build\",\n\t\t\t\"create\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t42\n\t\t]\n\t},\n\t\"female-scientist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Scientist\",\n\t\tb: \"1F469-200D-1F52C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t35\n\t\t]\n\t},\n\ttimer_clock: {\n\t\ta: \"Timer Clock\",\n\t\tb: \"23F2-FE0F\",\n\t\tc: \"23F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"alarm\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t2\n\t\t]\n\t},\n\tfour: {\n\t\ta: \"Keycap 4\",\n\t\tb: \"0034-FE0F-20E3\",\n\t\tc: \"0034-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"4\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t6\n\t\t],\n\t\to: 3\n\t},\n\t\"male-technologist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Technologist\",\n\t\tb: \"1F468-200D-1F4BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t7\n\t\t]\n\t},\n\tmantelpiece_clock: {\n\t\ta: \"Mantelpiece Clock\",\n\t\tb: \"1F570-FE0F\",\n\t\tc: \"1F570\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"time\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t43\n\t\t],\n\t\to: 7\n\t},\n\tfive: {\n\t\ta: \"Keycap 5\",\n\t\tb: \"0035-FE0F-20E3\",\n\t\tc: \"0035-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"5\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\",\n\t\t\t\"prime\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t7\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-la\": {\n\t\ta: \"Laos Flag\",\n\t\tb: \"1F1F1-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t6\n\t\t]\n\t},\n\tpick: {\n\t\ta: \"Pick\",\n\t\tb: \"26CF-FE0F\",\n\t\tc: \"26CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"dig\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t32\n\t\t],\n\t\to: 5\n\t},\n\t\"flag-lb\": {\n\t\ta: \"Lebanon Flag\",\n\t\tb: \"1F1F1-1F1E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t7\n\t\t]\n\t},\n\tclock12: {\n\t\ta: \"Clock Face Twelve Oclock\",\n\t\tb: \"1F55B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"noon\",\n\t\t\t\"midnight\",\n\t\t\t\"midday\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t29\n\t\t]\n\t},\n\thammer_and_pick: {\n\t\ta: \"Hammer and Pick\",\n\t\tb: \"2692-FE0F\",\n\t\tc: \"2692\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"build\",\n\t\t\t\"create\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t11\n\t\t],\n\t\to: 4\n\t},\n\tsix: {\n\t\ta: \"Keycap 6\",\n\t\tb: \"0036-FE0F-20E3\",\n\t\tc: \"0036-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"6\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t8\n\t\t],\n\t\to: 3\n\t},\n\t\"female-technologist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Technologist\",\n\t\tb: \"1F469-200D-1F4BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t17\n\t\t]\n\t},\n\thammer_and_wrench: {\n\t\ta: \"Hammer and Wrench\",\n\t\tb: \"1F6E0-FE0F\",\n\t\tc: \"1F6E0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"build\",\n\t\t\t\"create\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t8\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-lc\": {\n\t\ta: \"St. Lucia Flag\",\n\t\tb: \"1F1F1-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t8\n\t\t]\n\t},\n\tclock1230: {\n\t\ta: \"Clock Face Twelve-Thirty\",\n\t\tb: \"1F567\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t41\n\t\t]\n\t},\n\tseven: {\n\t\ta: \"Keycap 7\",\n\t\tb: \"0037-FE0F-20E3\",\n\t\tc: \"0037-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"7\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\",\n\t\t\t\"prime\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t9\n\t\t],\n\t\to: 3\n\t},\n\t\"male-singer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Singer\",\n\t\tb: \"1F468-200D-1F3A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t20\n\t\t]\n\t},\n\teight: {\n\t\ta: \"Keycap 8\",\n\t\tb: \"0038-FE0F-20E3\",\n\t\tc: \"0038-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"8\",\n\t\t\t\"blue-square\",\n\t\t\t\"numbers\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t10\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-li\": {\n\t\ta: \"Liechtenstein Flag\",\n\t\tb: \"1F1F1-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t9\n\t\t]\n\t},\n\tdagger_knife: {\n\t\ta: \"Dagger Knife\",\n\t\tb: \"1F5E1-FE0F\",\n\t\tc: \"1F5E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t13\n\t\t],\n\t\to: 7\n\t},\n\tclock1: {\n\t\ta: \"Clock Face One Oclock\",\n\t\tb: \"1F550\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t18\n\t\t]\n\t},\n\t\"female-singer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Singer\",\n\t\tb: \"1F469-200D-1F3A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t35\n\t\t]\n\t},\n\t\"male-artist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Artist\",\n\t\tb: \"1F468-200D-1F3A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t26\n\t\t]\n\t},\n\tcrossed_swords: {\n\t\ta: \"Crossed Swords\",\n\t\tb: \"2694-FE0F\",\n\t\tc: \"2694\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"weapon\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t13\n\t\t],\n\t\to: 4\n\t},\n\tnine: {\n\t\ta: \"Keycap 9\",\n\t\tb: \"0039-FE0F-20E3\",\n\t\tc: \"0039-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"numbers\",\n\t\t\t\"9\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t11\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-lk\": {\n\t\ta: \"Sri Lanka Flag\",\n\t\tb: \"1F1F1-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t10\n\t\t]\n\t},\n\tclock130: {\n\t\ta: \"Clock Face One-Thirty\",\n\t\tb: \"1F55C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t30\n\t\t]\n\t},\n\tclock2: {\n\t\ta: \"Clock Face Two Oclock\",\n\t\tb: \"1F551\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t19\n\t\t]\n\t},\n\tgun: {\n\t\ta: \"Pistol\",\n\t\tb: \"1F52B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"violence\",\n\t\t\t\"weapon\",\n\t\t\t\"pistol\",\n\t\t\t\"revolver\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t45\n\t\t]\n\t},\n\tkeycap_ten: {\n\t\ta: \"Keycap Ten\",\n\t\tb: \"1F51F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"numbers\",\n\t\t\t\"10\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t33\n\t\t]\n\t},\n\t\"female-artist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Artist\",\n\t\tb: \"1F469-200D-1F3A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-lr\": {\n\t\ta: \"Liberia Flag\",\n\t\tb: \"1F1F1-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t11\n\t\t]\n\t},\n\tclock230: {\n\t\ta: \"Clock Face Two-Thirty\",\n\t\tb: \"1F55D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t31\n\t\t]\n\t},\n\tbow_and_arrow: {\n\t\ta: \"Bow and Arrow\",\n\t\tb: \"1F3F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t23\n\t\t],\n\t\to: 8\n\t},\n\t\"male-pilot\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FB-200D-2708\",\n\t\t\t\timage: \"1f468-1f3fb-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FC-200D-2708\",\n\t\t\t\timage: \"1f468-1f3fc-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FD-200D-2708\",\n\t\t\t\timage: \"1f468-1f3fd-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FE-200D-2708\",\n\t\t\t\timage: \"1f468-1f3fe-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FF-200D-2708\",\n\t\t\t\timage: \"1f468-1f3ff-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Pilot\",\n\t\tb: \"1F468-200D-2708-FE0F\",\n\t\tc: \"1F468-200D-2708\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t3\n\t\t]\n\t},\n\t\"flag-ls\": {\n\t\ta: \"Lesotho Flag\",\n\t\tb: \"1F1F1-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t12\n\t\t]\n\t},\n\t\"flag-lt\": {\n\t\ta: \"Lithuania Flag\",\n\t\tb: \"1F1F1-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t13\n\t\t]\n\t},\n\tcapital_abcd: {\n\t\ta: \"Input Symbol for Latin Capital Letters\",\n\t\tb: \"1F520\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"words\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t34\n\t\t]\n\t},\n\t\"female-pilot\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FB-200D-2708\",\n\t\t\t\timage: \"1f469-1f3fb-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FC-200D-2708\",\n\t\t\t\timage: \"1f469-1f3fc-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FD-200D-2708\",\n\t\t\t\timage: \"1f469-1f3fd-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FE-200D-2708\",\n\t\t\t\timage: \"1f469-1f3fe-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FF-200D-2708\",\n\t\t\t\timage: \"1f469-1f3ff-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Pilot\",\n\t\tb: \"1F469-200D-2708-FE0F\",\n\t\tc: \"1F469-200D-2708\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t13\n\t\t]\n\t},\n\tclock3: {\n\t\ta: \"Clock Face Three Oclock\",\n\t\tb: \"1F552\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t20\n\t\t]\n\t},\n\tshield: {\n\t\ta: \"Shield\",\n\t\tb: \"1F6E1-FE0F\",\n\t\tc: \"1F6E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"protection\",\n\t\t\t\"security\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t9\n\t\t],\n\t\to: 7\n\t},\n\t\"male-astronaut\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Astronaut\",\n\t\tb: \"1F468-200D-1F680\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t31\n\t\t]\n\t},\n\tabcd: {\n\t\ta: \"Input Symbol for Latin Small Letters\",\n\t\tb: \"1F521\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"alphabet\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t35\n\t\t]\n\t},\n\tclock330: {\n\t\ta: \"Clock Face Three-Thirty\",\n\t\tb: \"1F55E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t32\n\t\t]\n\t},\n\t\"flag-lu\": {\n\t\ta: \"Luxembourg Flag\",\n\t\tb: \"1F1F1-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t14\n\t\t]\n\t},\n\twrench: {\n\t\ta: \"Wrench\",\n\t\tb: \"1F527\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"diy\",\n\t\t\t\"ikea\",\n\t\t\t\"fix\",\n\t\t\t\"maintainer\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t41\n\t\t]\n\t},\n\tnut_and_bolt: {\n\t\ta: \"Nut and Bolt\",\n\t\tb: \"1F529\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"handy\",\n\t\t\t\"tools\",\n\t\t\t\"fix\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t43\n\t\t]\n\t},\n\tclock4: {\n\t\ta: \"Clock Face Four Oclock\",\n\t\tb: \"1F553\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t21\n\t\t]\n\t},\n\t\"female-astronaut\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Astronaut\",\n\t\tb: \"1F469-200D-1F680\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-lv\": {\n\t\ta: \"Latvia Flag\",\n\t\tb: \"1F1F1-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t15\n\t\t]\n\t},\n\tgear: {\n\t\ta: \"Gear\",\n\t\tb: \"2699-FE0F\",\n\t\tc: \"2699\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"cog\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t17\n\t\t],\n\t\to: 4\n\t},\n\t\"male-firefighter\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Firefighter\",\n\t\tb: \"1F468-200D-1F692\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t37\n\t\t]\n\t},\n\t\"flag-ly\": {\n\t\ta: \"Libya Flag\",\n\t\tb: \"1F1F1-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t16\n\t\t]\n\t},\n\tsymbols: {\n\t\ta: \"Input Symbol for Symbols\",\n\t\tb: \"1F523\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"music\",\n\t\t\t\"note\",\n\t\t\t\"ampersand\",\n\t\t\t\"percent\",\n\t\t\t\"glyphs\",\n\t\t\t\"characters\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t37\n\t\t]\n\t},\n\tclock430: {\n\t\ta: \"Clock Face Four-Thirty\",\n\t\tb: \"1F55F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t33\n\t\t]\n\t},\n\t\"flag-ma\": {\n\t\ta: \"Morocco Flag\",\n\t\tb: \"1F1F2-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t17\n\t\t]\n\t},\n\tcompression: {\n\t\ta: \"Compression\",\n\t\tb: \"1F5DC-FE0F\",\n\t\tc: \"1F5DC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t10\n\t\t],\n\t\to: 7\n\t},\n\t\"female-firefighter\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f692.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f692.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f692.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f692.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f692.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Firefighter\",\n\t\tb: \"1F469-200D-1F692\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t47\n\t\t]\n\t},\n\tabc: {\n\t\ta: \"Input Symbol for Latin Letters\",\n\t\tb: \"1F524\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"alphabet\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t38\n\t\t]\n\t},\n\tclock5: {\n\t\ta: \"Clock Face Five Oclock\",\n\t\tb: \"1F554\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t22\n\t\t]\n\t},\n\tclock530: {\n\t\ta: \"Clock Face Five-Thirty\",\n\t\tb: \"1F560\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t34\n\t\t]\n\t},\n\ta: {\n\t\ta: \"Negative Squared Latin Capital Letter a\",\n\t\tb: \"1F170-FE0F\",\n\t\tc: \"1F170\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"red-square\",\n\t\t\t\"alphabet\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t16\n\t\t]\n\t},\n\talembic: {\n\t\ta: \"Alembic\",\n\t\tb: \"2697-FE0F\",\n\t\tc: \"2697\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"distilling\",\n\t\t\t\"science\",\n\t\t\t\"experiment\",\n\t\t\t\"chemistry\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t16\n\t\t],\n\t\to: 4\n\t},\n\t\"flag-mc\": {\n\t\ta: \"Monaco Flag\",\n\t\tb: \"1F1F2-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t18\n\t\t]\n\t},\n\tcop: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F46E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3fb.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F46E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3fc.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F46E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3fd.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F46E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3fe.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F46E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3ff.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F46E-200D-2642-FE0F\",\n\t\ta: \"Police Officer\",\n\t\tb: \"1F46E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t20,\n\t\t\t45\n\t\t]\n\t},\n\tscales: {\n\t\ta: \"Scales\",\n\t\tb: \"2696-FE0F\",\n\t\tc: \"2696\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t15\n\t\t],\n\t\to: 4\n\t},\n\tclock6: {\n\t\ta: \"Clock Face Six Oclock\",\n\t\tb: \"1F555\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\",\n\t\t\t\"dawn\",\n\t\t\t\"dusk\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-md\": {\n\t\ta: \"Moldova Flag\",\n\t\tb: \"1F1F2-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t19\n\t\t]\n\t},\n\tab: {\n\t\ta: \"Negative Squared Ab\",\n\t\tb: \"1F18E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"red-square\",\n\t\t\t\"alphabet\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t20\n\t\t]\n\t},\n\t\"male-police-officer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F46E-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F46E-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F46E-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F46E-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F46E-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F46E\",\n\t\ta: \"Male Police Officer\",\n\t\tb: \"1F46E-200D-2642-FE0F\",\n\t\tc: \"1F46E-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t39\n\t\t]\n\t},\n\tlink: {\n\t\ta: \"Link Symbol\",\n\t\tb: \"1F517\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"rings\",\n\t\t\t\"url\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t25\n\t\t]\n\t},\n\t\"flag-me\": {\n\t\ta: \"Montenegro Flag\",\n\t\tb: \"1F1F2-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t20\n\t\t]\n\t},\n\tclock630: {\n\t\ta: \"Clock Face Six-Thirty\",\n\t\tb: \"1F561\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t35\n\t\t]\n\t},\n\tb: {\n\t\ta: \"Negative Squared Latin Capital Letter B\",\n\t\tb: \"1F171-FE0F\",\n\t\tc: \"1F171\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"red-square\",\n\t\t\t\"alphabet\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t17\n\t\t]\n\t},\n\t\"female-police-officer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F46E-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F46E-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F46E-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F46E-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F46E-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Police Officer\",\n\t\tb: \"1F46E-200D-2640-FE0F\",\n\t\tc: \"1F46E-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t33\n\t\t]\n\t},\n\tclock7: {\n\t\ta: \"Clock Face Seven Oclock\",\n\t\tb: \"1F556\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t24\n\t\t]\n\t},\n\tcl: {\n\t\ta: \"Squared Cl\",\n\t\tb: \"1F191\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"words\",\n\t\t\t\"red-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t21\n\t\t]\n\t},\n\tsleuth_or_spy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F575-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F575-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F575-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F575-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F575-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F575-FE0F-200D-2642-FE0F\",\n\t\ta: \"Sleuth or Spy\",\n\t\tb: \"1F575-FE0F\",\n\t\tc: \"1F575\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t11\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-mf\": {\n\t\ta: \"St. Martin Flag\",\n\t\tb: \"1F1F2-1F1EB\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t21\n\t\t]\n\t},\n\tchains: {\n\t\ta: \"Chains\",\n\t\tb: \"26D3-FE0F\",\n\t\tc: \"26D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"lock\",\n\t\t\t\"arrest\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t34\n\t\t],\n\t\to: 5\n\t},\n\tsyringe: {\n\t\ta: \"Syringe\",\n\t\tb: \"1F489\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"health\",\n\t\t\t\"hospital\",\n\t\t\t\"drugs\",\n\t\t\t\"blood\",\n\t\t\t\"medicine\",\n\t\t\t\"needle\",\n\t\t\t\"doctor\",\n\t\t\t\"nurse\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t35\n\t\t]\n\t},\n\t\"male-detective\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F575-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f575-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F575-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f575-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F575-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f575-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F575-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f575-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F575-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f575-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F575-FE0F\",\n\t\ta: \"Male Detective\",\n\t\tb: \"1F575-FE0F-200D-2642-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t5\n\t\t],\n\t\to: 7\n\t},\n\tcool: {\n\t\ta: \"Squared Cool\",\n\t\tb: \"1F192\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t22\n\t\t]\n\t},\n\tclock730: {\n\t\ta: \"Clock Face Seven-Thirty\",\n\t\tb: \"1F562\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-mg\": {\n\t\ta: \"Madagascar Flag\",\n\t\tb: \"1F1F2-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t22\n\t\t]\n\t},\n\tfree: {\n\t\ta: \"Squared Free\",\n\t\tb: \"1F193\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"words\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-mh\": {\n\t\ta: \"Marshall Islands Flag\",\n\t\tb: \"1F1F2-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t23\n\t\t]\n\t},\n\tclock8: {\n\t\ta: \"Clock Face Eight Oclock\",\n\t\tb: \"1F557\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t25\n\t\t]\n\t},\n\tpill: {\n\t\ta: \"Pill\",\n\t\tb: \"1F48A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"health\",\n\t\t\t\"medicine\",\n\t\t\t\"doctor\",\n\t\t\t\"pharmacy\",\n\t\t\t\"drug\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t36\n\t\t]\n\t},\n\t\"female-detective\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F575-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f575-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F575-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f575-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F575-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f575-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F575-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f575-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F575-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f575-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Detective\",\n\t\tb: \"1F575-FE0F-200D-2640-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t51\n\t\t],\n\t\to: 7\n\t},\n\tclock830: {\n\t\ta: \"Clock Face Eight-Thirty\",\n\t\tb: \"1F563\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t37\n\t\t]\n\t},\n\tguardsman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F482-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3fb.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F482-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3fc.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F482-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3fd.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F482-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3fe.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F482-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3ff.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F482-200D-2642-FE0F\",\n\t\ta: \"Guardsman\",\n\t\tb: \"1F482\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"uk\",\n\t\t\t\"gb\",\n\t\t\t\"british\",\n\t\t\t\"male\",\n\t\t\t\"guy\",\n\t\t\t\"royal\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t31\n\t\t]\n\t},\n\tinformation_source: {\n\t\ta: \"Information Source\",\n\t\tb: \"2139-FE0F\",\n\t\tc: \"2139\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"alphabet\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t32\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-mk\": {\n\t\ta: \"Macedonia Flag\",\n\t\tb: \"1F1F2-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t24\n\t\t]\n\t},\n\tsmoking: {\n\t\ta: \"Smoking Symbol\",\n\t\tb: \"1F6AC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"kills\",\n\t\t\t\"tobacco\",\n\t\t\t\"cigarette\",\n\t\t\t\"joint\",\n\t\t\t\"smoke\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t17\n\t\t]\n\t},\n\tid: {\n\t\ta: \"Squared Id\",\n\t\tb: \"1F194\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"words\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t24\n\t\t]\n\t},\n\tclock9: {\n\t\ta: \"Clock Face Nine Oclock\",\n\t\tb: \"1F558\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t26\n\t\t]\n\t},\n\t\"flag-ml\": {\n\t\ta: \"Mali Flag\",\n\t\tb: \"1F1F2-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t25\n\t\t]\n\t},\n\tcoffin: {\n\t\ta: \"Coffin\",\n\t\tb: \"26B0-FE0F\",\n\t\tc: \"26B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vampire\",\n\t\t\t\"dead\",\n\t\t\t\"die\",\n\t\t\t\"death\",\n\t\t\t\"rip\",\n\t\t\t\"graveyard\",\n\t\t\t\"cemetery\",\n\t\t\t\"casket\",\n\t\t\t\"funeral\",\n\t\t\t\"box\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t24\n\t\t],\n\t\to: 4\n\t},\n\t\"male-guard\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F482-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f482-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F482-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f482-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F482-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f482-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F482-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f482-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F482-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f482-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F482\",\n\t\ta: \"Male Guard\",\n\t\tb: \"1F482-200D-2642-FE0F\",\n\t\tc: \"1F482-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t25\n\t\t]\n\t},\n\tm: {\n\t\ta: \"Circled Latin Capital Letter M\",\n\t\tb: \"24C2-FE0F\",\n\t\tc: \"24C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"blue-circle\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t7\n\t\t],\n\t\to: 1\n\t},\n\tfuneral_urn: {\n\t\ta: \"Funeral Urn\",\n\t\tb: \"26B1-FE0F\",\n\t\tc: \"26B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"dead\",\n\t\t\t\"die\",\n\t\t\t\"death\",\n\t\t\t\"rip\",\n\t\t\t\"ashes\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t25\n\t\t],\n\t\to: 4\n\t},\n\t\"female-guard\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F482-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f482-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F482-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f482-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F482-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f482-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F482-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f482-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F482-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f482-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Guard\",\n\t\tb: \"1F482-200D-2640-FE0F\",\n\t\tc: \"1F482-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t19\n\t\t]\n\t},\n\t\"flag-mm\": {\n\t\ta: \"Myanmar (burma) Flag\",\n\t\tb: \"1F1F2-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t26\n\t\t]\n\t},\n\tclock930: {\n\t\ta: \"Clock Face Nine-Thirty\",\n\t\tb: \"1F564\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t38\n\t\t]\n\t},\n\tmoyai: {\n\t\ta: \"Moyai\",\n\t\tb: \"1F5FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"rock\",\n\t\t\t\"easter island\",\n\t\t\t\"moai\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t23\n\t\t]\n\t},\n\t\"new\": {\n\t\ta: \"Squared New\",\n\t\tb: \"1F195\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"words\",\n\t\t\t\"start\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t25\n\t\t]\n\t},\n\t\"flag-mn\": {\n\t\ta: \"Mongolia Flag\",\n\t\tb: \"1F1F2-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t27\n\t\t]\n\t},\n\tconstruction_worker: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F477-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F477-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F477-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F477-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F477-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F477-200D-2642-FE0F\",\n\t\ta: \"Construction Worker\",\n\t\tb: \"1F477\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t22,\n\t\t\t28\n\t\t]\n\t},\n\tclock10: {\n\t\ta: \"Clock Face Ten Oclock\",\n\t\tb: \"1F559\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t27\n\t\t]\n\t},\n\tclock1030: {\n\t\ta: \"Clock Face Ten-Thirty\",\n\t\tb: \"1F565\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t39\n\t\t]\n\t},\n\tng: {\n\t\ta: \"Squared Ng\",\n\t\tb: \"1F196\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"words\",\n\t\t\t\"shape\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t26\n\t\t]\n\t},\n\t\"male-construction-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F477-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f477-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F477-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f477-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F477-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f477-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F477-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f477-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F477-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f477-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F477\",\n\t\ta: \"Male Construction Worker\",\n\t\tb: \"1F477-200D-2642-FE0F\",\n\t\tc: \"1F477-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t22,\n\t\t\t22\n\t\t]\n\t},\n\t\"flag-mo\": {\n\t\ta: \"Macau Sar China Flag\",\n\t\tb: \"1F1F2-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t28\n\t\t]\n\t},\n\toil_drum: {\n\t\ta: \"Oil Drum\",\n\t\tb: \"1F6E2-FE0F\",\n\t\tc: \"1F6E2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"barrell\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t10\n\t\t],\n\t\to: 7\n\t},\n\to2: {\n\t\ta: \"Negative Squared Latin Capital Letter O\",\n\t\tb: \"1F17E-FE0F\",\n\t\tc: \"1F17E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"red-square\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t18\n\t\t]\n\t},\n\t\"female-construction-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F477-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f477-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F477-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f477-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F477-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f477-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F477-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f477-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F477-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f477-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Construction Worker\",\n\t\tb: \"1F477-200D-2640-FE0F\",\n\t\tc: \"1F477-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t22,\n\t\t\t16\n\t\t]\n\t},\n\tclock11: {\n\t\ta: \"Clock Face Eleven Oclock\",\n\t\tb: \"1F55A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t28\n\t\t]\n\t},\n\tcrystal_ball: {\n\t\ta: \"Crystal Ball\",\n\t\tb: \"1F52E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"disco\",\n\t\t\t\"party\",\n\t\t\t\"magic\",\n\t\t\t\"circus\",\n\t\t\t\"fortune_teller\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t48\n\t\t]\n\t},\n\t\"flag-mp\": {\n\t\ta: \"Northern Mariana Islands Flag\",\n\t\tb: \"1F1F2-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t29\n\t\t]\n\t},\n\t\"flag-mq\": {\n\t\ta: \"Martinique Flag\",\n\t\tb: \"1F1F2-1F1F6\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t30\n\t\t]\n\t},\n\tprince: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F934-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F934-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F934-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F934-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F934-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Prince\",\n\t\tb: \"1F934\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"boy\",\n\t\t\t\"man\",\n\t\t\t\"male\",\n\t\t\t\"crown\",\n\t\t\t\"royal\",\n\t\t\t\"king\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t28\n\t\t],\n\t\to: 9\n\t},\n\tok: {\n\t\ta: \"Squared Ok\",\n\t\tb: \"1F197\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"good\",\n\t\t\t\"agree\",\n\t\t\t\"yes\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t27\n\t\t]\n\t},\n\tclock1130: {\n\t\ta: \"Clock Face Eleven-Thirty\",\n\t\tb: \"1F566\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t40\n\t\t]\n\t},\n\tshopping_trolley: {\n\t\ta: \"Shopping Trolley\",\n\t\tb: \"1F6D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t7\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-mr\": {\n\t\ta: \"Mauritania Flag\",\n\t\tb: \"1F1F2-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t31\n\t\t]\n\t},\n\tprincess: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F478-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F478-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F478-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F478-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F478-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Princess\",\n\t\tb: \"1F478\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"girl\",\n\t\t\t\"woman\",\n\t\t\t\"female\",\n\t\t\t\"blond\",\n\t\t\t\"crown\",\n\t\t\t\"royal\",\n\t\t\t\"queen\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t34\n\t\t]\n\t},\n\tnew_moon: {\n\t\ta: \"New Moon Symbol\",\n\t\tb: \"1F311\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t9\n\t\t]\n\t},\n\tparking: {\n\t\ta: \"Negative Squared Latin Capital Letter P\",\n\t\tb: \"1F17F-FE0F\",\n\t\tc: \"1F17F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cars\",\n\t\t\t\"blue-square\",\n\t\t\t\"alphabet\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t19\n\t\t],\n\t\to: 5\n\t},\n\tsos: {\n\t\ta: \"Squared Sos\",\n\t\tb: \"1F198\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"help\",\n\t\t\t\"red-square\",\n\t\t\t\"words\",\n\t\t\t\"emergency\",\n\t\t\t\"911\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t28\n\t\t]\n\t},\n\tman_with_turban: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F473-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F473-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3fc.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F473-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3fd.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F473-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3fe.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F473-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3ff.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F473-200D-2642-FE0F\",\n\t\ta: \"Man with Turban\",\n\t\tb: \"1F473\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"male\",\n\t\t\t\"indian\",\n\t\t\t\"hinduism\",\n\t\t\t\"arabs\"\n\t\t],\n\t\tk: [\n\t\t\t21,\n\t\t\t44\n\t\t]\n\t},\n\t\"flag-ms\": {\n\t\ta: \"Montserrat Flag\",\n\t\tb: \"1F1F2-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t32\n\t\t]\n\t},\n\twaxing_crescent_moon: {\n\t\ta: \"Waxing Crescent Moon Symbol\",\n\t\tb: \"1F312\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t10\n\t\t]\n\t},\n\tup: {\n\t\ta: \"Squared Up with Exclamation Mark\",\n\t\tb: \"1F199\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"above\",\n\t\t\t\"high\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t29\n\t\t]\n\t},\n\tfirst_quarter_moon: {\n\t\ta: \"First Quarter Moon Symbol\",\n\t\tb: \"1F313\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t11\n\t\t]\n\t},\n\t\"flag-mt\": {\n\t\ta: \"Malta Flag\",\n\t\tb: \"1F1F2-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t33\n\t\t]\n\t},\n\t\"man-wearing-turban\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F473-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f473-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F473-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f473-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F473-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f473-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F473-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f473-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F473-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f473-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F473\",\n\t\ta: \"Man Wearing Turban\",\n\t\tb: \"1F473-200D-2642-FE0F\",\n\t\tc: \"1F473-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t38\n\t\t]\n\t},\n\tmoon: {\n\t\ta: \"Waxing Gibbous Moon Symbol\",\n\t\tb: \"1F314\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t6,\n\t\t\t12\n\t\t],\n\t\tn: [\n\t\t\t\"waxing_gibbous_moon\"\n\t\t]\n\t},\n\t\"woman-wearing-turban\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F473-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f473-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F473-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f473-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F473-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f473-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F473-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f473-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F473-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f473-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Wearing Turban\",\n\t\tb: \"1F473-200D-2640-FE0F\",\n\t\tc: \"1F473-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t32\n\t\t]\n\t},\n\tvs: {\n\t\ta: \"Squared Vs\",\n\t\tb: \"1F19A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"orange-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-mu\": {\n\t\ta: \"Mauritius Flag\",\n\t\tb: \"1F1F2-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t34\n\t\t]\n\t},\n\tman_with_gua_pi_mao: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F472-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F472-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3fc.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F472-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3fd.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F472-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3fe.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F472-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3ff.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Man with Gua Pi Mao\",\n\t\tb: \"1F472\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"male\",\n\t\t\t\"boy\",\n\t\t\t\"chinese\"\n\t\t],\n\t\tk: [\n\t\t\t21,\n\t\t\t26\n\t\t]\n\t},\n\tkoko: {\n\t\ta: \"Squared Katakana Koko\",\n\t\tb: \"1F201\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"here\",\n\t\t\t\"katakana\",\n\t\t\t\"japanese\",\n\t\t\t\"destination\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t29\n\t\t]\n\t},\n\tfull_moon: {\n\t\ta: \"Full Moon Symbol\",\n\t\tb: \"1F315\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"yellow\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t13\n\t\t]\n\t},\n\t\"flag-mv\": {\n\t\ta: \"Maldives Flag\",\n\t\tb: \"1F1F2-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t35\n\t\t]\n\t},\n\tperson_with_headscarf: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D5-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D5-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D5-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D5-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D5-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Person with Headscarf\",\n\t\tb: \"1F9D5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t22\n\t\t],\n\t\to: 10\n\t},\n\twaning_gibbous_moon: {\n\t\ta: \"Waning Gibbous Moon Symbol\",\n\t\tb: \"1F316\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\",\n\t\t\t\"waxing_gibbous_moon\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t14\n\t\t]\n\t},\n\tsa: {\n\t\ta: \"Squared Katakana Sa\",\n\t\tb: \"1F202-FE0F\",\n\t\tc: \"1F202\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"blue-square\",\n\t\t\t\"katakana\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-mw\": {\n\t\ta: \"Malawi Flag\",\n\t\tb: \"1F1F2-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t36\n\t\t]\n\t},\n\tlast_quarter_moon: {\n\t\ta: \"Last Quarter Moon Symbol\",\n\t\tb: \"1F317\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t15\n\t\t]\n\t},\n\tu6708: {\n\t\ta: \"Squared Cjk Unified Ideograph-6708\",\n\t\tb: \"1F237-FE0F\",\n\t\tc: \"1F237\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"month\",\n\t\t\t\"moon\",\n\t\t\t\"japanese\",\n\t\t\t\"orange-square\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t38\n\t\t]\n\t},\n\tbearded_person: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D4-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D4-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D4-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D4-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D4-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Bearded Person\",\n\t\tb: \"1F9D4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t16\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-mx\": {\n\t\ta: \"Mexico Flag\",\n\t\tb: \"1F1F2-1F1FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t37\n\t\t]\n\t},\n\tu6709: {\n\t\ta: \"Squared Cjk Unified Ideograph-6709\",\n\t\tb: \"1F236\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"orange-square\",\n\t\t\t\"chinese\",\n\t\t\t\"have\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t37\n\t\t]\n\t},\n\tperson_with_blond_hair: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F471-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F471-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3fc.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F471-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3fd.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F471-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3fe.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F471-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3ff.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F471-200D-2642-FE0F\",\n\t\ta: \"Person with Blond Hair\",\n\t\tb: \"1F471\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t21,\n\t\t\t20\n\t\t]\n\t},\n\twaning_crescent_moon: {\n\t\ta: \"Waning Crescent Moon Symbol\",\n\t\tb: \"1F318\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t16\n\t\t]\n\t},\n\t\"flag-my\": {\n\t\ta: \"Malaysia Flag\",\n\t\tb: \"1F1F2-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t38\n\t\t]\n\t},\n\tu6307: {\n\t\ta: \"Squared Cjk Unified Ideograph-6307\",\n\t\tb: \"1F22F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"point\",\n\t\t\t\"green-square\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t32\n\t\t],\n\t\to: 5\n\t},\n\t\"blond-haired-man\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F471-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f471-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F471-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f471-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F471-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f471-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F471-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f471-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F471-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f471-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F471\",\n\t\ta: \"Blond Haired Man\",\n\t\tb: \"1F471-200D-2642-FE0F\",\n\t\tc: \"1F471-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t14\n\t\t]\n\t},\n\tcrescent_moon: {\n\t\ta: \"Crescent Moon\",\n\t\tb: \"1F319\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"night\",\n\t\t\t\"sleep\",\n\t\t\t\"sky\",\n\t\t\t\"evening\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t17\n\t\t]\n\t},\n\t\"flag-mz\": {\n\t\ta: \"Mozambique Flag\",\n\t\tb: \"1F1F2-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t39\n\t\t]\n\t},\n\tnew_moon_with_face: {\n\t\ta: \"New Moon with Face\",\n\t\tb: \"1F31A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t18\n\t\t]\n\t},\n\t\"flag-na\": {\n\t\ta: \"Namibia Flag\",\n\t\tb: \"1F1F3-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t40\n\t\t]\n\t},\n\t\"blond-haired-woman\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F471-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f471-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F471-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f471-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F471-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f471-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F471-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f471-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F471-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f471-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Blond Haired Woman\",\n\t\tb: \"1F471-200D-2640-FE0F\",\n\t\tc: \"1F471-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t8\n\t\t]\n\t},\n\tideograph_advantage: {\n\t\ta: \"Circled Ideograph Advantage\",\n\t\tb: \"1F250\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"obtain\",\n\t\t\t\"get\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t42\n\t\t]\n\t},\n\tfirst_quarter_moon_with_face: {\n\t\ta: \"First Quarter Moon with Face\",\n\t\tb: \"1F31B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t19\n\t\t]\n\t},\n\tman_in_tuxedo: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F935-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F935-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F935-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F935-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F935-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man in Tuxedo\",\n\t\tb: \"1F935\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"couple\",\n\t\t\t\"marriage\",\n\t\t\t\"wedding\",\n\t\t\t\"groom\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t34\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-nc\": {\n\t\ta: \"New Caledonia Flag\",\n\t\tb: \"1F1F3-1F1E8\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t41\n\t\t]\n\t},\n\tu5272: {\n\t\ta: \"Squared Cjk Unified Ideograph-5272\",\n\t\tb: \"1F239\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cut\",\n\t\t\t\"divide\",\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"pink-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t40\n\t\t]\n\t},\n\t\"flag-ne\": {\n\t\ta: \"Niger Flag\",\n\t\tb: \"1F1F3-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t42\n\t\t]\n\t},\n\tlast_quarter_moon_with_face: {\n\t\ta: \"Last Quarter Moon with Face\",\n\t\tb: \"1F31C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t20\n\t\t]\n\t},\n\tu7121: {\n\t\ta: \"Squared Cjk Unified Ideograph-7121\",\n\t\tb: \"1F21A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nothing\",\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"japanese\",\n\t\t\t\"orange-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t31\n\t\t],\n\t\to: 5\n\t},\n\tbride_with_veil: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F470-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F470-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3fc.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F470-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3fd.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F470-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3fe.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F470-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3ff.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Bride with Veil\",\n\t\tb: \"1F470\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"couple\",\n\t\t\t\"marriage\",\n\t\t\t\"wedding\",\n\t\t\t\"woman\",\n\t\t\t\"bride\"\n\t\t],\n\t\tk: [\n\t\t\t21,\n\t\t\t2\n\t\t]\n\t},\n\tu7981: {\n\t\ta: \"Squared Cjk Unified Ideograph-7981\",\n\t\tb: \"1F232\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"kanji\",\n\t\t\t\"japanese\",\n\t\t\t\"chinese\",\n\t\t\t\"forbidden\",\n\t\t\t\"limit\",\n\t\t\t\"restricted\",\n\t\t\t\"red-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t33\n\t\t]\n\t},\n\tpregnant_woman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F930-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F930-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F930-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F930-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F930-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Pregnant Woman\",\n\t\tb: \"1F930\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"baby\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t4\n\t\t],\n\t\to: 9\n\t},\n\tthermometer: {\n\t\ta: \"Thermometer\",\n\t\tb: \"1F321-FE0F\",\n\t\tc: \"1F321\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"temperature\",\n\t\t\t\"hot\",\n\t\t\t\"cold\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t25\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-nf\": {\n\t\ta: \"Norfolk Island Flag\",\n\t\tb: \"1F1F3-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t43\n\t\t]\n\t},\n\tsunny: {\n\t\ta: \"Black Sun with Rays\",\n\t\tb: \"2600-FE0F\",\n\t\tc: \"2600\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"nature\",\n\t\t\t\"brightness\",\n\t\t\t\"summer\",\n\t\t\t\"beach\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t16\n\t\t],\n\t\to: 1\n\t},\n\taccept: {\n\t\ta: \"Circled Ideograph Accept\",\n\t\tb: \"1F251\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ok\",\n\t\t\t\"good\",\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"agree\",\n\t\t\t\"yes\",\n\t\t\t\"orange-circle\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t43\n\t\t]\n\t},\n\t\"flag-ng\": {\n\t\ta: \"Nigeria Flag\",\n\t\tb: \"1F1F3-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t44\n\t\t]\n\t},\n\t\"breast-feeding\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F931-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F931-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F931-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F931-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F931-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Breast-Feeding\",\n\t\tb: \"1F931\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t10\n\t\t],\n\t\to: 10\n\t},\n\tfull_moon_with_face: {\n\t\ta: \"Full Moon with Face\",\n\t\tb: \"1F31D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t21\n\t\t]\n\t},\n\t\"flag-ni\": {\n\t\ta: \"Nicaragua Flag\",\n\t\tb: \"1F1F3-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t45\n\t\t]\n\t},\n\tu7533: {\n\t\ta: \"Squared Cjk Unified Ideograph-7533\",\n\t\tb: \"1F238\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"japanese\",\n\t\t\t\"kanji\",\n\t\t\t\"orange-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t39\n\t\t]\n\t},\n\tangel: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F47C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F47C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F47C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F47C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F47C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Baby Angel\",\n\t\tb: \"1F47C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"heaven\",\n\t\t\t\"wings\",\n\t\t\t\"halo\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t43\n\t\t]\n\t},\n\tsun_with_face: {\n\t\ta: \"Sun with Face\",\n\t\tb: \"1F31E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"morning\",\n\t\t\t\"sky\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t22\n\t\t]\n\t},\n\tsanta: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F385-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3fb.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F385-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3fc.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F385-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3fd.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F385-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3fe.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F385-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3ff.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Father Christmas\",\n\t\tb: \"1F385\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"festival\",\n\t\t\t\"man\",\n\t\t\t\"male\",\n\t\t\t\"xmas\",\n\t\t\t\"father christmas\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t19\n\t\t]\n\t},\n\tu5408: {\n\t\ta: \"Squared Cjk Unified Ideograph-5408\",\n\t\tb: \"1F234\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"chinese\",\n\t\t\t\"join\",\n\t\t\t\"kanji\",\n\t\t\t\"red-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t35\n\t\t]\n\t},\n\t\"flag-nl\": {\n\t\ta: \"Netherlands Flag\",\n\t\tb: \"1F1F3-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t46\n\t\t]\n\t},\n\tmrs_claus: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F936-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F936-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F936-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F936-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F936-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Mother Christmas\",\n\t\tb: \"1F936\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"woman\",\n\t\t\t\"female\",\n\t\t\t\"xmas\",\n\t\t\t\"mother christmas\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t40\n\t\t],\n\t\tn: [\n\t\t\t\"mother_christmas\"\n\t\t],\n\t\to: 9\n\t},\n\tu7a7a: {\n\t\ta: \"Squared Cjk Unified Ideograph-7a7a\",\n\t\tb: \"1F233\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"kanji\",\n\t\t\t\"japanese\",\n\t\t\t\"chinese\",\n\t\t\t\"empty\",\n\t\t\t\"sky\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t34\n\t\t]\n\t},\n\tstar: {\n\t\ta: \"White Medium Star\",\n\t\tb: \"2B50\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"night\",\n\t\t\t\"yellow\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t22\n\t\t],\n\t\to: 5\n\t},\n\t\"flag-no\": {\n\t\ta: \"Norway Flag\",\n\t\tb: \"1F1F3-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t47\n\t\t]\n\t},\n\tmage: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D9-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3fb.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D9-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3fc.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D9-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3fd.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D9-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3fe.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D9-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3ff.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9D9-200D-2640-FE0F\",\n\t\ta: \"Mage\",\n\t\tb: \"1F9D9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t42\n\t\t],\n\t\to: 10\n\t},\n\tstar2: {\n\t\ta: \"Glowing Star\",\n\t\tb: \"1F31F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"night\",\n\t\t\t\"sparkle\",\n\t\t\t\"awesome\",\n\t\t\t\"good\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-np\": {\n\t\ta: \"Nepal Flag\",\n\t\tb: \"1F1F3-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t48\n\t\t]\n\t},\n\tcongratulations: {\n\t\ta: \"Circled Ideograph Congratulation\",\n\t\tb: \"3297-FE0F\",\n\t\tc: \"3297\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"japanese\",\n\t\t\t\"red-circle\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t26\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-nr\": {\n\t\ta: \"Nauru Flag\",\n\t\tb: \"1F1F3-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t49\n\t\t]\n\t},\n\tstars: {\n\t\ta: \"Shooting Star\",\n\t\tb: \"1F320\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"night\",\n\t\t\t\"photo\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t24\n\t\t]\n\t},\n\tfemale_mage: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D9-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D9-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D9-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D9-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D9-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9D9\",\n\t\ta: \"Female Mage\",\n\t\tb: \"1F9D9-200D-2640-FE0F\",\n\t\tc: \"1F9D9-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t30\n\t\t],\n\t\to: 10\n\t},\n\tsecret: {\n\t\ta: \"Circled Ideograph Secret\",\n\t\tb: \"3299-FE0F\",\n\t\tc: \"3299\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"privacy\",\n\t\t\t\"chinese\",\n\t\t\t\"sshh\",\n\t\t\t\"kanji\",\n\t\t\t\"red-circle\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t27\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-nu\": {\n\t\ta: \"Niue Flag\",\n\t\tb: \"1F1F3-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t50\n\t\t]\n\t},\n\tu55b6: {\n\t\ta: \"Squared Cjk Unified Ideograph-55b6\",\n\t\tb: \"1F23A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"opening hours\",\n\t\t\t\"orange-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t41\n\t\t]\n\t},\n\tmale_mage: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D9-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D9-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D9-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D9-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D9-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Mage\",\n\t\tb: \"1F9D9-200D-2642-FE0F\",\n\t\tc: \"1F9D9-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t36\n\t\t],\n\t\to: 10\n\t},\n\tcloud: {\n\t\ta: \"Cloud\",\n\t\tb: \"2601-FE0F\",\n\t\tc: \"2601\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"sky\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t17\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-nz\": {\n\t\ta: \"New Zealand Flag\",\n\t\tb: \"1F1F3-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t51\n\t\t]\n\t},\n\tpartly_sunny: {\n\t\ta: \"Sun Behind Cloud\",\n\t\tb: \"26C5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"nature\",\n\t\t\t\"cloudy\",\n\t\t\t\"morning\",\n\t\t\t\"fall\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t29\n\t\t],\n\t\to: 5\n\t},\n\tfairy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DA-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3fb.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DA-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3fc.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DA-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3fd.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DA-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3fe.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DA-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3ff.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9DA-200D-2640-FE0F\",\n\t\ta: \"Fairy\",\n\t\tb: \"1F9DA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t8\n\t\t],\n\t\to: 10\n\t},\n\tu6e80: {\n\t\ta: \"Squared Cjk Unified Ideograph-6e80\",\n\t\tb: \"1F235\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"full\",\n\t\t\t\"chinese\",\n\t\t\t\"japanese\",\n\t\t\t\"red-square\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t36\n\t\t]\n\t},\n\tblack_small_square: {\n\t\ta: \"Black Small Square\",\n\t\tb: \"25AA-FE0F\",\n\t\tc: \"25AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t8\n\t\t],\n\t\to: 1\n\t},\n\tthunder_cloud_and_rain: {\n\t\ta: \"Thunder Cloud and Rain\",\n\t\tb: \"26C8-FE0F\",\n\t\tc: \"26C8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t30\n\t\t],\n\t\to: 5\n\t},\n\tfemale_fairy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DA-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DA-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DA-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DA-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DA-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9DA\",\n\t\ta: \"Female Fairy\",\n\t\tb: \"1F9DA-200D-2640-FE0F\",\n\t\tc: \"1F9DA-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t48\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-om\": {\n\t\ta: \"Oman Flag\",\n\t\tb: \"1F1F4-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t0\n\t\t]\n\t},\n\twhite_small_square: {\n\t\ta: \"White Small Square\",\n\t\tb: \"25AB-FE0F\",\n\t\tc: \"25AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t9\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-pa\": {\n\t\ta: \"Panama Flag\",\n\t\tb: \"1F1F5-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t1\n\t\t]\n\t},\n\tmostly_sunny: {\n\t\ta: \"Mostly Sunny\",\n\t\tb: \"1F324-FE0F\",\n\t\tc: \"1F324\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t26\n\t\t],\n\t\tn: [\n\t\t\t\"sun_small_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\tmale_fairy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DA-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DA-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DA-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DA-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DA-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Fairy\",\n\t\tb: \"1F9DA-200D-2642-FE0F\",\n\t\tc: \"1F9DA-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t2\n\t\t],\n\t\to: 10\n\t},\n\tbarely_sunny: {\n\t\ta: \"Barely Sunny\",\n\t\tb: \"1F325-FE0F\",\n\t\tc: \"1F325\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t27\n\t\t],\n\t\tn: [\n\t\t\t\"sun_behind_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\twhite_medium_square: {\n\t\ta: \"White Medium Square\",\n\t\tb: \"25FB-FE0F\",\n\t\tc: \"25FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"stone\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t12\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-pe\": {\n\t\ta: \"Peru Flag\",\n\t\tb: \"1F1F5-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t2\n\t\t]\n\t},\n\tvampire: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DB-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3fb.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DB-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3fc.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DB-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3fd.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DB-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3fe.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DB-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3ff.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9DB-200D-2640-FE0F\",\n\t\ta: \"Vampire\",\n\t\tb: \"1F9DB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t26\n\t\t],\n\t\to: 10\n\t},\n\tfemale_vampire: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DB-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DB-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DB-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DB-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DB-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9DB\",\n\t\ta: \"Female Vampire\",\n\t\tb: \"1F9DB-200D-2640-FE0F\",\n\t\tc: \"1F9DB-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t14\n\t\t],\n\t\to: 10\n\t},\n\tpartly_sunny_rain: {\n\t\ta: \"Partly Sunny Rain\",\n\t\tb: \"1F326-FE0F\",\n\t\tc: \"1F326\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t28\n\t\t],\n\t\tn: [\n\t\t\t\"sun_behind_rain_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-pf\": {\n\t\ta: \"French Polynesia Flag\",\n\t\tb: \"1F1F5-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t3\n\t\t]\n\t},\n\tblack_medium_square: {\n\t\ta: \"Black Medium Square\",\n\t\tb: \"25FC-FE0F\",\n\t\tc: \"25FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"button\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t13\n\t\t],\n\t\to: 3\n\t},\n\twhite_medium_small_square: {\n\t\ta: \"White Medium Small Square\",\n\t\tb: \"25FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"stone\",\n\t\t\t\"icon\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t14\n\t\t],\n\t\to: 3\n\t},\n\train_cloud: {\n\t\ta: \"Rain Cloud\",\n\t\tb: \"1F327-FE0F\",\n\t\tc: \"1F327\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t29\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-pg\": {\n\t\ta: \"Papua New Guinea Flag\",\n\t\tb: \"1F1F5-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t4\n\t\t]\n\t},\n\tmale_vampire: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DB-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DB-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DB-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DB-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DB-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Vampire\",\n\t\tb: \"1F9DB-200D-2642-FE0F\",\n\t\tc: \"1F9DB-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t20\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-ph\": {\n\t\ta: \"Philippines Flag\",\n\t\tb: \"1F1F5-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t5\n\t\t]\n\t},\n\tmerperson: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DC-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3fb.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FB-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DC-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3fc.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FC-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DC-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3fd.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FD-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DC-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3fe.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FE-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DC-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3ff.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FF-200D-2642-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9DC-200D-2642-FE0F\",\n\t\ta: \"Merperson\",\n\t\tb: \"1F9DC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t44\n\t\t],\n\t\to: 10\n\t},\n\tblack_medium_small_square: {\n\t\ta: \"Black Medium Small Square\",\n\t\tb: \"25FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"icon\",\n\t\t\t\"shape\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t15\n\t\t],\n\t\to: 3\n\t},\n\tsnow_cloud: {\n\t\ta: \"Snow Cloud\",\n\t\tb: \"1F328-FE0F\",\n\t\tc: \"1F328\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t30\n\t\t],\n\t\to: 7\n\t},\n\tlightning: {\n\t\ta: \"Lightning\",\n\t\tb: \"1F329-FE0F\",\n\t\tc: \"1F329\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t31\n\t\t],\n\t\tn: [\n\t\t\t\"lightning_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\tblack_large_square: {\n\t\ta: \"Black Large Square\",\n\t\tb: \"2B1B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t20\n\t\t],\n\t\to: 5\n\t},\n\tmermaid: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DC-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DC-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DC-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DC-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DC-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Mermaid\",\n\t\tb: \"1F9DC-200D-2640-FE0F\",\n\t\tc: \"1F9DC-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t32\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-pk\": {\n\t\ta: \"Pakistan Flag\",\n\t\tb: \"1F1F5-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t6\n\t\t]\n\t},\n\tmerman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DC-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DC-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DC-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DC-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DC-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9DC\",\n\t\ta: \"Merman\",\n\t\tb: \"1F9DC-200D-2642-FE0F\",\n\t\tc: \"1F9DC-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t38\n\t\t],\n\t\to: 10\n\t},\n\twhite_large_square: {\n\t\ta: \"White Large Square\",\n\t\tb: \"2B1C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\",\n\t\t\t\"stone\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t21\n\t\t],\n\t\to: 5\n\t},\n\ttornado: {\n\t\ta: \"Tornado\",\n\t\tb: \"1F32A-FE0F\",\n\t\tc: \"1F32A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"cyclone\",\n\t\t\t\"twister\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t32\n\t\t],\n\t\tn: [\n\t\t\t\"tornado_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-pl\": {\n\t\ta: \"Poland Flag\",\n\t\tb: \"1F1F5-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t7\n\t\t]\n\t},\n\telf: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DD-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3fb.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FB-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DD-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3fc.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FC-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DD-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3fd.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FD-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DD-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3fe.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FE-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DD-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3ff.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FF-200D-2642-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9DD-200D-2642-FE0F\",\n\t\ta: \"Elf\",\n\t\tb: \"1F9DD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t10\n\t\t],\n\t\to: 10\n\t},\n\tfog: {\n\t\ta: \"Fog\",\n\t\tb: \"1F32B-FE0F\",\n\t\tc: \"1F32B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"weather\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t33\n\t\t],\n\t\to: 7\n\t},\n\tlarge_orange_diamond: {\n\t\ta: \"Large Orange Diamond\",\n\t\tb: \"1F536\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"jewel\",\n\t\t\t\"gem\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-pm\": {\n\t\ta: \"St. Pierre & Miquelon Flag\",\n\t\tb: \"1F1F5-1F1F2\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t8\n\t\t]\n\t},\n\t\"flag-pn\": {\n\t\ta: \"Pitcairn Islands Flag\",\n\t\tb: \"1F1F5-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t9\n\t\t]\n\t},\n\twind_blowing_face: {\n\t\ta: \"Wind Blowing Face\",\n\t\tb: \"1F32C-FE0F\",\n\t\tc: \"1F32C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t34\n\t\t],\n\t\to: 7\n\t},\n\tfemale_elf: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DD-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DD-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DD-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DD-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DD-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Elf\",\n\t\tb: \"1F9DD-200D-2640-FE0F\",\n\t\tc: \"1F9DD-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t50\n\t\t],\n\t\to: 10\n\t},\n\tlarge_blue_diamond: {\n\t\ta: \"Large Blue Diamond\",\n\t\tb: \"1F537\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"jewel\",\n\t\t\t\"gem\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t5\n\t\t]\n\t},\n\tmale_elf: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DD-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DD-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DD-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DD-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DD-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9DD\",\n\t\ta: \"Male Elf\",\n\t\tb: \"1F9DD-200D-2642-FE0F\",\n\t\tc: \"1F9DD-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t4\n\t\t],\n\t\to: 10\n\t},\n\tsmall_orange_diamond: {\n\t\ta: \"Small Orange Diamond\",\n\t\tb: \"1F538\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"jewel\",\n\t\t\t\"gem\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-pr\": {\n\t\ta: \"Puerto Rico Flag\",\n\t\tb: \"1F1F5-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t10\n\t\t]\n\t},\n\tcyclone: {\n\t\ta: \"Cyclone\",\n\t\tb: \"1F300\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"swirl\",\n\t\t\t\"blue\",\n\t\t\t\"cloud\",\n\t\t\t\"vortex\",\n\t\t\t\"spiral\",\n\t\t\t\"whirlpool\",\n\t\t\t\"spin\",\n\t\t\t\"tornado\",\n\t\t\t\"hurricane\",\n\t\t\t\"typhoon\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t44\n\t\t]\n\t},\n\trainbow: {\n\t\ta: \"Rainbow\",\n\t\tb: \"1F308\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"happy\",\n\t\t\t\"unicorn_face\",\n\t\t\t\"photo\",\n\t\t\t\"sky\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t0\n\t\t]\n\t},\n\tsmall_blue_diamond: {\n\t\ta: \"Small Blue Diamond\",\n\t\tb: \"1F539\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"jewel\",\n\t\t\t\"gem\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t7\n\t\t]\n\t},\n\tgenie: {\n\t\tobsoleted_by: \"1F9DE-200D-2642-FE0F\",\n\t\ta: \"Genie\",\n\t\tb: \"1F9DE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t18\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-ps\": {\n\t\ta: \"Palestinian Territories Flag\",\n\t\tb: \"1F1F5-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t11\n\t\t]\n\t},\n\tsmall_red_triangle: {\n\t\ta: \"Up-Pointing Red Triangle\",\n\t\tb: \"1F53A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"direction\",\n\t\t\t\"up\",\n\t\t\t\"top\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t8\n\t\t]\n\t},\n\tclosed_umbrella: {\n\t\ta: \"Closed Umbrella\",\n\t\tb: \"1F302\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"rain\",\n\t\t\t\"drizzle\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t46\n\t\t]\n\t},\n\tfemale_genie: {\n\t\ta: \"Female Genie\",\n\t\tb: \"1F9DE-200D-2640-FE0F\",\n\t\tc: \"1F9DE-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t16\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-pt\": {\n\t\ta: \"Portugal Flag\",\n\t\tb: \"1F1F5-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t12\n\t\t]\n\t},\n\t\"flag-pw\": {\n\t\ta: \"Palau Flag\",\n\t\tb: \"1F1F5-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t13\n\t\t]\n\t},\n\tsmall_red_triangle_down: {\n\t\ta: \"Down-Pointing Red Triangle\",\n\t\tb: \"1F53B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t9\n\t\t]\n\t},\n\tumbrella: {\n\t\ta: \"Umbrella\",\n\t\tb: \"2602-FE0F\",\n\t\tc: \"2602\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"rainy\",\n\t\t\t\"weather\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t18\n\t\t],\n\t\to: 1\n\t},\n\tmale_genie: {\n\t\tobsoletes: \"1F9DE\",\n\t\ta: \"Male Genie\",\n\t\tb: \"1F9DE-200D-2642-FE0F\",\n\t\tc: \"1F9DE-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t17\n\t\t],\n\t\to: 10\n\t},\n\tzombie: {\n\t\tobsoleted_by: \"1F9DF-200D-2642-FE0F\",\n\t\ta: \"Zombie\",\n\t\tb: \"1F9DF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t21\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-py\": {\n\t\ta: \"Paraguay Flag\",\n\t\tb: \"1F1F5-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t14\n\t\t]\n\t},\n\tdiamond_shape_with_a_dot_inside: {\n\t\ta: \"Diamond Shape with a Dot Inside\",\n\t\tb: \"1F4A0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"jewel\",\n\t\t\t\"blue\",\n\t\t\t\"gem\",\n\t\t\t\"crystal\",\n\t\t\t\"fancy\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t6\n\t\t]\n\t},\n\tumbrella_with_rain_drops: {\n\t\ta: \"Umbrella with Rain Drops\",\n\t\tb: \"2614\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t47,\n\t\t\t23\n\t\t],\n\t\to: 4\n\t},\n\tradio_button: {\n\t\ta: \"Radio Button\",\n\t\tb: \"1F518\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"input\",\n\t\t\t\"old\",\n\t\t\t\"music\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t26\n\t\t]\n\t},\n\tfemale_zombie: {\n\t\ta: \"Female Zombie\",\n\t\tb: \"1F9DF-200D-2640-FE0F\",\n\t\tc: \"1F9DF-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t19\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-qa\": {\n\t\ta: \"Qatar Flag\",\n\t\tb: \"1F1F6-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t15\n\t\t]\n\t},\n\tumbrella_on_ground: {\n\t\ta: \"Umbrella on Ground\",\n\t\tb: \"26F1-FE0F\",\n\t\tc: \"26F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t39\n\t\t],\n\t\to: 5\n\t},\n\tblack_square_button: {\n\t\ta: \"Black Square Button\",\n\t\tb: \"1F532\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"input\",\n\t\t\t\"frame\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t0\n\t\t]\n\t},\n\tzap: {\n\t\ta: \"High Voltage Sign\",\n\t\tb: \"26A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"thunder\",\n\t\t\t\"weather\",\n\t\t\t\"lightning bolt\",\n\t\t\t\"fast\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t21\n\t\t],\n\t\to: 4\n\t},\n\tmale_zombie: {\n\t\tobsoletes: \"1F9DF\",\n\t\ta: \"Male Zombie\",\n\t\tb: \"1F9DF-200D-2642-FE0F\",\n\t\tc: \"1F9DF-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t20\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-re\": {\n\t\ta: \"Réunion Flag\",\n\t\tb: \"1F1F7-1F1EA\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t16\n\t\t]\n\t},\n\t\"flag-ro\": {\n\t\ta: \"Romania Flag\",\n\t\tb: \"1F1F7-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t17\n\t\t]\n\t},\n\tsnowflake: {\n\t\ta: \"Snowflake\",\n\t\tb: \"2744-FE0F\",\n\t\tc: \"2744\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"winter\",\n\t\t\t\"season\",\n\t\t\t\"cold\",\n\t\t\t\"weather\",\n\t\t\t\"christmas\",\n\t\t\t\"xmas\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t51\n\t\t],\n\t\to: 1\n\t},\n\twhite_square_button: {\n\t\ta: \"White Square Button\",\n\t\tb: \"1F533\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"input\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t1\n\t\t]\n\t},\n\tperson_frowning: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3fb.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3fc.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3fd.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3fe.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3ff.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F64D-200D-2640-FE0F\",\n\t\ta: \"Person Frowning\",\n\t\tb: \"1F64D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t33,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-rs\": {\n\t\ta: \"Serbia Flag\",\n\t\tb: \"1F1F7-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t18\n\t\t]\n\t},\n\t\"man-frowning\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64D-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64D-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64D-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64D-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64D-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Frowning\",\n\t\tb: \"1F64D-200D-2642-FE0F\",\n\t\tc: \"1F64D-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t24\n\t\t]\n\t},\n\twhite_circle: {\n\t\ta: \"Medium White Circle\",\n\t\tb: \"26AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"round\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t22\n\t\t],\n\t\to: 4\n\t},\n\tsnowman: {\n\t\ta: \"Snowman\",\n\t\tb: \"2603-FE0F\",\n\t\tc: \"2603\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"winter\",\n\t\t\t\"season\",\n\t\t\t\"cold\",\n\t\t\t\"weather\",\n\t\t\t\"christmas\",\n\t\t\t\"xmas\",\n\t\t\t\"frozen\",\n\t\t\t\"without_snow\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t19\n\t\t],\n\t\to: 1\n\t},\n\tsnowman_without_snow: {\n\t\ta: \"Snowman Without Snow\",\n\t\tb: \"26C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t48,\n\t\t\t28\n\t\t],\n\t\to: 5\n\t},\n\tru: {\n\t\ta: \"Russia Flag\",\n\t\tb: \"1F1F7-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"russian\",\n\t\t\t\"federation\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t4,\n\t\t\t19\n\t\t],\n\t\tn: [\n\t\t\t\"flag-ru\"\n\t\t]\n\t},\n\tblack_circle: {\n\t\ta: \"Medium Black Circle\",\n\t\tb: \"26AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"button\",\n\t\t\t\"round\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t23\n\t\t],\n\t\to: 4\n\t},\n\t\"woman-frowning\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64D-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64D-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64D-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64D-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64D-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F64D\",\n\t\ta: \"Woman Frowning\",\n\t\tb: \"1F64D-200D-2640-FE0F\",\n\t\tc: \"1F64D-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t18\n\t\t]\n\t},\n\t\"flag-rw\": {\n\t\ta: \"Rwanda Flag\",\n\t\tb: \"1F1F7-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t20\n\t\t]\n\t},\n\tcomet: {\n\t\ta: \"Comet\",\n\t\tb: \"2604-FE0F\",\n\t\tc: \"2604\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"space\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t20\n\t\t],\n\t\to: 1\n\t},\n\tperson_with_pouting_face: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3fb.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3fc.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3fd.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3fe.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3ff.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F64E-200D-2640-FE0F\",\n\t\ta: \"Person with Pouting Face\",\n\t\tb: \"1F64E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t33,\n\t\t\t48\n\t\t]\n\t},\n\tred_circle: {\n\t\ta: \"Large Red Circle\",\n\t\tb: \"1F534\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"error\",\n\t\t\t\"danger\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t2\n\t\t]\n\t},\n\tlarge_blue_circle: {\n\t\ta: \"Large Blue Circle\",\n\t\tb: \"1F535\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t3\n\t\t]\n\t},\n\t\"man-pouting\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64E-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64E-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64E-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64E-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64E-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Pouting\",\n\t\tb: \"1F64E-200D-2642-FE0F\",\n\t\tc: \"1F64E-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t42\n\t\t]\n\t},\n\t\"flag-sa\": {\n\t\ta: \"Saudi Arabia Flag\",\n\t\tb: \"1F1F8-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t21\n\t\t]\n\t},\n\tfire: {\n\t\ta: \"Fire\",\n\t\tb: \"1F525\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hot\",\n\t\t\t\"cook\",\n\t\t\t\"flame\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t39\n\t\t]\n\t},\n\t\"woman-pouting\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64E-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64E-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64E-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64E-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64E-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F64E\",\n\t\ta: \"Woman Pouting\",\n\t\tb: \"1F64E-200D-2640-FE0F\",\n\t\tc: \"1F64E-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-sb\": {\n\t\ta: \"Solomon Islands Flag\",\n\t\tb: \"1F1F8-1F1E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t22\n\t\t]\n\t},\n\tdroplet: {\n\t\ta: \"Droplet\",\n\t\tb: \"1F4A7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"water\",\n\t\t\t\"drip\",\n\t\t\t\"faucet\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t13\n\t\t]\n\t},\n\tno_good: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F645-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3fb.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F645-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3fc.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F645-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3fd.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F645-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3fe.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F645-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3ff.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F645-200D-2640-FE0F\",\n\t\ta: \"Face with No Good Gesture\",\n\t\tb: \"1F645\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t32,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-sc\": {\n\t\ta: \"Seychelles Flag\",\n\t\tb: \"1F1F8-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t23\n\t\t]\n\t},\n\tocean: {\n\t\ta: \"Water Wave\",\n\t\tb: \"1F30A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sea\",\n\t\t\t\"water\",\n\t\t\t\"wave\",\n\t\t\t\"nature\",\n\t\t\t\"tsunami\",\n\t\t\t\"disaster\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t2\n\t\t]\n\t},\n\t\"man-gesturing-no\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F645-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f645-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F645-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f645-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F645-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f645-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F645-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f645-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F645-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f645-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Gesturing No\",\n\t\tb: \"1F645-200D-2642-FE0F\",\n\t\tc: \"1F645-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t31,\n\t\t\t47\n\t\t]\n\t},\n\t\"flag-sd\": {\n\t\ta: \"Sudan Flag\",\n\t\tb: \"1F1F8-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t24\n\t\t]\n\t},\n\t\"woman-gesturing-no\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F645-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f645-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F645-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f645-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F645-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f645-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F645-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f645-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F645-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f645-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F645\",\n\t\ta: \"Woman Gesturing No\",\n\t\tb: \"1F645-200D-2640-FE0F\",\n\t\tc: \"1F645-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t31,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-se\": {\n\t\ta: \"Sweden Flag\",\n\t\tb: \"1F1F8-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t25\n\t\t]\n\t},\n\t\"flag-sg\": {\n\t\ta: \"Singapore Flag\",\n\t\tb: \"1F1F8-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t26\n\t\t]\n\t},\n\tok_woman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F646-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3fb.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F646-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3fc.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F646-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3fd.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F646-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3fe.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F646-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3ff.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F646-200D-2640-FE0F\",\n\t\ta: \"Face with Ok Gesture\",\n\t\tb: \"1F646\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"women\",\n\t\t\t\"girl\",\n\t\t\t\"female\",\n\t\t\t\"pink\",\n\t\t\t\"human\",\n\t\t\t\"woman\"\n\t\t],\n\t\tk: [\n\t\t\t32,\n\t\t\t19\n\t\t]\n\t},\n\t\"flag-sh\": {\n\t\ta: \"St. Helena Flag\",\n\t\tb: \"1F1F8-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t27\n\t\t]\n\t},\n\t\"man-gesturing-ok\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F646-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f646-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F646-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f646-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F646-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f646-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F646-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f646-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F646-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f646-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Gesturing Ok\",\n\t\tb: \"1F646-200D-2642-FE0F\",\n\t\tc: \"1F646-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t13\n\t\t]\n\t},\n\t\"flag-si\": {\n\t\ta: \"Slovenia Flag\",\n\t\tb: \"1F1F8-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t28\n\t\t]\n\t},\n\t\"woman-gesturing-ok\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F646-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f646-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F646-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f646-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F646-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f646-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F646-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f646-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F646-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f646-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F646\",\n\t\ta: \"Woman Gesturing Ok\",\n\t\tb: \"1F646-200D-2640-FE0F\",\n\t\tc: \"1F646-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t7\n\t\t]\n\t},\n\tinformation_desk_person: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F481-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3fb.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F481-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3fc.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F481-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3fd.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F481-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3fe.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F481-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3ff.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F481-200D-2640-FE0F\",\n\t\ta: \"Information Desk Person\",\n\t\tb: \"1F481\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t23,\n\t\t\t13\n\t\t]\n\t},\n\t\"flag-sj\": {\n\t\ta: \"Svalbard & Jan Mayen Flag\",\n\t\tb: \"1F1F8-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t29\n\t\t]\n\t},\n\t\"man-tipping-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F481-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f481-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F481-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f481-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F481-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f481-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F481-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f481-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F481-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f481-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Tipping Hand\",\n\t\tb: \"1F481-200D-2642-FE0F\",\n\t\tc: \"1F481-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t7\n\t\t]\n\t},\n\t\"flag-sk\": {\n\t\ta: \"Slovakia Flag\",\n\t\tb: \"1F1F8-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-sl\": {\n\t\ta: \"Sierra Leone Flag\",\n\t\tb: \"1F1F8-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t31\n\t\t]\n\t},\n\t\"woman-tipping-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F481-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f481-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F481-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f481-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F481-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f481-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F481-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f481-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F481-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f481-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F481\",\n\t\ta: \"Woman Tipping Hand\",\n\t\tb: \"1F481-200D-2640-FE0F\",\n\t\tc: \"1F481-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-sm\": {\n\t\ta: \"San Marino Flag\",\n\t\tb: \"1F1F8-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t32\n\t\t]\n\t},\n\traising_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64B-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3fb.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64B-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3fc.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64B-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3fd.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64B-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3fe.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64B-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3ff.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F64B-200D-2640-FE0F\",\n\t\ta: \"Happy Person Raising One Hand\",\n\t\tb: \"1F64B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t33,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-sn\": {\n\t\ta: \"Senegal Flag\",\n\t\tb: \"1F1F8-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t33\n\t\t]\n\t},\n\t\"man-raising-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64B-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64B-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64B-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64B-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64B-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Raising Hand\",\n\t\tb: \"1F64B-200D-2642-FE0F\",\n\t\tc: \"1F64B-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t0\n\t\t]\n\t},\n\t\"flag-so\": {\n\t\ta: \"Somalia Flag\",\n\t\tb: \"1F1F8-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t34\n\t\t]\n\t},\n\t\"woman-raising-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64B-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64B-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64B-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64B-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64B-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F64B\",\n\t\ta: \"Woman Raising Hand\",\n\t\tb: \"1F64B-200D-2640-FE0F\",\n\t\tc: \"1F64B-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t46\n\t\t]\n\t},\n\t\"flag-sr\": {\n\t\ta: \"Suriname Flag\",\n\t\tb: \"1F1F8-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t35\n\t\t]\n\t},\n\tbow: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F647-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3fb.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F647-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3fc.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F647-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3fd.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F647-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3fe.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F647-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3ff.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F647-200D-2642-FE0F\",\n\t\ta: \"Person Bowing Deeply\",\n\t\tb: \"1F647\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t32,\n\t\t\t37\n\t\t]\n\t},\n\t\"man-bowing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F647-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f647-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F647-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f647-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F647-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f647-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F647-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f647-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F647-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f647-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F647\",\n\t\ta: \"Man Bowing\",\n\t\tb: \"1F647-200D-2642-FE0F\",\n\t\tc: \"1F647-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t31\n\t\t]\n\t},\n\t\"flag-ss\": {\n\t\ta: \"South Sudan Flag\",\n\t\tb: \"1F1F8-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t36\n\t\t]\n\t},\n\t\"woman-bowing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F647-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f647-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F647-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f647-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F647-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f647-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F647-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f647-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F647-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f647-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Bowing\",\n\t\tb: \"1F647-200D-2640-FE0F\",\n\t\tc: \"1F647-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t25\n\t\t]\n\t},\n\t\"flag-st\": {\n\t\ta: \"São Tomé & Príncipe Flag\",\n\t\tb: \"1F1F8-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t37\n\t\t]\n\t},\n\tface_palm: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F926-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3fb.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F926-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F926-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F926-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F926-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Face Palm\",\n\t\tb: \"1F926\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t41\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-sv\": {\n\t\ta: \"El Salvador Flag\",\n\t\tb: \"1F1F8-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t38\n\t\t]\n\t},\n\t\"man-facepalming\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F926-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f926-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F926-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f926-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F926-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f926-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F926-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f926-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F926-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f926-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Facepalming\",\n\t\tb: \"1F926-200D-2642-FE0F\",\n\t\tc: \"1F926-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t35\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-sx\": {\n\t\ta: \"Sint Maarten Flag\",\n\t\tb: \"1F1F8-1F1FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t39\n\t\t]\n\t},\n\t\"flag-sy\": {\n\t\ta: \"Syria Flag\",\n\t\tb: \"1F1F8-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t40\n\t\t]\n\t},\n\t\"woman-facepalming\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F926-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f926-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F926-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f926-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F926-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f926-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F926-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f926-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F926-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f926-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Facepalming\",\n\t\tb: \"1F926-200D-2640-FE0F\",\n\t\tc: \"1F926-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t29\n\t\t],\n\t\to: 9\n\t},\n\tshrug: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F937-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3fb.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F937-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3fc.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F937-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3fd.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F937-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3fe.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F937-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3ff.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Shrug\",\n\t\tb: \"1F937\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t6\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-sz\": {\n\t\ta: \"Swaziland Flag\",\n\t\tb: \"1F1F8-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-ta\": {\n\t\ta: \"Tristan Da Cunha Flag\",\n\t\tb: \"1F1F9-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t42\n\t\t]\n\t},\n\t\"man-shrugging\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F937-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f937-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F937-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f937-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F937-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f937-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F937-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f937-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F937-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f937-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Shrugging\",\n\t\tb: \"1F937-200D-2642-FE0F\",\n\t\tc: \"1F937-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t0\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-shrugging\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F937-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f937-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F937-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f937-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F937-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f937-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F937-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f937-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F937-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f937-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Shrugging\",\n\t\tb: \"1F937-200D-2640-FE0F\",\n\t\tc: \"1F937-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t46\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-tc\": {\n\t\ta: \"Turks & Caicos Islands Flag\",\n\t\tb: \"1F1F9-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t43\n\t\t]\n\t},\n\tmassage: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F486-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3fb.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F486-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3fc.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F486-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3fd.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F486-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3fe.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F486-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3ff.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F486-200D-2640-FE0F\",\n\t\ta: \"Face Massage\",\n\t\tb: \"1F486\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t24,\n\t\t\t10\n\t\t]\n\t},\n\t\"flag-td\": {\n\t\ta: \"Chad Flag\",\n\t\tb: \"1F1F9-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t44\n\t\t]\n\t},\n\t\"man-getting-massage\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F486-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f486-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F486-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f486-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F486-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f486-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F486-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f486-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F486-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f486-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Getting Massage\",\n\t\tb: \"1F486-200D-2642-FE0F\",\n\t\tc: \"1F486-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t24,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-tf\": {\n\t\ta: \"French Southern Territories Flag\",\n\t\tb: \"1F1F9-1F1EB\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t45\n\t\t]\n\t},\n\t\"woman-getting-massage\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F486-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f486-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F486-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f486-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F486-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f486-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F486-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f486-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F486-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f486-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F486\",\n\t\ta: \"Woman Getting Massage\",\n\t\tb: \"1F486-200D-2640-FE0F\",\n\t\tc: \"1F486-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t50\n\t\t]\n\t},\n\t\"flag-tg\": {\n\t\ta: \"Togo Flag\",\n\t\tb: \"1F1F9-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t46\n\t\t]\n\t},\n\thaircut: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F487-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3fb.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F487-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3fc.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F487-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3fd.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F487-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3fe.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F487-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3ff.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F487-200D-2640-FE0F\",\n\t\ta: \"Haircut\",\n\t\tb: \"1F487\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t24,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-th\": {\n\t\ta: \"Thailand Flag\",\n\t\tb: \"1F1F9-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t47\n\t\t]\n\t},\n\t\"man-getting-haircut\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F487-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f487-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F487-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f487-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F487-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f487-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F487-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f487-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F487-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f487-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Getting Haircut\",\n\t\tb: \"1F487-200D-2642-FE0F\",\n\t\tc: \"1F487-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t24,\n\t\t\t22\n\t\t]\n\t},\n\t\"flag-tj\": {\n\t\ta: \"Tajikistan Flag\",\n\t\tb: \"1F1F9-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t48\n\t\t]\n\t},\n\t\"flag-tk\": {\n\t\ta: \"Tokelau Flag\",\n\t\tb: \"1F1F9-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t49\n\t\t]\n\t},\n\t\"woman-getting-haircut\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F487-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f487-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F487-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f487-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F487-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f487-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F487-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f487-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F487-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f487-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F487\",\n\t\ta: \"Woman Getting Haircut\",\n\t\tb: \"1F487-200D-2640-FE0F\",\n\t\tc: \"1F487-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t24,\n\t\t\t16\n\t\t]\n\t},\n\twalking: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B6-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3fb.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B6-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3fc.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B6-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3fd.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B6-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3fe.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B6-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3ff.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F6B6-200D-2642-FE0F\",\n\t\ta: \"Pedestrian\",\n\t\tb: \"1F6B6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t36,\n\t\t\t21\n\t\t]\n\t},\n\t\"flag-tl\": {\n\t\ta: \"Timor-Leste Flag\",\n\t\tb: \"1F1F9-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t50\n\t\t]\n\t},\n\t\"man-walking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B6-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B6-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B6-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B6-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B6-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F6B6\",\n\t\ta: \"Man Walking\",\n\t\tb: \"1F6B6-200D-2642-FE0F\",\n\t\tc: \"1F6B6-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t36,\n\t\t\t15\n\t\t]\n\t},\n\t\"flag-tm\": {\n\t\ta: \"Turkmenistan Flag\",\n\t\tb: \"1F1F9-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t51\n\t\t]\n\t},\n\t\"woman-walking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B6-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B6-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B6-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B6-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B6-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Walking\",\n\t\tb: \"1F6B6-200D-2640-FE0F\",\n\t\tc: \"1F6B6-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t36,\n\t\t\t9\n\t\t]\n\t},\n\t\"flag-tn\": {\n\t\ta: \"Tunisia Flag\",\n\t\tb: \"1F1F9-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t0\n\t\t]\n\t},\n\trunner: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C3-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3fb.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C3-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3fc.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C3-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3fd.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C3-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3fe.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C3-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3ff.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3C3-200D-2642-FE0F\",\n\t\ta: \"Runner\",\n\t\tb: \"1F3C3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t9,\n\t\t\t46\n\t\t],\n\t\tn: [\n\t\t\t\"running\"\n\t\t]\n\t},\n\t\"flag-to\": {\n\t\ta: \"Tonga Flag\",\n\t\tb: \"1F1F9-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t1\n\t\t]\n\t},\n\t\"man-running\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C3-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C3-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C3-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C3-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C3-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3C3\",\n\t\ta: \"Man Running\",\n\t\tb: \"1F3C3-200D-2642-FE0F\",\n\t\tc: \"1F3C3-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t9,\n\t\t\t40\n\t\t]\n\t},\n\t\"flag-tr\": {\n\t\ta: \"Turkey Flag\",\n\t\tb: \"1F1F9-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-tt\": {\n\t\ta: \"Trinidad & Tobago Flag\",\n\t\tb: \"1F1F9-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t3\n\t\t]\n\t},\n\t\"woman-running\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C3-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C3-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C3-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C3-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C3-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Running\",\n\t\tb: \"1F3C3-200D-2640-FE0F\",\n\t\tc: \"1F3C3-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t9,\n\t\t\t34\n\t\t]\n\t},\n\t\"flag-tv\": {\n\t\ta: \"Tuvalu Flag\",\n\t\tb: \"1F1F9-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t4\n\t\t]\n\t},\n\tdancer: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F483-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3fb.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F483-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3fc.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F483-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3fd.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F483-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3fe.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F483-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3ff.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Dancer\",\n\t\tb: \"1F483\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"female\",\n\t\t\t\"girl\",\n\t\t\t\"woman\",\n\t\t\t\"fun\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t37\n\t\t]\n\t},\n\t\"flag-tw\": {\n\t\ta: \"Taiwan Flag\",\n\t\tb: \"1F1F9-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t5\n\t\t]\n\t},\n\tman_dancing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F57A-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F57A-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F57A-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F57A-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F57A-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Dancing\",\n\t\tb: \"1F57A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"male\",\n\t\t\t\"boy\",\n\t\t\t\"fun\",\n\t\t\t\"dancer\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t21\n\t\t],\n\t\to: 9\n\t},\n\tdancers: {\n\t\tobsoleted_by: \"1F46F-200D-2640-FE0F\",\n\t\ta: \"Woman with Bunny Ears\",\n\t\tb: \"1F46F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t21,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-tz\": {\n\t\ta: \"Tanzania Flag\",\n\t\tb: \"1F1F9-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-ua\": {\n\t\ta: \"Ukraine Flag\",\n\t\tb: \"1F1FA-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t7\n\t\t]\n\t},\n\t\"man-with-bunny-ears-partying\": {\n\t\ta: \"Man with Bunny Ears Partying\",\n\t\tb: \"1F46F-200D-2642-FE0F\",\n\t\tc: \"1F46F-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t0\n\t\t]\n\t},\n\t\"woman-with-bunny-ears-partying\": {\n\t\tobsoletes: \"1F46F\",\n\t\ta: \"Woman with Bunny Ears Partying\",\n\t\tb: \"1F46F-200D-2640-FE0F\",\n\t\tc: \"1F46F-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t51\n\t\t]\n\t},\n\t\"flag-ug\": {\n\t\ta: \"Uganda Flag\",\n\t\tb: \"1F1FA-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t8\n\t\t]\n\t},\n\t\"flag-um\": {\n\t\ta: \"U.s. Outlying Islands Flag\",\n\t\tb: \"1F1FA-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t9\n\t\t]\n\t},\n\tperson_in_steamy_room: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D6-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FB-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D6-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FC-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D6-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FD-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D6-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FE-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D6-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FF-200D-2642-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9D6-200D-2642-FE0F\",\n\t\ta: \"Person in Steamy Room\",\n\t\tb: \"1F9D6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t40\n\t\t],\n\t\to: 10\n\t},\n\twoman_in_steamy_room: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D6-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D6-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D6-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D6-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D6-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman in Steamy Room\",\n\t\tb: \"1F9D6-200D-2640-FE0F\",\n\t\tc: \"1F9D6-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t28\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-un\": {\n\t\ta: \"United Nations Flag\",\n\t\tb: \"1F1FA-1F1F3\",\n\t\td: false,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t5,\n\t\t\t10\n\t\t]\n\t},\n\tus: {\n\t\ta: \"United States Flag\",\n\t\tb: \"1F1FA-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"united\",\n\t\t\t\"states\",\n\t\t\t\"america\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t11\n\t\t],\n\t\tn: [\n\t\t\t\"flag-us\"\n\t\t]\n\t},\n\tman_in_steamy_room: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D6-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D6-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D6-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D6-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D6-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9D6\",\n\t\ta: \"Man in Steamy Room\",\n\t\tb: \"1F9D6-200D-2642-FE0F\",\n\t\tc: \"1F9D6-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t34\n\t\t],\n\t\to: 10\n\t},\n\tperson_climbing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D7-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3fb.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D7-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3fc.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D7-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3fd.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D7-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3fe.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D7-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3ff.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9D7-200D-2640-FE0F\",\n\t\ta: \"Person Climbing\",\n\t\tb: \"1F9D7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t6\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-uy\": {\n\t\ta: \"Uruguay Flag\",\n\t\tb: \"1F1FA-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t12\n\t\t]\n\t},\n\twoman_climbing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D7-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D7-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D7-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D7-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D7-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9D7\",\n\t\ta: \"Woman Climbing\",\n\t\tb: \"1F9D7-200D-2640-FE0F\",\n\t\tc: \"1F9D7-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t46\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-uz\": {\n\t\ta: \"Uzbekistan Flag\",\n\t\tb: \"1F1FA-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t13\n\t\t]\n\t},\n\tman_climbing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D7-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D7-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D7-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D7-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D7-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Climbing\",\n\t\tb: \"1F9D7-200D-2642-FE0F\",\n\t\tc: \"1F9D7-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t0\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-va\": {\n\t\ta: \"Vatican City Flag\",\n\t\tb: \"1F1FB-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t14\n\t\t]\n\t},\n\tperson_in_lotus_position: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D8-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3fb.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D8-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3fc.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D8-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3fd.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D8-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3fe.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D8-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3ff.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9D8-200D-2640-FE0F\",\n\t\ta: \"Person in Lotus Position\",\n\t\tb: \"1F9D8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t24\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-vc\": {\n\t\ta: \"St. Vincent & Grenadines Flag\",\n\t\tb: \"1F1FB-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t15\n\t\t]\n\t},\n\t\"flag-ve\": {\n\t\ta: \"Venezuela Flag\",\n\t\tb: \"1F1FB-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t16\n\t\t]\n\t},\n\twoman_in_lotus_position: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D8-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D8-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D8-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D8-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D8-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9D8\",\n\t\ta: \"Woman in Lotus Position\",\n\t\tb: \"1F9D8-200D-2640-FE0F\",\n\t\tc: \"1F9D8-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t12\n\t\t],\n\t\to: 10\n\t},\n\tman_in_lotus_position: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D8-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D8-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D8-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D8-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D8-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man in Lotus Position\",\n\t\tb: \"1F9D8-200D-2642-FE0F\",\n\t\tc: \"1F9D8-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t18\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-vg\": {\n\t\ta: \"British Virgin Islands Flag\",\n\t\tb: \"1F1FB-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t17\n\t\t]\n\t},\n\t\"flag-vi\": {\n\t\ta: \"U.s. Virgin Islands Flag\",\n\t\tb: \"1F1FB-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t18\n\t\t]\n\t},\n\tbath: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6C0-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3fb.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6C0-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3fc.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6C0-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3fd.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6C0-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3fe.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6C0-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3ff.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Bath\",\n\t\tb: \"1F6C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"clean\",\n\t\t\t\"shower\",\n\t\t\t\"bathroom\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t36\n\t\t]\n\t},\n\tsleeping_accommodation: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6CC-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3fb.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6CC-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3fc.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6CC-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3fd.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6CC-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3fe.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6CC-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3ff.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Sleeping Accommodation\",\n\t\tb: \"1F6CC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t36,\n\t\t\t48\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-vn\": {\n\t\ta: \"Vietnam Flag\",\n\t\tb: \"1F1FB-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t19\n\t\t]\n\t},\n\tman_in_business_suit_levitating: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F574-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3fb.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F574-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3fc.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F574-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3fd.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F574-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3fe.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F574-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3ff.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man in Business Suit Levitating\",\n\t\tb: \"1F574-FE0F\",\n\t\tc: \"1F574\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t45\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-vu\": {\n\t\ta: \"Vanuatu Flag\",\n\t\tb: \"1F1FB-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t20\n\t\t]\n\t},\n\t\"flag-wf\": {\n\t\ta: \"Wallis & Futuna Flag\",\n\t\tb: \"1F1FC-1F1EB\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t21\n\t\t]\n\t},\n\tspeaking_head_in_silhouette: {\n\t\ta: \"Speaking Head in Silhouette\",\n\t\tb: \"1F5E3-FE0F\",\n\t\tc: \"1F5E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t14\n\t\t],\n\t\to: 7\n\t},\n\tbust_in_silhouette: {\n\t\ta: \"Bust in Silhouette\",\n\t\tb: \"1F464\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"user\",\n\t\t\t\"person\",\n\t\t\t\"human\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t40\n\t\t]\n\t},\n\t\"flag-ws\": {\n\t\ta: \"Samoa Flag\",\n\t\tb: \"1F1FC-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t22\n\t\t]\n\t},\n\tbusts_in_silhouette: {\n\t\ta: \"Busts in Silhouette\",\n\t\tb: \"1F465\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"user\",\n\t\t\t\"person\",\n\t\t\t\"human\",\n\t\t\t\"group\",\n\t\t\t\"team\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-xk\": {\n\t\ta: \"Kosovo Flag\",\n\t\tb: \"1F1FD-1F1F0\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t23\n\t\t]\n\t},\n\tfencer: {\n\t\ta: \"Fencer\",\n\t\tb: \"1F93A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t48\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-ye\": {\n\t\ta: \"Yemen Flag\",\n\t\tb: \"1F1FE-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t24\n\t\t]\n\t},\n\t\"flag-yt\": {\n\t\ta: \"Mayotte Flag\",\n\t\tb: \"1F1FE-1F1F9\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t25\n\t\t]\n\t},\n\thorse_racing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C7-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3fb.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C7-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3fc.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C7-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3fd.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C7-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3fe.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C7-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3ff.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Horse Racing\",\n\t\tb: \"1F3C7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"betting\",\n\t\t\t\"competition\",\n\t\t\t\"gambling\",\n\t\t\t\"luck\"\n\t\t],\n\t\tk: [\n\t\t\t10,\n\t\t\t20\n\t\t]\n\t},\n\t\"flag-za\": {\n\t\ta: \"South Africa Flag\",\n\t\tb: \"1F1FF-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t26\n\t\t]\n\t},\n\tskier: {\n\t\ta: \"Skier\",\n\t\tb: \"26F7-FE0F\",\n\t\tc: \"26F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"winter\",\n\t\t\t\"snow\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t44\n\t\t],\n\t\to: 5\n\t},\n\t\"flag-zm\": {\n\t\ta: \"Zambia Flag\",\n\t\tb: \"1F1FF-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t27\n\t\t]\n\t},\n\tsnowboarder: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C2-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3fb.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C2-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3fc.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C2-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3fd.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C2-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3fe.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C2-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3ff.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Snowboarder\",\n\t\tb: \"1F3C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"winter\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t28\n\t\t]\n\t},\n\tgolfer: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CC-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3fb.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CC-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3fc.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CC-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3fd.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CC-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3fe.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CC-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3ff.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3CC-FE0F-200D-2642-FE0F\",\n\t\ta: \"Golfer\",\n\t\tb: \"1F3CC-FE0F\",\n\t\tc: \"1F3CC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t24\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-zw\": {\n\t\ta: \"Zimbabwe Flag\",\n\t\tb: \"1F1FF-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t28\n\t\t]\n\t},\n\t\"man-golfing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CC-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CC-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CC-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CC-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CC-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3CC-FE0F\",\n\t\ta: \"Man Golfing\",\n\t\tb: \"1F3CC-FE0F-200D-2642-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-england\": {\n\t\ta: \"England Flag\",\n\t\tb: \"1F3F4-E0067-E0062-E0065-E006E-E0067-E007F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t16\n\t\t],\n\t\to: 7\n\t},\n\t\"woman-golfing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CC-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CC-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CC-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CC-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CC-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Golfing\",\n\t\tb: \"1F3CC-FE0F-200D-2640-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t12\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-scotland\": {\n\t\ta: \"Scotland Flag\",\n\t\tb: \"1F3F4-E0067-E0062-E0073-E0063-E0074-E007F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t17\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-wales\": {\n\t\ta: \"Wales Flag\",\n\t\tb: \"1F3F4-E0067-E0062-E0077-E006C-E0073-E007F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\tsurfer: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C4-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3fb.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C4-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3fc.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C4-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3fd.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C4-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3fe.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C4-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3ff.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3C4-200D-2642-FE0F\",\n\t\ta: \"Surfer\",\n\t\tb: \"1F3C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t10,\n\t\t\t12\n\t\t]\n\t},\n\t\"man-surfing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C4-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C4-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C4-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C4-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C4-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3C4\",\n\t\ta: \"Man Surfing\",\n\t\tb: \"1F3C4-200D-2642-FE0F\",\n\t\tc: \"1F3C4-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t6\n\t\t]\n\t},\n\t\"woman-surfing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C4-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C4-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C4-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C4-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C4-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Surfing\",\n\t\tb: \"1F3C4-200D-2640-FE0F\",\n\t\tc: \"1F3C4-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t0\n\t\t]\n\t},\n\trowboat: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6A3-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3fb.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6A3-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3fc.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6A3-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3fd.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6A3-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3fe.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6A3-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3ff.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F6A3-200D-2642-FE0F\",\n\t\ta: \"Rowboat\",\n\t\tb: \"1F6A3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t35,\n\t\t\t3\n\t\t]\n\t},\n\t\"man-rowing-boat\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6A3-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6A3-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6A3-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6A3-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6A3-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F6A3\",\n\t\ta: \"Man Rowing Boat\",\n\t\tb: \"1F6A3-200D-2642-FE0F\",\n\t\tc: \"1F6A3-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t34,\n\t\t\t49\n\t\t]\n\t},\n\t\"woman-rowing-boat\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6A3-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6A3-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6A3-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6A3-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6A3-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Rowing Boat\",\n\t\tb: \"1F6A3-200D-2640-FE0F\",\n\t\tc: \"1F6A3-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t34,\n\t\t\t43\n\t\t]\n\t},\n\tswimmer: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CA-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3fb.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CA-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3fc.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CA-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3fd.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CA-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3fe.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CA-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3ff.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3CA-200D-2642-FE0F\",\n\t\ta: \"Swimmer\",\n\t\tb: \"1F3CA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t10,\n\t\t\t40\n\t\t]\n\t},\n\t\"man-swimming\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CA-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CA-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CA-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CA-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CA-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3CA\",\n\t\ta: \"Man Swimming\",\n\t\tb: \"1F3CA-200D-2642-FE0F\",\n\t\tc: \"1F3CA-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t34\n\t\t]\n\t},\n\t\"woman-swimming\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CA-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CA-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CA-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CA-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CA-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Swimming\",\n\t\tb: \"1F3CA-200D-2640-FE0F\",\n\t\tc: \"1F3CA-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t28\n\t\t]\n\t},\n\tperson_with_ball: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"26F9-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"26F9-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"26F9-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"26F9-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"26F9-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"26F9-FE0F-200D-2642-FE0F\",\n\t\ta: \"Person with Ball\",\n\t\tb: \"26F9-FE0F\",\n\t\tc: \"26F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t49,\n\t\t\t6\n\t\t],\n\t\to: 5\n\t},\n\t\"man-bouncing-ball\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"26F9-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FB-200D-2642\",\n\t\t\t\timage: \"26f9-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"26F9-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FC-200D-2642\",\n\t\t\t\timage: \"26f9-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"26F9-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FD-200D-2642\",\n\t\t\t\timage: \"26f9-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"26F9-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FE-200D-2642\",\n\t\t\t\timage: \"26f9-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"26F9-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FF-200D-2642\",\n\t\t\t\timage: \"26f9-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"26F9-FE0F\",\n\t\ta: \"Man Bouncing Ball\",\n\t\tb: \"26F9-FE0F-200D-2642-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t49,\n\t\t\t0\n\t\t],\n\t\to: 5\n\t},\n\t\"woman-bouncing-ball\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"26F9-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FB-200D-2640\",\n\t\t\t\timage: \"26f9-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"26F9-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FC-200D-2640\",\n\t\t\t\timage: \"26f9-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"26F9-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FD-200D-2640\",\n\t\t\t\timage: \"26f9-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"26F9-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FE-200D-2640\",\n\t\t\t\timage: \"26f9-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"26F9-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FF-200D-2640\",\n\t\t\t\timage: \"26f9-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Bouncing Ball\",\n\t\tb: \"26F9-FE0F-200D-2640-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t46\n\t\t],\n\t\to: 5\n\t},\n\tweight_lifter: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CB-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3fb.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CB-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3fc.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CB-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3fd.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CB-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3fe.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CB-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3ff.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3CB-FE0F-200D-2642-FE0F\",\n\t\ta: \"Weight Lifter\",\n\t\tb: \"1F3CB-FE0F\",\n\t\tc: \"1F3CB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t6\n\t\t],\n\t\to: 7\n\t},\n\t\"man-lifting-weights\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CB-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CB-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CB-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CB-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CB-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3CB-FE0F\",\n\t\ta: \"Man Lifting Weights\",\n\t\tb: \"1F3CB-FE0F-200D-2642-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t0\n\t\t],\n\t\to: 7\n\t},\n\t\"woman-lifting-weights\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CB-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CB-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CB-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CB-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CB-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Lifting Weights\",\n\t\tb: \"1F3CB-FE0F-200D-2640-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t46\n\t\t],\n\t\to: 7\n\t},\n\tbicyclist: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B4-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3fb.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B4-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3fc.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B4-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3fd.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B4-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3fe.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B4-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3ff.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F6B4-200D-2642-FE0F\",\n\t\ta: \"Bicyclist\",\n\t\tb: \"1F6B4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t35,\n\t\t\t37\n\t\t]\n\t},\n\t\"man-biking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B4-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B4-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B4-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B4-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B4-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F6B4\",\n\t\ta: \"Man Biking\",\n\t\tb: \"1F6B4-200D-2642-FE0F\",\n\t\tc: \"1F6B4-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t35,\n\t\t\t31\n\t\t]\n\t},\n\t\"woman-biking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B4-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B4-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B4-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B4-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B4-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Biking\",\n\t\tb: \"1F6B4-200D-2640-FE0F\",\n\t\tc: \"1F6B4-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t35,\n\t\t\t25\n\t\t]\n\t},\n\tmountain_bicyclist: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B5-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3fb.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B5-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3fc.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B5-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3fd.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B5-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3fe.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B5-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3ff.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F6B5-200D-2642-FE0F\",\n\t\ta: \"Mountain Bicyclist\",\n\t\tb: \"1F6B5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t36,\n\t\t\t3\n\t\t]\n\t},\n\t\"man-mountain-biking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B5-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B5-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B5-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B5-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B5-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F6B5\",\n\t\ta: \"Man Mountain Biking\",\n\t\tb: \"1F6B5-200D-2642-FE0F\",\n\t\tc: \"1F6B5-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t35,\n\t\t\t49\n\t\t]\n\t},\n\t\"woman-mountain-biking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B5-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B5-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B5-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B5-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B5-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Mountain Biking\",\n\t\tb: \"1F6B5-200D-2640-FE0F\",\n\t\tc: \"1F6B5-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t35,\n\t\t\t43\n\t\t]\n\t},\n\tracing_car: {\n\t\ta: \"Racing Car\",\n\t\tb: \"1F3CE-FE0F\",\n\t\tc: \"1F3CE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"race\",\n\t\t\t\"fast\",\n\t\t\t\"formula\",\n\t\t\t\"f1\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t31\n\t\t],\n\t\to: 7\n\t},\n\tracing_motorcycle: {\n\t\ta: \"Racing Motorcycle\",\n\t\tb: \"1F3CD-FE0F\",\n\t\tc: \"1F3CD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t30\n\t\t],\n\t\to: 7\n\t},\n\tperson_doing_cartwheel: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F938-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3fb.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F938-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3fc.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F938-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3fd.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F938-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3fe.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F938-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3ff.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Person Doing Cartwheel\",\n\t\tb: \"1F938\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t24\n\t\t],\n\t\to: 9\n\t},\n\t\"man-cartwheeling\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F938-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f938-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F938-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f938-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F938-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f938-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F938-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f938-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F938-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f938-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Cartwheeling\",\n\t\tb: \"1F938-200D-2642-FE0F\",\n\t\tc: \"1F938-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t18\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-cartwheeling\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F938-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f938-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F938-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f938-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F938-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f938-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F938-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f938-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F938-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f938-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Cartwheeling\",\n\t\tb: \"1F938-200D-2640-FE0F\",\n\t\tc: \"1F938-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t12\n\t\t],\n\t\to: 9\n\t},\n\twrestlers: {\n\t\ta: \"Wrestlers\",\n\t\tb: \"1F93C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t51\n\t\t],\n\t\to: 9\n\t},\n\t\"man-wrestling\": {\n\t\ta: \"Man Wrestling\",\n\t\tb: \"1F93C-200D-2642-FE0F\",\n\t\tc: \"1F93C-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t50\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-wrestling\": {\n\t\ta: \"Woman Wrestling\",\n\t\tb: \"1F93C-200D-2640-FE0F\",\n\t\tc: \"1F93C-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t49\n\t\t],\n\t\to: 9\n\t},\n\twater_polo: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3fb.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3fc.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3fd.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3fe.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3ff.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Water Polo\",\n\t\tb: \"1F93D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t12\n\t\t],\n\t\to: 9\n\t},\n\t\"man-playing-water-polo\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93D-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93D-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93D-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93D-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93D-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Playing Water Polo\",\n\t\tb: \"1F93D-200D-2642-FE0F\",\n\t\tc: \"1F93D-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t6\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-playing-water-polo\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93D-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93D-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93D-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93D-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93D-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Playing Water Polo\",\n\t\tb: \"1F93D-200D-2640-FE0F\",\n\t\tc: \"1F93D-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t0\n\t\t],\n\t\to: 9\n\t},\n\thandball: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3fb.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3fc.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3fd.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3fe.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3ff.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Handball\",\n\t\tb: \"1F93E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t30\n\t\t],\n\t\to: 9\n\t},\n\t\"man-playing-handball\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93E-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93E-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93E-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93E-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93E-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Playing Handball\",\n\t\tb: \"1F93E-200D-2642-FE0F\",\n\t\tc: \"1F93E-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t24\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-playing-handball\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93E-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93E-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93E-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93E-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93E-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Playing Handball\",\n\t\tb: \"1F93E-200D-2640-FE0F\",\n\t\tc: \"1F93E-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t18\n\t\t],\n\t\to: 9\n\t},\n\tjuggling: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F939-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3fb.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F939-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3fc.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F939-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3fd.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F939-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3fe.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F939-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3ff.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Juggling\",\n\t\tb: \"1F939\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t42\n\t\t],\n\t\to: 9\n\t},\n\t\"man-juggling\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F939-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f939-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F939-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f939-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F939-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f939-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F939-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f939-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F939-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f939-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Juggling\",\n\t\tb: \"1F939-200D-2642-FE0F\",\n\t\tc: \"1F939-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t36\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-juggling\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F939-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f939-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F939-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f939-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F939-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f939-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F939-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f939-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F939-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f939-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Juggling\",\n\t\tb: \"1F939-200D-2640-FE0F\",\n\t\tc: \"1F939-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t30\n\t\t],\n\t\to: 9\n\t},\n\tcouple: {\n\t\ta: \"Man and Woman Holding Hands\",\n\t\tb: \"1F46B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pair\",\n\t\t\t\"people\",\n\t\t\t\"human\",\n\t\t\t\"love\",\n\t\t\t\"date\",\n\t\t\t\"dating\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"marriage\"\n\t\t],\n\t\tk: [\n\t\t\t20,\n\t\t\t30\n\t\t],\n\t\tn: [\n\t\t\t\"man_and_woman_holding_hands\"\n\t\t]\n\t},\n\ttwo_men_holding_hands: {\n\t\ta: \"Two Men Holding Hands\",\n\t\tb: \"1F46C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pair\",\n\t\t\t\"couple\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"bromance\",\n\t\t\t\"friendship\",\n\t\t\t\"people\",\n\t\t\t\"human\"\n\t\t],\n\t\tk: [\n\t\t\t20,\n\t\t\t31\n\t\t]\n\t},\n\ttwo_women_holding_hands: {\n\t\ta: \"Two Women Holding Hands\",\n\t\tb: \"1F46D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pair\",\n\t\t\t\"friendship\",\n\t\t\t\"couple\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"female\",\n\t\t\t\"people\",\n\t\t\t\"human\"\n\t\t],\n\t\tk: [\n\t\t\t20,\n\t\t\t32\n\t\t]\n\t},\n\tcouplekiss: {\n\t\tobsoleted_by: \"1F469-200D-2764-FE0F-200D-1F48B-200D-1F468\",\n\t\ta: \"Kiss\",\n\t\tb: \"1F48F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t24,\n\t\t\t41\n\t\t]\n\t},\n\t\"woman-kiss-man\": {\n\t\tobsoletes: \"1F48F\",\n\t\ta: \"Woman Kiss Man\",\n\t\tb: \"1F469-200D-2764-FE0F-200D-1F48B-200D-1F468\",\n\t\tc: \"1F469-200D-2764-200D-1F48B-200D-1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t21\n\t\t]\n\t},\n\t\"man-kiss-man\": {\n\t\ta: \"Man Kiss Man\",\n\t\tb: \"1F468-200D-2764-FE0F-200D-1F48B-200D-1F468\",\n\t\tc: \"1F468-200D-2764-200D-1F48B-200D-1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t18,\n\t\t\t10\n\t\t]\n\t},\n\t\"woman-kiss-woman\": {\n\t\ta: \"Woman Kiss Woman\",\n\t\tb: \"1F469-200D-2764-FE0F-200D-1F48B-200D-1F469\",\n\t\tc: \"1F469-200D-2764-200D-1F48B-200D-1F469\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t20,\n\t\t\t22\n\t\t]\n\t},\n\tcouple_with_heart: {\n\t\tobsoleted_by: \"1F469-200D-2764-FE0F-200D-1F468\",\n\t\ta: \"Couple with Heart\",\n\t\tb: \"1F491\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t24,\n\t\t\t43\n\t\t]\n\t},\n\t\"woman-heart-man\": {\n\t\tobsoletes: \"1F491\",\n\t\ta: \"Woman Heart Man\",\n\t\tb: \"1F469-200D-2764-FE0F-200D-1F468\",\n\t\tc: \"1F469-200D-2764-200D-1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t19\n\t\t]\n\t},\n\t\"man-heart-man\": {\n\t\ta: \"Man Heart Man\",\n\t\tb: \"1F468-200D-2764-FE0F-200D-1F468\",\n\t\tc: \"1F468-200D-2764-200D-1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t18,\n\t\t\t9\n\t\t]\n\t},\n\t\"woman-heart-woman\": {\n\t\ta: \"Woman Heart Woman\",\n\t\tb: \"1F469-200D-2764-FE0F-200D-1F469\",\n\t\tc: \"1F469-200D-2764-200D-1F469\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t20,\n\t\t\t20\n\t\t]\n\t},\n\tfamily: {\n\t\tobsoleted_by: \"1F468-200D-1F469-200D-1F466\",\n\t\ta: \"Family\",\n\t\tb: \"1F46A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t20,\n\t\t\t29\n\t\t],\n\t\tn: [\n\t\t\t\"man-woman-boy\"\n\t\t]\n\t},\n\t\"man-woman-boy\": {\n\t\tobsoletes: \"1F46A\",\n\t\ta: \"Man Woman Boy\",\n\t\tb: \"1F468-200D-1F469-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t2\n\t\t],\n\t\tn: [\n\t\t\t\"family\"\n\t\t]\n\t},\n\t\"man-woman-girl\": {\n\t\ta: \"Man Woman Girl\",\n\t\tb: \"1F468-200D-1F469-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t4\n\t\t]\n\t},\n\t\"man-woman-girl-boy\": {\n\t\ta: \"Man Woman Girl Boy\",\n\t\tb: \"1F468-200D-1F469-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t5\n\t\t]\n\t},\n\t\"man-woman-boy-boy\": {\n\t\ta: \"Man Woman Boy Boy\",\n\t\tb: \"1F468-200D-1F469-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t3\n\t\t]\n\t},\n\t\"man-woman-girl-girl\": {\n\t\ta: \"Man Woman Girl Girl\",\n\t\tb: \"1F468-200D-1F469-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t6\n\t\t]\n\t},\n\t\"man-man-boy\": {\n\t\ta: \"Man Man Boy\",\n\t\tb: \"1F468-200D-1F468-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t16,\n\t\t\t49\n\t\t]\n\t},\n\t\"man-man-girl\": {\n\t\ta: \"Man Man Girl\",\n\t\tb: \"1F468-200D-1F468-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t16,\n\t\t\t51\n\t\t]\n\t},\n\t\"man-man-girl-boy\": {\n\t\ta: \"Man Man Girl Boy\",\n\t\tb: \"1F468-200D-1F468-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t0\n\t\t]\n\t},\n\t\"man-man-boy-boy\": {\n\t\ta: \"Man Man Boy Boy\",\n\t\tb: \"1F468-200D-1F468-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t16,\n\t\t\t50\n\t\t]\n\t},\n\t\"man-man-girl-girl\": {\n\t\ta: \"Man Man Girl Girl\",\n\t\tb: \"1F468-200D-1F468-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t1\n\t\t]\n\t},\n\t\"woman-woman-boy\": {\n\t\ta: \"Woman Woman Boy\",\n\t\tb: \"1F469-200D-1F469-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t12\n\t\t]\n\t},\n\t\"woman-woman-girl\": {\n\t\ta: \"Woman Woman Girl\",\n\t\tb: \"1F469-200D-1F469-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t14\n\t\t]\n\t},\n\t\"woman-woman-girl-boy\": {\n\t\ta: \"Woman Woman Girl Boy\",\n\t\tb: \"1F469-200D-1F469-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t15\n\t\t]\n\t},\n\t\"woman-woman-boy-boy\": {\n\t\ta: \"Woman Woman Boy Boy\",\n\t\tb: \"1F469-200D-1F469-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t13\n\t\t]\n\t},\n\t\"woman-woman-girl-girl\": {\n\t\ta: \"Woman Woman Girl Girl\",\n\t\tb: \"1F469-200D-1F469-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t16\n\t\t]\n\t},\n\t\"man-boy\": {\n\t\ta: \"Man Boy\",\n\t\tb: \"1F468-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t45\n\t\t]\n\t},\n\t\"man-boy-boy\": {\n\t\ta: \"Man Boy Boy\",\n\t\tb: \"1F468-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t44\n\t\t]\n\t},\n\t\"man-girl\": {\n\t\ta: \"Man Girl\",\n\t\tb: \"1F468-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t48\n\t\t]\n\t},\n\t\"man-girl-boy\": {\n\t\ta: \"Man Girl Boy\",\n\t\tb: \"1F468-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t46\n\t\t]\n\t},\n\t\"man-girl-girl\": {\n\t\ta: \"Man Girl Girl\",\n\t\tb: \"1F468-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t47\n\t\t]\n\t},\n\t\"woman-boy\": {\n\t\ta: \"Woman Boy\",\n\t\tb: \"1F469-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t8\n\t\t]\n\t},\n\t\"woman-boy-boy\": {\n\t\ta: \"Woman Boy Boy\",\n\t\tb: \"1F469-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t7\n\t\t]\n\t},\n\t\"woman-girl\": {\n\t\ta: \"Woman Girl\",\n\t\tb: \"1F469-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t11\n\t\t]\n\t},\n\t\"woman-girl-boy\": {\n\t\ta: \"Woman Girl Boy\",\n\t\tb: \"1F469-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t9\n\t\t]\n\t},\n\t\"woman-girl-girl\": {\n\t\ta: \"Woman Girl Girl\",\n\t\tb: \"1F469-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t10\n\t\t]\n\t},\n\tselfie: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F933-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F933-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F933-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F933-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F933-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Selfie\",\n\t\tb: \"1F933\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"camera\",\n\t\t\t\"phone\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t22\n\t\t],\n\t\to: 9\n\t},\n\tmuscle: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F4AA-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3fb.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F4AA-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3fc.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F4AA-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3fd.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F4AA-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3fe.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F4AA-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3ff.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Flexed Biceps\",\n\t\tb: \"1F4AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arm\",\n\t\t\t\"flex\",\n\t\t\t\"hand\",\n\t\t\t\"summer\",\n\t\t\t\"strong\",\n\t\t\t\"biceps\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t16\n\t\t]\n\t},\n\tpoint_left: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F448-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F448-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F448-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F448-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F448-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Left Pointing Backhand Index\",\n\t\tb: \"1F448\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"direction\",\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"left\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t19\n\t\t]\n\t},\n\tpoint_right: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F449-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F449-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F449-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F449-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F449-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Right Pointing Backhand Index\",\n\t\tb: \"1F449\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"direction\",\n\t\t\t\"right\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t25\n\t\t]\n\t},\n\tpoint_up: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"261D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3fb.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"261D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3fc.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"261D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3fd.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"261D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3fe.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"261D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3ff.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Up Pointing Index\",\n\t\tb: \"261D-FE0F\",\n\t\tc: \"261D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hand\",\n\t\t\t\"fingers\",\n\t\t\t\"direction\",\n\t\t\t\"up\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t26\n\t\t],\n\t\to: 1\n\t},\n\tpoint_up_2: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F446-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F446-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F446-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F446-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F446-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Up Pointing Backhand Index\",\n\t\tb: \"1F446\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"direction\",\n\t\t\t\"up\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t7\n\t\t]\n\t},\n\tmiddle_finger: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F595-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F595-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F595-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F595-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F595-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Reversed Hand with Middle Finger Extended\",\n\t\tb: \"1F595\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t38\n\t\t],\n\t\tn: [\n\t\t\t\"reversed_hand_with_middle_finger_extended\"\n\t\t],\n\t\to: 7\n\t},\n\tpoint_down: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F447-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F447-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F447-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F447-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F447-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Down Pointing Backhand Index\",\n\t\tb: \"1F447\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"direction\",\n\t\t\t\"down\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t13\n\t\t]\n\t},\n\tv: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"270C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"270C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"270C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"270C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"270C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Victory Hand\",\n\t\tb: \"270C-FE0F\",\n\t\tc: \"270C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"ohyeah\",\n\t\t\t\"hand\",\n\t\t\t\"peace\",\n\t\t\t\"victory\",\n\t\t\t\"two\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t30\n\t\t],\n\t\to: 1\n\t},\n\tcrossed_fingers: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3fb.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Hand with Index and Middle Fingers Crossed\",\n\t\tb: \"1F91E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"good\",\n\t\t\t\"lucky\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t11\n\t\t],\n\t\tn: [\n\t\t\t\"hand_with_index_and_middle_fingers_crossed\"\n\t\t],\n\t\to: 9\n\t},\n\t\"spock-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F596-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F596-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F596-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F596-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F596-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Hand with Part Between Middle and Ring Fingers\",\n\t\tb: \"1F596\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\tthe_horns: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F918-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3fb.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F918-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3fc.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F918-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3fd.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F918-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3fe.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F918-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3ff.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Sign of the Horns\",\n\t\tb: \"1F918\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t32\n\t\t],\n\t\tn: [\n\t\t\t\"sign_of_the_horns\"\n\t\t],\n\t\to: 8\n\t},\n\tcall_me_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F919-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3fb.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F919-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3fc.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F919-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3fd.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F919-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3fe.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F919-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3ff.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Call Me Hand\",\n\t\tb: \"1F919\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"hands\",\n\t\t\t\"gesture\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t38\n\t\t],\n\t\to: 9\n\t},\n\traised_hand_with_fingers_splayed: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F590-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F590-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F590-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F590-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F590-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Hand with Fingers Splayed\",\n\t\tb: \"1F590-FE0F\",\n\t\tc: \"1F590\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"hand\",\n\t\t\t\"fingers\",\n\t\t\t\"palm\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t32\n\t\t],\n\t\to: 7\n\t},\n\thand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"270B-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"270B-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"270B-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"270B-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"270B-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Hand\",\n\t\tb: \"270B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t49,\n\t\t\t24\n\t\t],\n\t\tn: [\n\t\t\t\"raised_hand\"\n\t\t]\n\t},\n\tok_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Ok Hand Sign\",\n\t\tb: \"1F44C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"limbs\",\n\t\t\t\"perfect\",\n\t\t\t\"ok\",\n\t\t\t\"okay\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t43\n\t\t]\n\t},\n\t\"+1\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Thumbs Up Sign\",\n\t\tb: \"1F44D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"thumbsup\",\n\t\t\t\"yes\",\n\t\t\t\"awesome\",\n\t\t\t\"good\",\n\t\t\t\"agree\",\n\t\t\t\"accept\",\n\t\t\t\"cool\",\n\t\t\t\"hand\",\n\t\t\t\"like\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t49\n\t\t],\n\t\tn: [\n\t\t\t\"thumbsup\"\n\t\t]\n\t},\n\t\"-1\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Thumbs Down Sign\",\n\t\tb: \"1F44E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"thumbsdown\",\n\t\t\t\"no\",\n\t\t\t\"dislike\",\n\t\t\t\"hand\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t3\n\t\t],\n\t\tn: [\n\t\t\t\"thumbsdown\"\n\t\t]\n\t},\n\tfist: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"270A-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"270A-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"270A-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"270A-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"270A-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Fist\",\n\t\tb: \"270A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"grasp\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t18\n\t\t]\n\t},\n\tfacepunch: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44A-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44A-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44A-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44A-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44A-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Fisted Hand Sign\",\n\t\tb: \"1F44A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"angry\",\n\t\t\t\"violence\",\n\t\t\t\"fist\",\n\t\t\t\"hit\",\n\t\t\t\"attack\",\n\t\t\t\"hand\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t31\n\t\t],\n\t\tn: [\n\t\t\t\"punch\"\n\t\t]\n\t},\n\t\"left-facing_fist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91B-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3fb.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91B-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91B-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91B-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91B-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Left-Facing Fist\",\n\t\tb: \"1F91B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t50\n\t\t],\n\t\to: 9\n\t},\n\t\"right-facing_fist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3fb.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Right-Facing Fist\",\n\t\tb: \"1F91C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t4\n\t\t],\n\t\to: 9\n\t},\n\traised_back_of_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91A-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3fb.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91A-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3fc.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91A-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3fd.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91A-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3fe.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91A-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3ff.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Back of Hand\",\n\t\tb: \"1F91A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"raised\",\n\t\t\t\"backhand\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t44\n\t\t],\n\t\to: 9\n\t},\n\twave: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44B-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44B-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44B-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44B-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44B-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Waving Hand Sign\",\n\t\tb: \"1F44B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hands\",\n\t\t\t\"gesture\",\n\t\t\t\"goodbye\",\n\t\t\t\"solong\",\n\t\t\t\"farewell\",\n\t\t\t\"hello\",\n\t\t\t\"hi\",\n\t\t\t\"palm\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t37\n\t\t]\n\t},\n\ti_love_you_hand_sign: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91F-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3fb.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91F-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91F-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91F-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91F-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"I Love You Hand Sign\",\n\t\tb: \"1F91F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t17\n\t\t],\n\t\to: 10\n\t},\n\twriting_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"270D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"270D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"270D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"270D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"270D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Writing Hand\",\n\t\tb: \"270D-FE0F\",\n\t\tc: \"270D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"lower_left_ballpoint_pen\",\n\t\t\t\"stationery\",\n\t\t\t\"write\",\n\t\t\t\"compose\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t36\n\t\t],\n\t\to: 1\n\t},\n\tclap: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44F-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44F-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44F-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44F-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44F-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Clapping Hands Sign\",\n\t\tb: \"1F44F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hands\",\n\t\t\t\"praise\",\n\t\t\t\"applause\",\n\t\t\t\"congrats\",\n\t\t\t\"yay\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t9\n\t\t]\n\t},\n\topen_hands: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F450-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F450-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F450-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F450-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F450-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Open Hands Sign\",\n\t\tb: \"1F450\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"butterfly\",\n\t\t\t\"hands\",\n\t\t\t\"open\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t15\n\t\t]\n\t},\n\traised_hands: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3fb.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3fc.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3fd.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3fe.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3ff.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Person Raising Both Hands in Celebration\",\n\t\tb: \"1F64C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"gesture\",\n\t\t\t\"hooray\",\n\t\t\t\"yea\",\n\t\t\t\"celebration\",\n\t\t\t\"hands\"\n\t\t],\n\t\tk: [\n\t\t\t33,\n\t\t\t12\n\t\t]\n\t},\n\tpalms_up_together: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F932-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F932-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F932-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F932-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F932-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Palms Up Together\",\n\t\tb: \"1F932\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t16\n\t\t],\n\t\to: 10\n\t},\n\tpray: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64F-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3fb.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64F-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3fc.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64F-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3fd.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64F-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3fe.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64F-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3ff.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Person with Folded Hands\",\n\t\tb: \"1F64F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"please\",\n\t\t\t\"hope\",\n\t\t\t\"wish\",\n\t\t\t\"namaste\",\n\t\t\t\"highfive\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t2\n\t\t]\n\t},\n\thandshake: {\n\t\ta: \"Handshake\",\n\t\tb: \"1F91D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"agreement\",\n\t\t\t\"shake\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t10\n\t\t],\n\t\to: 9\n\t},\n\tnail_care: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F485-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3fb.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F485-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3fc.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F485-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3fd.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F485-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3fe.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F485-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3ff.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Nail Polish\",\n\t\tb: \"1F485\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beauty\",\n\t\t\t\"manicure\",\n\t\t\t\"finger\",\n\t\t\t\"fashion\",\n\t\t\t\"nail\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t44\n\t\t]\n\t},\n\tear: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F442-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3fb.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F442-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3fc.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F442-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3fd.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F442-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3fe.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F442-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3ff.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Ear\",\n\t\tb: \"1F442\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"hear\",\n\t\t\t\"sound\",\n\t\t\t\"listen\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t45\n\t\t]\n\t},\n\tnose: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F443-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F443-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F443-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F443-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F443-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Nose\",\n\t\tb: \"1F443\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"smell\",\n\t\t\t\"sniff\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t51\n\t\t]\n\t},\n\tfootprints: {\n\t\ta: \"Footprints\",\n\t\tb: \"1F463\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"feet\",\n\t\t\t\"tracking\",\n\t\t\t\"walking\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t39\n\t\t]\n\t},\n\teyes: {\n\t\ta: \"Eyes\",\n\t\tb: \"1F440\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"look\",\n\t\t\t\"watch\",\n\t\t\t\"stalk\",\n\t\t\t\"peek\",\n\t\t\t\"see\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t42\n\t\t]\n\t},\n\teye: {\n\t\ta: \"Eye\",\n\t\tb: \"1F441-FE0F\",\n\t\tc: \"1F441\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"look\",\n\t\t\t\"see\",\n\t\t\t\"watch\",\n\t\t\t\"stare\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\t\"eye-in-speech-bubble\": {\n\t\ta: \"Eye in Speech Bubble\",\n\t\tb: \"1F441-FE0F-200D-1F5E8-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: false,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t13,\n\t\t\t43\n\t\t],\n\t\to: 7\n\t},\n\tbrain: {\n\t\ta: \"Brain\",\n\t\tb: \"1F9E0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t22\n\t\t],\n\t\to: 10\n\t},\n\ttongue: {\n\t\ta: \"Tongue\",\n\t\tb: \"1F445\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mouth\",\n\t\t\t\"playful\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t6\n\t\t]\n\t},\n\tlips: {\n\t\ta: \"Mouth\",\n\t\tb: \"1F444\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mouth\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t5\n\t\t]\n\t},\n\tkiss: {\n\t\ta: \"Kiss Mark\",\n\t\tb: \"1F48B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"lips\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t37\n\t\t]\n\t},\n\tcupid: {\n\t\ta: \"Heart with Arrow\",\n\t\tb: \"1F498\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"heart\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t50\n\t\t]\n\t},\n\theart: {\n\t\ta: \"Heavy Black Heart\",\n\t\tb: \"2764-FE0F\",\n\t\tc: \"2764\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t8\n\t\t],\n\t\tl: [\n\t\t\t\"<3\"\n\t\t],\n\t\tm: \"<3\",\n\t\to: 1\n\t},\n\theartbeat: {\n\t\ta: \"Beating Heart\",\n\t\tb: \"1F493\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"pink\",\n\t\t\t\"heart\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t45\n\t\t]\n\t},\n\tbroken_heart: {\n\t\ta: \"Broken Heart\",\n\t\tb: \"1F494\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sad\",\n\t\t\t\"sorry\",\n\t\t\t\"break\",\n\t\t\t\"heart\",\n\t\t\t\"heartbreak\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t46\n\t\t],\n\t\tl: [\n\t\t\t\"</3\"\n\t\t],\n\t\tm: \"</3\"\n\t},\n\ttwo_hearts: {\n\t\ta: \"Two Hearts\",\n\t\tb: \"1F495\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"heart\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t47\n\t\t]\n\t},\n\tsparkling_heart: {\n\t\ta: \"Sparkling Heart\",\n\t\tb: \"1F496\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t48\n\t\t]\n\t},\n\theartpulse: {\n\t\ta: \"Growing Heart\",\n\t\tb: \"1F497\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"like\",\n\t\t\t\"love\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"pink\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t49\n\t\t]\n\t},\n\tblue_heart: {\n\t\ta: \"Blue Heart\",\n\t\tb: \"1F499\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t51\n\t\t],\n\t\tm: \"<3\"\n\t},\n\tgreen_heart: {\n\t\ta: \"Green Heart\",\n\t\tb: \"1F49A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t0\n\t\t],\n\t\tm: \"<3\"\n\t},\n\tyellow_heart: {\n\t\ta: \"Yellow Heart\",\n\t\tb: \"1F49B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t1\n\t\t],\n\t\tm: \"<3\"\n\t},\n\torange_heart: {\n\t\ta: \"Orange Heart\",\n\t\tb: \"1F9E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t23\n\t\t],\n\t\to: 10\n\t},\n\tpurple_heart: {\n\t\ta: \"Purple Heart\",\n\t\tb: \"1F49C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t2\n\t\t],\n\t\tm: \"<3\"\n\t},\n\tblack_heart: {\n\t\ta: \"Black Heart\",\n\t\tb: \"1F5A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"evil\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t50\n\t\t],\n\t\to: 9\n\t},\n\tgift_heart: {\n\t\ta: \"Heart with Ribbon\",\n\t\tb: \"1F49D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t3\n\t\t]\n\t},\n\trevolving_hearts: {\n\t\ta: \"Revolving Hearts\",\n\t\tb: \"1F49E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t4\n\t\t]\n\t},\n\theart_decoration: {\n\t\ta: \"Heart Decoration\",\n\t\tb: \"1F49F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"love\",\n\t\t\t\"like\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t5\n\t\t]\n\t},\n\theavy_heart_exclamation_mark_ornament: {\n\t\ta: \"Heavy Heart Exclamation Mark Ornament\",\n\t\tb: \"2763-FE0F\",\n\t\tc: \"2763\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t50,\n\t\t\t7\n\t\t],\n\t\to: 1\n\t},\n\tlove_letter: {\n\t\ta: \"Love Letter\",\n\t\tb: \"1F48C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"envelope\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t38\n\t\t]\n\t},\n\tzzz: {\n\t\ta: \"Sleeping Symbol\",\n\t\tb: \"1F4A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sleepy\",\n\t\t\t\"tired\",\n\t\t\t\"dream\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t10\n\t\t]\n\t},\n\tanger: {\n\t\ta: \"Anger Symbol\",\n\t\tb: \"1F4A2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"angry\",\n\t\t\t\"mad\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t8\n\t\t]\n\t},\n\tbomb: {\n\t\ta: \"Bomb\",\n\t\tb: \"1F4A3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"boom\",\n\t\t\t\"explode\",\n\t\t\t\"explosion\",\n\t\t\t\"terrorism\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t9\n\t\t]\n\t},\n\tboom: {\n\t\ta: \"Collision Symbol\",\n\t\tb: \"1F4A5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bomb\",\n\t\t\t\"explode\",\n\t\t\t\"explosion\",\n\t\t\t\"collision\",\n\t\t\t\"blown\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t11\n\t\t],\n\t\tn: [\n\t\t\t\"collision\"\n\t\t]\n\t},\n\tsweat_drops: {\n\t\ta: \"Splashing Sweat Symbol\",\n\t\tb: \"1F4A6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"water\",\n\t\t\t\"drip\",\n\t\t\t\"oops\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t12\n\t\t]\n\t},\n\tdash: {\n\t\ta: \"Dash Symbol\",\n\t\tb: \"1F4A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wind\",\n\t\t\t\"air\",\n\t\t\t\"fast\",\n\t\t\t\"shoo\",\n\t\t\t\"fart\",\n\t\t\t\"smoke\",\n\t\t\t\"puff\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t14\n\t\t]\n\t},\n\tdizzy: {\n\t\ta: \"Dizzy Symbol\",\n\t\tb: \"1F4AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"star\",\n\t\t\t\"sparkle\",\n\t\t\t\"shoot\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t22\n\t\t]\n\t},\n\tspeech_balloon: {\n\t\ta: \"Speech Balloon\",\n\t\tb: \"1F4AC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bubble\",\n\t\t\t\"words\",\n\t\t\t\"message\",\n\t\t\t\"talk\",\n\t\t\t\"chatting\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t23\n\t\t]\n\t},\n\tleft_speech_bubble: {\n\t\ta: \"Left Speech Bubble\",\n\t\tb: \"1F5E8-FE0F\",\n\t\tc: \"1F5E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"message\",\n\t\t\t\"talk\",\n\t\t\t\"chatting\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t15\n\t\t],\n\t\to: 7\n\t},\n\tright_anger_bubble: {\n\t\ta: \"Right Anger Bubble\",\n\t\tb: \"1F5EF-FE0F\",\n\t\tc: \"1F5EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"caption\",\n\t\t\t\"speech\",\n\t\t\t\"thinking\",\n\t\t\t\"mad\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t16\n\t\t],\n\t\to: 7\n\t},\n\tthought_balloon: {\n\t\ta: \"Thought Balloon\",\n\t\tb: \"1F4AD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bubble\",\n\t\t\t\"cloud\",\n\t\t\t\"speech\",\n\t\t\t\"thinking\",\n\t\t\t\"dream\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t24\n\t\t]\n\t},\n\thole: {\n\t\ta: \"Hole\",\n\t\tb: \"1F573-FE0F\",\n\t\tc: \"1F573\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"embarrassing\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\teyeglasses: {\n\t\ta: \"Eyeglasses\",\n\t\tb: \"1F453\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"accessories\",\n\t\t\t\"eyesight\",\n\t\t\t\"nerdy\",\n\t\t\t\"dork\",\n\t\t\t\"geek\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t23\n\t\t]\n\t},\n\tdark_sunglasses: {\n\t\ta: \"Dark Sunglasses\",\n\t\tb: \"1F576-FE0F\",\n\t\tc: \"1F576\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"cool\",\n\t\t\t\"accessories\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t17\n\t\t],\n\t\to: 7\n\t},\n\tnecktie: {\n\t\ta: \"Necktie\",\n\t\tb: \"1F454\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shirt\",\n\t\t\t\"suitup\",\n\t\t\t\"formal\",\n\t\t\t\"fashion\",\n\t\t\t\"cloth\",\n\t\t\t\"business\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t24\n\t\t]\n\t},\n\tshirt: {\n\t\ta: \"T-Shirt\",\n\t\tb: \"1F455\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t15,\n\t\t\t25\n\t\t],\n\t\tn: [\n\t\t\t\"tshirt\"\n\t\t]\n\t},\n\tjeans: {\n\t\ta: \"Jeans\",\n\t\tb: \"1F456\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t26\n\t\t]\n\t},\n\tscarf: {\n\t\ta: \"Scarf\",\n\t\tb: \"1F9E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t25\n\t\t],\n\t\to: 10\n\t},\n\tgloves: {\n\t\ta: \"Gloves\",\n\t\tb: \"1F9E4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t26\n\t\t],\n\t\to: 10\n\t},\n\tcoat: {\n\t\ta: \"Coat\",\n\t\tb: \"1F9E5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t27\n\t\t],\n\t\to: 10\n\t},\n\tsocks: {\n\t\ta: \"Socks\",\n\t\tb: \"1F9E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t28\n\t\t],\n\t\to: 10\n\t},\n\tdress: {\n\t\ta: \"Dress\",\n\t\tb: \"1F457\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"clothes\",\n\t\t\t\"fashion\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t27\n\t\t]\n\t},\n\tkimono: {\n\t\ta: \"Kimono\",\n\t\tb: \"1F458\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dress\",\n\t\t\t\"fashion\",\n\t\t\t\"women\",\n\t\t\t\"female\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t28\n\t\t]\n\t},\n\tbikini: {\n\t\ta: \"Bikini\",\n\t\tb: \"1F459\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"swimming\",\n\t\t\t\"female\",\n\t\t\t\"woman\",\n\t\t\t\"girl\",\n\t\t\t\"fashion\",\n\t\t\t\"beach\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t29\n\t\t]\n\t},\n\twomans_clothes: {\n\t\ta: \"Womans Clothes\",\n\t\tb: \"1F45A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"shopping_bags\",\n\t\t\t\"female\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t30\n\t\t]\n\t},\n\tpurse: {\n\t\ta: \"Purse\",\n\t\tb: \"1F45B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"accessories\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t31\n\t\t]\n\t},\n\thandbag: {\n\t\ta: \"Handbag\",\n\t\tb: \"1F45C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"accessory\",\n\t\t\t\"accessories\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t32\n\t\t]\n\t},\n\tpouch: {\n\t\ta: \"Pouch\",\n\t\tb: \"1F45D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bag\",\n\t\t\t\"accessories\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t33\n\t\t]\n\t},\n\tshopping_bags: {\n\t\ta: \"Shopping Bags\",\n\t\tb: \"1F6CD-FE0F\",\n\t\tc: \"1F6CD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t2\n\t\t],\n\t\to: 7\n\t},\n\tschool_satchel: {\n\t\ta: \"School Satchel\",\n\t\tb: \"1F392\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"student\",\n\t\t\t\"education\",\n\t\t\t\"bag\",\n\t\t\t\"backpack\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t37\n\t\t]\n\t},\n\tmans_shoe: {\n\t\ta: \"Mans Shoe\",\n\t\tb: \"1F45E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"male\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t34\n\t\t],\n\t\tn: [\n\t\t\t\"shoe\"\n\t\t]\n\t},\n\tathletic_shoe: {\n\t\ta: \"Athletic Shoe\",\n\t\tb: \"1F45F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shoes\",\n\t\t\t\"sports\",\n\t\t\t\"sneakers\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t35\n\t\t]\n\t},\n\thigh_heel: {\n\t\ta: \"High-Heeled Shoe\",\n\t\tb: \"1F460\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"shoes\",\n\t\t\t\"female\",\n\t\t\t\"pumps\",\n\t\t\t\"stiletto\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t36\n\t\t]\n\t},\n\tsandal: {\n\t\ta: \"Womans Sandal\",\n\t\tb: \"1F461\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shoes\",\n\t\t\t\"fashion\",\n\t\t\t\"flip flops\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t37\n\t\t]\n\t},\n\tboot: {\n\t\ta: \"Womans Boots\",\n\t\tb: \"1F462\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shoes\",\n\t\t\t\"fashion\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t38\n\t\t]\n\t},\n\tcrown: {\n\t\ta: \"Crown\",\n\t\tb: \"1F451\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"king\",\n\t\t\t\"kod\",\n\t\t\t\"leader\",\n\t\t\t\"royalty\",\n\t\t\t\"lord\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t21\n\t\t]\n\t},\n\twomans_hat: {\n\t\ta: \"Womans Hat\",\n\t\tb: \"1F452\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"accessories\",\n\t\t\t\"female\",\n\t\t\t\"lady\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t22\n\t\t]\n\t},\n\ttophat: {\n\t\ta: \"Top Hat\",\n\t\tb: \"1F3A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"magic\",\n\t\t\t\"gentleman\",\n\t\t\t\"classy\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t3\n\t\t]\n\t},\n\tmortar_board: {\n\t\ta: \"Graduation Cap\",\n\t\tb: \"1F393\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"school\",\n\t\t\t\"college\",\n\t\t\t\"degree\",\n\t\t\t\"university\",\n\t\t\t\"graduation\",\n\t\t\t\"cap\",\n\t\t\t\"hat\",\n\t\t\t\"legal\",\n\t\t\t\"learn\",\n\t\t\t\"education\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t38\n\t\t]\n\t},\n\tbilled_cap: {\n\t\ta: \"Billed Cap\",\n\t\tb: \"1F9E2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t24\n\t\t],\n\t\to: 10\n\t},\n\thelmet_with_white_cross: {\n\t\ta: \"Helmet with White Cross\",\n\t\tb: \"26D1-FE0F\",\n\t\tc: \"26D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t33\n\t\t],\n\t\to: 5\n\t},\n\tprayer_beads: {\n\t\ta: \"Prayer Beads\",\n\t\tb: \"1F4FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"dhikr\",\n\t\t\t\"religious\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t1\n\t\t],\n\t\to: 8\n\t},\n\tlipstick: {\n\t\ta: \"Lipstick\",\n\t\tb: \"1F484\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"female\",\n\t\t\t\"girl\",\n\t\t\t\"fashion\",\n\t\t\t\"woman\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t43\n\t\t]\n\t},\n\tring: {\n\t\ta: \"Ring\",\n\t\tb: \"1F48D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wedding\",\n\t\t\t\"propose\",\n\t\t\t\"marriage\",\n\t\t\t\"valentines\",\n\t\t\t\"diamond\",\n\t\t\t\"fashion\",\n\t\t\t\"jewelry\",\n\t\t\t\"gem\",\n\t\t\t\"engagement\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t39\n\t\t]\n\t},\n\tgem: {\n\t\ta: \"Gem Stone\",\n\t\tb: \"1F48E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue\",\n\t\t\t\"ruby\",\n\t\t\t\"diamond\",\n\t\t\t\"jewelry\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t40\n\t\t]\n\t}\n};\nvar aliases = {\n\tsatisfied: \"laughing\",\n\tgrinning_face_with_star_eyes: \"star-struck\",\n\tface_with_one_eyebrow_raised: \"face_with_raised_eyebrow\",\n\ttelephone: \"phone\",\n\tcooking: \"fried_egg\",\n\tpaw_prints: \"feet\",\n\t\"flag-cn\": \"cn\",\n\tlantern: \"izakaya_lantern\",\n\tshocked_face_with_exploding_head: \"exploding_head\",\n\topen_book: \"book\",\n\t\"flag-de\": \"de\",\n\tgrinning_face_with_one_large_and_one_small_eye: \"zany_face\",\n\tserious_face_with_symbols_covering_mouth: \"face_with_symbols_on_mouth\",\n\tflipper: \"dolphin\",\n\tface_with_open_mouth_vomiting: \"face_vomiting\",\n\t\"flag-es\": \"es\",\n\tface_with_finger_covering_closed_lips: \"shushing_face\",\n\tsmiling_face_with_smiling_eyes_and_hand_covering_mouth: \"face_with_hand_over_mouth\",\n\t\"flag-fr\": \"fr\",\n\thoneybee: \"bee\",\n\tred_car: \"car\",\n\tenvelope: \"email\",\n\tuk: \"gb\",\n\t\"flag-gb\": \"gb\",\n\tpoop: \"hankey\",\n\tshit: \"hankey\",\n\tstaff_of_aesculapius: \"medical_symbol\",\n\tknife: \"hocho\",\n\tsailboat: \"boat\",\n\tpencil: \"memo\",\n\t\"flag-it\": \"it\",\n\t\"flag-jp\": \"jp\",\n\theavy_exclamation_mark: \"exclamation\",\n\t\"flag-kr\": \"kr\",\n\twaxing_gibbous_moon: \"moon\",\n\tmother_christmas: \"mrs_claus\",\n\tsun_small_cloud: \"mostly_sunny\",\n\tsun_behind_cloud: \"barely_sunny\",\n\tsun_behind_rain_cloud: \"partly_sunny_rain\",\n\tlightning_cloud: \"lightning\",\n\ttornado_cloud: \"tornado\",\n\t\"flag-ru\": \"ru\",\n\trunning: \"runner\",\n\t\"flag-us\": \"us\",\n\tman_and_woman_holding_hands: \"couple\",\n\t\"man-woman-boy\": \"family\",\n\tfamily: \"man-woman-boy\",\n\treversed_hand_with_middle_finger_extended: \"middle_finger\",\n\thand_with_index_and_middle_fingers_crossed: \"crossed_fingers\",\n\tsign_of_the_horns: \"the_horns\",\n\traised_hand: \"hand\",\n\tthumbsup: \"+1\",\n\tthumbsdown: \"-1\",\n\tpunch: \"facepunch\",\n\tcollision: \"boom\",\n\ttshirt: \"shirt\",\n\tshoe: \"mans_shoe\"\n};\nvar data = {\n\tcompressed: compressed,\n\tcategories: categories,\n\temojis: emojis,\n\taliases: aliases\n};\n\nfunction _classCallCheck (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError('Cannot call a class as a function');\n  }\n}\n\nvar _Object = Object;\n\nvar _createClass = (function createClass() {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if ('value' in descriptor) descriptor.writable = true;\n      _Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n})();\n\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n    hasDontEnumBug = !{ toString: null }.propertyIsEnumerable('toString'),\n    dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n    dontEnumsLength = dontEnums.length;\n\nfunction _Object$keys (obj) {\n  if (typeof obj !== 'function' && (typeof obj !== 'object' || obj === null)) {\n    throw new TypeError('Object.keys called on non-object');\n  }\n\n  var result = [],\n      prop,\n      i;\n\n  for (prop in obj) {\n    if (hasOwnProperty.call(obj, prop)) {\n      result.push(prop);\n    }\n  }\n\n  if (hasDontEnumBug) {\n    for (i = 0; i < dontEnumsLength; i++) {\n      if (hasOwnProperty.call(obj, dontEnums[i])) {\n        result.push(dontEnums[i]);\n      }\n    }\n  }\n  return result;\n}\n\nvar mapping = {\n  name: 'a',\n  unified: 'b',\n  non_qualified: 'c',\n  has_img_apple: 'd',\n  has_img_google: 'e',\n  has_img_twitter: 'f',\n  has_img_emojione: 'g',\n  has_img_facebook: 'h',\n  has_img_messenger: 'i',\n  keywords: 'j',\n  sheet: 'k',\n  emoticons: 'l',\n  text: 'm',\n  short_names: 'n',\n  added_in: 'o'\n};\n\nvar buildSearch = function buildSearch(emoji) {\n  var search = [];\n\n  var addToSearch = function addToSearch(strings, split) {\n    if (!strings) {\n      return;\n    }\n(Array.isArray(strings) ? strings : [strings]).forEach(function (string) {\n(split ? string.split(/[-|_|\\s]+/) : [string]).forEach(function (s) {\n        s = s.toLowerCase();\n\n        if (search.indexOf(s) == -1) {\n          search.push(s);\n        }\n      });\n    });\n  };\n\n  addToSearch(emoji.short_names, true);\n  addToSearch(emoji.name, true);\n  addToSearch(emoji.keywords, false);\n  addToSearch(emoji.emoticons, false);\n\n  return search.join(',');\n};\n\nvar uncompress = function uncompress(data) {\n  data.compressed = false;\n\n  for (var id in data.emojis) {\n    var emoji = data.emojis[id];\n\n    for (var key in mapping) {\n      emoji[key] = emoji[mapping[key]];\n      delete emoji[mapping[key]];\n    }\n\n    if (!emoji.short_names) emoji.short_names = [];\n    emoji.short_names.unshift(id);\n\n    emoji.sheet_x = emoji.sheet[0];\n    emoji.sheet_y = emoji.sheet[1];\n    delete emoji.sheet;\n\n    if (!emoji.text) emoji.text = '';\n\n    if (!emoji.added_in) emoji.added_in = 6;\n    emoji.added_in = emoji.added_in.toFixed(1);\n\n    emoji.search = buildSearch(emoji);\n  }\n};\n\nvar _String = String;\n\nvar stringFromCodePoint = _String.fromCodePoint || function stringFromCodePoint() {\n  var MAX_SIZE = 0x4000;\n  var codeUnits = [];\n  var highSurrogate;\n  var lowSurrogate;\n  var index = -1;\n  var length = arguments.length;\n  if (!length) {\n    return '';\n  }\n  var result = '';\n  while (++index < length) {\n    var codePoint = Number(arguments[index]);\n    if (!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n    codePoint < 0 || // not a valid Unicode code point\n    codePoint > 0x10ffff || // not a valid Unicode code point\n    Math.floor(codePoint) != codePoint // not an integer\n    ) {\n        throw RangeError('Invalid code point: ' + codePoint);\n      }\n    if (codePoint <= 0xffff) {\n      // BMP code point\n      codeUnits.push(codePoint);\n    } else {\n      // Astral code point; split in surrogate halves\n      // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n      codePoint -= 0x10000;\n      highSurrogate = (codePoint >> 10) + 0xd800;\n      lowSurrogate = codePoint % 0x400 + 0xdc00;\n      codeUnits.push(highSurrogate, lowSurrogate);\n    }\n    if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n      result += String.fromCharCode.apply(null, codeUnits);\n      codeUnits.length = 0;\n    }\n  }\n  return result;\n};\n\nvar _JSON = JSON;\n\nvar COLONS_REGEX = /^(?:\\:([^\\:]+)\\:)(?:\\:skin-tone-(\\d)\\:)?$/;\nvar SKINS = ['1F3FA', '1F3FB', '1F3FC', '1F3FD', '1F3FE', '1F3FF'];\n\nfunction unifiedToNative(unified) {\n  var unicodes = unified.split('-'),\n      codePoints = unicodes.map(function (u) {\n    return '0x' + u;\n  });\n\n  return stringFromCodePoint.apply(null, codePoints);\n}\n\nfunction sanitize(emoji) {\n  var name = emoji.name;\n  var short_names = emoji.short_names;\n  var skin_tone = emoji.skin_tone;\n  var skin_variations = emoji.skin_variations;\n  var emoticons = emoji.emoticons;\n  var unified = emoji.unified;\n  var custom = emoji.custom;\n  var imageUrl = emoji.imageUrl;\n  var id = emoji.id || short_names[0];\n  var colons = ':' + id + ':';\n\n  if (custom) {\n    return {\n      id: id,\n      name: name,\n      short_names: short_names,\n      colons: colons,\n      emoticons: emoticons,\n      custom: custom,\n      imageUrl: imageUrl\n    };\n  }\n\n  if (skin_tone) {\n    colons += ':skin-tone-' + skin_tone + ':';\n  }\n\n  return {\n    id: id,\n    name: name,\n    short_names: short_names,\n    colons: colons,\n    emoticons: emoticons,\n    unified: unified.toLowerCase(),\n    skin: skin_tone || (skin_variations ? 1 : null),\n    native: unifiedToNative(unified)\n  };\n}\n\nfunction getSanitizedData() {\n  return sanitize(getData.apply(undefined, arguments));\n}\n\nfunction getData(emoji, skin, set, data) {\n  var emojiData = {};\n\n  if (typeof emoji == 'string') {\n    var matches = emoji.match(COLONS_REGEX);\n\n    if (matches) {\n      emoji = matches[1];\n\n      if (matches[2]) {\n        skin = parseInt(matches[2], 10);\n      }\n    }\n\n    if (data.aliases.hasOwnProperty(emoji)) {\n      emoji = data.aliases[emoji];\n    }\n\n    if (data.emojis.hasOwnProperty(emoji)) {\n      emojiData = data.emojis[emoji];\n    } else {\n      return null;\n    }\n  } else if (emoji.id) {\n    if (data.aliases.hasOwnProperty(emoji.id)) {\n      emoji.id = data.aliases[emoji.id];\n    }\n\n    if (data.emojis.hasOwnProperty(emoji.id)) {\n      emojiData = data.emojis[emoji.id];\n      skin || (skin = emoji.skin);\n    }\n  }\n\n  if (!_Object$keys(emojiData).length) {\n    emojiData = emoji;\n    emojiData.custom = true;\n\n    if (!emojiData.search) {\n      emojiData.search = buildSearch(emoji);\n    }\n  }\n\n  emojiData.emoticons || (emojiData.emoticons = []);\n  emojiData.variations || (emojiData.variations = []);\n\n  if (emojiData.skin_variations && skin > 1) {\n    emojiData = JSON.parse(_JSON.stringify(emojiData));\n\n    var skinKey = SKINS[skin - 1],\n        variationData = emojiData.skin_variations[skinKey];\n\n    if (!variationData.variations && emojiData.variations) {\n      delete emojiData.variations;\n    }\n\n    if (set && (variationData['has_img_' + set] == undefined || variationData['has_img_' + set]) || !set) {\n      emojiData.skin_tone = skin;\n\n      for (var k in variationData) {\n        var v = variationData[k];\n        emojiData[k] = v;\n      }\n    }\n  }\n\n  if (emojiData.variations && emojiData.variations.length) {\n    emojiData = JSON.parse(_JSON.stringify(emojiData));\n    emojiData.unified = emojiData.variations.shift();\n  }\n\n  return emojiData;\n}\n\nfunction uniq(arr) {\n  return arr.reduce(function (acc, item) {\n    if (acc.indexOf(item) === -1) {\n      acc.push(item);\n    }\n    return acc;\n  }, []);\n}\n\nfunction intersect(a, b) {\n  var uniqA = uniq(a);\n  var uniqB = uniq(b);\n\n  return uniqA.filter(function (item) {\n    return uniqB.indexOf(item) >= 0;\n  });\n}\n\nfunction deepMerge(a, b) {\n  var o = {};\n\n  for (var key in a) {\n    var originalValue = a[key],\n        value = originalValue;\n\n    if (b.hasOwnProperty(key)) {\n      value = b[key];\n    }\n\n    if (typeof value === 'object') {\n      value = deepMerge(originalValue, value);\n    }\n\n    o[key] = value;\n  }\n\n  return o;\n}\n\n// https://github.com/sonicdoe/measure-scrollbar\nfunction measureScrollbar() {\n  if (typeof document == 'undefined') return 0;\n  var div = document.createElement('div');\n\n  div.style.width = '100px';\n  div.style.height = '100px';\n  div.style.overflow = 'scroll';\n  div.style.position = 'absolute';\n  div.style.top = '-9999px';\n\n  document.body.appendChild(div);\n  var scrollbarWidth = div.offsetWidth - div.clientWidth;\n  document.body.removeChild(div);\n\n  return scrollbarWidth;\n}\n\n// Use requestIdleCallback() if available, else fall back to setTimeout().\n// Throttle so as not to run too frequently.\nfunction throttleIdleTask(func) {\n  var doIdleTask = typeof requestIdleCallback === 'function' ? requestIdleCallback : setTimeout;\n\n  var running = false;\n\n  return function throttled() {\n    if (running) {\n      return;\n    }\n    running = true;\n    doIdleTask(function () {\n      running = false;\n      func();\n    });\n  };\n}\n\nvar NAMESPACE = 'emoji-mart';\n\nvar _JSON$1 = JSON;\n\nvar isLocalStorageSupported = typeof window !== 'undefined' && 'localStorage' in window;\n\nvar getter = void 0;\nvar setter = void 0;\n\nfunction setHandlers(handlers) {\n  handlers || (handlers = {});\n\n  getter = handlers.getter;\n  setter = handlers.setter;\n}\n\nfunction setNamespace(namespace) {\n  NAMESPACE = namespace;\n}\n\nfunction update(state) {\n  for (var key in state) {\n    var value = state[key];\n    set(key, value);\n  }\n}\n\nfunction set(key, value) {\n  if (setter) {\n    setter(key, value);\n  } else {\n    if (!isLocalStorageSupported) return;\n    try {\n      window.localStorage[NAMESPACE + '.' + key] = _JSON$1.stringify(value);\n    } catch (e) {}\n  }\n}\n\nfunction get(key) {\n  if (getter) {\n    return getter(key);\n  } else {\n    if (!isLocalStorageSupported) return;\n    try {\n      var value = window.localStorage[NAMESPACE + '.' + key];\n    } catch (e) {\n      return;\n    }\n\n    if (value) {\n      return JSON.parse(value);\n    }\n  }\n}\n\nvar store = { update: update, set: set, get: get, setNamespace: setNamespace, setHandlers: setHandlers };\n\nvar NimbleEmojiIndex = function () {\n  function NimbleEmojiIndex(data, set) {\n    _classCallCheck(this, NimbleEmojiIndex);\n\n    if (data.compressed) {\n      uncompress(data);\n    }\n\n    this.data = data || {};\n    this.set = set || null;\n    this.originalPool = {};\n    this.index = {};\n    this.emojis = {};\n    this.emoticons = {};\n    this.customEmojisList = [];\n\n    this.buildIndex();\n  }\n\n  _createClass(NimbleEmojiIndex, [{\n    key: 'buildIndex',\n    value: function buildIndex() {\n      var _this = this;\n\n      var _loop = function _loop(emoji) {\n        var emojiData = _this.data.emojis[emoji];\n        var short_names = emojiData.short_names;\n        var emoticons = emojiData.emoticons;\n        var skin_variations = emojiData.skin_variations;\n        var id = short_names[0];\n\n        if (emoticons) {\n          emoticons.forEach(function (emoticon) {\n            if (_this.emoticons[emoticon]) {\n              return;\n            }\n\n            _this.emoticons[emoticon] = id;\n          });\n        }\n\n        // If skin variations include them\n        if (skin_variations) {\n          _this.emojis[id] = {};\n          for (var skinTone = 1; skinTone <= 6; skinTone++) {\n            _this.emojis[id][skinTone] = getSanitizedData({ id: id, skin: skinTone }, skinTone, _this.set, _this.data);\n          }\n        } else {\n          _this.emojis[id] = getSanitizedData(id, null, _this.set, _this.data);\n        }\n\n        _this.originalPool[id] = emojiData;\n      };\n\n      for (var emoji in this.data.emojis) {\n        _loop(emoji);\n      }\n    }\n  }, {\n    key: 'clearCustomEmojis',\n    value: function clearCustomEmojis(pool) {\n      var _this2 = this;\n\n      this.customEmojisList.forEach(function (emoji) {\n        var emojiId = emoji.id || emoji.short_names[0];\n\n        delete pool[emojiId];\n        delete _this2.emojis[emojiId];\n      });\n    }\n  }, {\n    key: 'addCustomToPool',\n    value: function addCustomToPool(custom, pool) {\n      var _this3 = this;\n\n      if (this.customEmojisList.length) this.clearCustomEmojis(pool);\n\n      custom.forEach(function (emoji) {\n        var emojiId = emoji.id || emoji.short_names[0];\n\n        if (emojiId && !pool[emojiId]) {\n          pool[emojiId] = getData(emoji, null, null, _this3.data);\n          _this3.emojis[emojiId] = getSanitizedData(emoji, null, null, _this3.data);\n        }\n      });\n\n      this.customEmojisList = custom;\n      this.index = {};\n    }\n  }, {\n    key: 'search',\n    value: function search(value) {\n      var _this4 = this;\n\n      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      var emojisToShowFilter = _ref.emojisToShowFilter;\n      var maxResults = _ref.maxResults;\n      var include = _ref.include;\n      var exclude = _ref.exclude;\n      var _ref$custom = _ref.custom;\n      var custom = _ref$custom === undefined ? [] : _ref$custom;\n\n      if (this.customEmojisList != custom) this.addCustomToPool(custom, this.originalPool);\n\n      var skinTone = store.get('skin') || 1;\n\n      maxResults || (maxResults = 75);\n      include || (include = []);\n      exclude || (exclude = []);\n\n      var results = null,\n          pool = this.originalPool;\n\n      if (value.length) {\n        if (value == '-' || value == '-1') {\n          return [this.emojis['-1'][skinTone]];\n        }\n\n        var values = value.toLowerCase().split(/[\\s|,|\\-|_]+/),\n            allResults = [];\n\n        if (values.length > 2) {\n          values = [values[0], values[1]];\n        }\n\n        if (include.length || exclude.length) {\n          pool = {};\n\n          this.data.categories.forEach(function (category) {\n            var isIncluded = include && include.length ? include.indexOf(category.id) > -1 : true;\n            var isExcluded = exclude && exclude.length ? exclude.indexOf(category.id) > -1 : false;\n            if (!isIncluded || isExcluded) {\n              return;\n            }\n\n            category.emojis.forEach(function (emojiId) {\n              return pool[emojiId] = _this4.data.emojis[emojiId];\n            });\n          });\n\n          if (custom.length) {\n            var customIsIncluded = include && include.length ? include.indexOf('custom') > -1 : true;\n            var customIsExcluded = exclude && exclude.length ? exclude.indexOf('custom') > -1 : false;\n            if (customIsIncluded && !customIsExcluded) {\n              this.addCustomToPool(custom, pool);\n            }\n          }\n        }\n\n        allResults = values.map(function (value) {\n          var aPool = pool,\n              aIndex = _this4.index,\n              length = 0;\n\n          for (var charIndex = 0; charIndex < value.length; charIndex++) {\n            var char = value[charIndex];\n            length++;\n\n            aIndex[char] || (aIndex[char] = {});\n            aIndex = aIndex[char];\n\n            if (!aIndex.results) {\n              (function () {\n                var scores = {};\n\n                aIndex.results = [];\n                aIndex.pool = {};\n\n                for (var _id in aPool) {\n                  var emoji = aPool[_id];\n                  var search = emoji.search;\n                  var sub = value.substr(0, length);\n                  var subIndex = search.indexOf(sub);\n\n                  if (subIndex != -1) {\n                    var score = subIndex + 1;\n                    if (sub == _id) score = 0;\n\n                    if (_this4.emojis[_id] && _this4.emojis[_id][skinTone]) {\n                      aIndex.results.push(_this4.emojis[_id][skinTone]);\n                    } else {\n                      aIndex.results.push(_this4.emojis[_id]);\n                    }\n                    aIndex.pool[_id] = emoji;\n\n                    scores[_id] = score;\n                  }\n                }\n\n                aIndex.results.sort(function (a, b) {\n                  var aScore = scores[a.id],\n                      bScore = scores[b.id];\n\n                  return aScore - bScore;\n                });\n              })();\n            }\n\n            aPool = aIndex.pool;\n          }\n\n          return aIndex.results;\n        }).filter(function (a) {\n          return a;\n        });\n\n        if (allResults.length > 1) {\n          results = intersect.apply(null, allResults);\n        } else if (allResults.length) {\n          results = allResults[0];\n        } else {\n          results = [];\n        }\n      }\n\n      if (results) {\n        if (emojisToShowFilter) {\n          results = results.filter(function (result) {\n            return emojisToShowFilter(pool[result.id]);\n          });\n        }\n\n        if (results && results.length > maxResults) {\n          results = results.slice(0, maxResults);\n        }\n      }\n\n      return results;\n    }\n  }]);\n\n  return NimbleEmojiIndex;\n}();\n\nvar emojiIndex = new NimbleEmojiIndex(data);\n\nvar DEFAULTS = ['+1', 'grinning', 'kissing_heart', 'heart_eyes', 'laughing', 'stuck_out_tongue_winking_eye', 'sweat_smile', 'joy', 'scream', 'disappointed', 'unamused', 'weary', 'sob', 'sunglasses', 'heart', 'poop'];\n\nvar frequently = void 0,\n    initialized = void 0;\nvar defaults = {};\n\nfunction init() {\n  initialized = true;\n  frequently = store.get('frequently');\n}\n\nfunction add(emoji) {\n  if (!initialized) init();\n  var id = emoji.id;\n\n\n  frequently || (frequently = defaults);\n  frequently[id] || (frequently[id] = 0);\n  frequently[id] += 1;\n\n  store.set('last', id);\n  store.set('frequently', frequently);\n}\n\nfunction get$1(perLine) {\n  if (!initialized) init();\n  if (!frequently) {\n    defaults = {};\n\n    var result = [];\n\n    for (var i = 0; i < perLine; i++) {\n      defaults[DEFAULTS[i]] = perLine - i;\n      result.push(DEFAULTS[i]);\n    }\n\n    return result;\n  }\n\n  var quantity = perLine * 4;\n  var frequentlyKeys = [];\n\n  for (var key in frequently) {\n    if (frequently.hasOwnProperty(key)) {\n      frequentlyKeys.push(key);\n    }\n  }\n\n  var sorted = frequentlyKeys.sort(function (a, b) {\n    return frequently[a] - frequently[b];\n  }).reverse();\n  var sliced = sorted.slice(0, quantity);\n\n  var last = store.get('last');\n\n  if (last && sliced.indexOf(last) == -1) {\n    sliced.pop();\n    sliced.push(last);\n  }\n\n  return sliced;\n}\n\nvar frequently$1 = { add: add, get: get$1 };\n\nvar _Object$1 = Object;\n\nvar _extends = _Object$1.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _Object$2 = Object;\n\nvar _Object$getPrototypeOf = _Object$2.getPrototypeOf || function (O) {\n  O = Object(O);\n\n  if (typeof O.constructor === 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  }\n\n  return O instanceof Object ? Object.prototype : null;\n};\n\nfunction possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === 'object' || typeof call === 'function') ? call : self;\n}\n\nvar _Object$3 = Object;\n\nfunction inherits(subClass, superClass) {\n  if (typeof superClass !== 'function' && superClass !== null) {\n    throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n  }\n\n  subClass.prototype = _Object$3.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) {\n    _Object$3.setPrototypeOf ? _Object$3.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n}\n\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\n// MIT license\n\nvar isWindowAvailable = typeof window !== 'undefined';\n\nisWindowAvailable && function () {\n  var lastTime = 0;\n  var vendors = ['ms', 'moz', 'webkit', 'o'];\n\n  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n  }\n\n  if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n    var currTime = new Date().getTime();\n    var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n    var id = window.setTimeout(function () {\n      callback(currTime + timeToCall);\n    }, timeToCall);\n\n    lastTime = currTime + timeToCall;\n    return id;\n  };\n\n  if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n    clearTimeout(id);\n  };\n}();\n\nvar categories$1 = {\n  activity: function activity() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12 0C5.373 0 0 5.372 0 12c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.628-5.372-12-12-12m9.949 11H17.05c.224-2.527 1.232-4.773 1.968-6.113A9.966 9.966 0 0 1 21.949 11M13 11V2.051a9.945 9.945 0 0 1 4.432 1.564c-.858 1.491-2.156 4.22-2.392 7.385H13zm-2 0H8.961c-.238-3.165-1.536-5.894-2.393-7.385A9.95 9.95 0 0 1 11 2.051V11zm0 2v8.949a9.937 9.937 0 0 1-4.432-1.564c.857-1.492 2.155-4.221 2.393-7.385H11zm4.04 0c.236 3.164 1.534 5.893 2.392 7.385A9.92 9.92 0 0 1 13 21.949V13h2.04zM4.982 4.887C5.718 6.227 6.726 8.473 6.951 11h-4.9a9.977 9.977 0 0 1 2.931-6.113M2.051 13h4.9c-.226 2.527-1.233 4.771-1.969 6.113A9.972 9.972 0 0 1 2.051 13m16.967 6.113c-.735-1.342-1.744-3.586-1.968-6.113h4.899a9.961 9.961 0 0 1-2.931 6.113\" })\n    );\n  },\n\n  custom: function custom() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        \"g\",\n        { transform: \"translate(2.000000, 1.000000)\" },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"rect\", { id: \"Rectangle\", x: \"8\", y: \"0\", width: \"3\", height: \"21\", rx: \"1.5\" }),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"rect\", {\n          id: \"Rectangle\",\n          transform: \"translate(9.843, 10.549) rotate(60) translate(-9.843, -10.549) \",\n          x: \"8.343\",\n          y: \"0.049\",\n          width: \"3\",\n          height: \"21\",\n          rx: \"1.5\"\n        }),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"rect\", {\n          id: \"Rectangle\",\n          transform: \"translate(9.843, 10.549) rotate(-60) translate(-9.843, -10.549) \",\n          x: \"8.343\",\n          y: \"0.049\",\n          width: \"3\",\n          height: \"21\",\n          rx: \"1.5\"\n        })\n      )\n    );\n  },\n\n  flags: function flags() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M0 0l6.084 24H8L1.916 0zM21 5h-4l-1-4H4l3 12h3l1 4h13L21 5zM6.563 3h7.875l2 8H8.563l-2-8zm8.832 10l-2.856 1.904L12.063 13h3.332zM19 13l-1.5-6h1.938l2 8H16l3-2z\" })\n    );\n  },\n\n  foods: function foods() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M17 4.978c-1.838 0-2.876.396-3.68.934.513-1.172 1.768-2.934 4.68-2.934a1 1 0 0 0 0-2c-2.921 0-4.629 1.365-5.547 2.512-.064.078-.119.162-.18.244C11.73 1.838 10.798.023 9.207.023 8.579.022 7.85.306 7 .978 5.027 2.54 5.329 3.902 6.492 4.999 3.609 5.222 0 7.352 0 12.969c0 4.582 4.961 11.009 9 11.009 1.975 0 2.371-.486 3-1 .629.514 1.025 1 3 1 4.039 0 9-6.418 9-11 0-5.953-4.055-8-7-8M8.242 2.546c.641-.508.943-.523.965-.523.426.169.975 1.405 1.357 3.055-1.527-.629-2.741-1.352-2.98-1.846.059-.112.241-.356.658-.686M15 21.978c-1.08 0-1.21-.109-1.559-.402l-.176-.146c-.367-.302-.816-.452-1.266-.452s-.898.15-1.266.452l-.176.146c-.347.292-.477.402-1.557.402-2.813 0-7-5.389-7-9.009 0-5.823 4.488-5.991 5-5.991 1.939 0 2.484.471 3.387 1.251l.323.276a1.995 1.995 0 0 0 2.58 0l.323-.276c.902-.78 1.447-1.251 3.387-1.251.512 0 5 .168 5 6 0 3.617-4.187 9-7 9\" })\n    );\n  },\n\n  nature: function nature() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M15.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 15.5 8M8.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 8.5 8\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M18.933 0h-.027c-.97 0-2.138.787-3.018 1.497-1.274-.374-2.612-.51-3.887-.51-1.285 0-2.616.133-3.874.517C7.245.79 6.069 0 5.093 0h-.027C3.352 0 .07 2.67.002 7.026c-.039 2.479.276 4.238 1.04 5.013.254.258.882.677 1.295.882.191 3.177.922 5.238 2.536 6.38.897.637 2.187.949 3.2 1.102C8.04 20.6 8 20.795 8 21c0 1.773 2.35 3 4 3 1.648 0 4-1.227 4-3 0-.201-.038-.393-.072-.586 2.573-.385 5.435-1.877 5.925-7.587.396-.22.887-.568 1.104-.788.763-.774 1.079-2.534 1.04-5.013C23.929 2.67 20.646 0 18.933 0M3.223 9.135c-.237.281-.837 1.155-.884 1.238-.15-.41-.368-1.349-.337-3.291.051-3.281 2.478-4.972 3.091-5.031.256.015.731.27 1.265.646-1.11 1.171-2.275 2.915-2.352 5.125-.133.546-.398.858-.783 1.313M12 22c-.901 0-1.954-.693-2-1 0-.654.475-1.236 1-1.602V20a1 1 0 1 0 2 0v-.602c.524.365 1 .947 1 1.602-.046.307-1.099 1-2 1m3-3.48v.02a4.752 4.752 0 0 0-1.262-1.02c1.092-.516 2.239-1.334 2.239-2.217 0-1.842-1.781-2.195-3.977-2.195-2.196 0-3.978.354-3.978 2.195 0 .883 1.148 1.701 2.238 2.217A4.8 4.8 0 0 0 9 18.539v-.025c-1-.076-2.182-.281-2.973-.842-1.301-.92-1.838-3.045-1.853-6.478l.023-.041c.496-.826 1.49-1.45 1.804-3.102 0-2.047 1.357-3.631 2.362-4.522C9.37 3.178 10.555 3 11.948 3c1.447 0 2.685.192 3.733.57 1 .9 2.316 2.465 2.316 4.48.313 1.651 1.307 2.275 1.803 3.102.035.058.068.117.102.178-.059 5.967-1.949 7.01-4.902 7.19m6.628-8.202c-.037-.065-.074-.13-.113-.195a7.587 7.587 0 0 0-.739-.987c-.385-.455-.648-.768-.782-1.313-.076-2.209-1.241-3.954-2.353-5.124.531-.376 1.004-.63 1.261-.647.636.071 3.044 1.764 3.096 5.031.027 1.81-.347 3.218-.37 3.235\" })\n    );\n  },\n\n  objects: function objects() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12 0a9 9 0 0 0-5 16.482V21s2.035 3 5 3 5-3 5-3v-4.518A9 9 0 0 0 12 0zm0 2c3.86 0 7 3.141 7 7s-3.14 7-7 7-7-3.141-7-7 3.14-7 7-7zM9 17.477c.94.332 1.946.523 3 .523s2.06-.19 3-.523v.834c-.91.436-1.925.689-3 .689a6.924 6.924 0 0 1-3-.69v-.833zm.236 3.07A8.854 8.854 0 0 0 12 21c.965 0 1.888-.167 2.758-.451C14.155 21.173 13.153 22 12 22c-1.102 0-2.117-.789-2.764-1.453z\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M14.745 12.449h-.004c-.852-.024-1.188-.858-1.577-1.824-.421-1.061-.703-1.561-1.182-1.566h-.009c-.481 0-.783.497-1.235 1.537-.436.982-.801 1.811-1.636 1.791l-.276-.043c-.565-.171-.853-.691-1.284-1.794-.125-.313-.202-.632-.27-.913-.051-.213-.127-.53-.195-.634C7.067 9.004 7.039 9 6.99 9A1 1 0 0 1 7 7h.01c1.662.017 2.015 1.373 2.198 2.134.486-.981 1.304-2.058 2.797-2.075 1.531.018 2.28 1.153 2.731 2.141l.002-.008C14.944 8.424 15.327 7 16.979 7h.032A1 1 0 1 1 17 9h-.011c-.149.076-.256.474-.319.709a6.484 6.484 0 0 1-.311.951c-.429.973-.79 1.789-1.614 1.789\" })\n    );\n  },\n\n  people: function people() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M8 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 8 7M16 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 16 7M15.232 15c-.693 1.195-1.87 2-3.349 2-1.477 0-2.655-.805-3.347-2H15m3-2H6a6 6 0 1 0 12 0\" })\n    );\n  },\n\n  places: function places() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M6.5 12C5.122 12 4 13.121 4 14.5S5.122 17 6.5 17 9 15.879 9 14.5 7.878 12 6.5 12m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5M17.5 12c-1.378 0-2.5 1.121-2.5 2.5s1.122 2.5 2.5 2.5 2.5-1.121 2.5-2.5-1.122-2.5-2.5-2.5m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M22.482 9.494l-1.039-.346L21.4 9h.6c.552 0 1-.439 1-.992 0-.006-.003-.008-.003-.008H23c0-1-.889-2-1.984-2h-.642l-.731-1.717C19.262 3.012 18.091 2 16.764 2H7.236C5.909 2 4.738 3.012 4.357 4.283L3.626 6h-.642C1.889 6 1 7 1 8h.003S1 8.002 1 8.008C1 8.561 1.448 9 2 9h.6l-.043.148-1.039.346a2.001 2.001 0 0 0-1.359 2.097l.751 7.508a1 1 0 0 0 .994.901H3v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h6v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h1.096a.999.999 0 0 0 .994-.901l.751-7.508a2.001 2.001 0 0 0-1.359-2.097M6.273 4.857C6.402 4.43 6.788 4 7.236 4h9.527c.448 0 .834.43.963.857L19.313 9H4.688l1.585-4.143zM7 21H5v-1h2v1zm12 0h-2v-1h2v1zm2.189-3H2.811l-.662-6.607L3 11h18l.852.393L21.189 18z\" })\n    );\n  },\n\n  recent: function recent() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M13 4h-2l-.001 7H9v2h2v2h2v-2h4v-2h-4z\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" })\n    );\n  },\n\n  symbols: function symbols() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M0 0h11v2H0zM4 11h3V6h4V4H0v2h4zM15.5 17c1.381 0 2.5-1.116 2.5-2.493s-1.119-2.493-2.5-2.493S13 13.13 13 14.507 14.119 17 15.5 17m0-2.986c.276 0 .5.222.5.493 0 .272-.224.493-.5.493s-.5-.221-.5-.493.224-.493.5-.493M21.5 19.014c-1.381 0-2.5 1.116-2.5 2.493S20.119 24 21.5 24s2.5-1.116 2.5-2.493-1.119-2.493-2.5-2.493m0 2.986a.497.497 0 0 1-.5-.493c0-.271.224-.493.5-.493s.5.222.5.493a.497.497 0 0 1-.5.493M22 13l-9 9 1.513 1.5 8.99-9.009zM17 11c2.209 0 4-1.119 4-2.5V2s.985-.161 1.498.949C23.01 4.055 23 6 23 6s1-1.119 1-3.135C24-.02 21 0 21 0h-2v6.347A5.853 5.853 0 0 0 17 6c-2.209 0-4 1.119-4 2.5s1.791 2.5 4 2.5M10.297 20.482l-1.475-1.585a47.54 47.54 0 0 1-1.442 1.129c-.307-.288-.989-1.016-2.045-2.183.902-.836 1.479-1.466 1.729-1.892s.376-.871.376-1.336c0-.592-.273-1.178-.818-1.759-.546-.581-1.329-.871-2.349-.871-1.008 0-1.79.293-2.344.879-.556.587-.832 1.181-.832 1.784 0 .813.419 1.748 1.256 2.805-.847.614-1.444 1.208-1.794 1.784a3.465 3.465 0 0 0-.523 1.833c0 .857.308 1.56.924 2.107.616.549 1.423.823 2.42.823 1.173 0 2.444-.379 3.813-1.137L8.235 24h2.819l-2.09-2.383 1.333-1.135zm-6.736-6.389a1.02 1.02 0 0 1 .73-.286c.31 0 .559.085.747.254a.849.849 0 0 1 .283.659c0 .518-.419 1.112-1.257 1.784-.536-.651-.805-1.231-.805-1.742a.901.901 0 0 1 .302-.669M3.74 22c-.427 0-.778-.116-1.057-.349-.279-.232-.418-.487-.418-.766 0-.594.509-1.288 1.527-2.083.968 1.134 1.717 1.946 2.248 2.438-.921.507-1.686.76-2.3.76\" })\n    );\n  }\n};\n\nvar search$1 = {\n  search: function search() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        width: \"13\",\n        height: \"13\",\n        viewBox: \"0 0 20 20\",\n        opacity: \"0.5\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" })\n    );\n  },\n\n  delete: function _delete() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        width: \"13\",\n        height: \"13\",\n        viewBox: \"0 0 20 20\",\n        opacity: \"0.5\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M10 8.586L2.929 1.515 1.515 2.929 8.586 10l-7.071 7.071 1.414 1.414L10 11.414l7.071 7.071 1.414-1.414L11.414 10l7.071-7.071-1.414-1.414L10 8.586z\" })\n    );\n  }\n};\n\nvar icons = /*#__PURE__*/Object.freeze({\n  categories: categories$1,\n  search: search$1\n});\n\nvar EmojiPropTypes = {\n  data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n  onOver: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  fallback: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  backgroundImageFn: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  native: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  forceSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  tooltip: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  skin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([1, 2, 3, 4, 5, 6]),\n  sheetSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([16, 20, 32, 64]),\n  sheetColumns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  sheetRows: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  set: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['apple', 'google', 'twitter', 'emojione', 'messenger', 'facebook']),\n  size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n  emoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object]).isRequired\n};\n\nvar PickerPropTypes = {\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onSkinChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  perLine: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  emojiSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  i18n: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object,\n  style: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object,\n  title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  emoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  color: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  set: EmojiPropTypes.set,\n  skin: EmojiPropTypes.skin,\n  native: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  backgroundImageFn: EmojiPropTypes.backgroundImageFn,\n  sheetSize: EmojiPropTypes.sheetSize,\n  emojisToShowFilter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  showPreview: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  showSkinTones: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  emojiTooltip: EmojiPropTypes.tooltip,\n  include: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n  exclude: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n  recent: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  custom: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n    name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n    short_names: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string).isRequired,\n    emoticons: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n    keywords: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n    imageUrl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n    spriteUrl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n    sheet_x: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n    sheet_y: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n    size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n    sheetColumns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n    sheetRows: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number\n  })),\n  skinEmoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  notFound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  notFoundEmoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  icons: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nvar Anchors = function (_React$PureComponent) {\n  inherits(Anchors, _React$PureComponent);\n\n  function Anchors(props) {\n    _classCallCheck(this, Anchors);\n\n    var _this = possibleConstructorReturn(this, (Anchors.__proto__ || _Object$getPrototypeOf(Anchors)).call(this, props));\n\n    var defaultCategory = props.categories.filter(function (category) {\n      return category.first;\n    })[0];\n\n    _this.state = {\n      selected: defaultCategory.name\n    };\n\n    _this.handleClick = _this.handleClick.bind(_this);\n    return _this;\n  }\n\n  _createClass(Anchors, [{\n    key: 'handleClick',\n    value: function handleClick(e) {\n      var index = e.currentTarget.getAttribute('data-index');\n      var _props = this.props;\n      var categories = _props.categories;\n      var onAnchorClick = _props.onAnchorClick;\n\n\n      onAnchorClick(categories[index], index);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var _props2 = this.props;\n      var categories = _props2.categories;\n      var color = _props2.color;\n      var i18n = _props2.i18n;\n      var icons = _props2.icons;\n      var selected = this.state.selected;\n\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'nav',\n        { className: 'emoji-mart-anchors', 'aria-label': i18n.categorieslabel },\n        categories.map(function (category, i) {\n          var id = category.id;\n          var name = category.name;\n          var anchor = category.anchor;\n          var isSelected = name == selected;\n\n          if (anchor === false) {\n            return null;\n          }\n\n          return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'button',\n            {\n              key: id,\n              'aria-label': i18n.categories[id],\n              title: i18n.categories[id],\n              'data-index': i,\n              type: 'button',\n              onClick: _this2.handleClick,\n              className: 'emoji-mart-anchor ' + (isSelected ? 'emoji-mart-anchor-selected' : ''),\n              style: { color: isSelected ? color : null }\n            },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              { className: 'emoji-mart-anchor-icon' },\n              icons.categories[id]()\n            ),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('span', {\n              className: 'emoji-mart-anchor-bar',\n              style: { backgroundColor: color }\n            })\n          );\n        })\n      );\n    }\n  }]);\n\n  return Anchors;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nAnchors.propTypes /* remove-proptypes */ = {\n  categories: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array,\n  onAnchorClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  icons: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nAnchors.defaultProps = {\n  categories: [],\n  onAnchorClick: function onAnchorClick() {},\n  icons: {}\n};\n\nvar EmojiDefaultProps = {\n  skin: 1,\n  set: 'apple',\n  sheetSize: 64,\n  sheetColumns: 52,\n  sheetRows: 52,\n  native: false,\n  forceSize: false,\n  tooltip: false,\n  backgroundImageFn: function backgroundImageFn(set, sheetSize) {\n    return 'https://unpkg.com/emoji-datasource-' + set + '@' + '4.0.4' + '/img/' + set + '/sheets-256/' + sheetSize + '.png';\n  }\n};\n\nvar PickerDefaultProps = {\n  onClick: function onClick() {},\n  onSelect: function onSelect() {},\n  onSkinChange: function onSkinChange() {},\n  emojiSize: 24,\n  perLine: 9,\n  i18n: {},\n  style: {},\n  title: 'Emoji Mart™',\n  emoji: 'department_store',\n  color: '#ae65c5',\n  set: EmojiDefaultProps.set,\n  skin: null,\n  defaultSkin: EmojiDefaultProps.skin,\n  native: EmojiDefaultProps.native,\n  sheetSize: EmojiDefaultProps.sheetSize,\n  backgroundImageFn: EmojiDefaultProps.backgroundImageFn,\n  emojisToShowFilter: null,\n  showPreview: true,\n  showSkinTones: true,\n  emojiTooltip: EmojiDefaultProps.tooltip,\n  autoFocus: false,\n  custom: [],\n  skinEmoji: '',\n  notFound: function notFound() {},\n  notFoundEmoji: 'sleuth_or_spy',\n  icons: {}\n};\n\nvar _getData = function _getData(props) {\n  var emoji = props.emoji;\n  var skin = props.skin;\n  var set = props.set;\n  var data = props.data;\n\n  return getData(emoji, skin, set, data);\n};\n\nvar _getPosition = function _getPosition(props) {\n  var _getData2 = _getData(props);\n\n  var sheet_x = _getData2.sheet_x;\n  var sheet_y = _getData2.sheet_y;\n  var multiplyX = 100 / (props.sheetColumns - 1);\n  var multiplyY = 100 / (props.sheetRows - 1);\n\n  return multiplyX * sheet_x + '% ' + multiplyY * sheet_y + '%';\n};\n\nvar _getSanitizedData = function _getSanitizedData(props) {\n  var emoji = props.emoji;\n  var skin = props.skin;\n  var set = props.set;\n  var data = props.data;\n\n  return getSanitizedData(emoji, skin, set, data);\n};\n\nvar _handleClick = function _handleClick(e, props) {\n  if (!props.onClick) {\n    return;\n  }\n  var onClick = props.onClick;\n  var emoji = _getSanitizedData(props);\n\n  onClick(emoji, e);\n};\n\nvar _handleOver = function _handleOver(e, props) {\n  if (!props.onOver) {\n    return;\n  }\n  var onOver = props.onOver;\n  var emoji = _getSanitizedData(props);\n\n  onOver(emoji, e);\n};\n\nvar _handleLeave = function _handleLeave(e, props) {\n  if (!props.onLeave) {\n    return;\n  }\n  var onLeave = props.onLeave;\n  var emoji = _getSanitizedData(props);\n\n  onLeave(emoji, e);\n};\n\nvar _isNumeric = function _isNumeric(value) {\n  return !isNaN(value - parseFloat(value));\n};\n\nvar _convertStyleToCSS = function _convertStyleToCSS(style) {\n  var div = document.createElement('div');\n\n  for (var key in style) {\n    var value = style[key];\n\n    if (_isNumeric(value)) {\n      value += 'px';\n    }\n\n    div.style[key] = value;\n  }\n\n  return div.getAttribute('style');\n};\n\nvar NimbleEmoji = function NimbleEmoji(props) {\n  if (props.data.compressed) {\n    uncompress(props.data);\n  }\n\n  for (var k in NimbleEmoji.defaultProps) {\n    if (props[k] == undefined && NimbleEmoji.defaultProps[k] != undefined) {\n      props[k] = NimbleEmoji.defaultProps[k];\n    }\n  }\n\n  var data = _getData(props);\n  if (!data) {\n    if (props.fallback) {\n      return props.fallback(null, props);\n    } else {\n      return null;\n    }\n  }\n\n  var unified = data.unified;\n  var custom = data.custom;\n  var short_names = data.short_names;\n  var imageUrl = data.imageUrl;\n  var style = {};\n  var children = props.children;\n  var className = 'emoji-mart-emoji';\n  var nativeEmoji = unified && unifiedToNative(unified);\n  // combine the emoji itself and all shortcodes into an accessible label\n  var label = [nativeEmoji].concat(short_names).filter(Boolean).join(', ');\n  var title = null;\n\n  if (!unified && !custom) {\n    if (props.fallback) {\n      return props.fallback(data, props);\n    } else {\n      return null;\n    }\n  }\n\n  if (props.tooltip) {\n    title = short_names[0];\n  }\n\n  if (props.native && unified) {\n    className += ' emoji-mart-emoji-native';\n    style = { fontSize: props.size };\n    children = nativeEmoji;\n\n    if (props.forceSize) {\n      style.display = 'inline-block';\n      style.width = props.size;\n      style.height = props.size;\n      style.wordBreak = 'keep-all';\n    }\n  } else if (custom) {\n    className += ' emoji-mart-emoji-custom';\n    style = {\n      width: props.size,\n      height: props.size,\n      display: 'inline-block'\n    };\n    if (data.spriteUrl) {\n      style = _extends({}, style, {\n        backgroundImage: 'url(' + data.spriteUrl + ')',\n        backgroundSize: 100 * props.sheetColumns + '% ' + 100 * props.sheetRows + '%',\n        backgroundPosition: _getPosition(props)\n      });\n    } else {\n      style = _extends({}, style, {\n        backgroundImage: 'url(' + imageUrl + ')',\n        backgroundSize: 'contain'\n      });\n    }\n  } else {\n    var setHasEmoji = data['has_img_' + props.set] == undefined || data['has_img_' + props.set];\n\n    if (!setHasEmoji) {\n      if (props.fallback) {\n        return props.fallback(data, props);\n      } else {\n        return null;\n      }\n    } else {\n      style = {\n        width: props.size,\n        height: props.size,\n        display: 'inline-block',\n        backgroundImage: 'url(' + props.backgroundImageFn(props.set, props.sheetSize) + ')',\n        backgroundSize: 100 * props.sheetColumns + '% ' + 100 * props.sheetRows + '%',\n        backgroundPosition: _getPosition(props)\n      };\n    }\n  }\n\n  var Tag = {\n    name: 'span',\n    props: {}\n  };\n\n  if (props.onClick) {\n    Tag.name = 'button';\n    Tag.props = {\n      type: 'button'\n    };\n  }\n\n  if (props.html) {\n    style = _convertStyleToCSS(style);\n    return '<' + Tag.name + ' style=\\'' + style + '\\' aria-label=\\'' + label + '\\' ' + (title ? 'title=\\'' + title + '\\'' : '') + ' class=\\'' + className + '\\'>' + (children || '') + '</' + Tag.name + '>';\n  } else {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      Tag.name,\n      _extends({\n        onClick: function onClick(e) {\n          return _handleClick(e, props);\n        },\n        onMouseEnter: function onMouseEnter(e) {\n          return _handleOver(e, props);\n        },\n        onMouseLeave: function onMouseLeave(e) {\n          return _handleLeave(e, props);\n        },\n        'aria-label': label,\n        title: title,\n        className: className\n      }, Tag.props),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'span',\n        { style: style },\n        children\n      )\n    );\n  }\n};\n\nNimbleEmoji.propTypes /* remove-proptypes */ = _extends({}, EmojiPropTypes, {\n  data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired\n});\nNimbleEmoji.defaultProps = EmojiDefaultProps;\n\nvar NotFound = function (_React$PureComponent) {\n  inherits(NotFound, _React$PureComponent);\n\n  function NotFound() {\n    _classCallCheck(this, NotFound);\n\n    return possibleConstructorReturn(this, (NotFound.__proto__ || _Object$getPrototypeOf(NotFound)).apply(this, arguments));\n  }\n\n  _createClass(NotFound, [{\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var data = _props.data;\n      var emojiProps = _props.emojiProps;\n      var i18n = _props.i18n;\n      var notFound = _props.notFound;\n      var notFoundEmoji = _props.notFoundEmoji;\n\n\n      var component = notFound && notFound() || react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'div',\n        { className: 'emoji-mart-no-results' },\n        NimbleEmoji(_extends({\n          data: data\n        }, emojiProps, {\n          size: 38,\n          emoji: notFoundEmoji,\n          onOver: null,\n          onLeave: null,\n          onClick: null\n        })),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-no-results-label' },\n          i18n.notfound\n        )\n      );\n\n      return component;\n    }\n  }]);\n\n  return NotFound;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nNotFound.propTypes /* remove-proptypes */ = {\n  notFound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n  emojiProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired\n};\n\nvar Category = function (_React$Component) {\n  inherits(Category, _React$Component);\n\n  function Category(props) {\n    _classCallCheck(this, Category);\n\n    var _this = possibleConstructorReturn(this, (Category.__proto__ || _Object$getPrototypeOf(Category)).call(this, props));\n\n    _this.data = props.data;\n    _this.setContainerRef = _this.setContainerRef.bind(_this);\n    _this.setLabelRef = _this.setLabelRef.bind(_this);\n    return _this;\n  }\n\n  _createClass(Category, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.margin = 0;\n      this.minMargin = 0;\n\n      this.memoizeSize();\n    }\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps, nextState) {\n      var _props = this.props;\n      var name = _props.name;\n      var perLine = _props.perLine;\n      var native = _props.native;\n      var hasStickyPosition = _props.hasStickyPosition;\n      var emojis = _props.emojis;\n      var emojiProps = _props.emojiProps;\n      var skin = emojiProps.skin;\n      var size = emojiProps.size;\n      var set = emojiProps.set;\n      var nextPerLine = nextProps.perLine;\n      var nextNative = nextProps.native;\n      var nextHasStickyPosition = nextProps.hasStickyPosition;\n      var nextEmojis = nextProps.emojis;\n      var nextEmojiProps = nextProps.emojiProps;\n      var nextSkin = nextEmojiProps.skin;\n      var nextSize = nextEmojiProps.size;\n      var nextSet = nextEmojiProps.set;\n      var shouldUpdate = false;\n\n      if (name == 'Recent' && perLine != nextPerLine) {\n        shouldUpdate = true;\n      }\n\n      if (name == 'Search') {\n        shouldUpdate = !(emojis == nextEmojis);\n      }\n\n      if (skin != nextSkin || size != nextSize || native != nextNative || set != nextSet || hasStickyPosition != nextHasStickyPosition) {\n        shouldUpdate = true;\n      }\n\n      return shouldUpdate;\n    }\n  }, {\n    key: 'memoizeSize',\n    value: function memoizeSize() {\n      if (!this.container) {\n        // probably this is a test environment, e.g. jest\n        this.top = 0;\n        this.maxMargin = 0;\n        return;\n      }\n      var parent = this.container.parentElement;\n\n      var _container$getBoundin = this.container.getBoundingClientRect();\n\n      var top = _container$getBoundin.top;\n      var height = _container$getBoundin.height;\n\n      var _parent$getBoundingCl = parent.getBoundingClientRect();\n\n      var parentTop = _parent$getBoundingCl.top;\n\n      var _label$getBoundingCli = this.label.getBoundingClientRect();\n\n      var labelHeight = _label$getBoundingCli.height;\n\n\n      this.top = top - parentTop + parent.scrollTop;\n\n      if (height == 0) {\n        this.maxMargin = 0;\n      } else {\n        this.maxMargin = height - labelHeight;\n      }\n    }\n  }, {\n    key: 'handleScroll',\n    value: function handleScroll(scrollTop) {\n      var margin = scrollTop - this.top;\n      margin = margin < this.minMargin ? this.minMargin : margin;\n      margin = margin > this.maxMargin ? this.maxMargin : margin;\n\n      if (margin == this.margin) return;\n\n      if (!this.props.hasStickyPosition) {\n        this.label.style.top = margin + 'px';\n      }\n\n      this.margin = margin;\n      return true;\n    }\n  }, {\n    key: 'getEmojis',\n    value: function getEmojis() {\n      var _this2 = this;\n\n      var _props2 = this.props;\n      var name = _props2.name;\n      var emojis = _props2.emojis;\n      var recent = _props2.recent;\n      var perLine = _props2.perLine;\n\n\n      if (name == 'Recent') {\n        var custom = this.props.custom;\n\n        var frequentlyUsed = recent || frequently$1.get(perLine);\n\n        if (frequentlyUsed.length) {\n          emojis = frequentlyUsed.map(function (id) {\n            var emoji = custom.filter(function (e) {\n              return e.id === id;\n            })[0];\n            if (emoji) {\n              return emoji;\n            }\n\n            return id;\n          }).filter(function (id) {\n            return !!getData(id, null, null, _this2.data);\n          });\n        }\n\n        if (emojis.length === 0 && frequentlyUsed.length > 0) {\n          return null;\n        }\n      }\n\n      if (emojis) {\n        emojis = emojis.slice(0);\n      }\n\n      return emojis;\n    }\n  }, {\n    key: 'updateDisplay',\n    value: function updateDisplay(display) {\n      var emojis = this.getEmojis();\n\n      if (!emojis || !this.container) {\n        return;\n      }\n\n      this.container.style.display = display;\n    }\n  }, {\n    key: 'setContainerRef',\n    value: function setContainerRef(c) {\n      this.container = c;\n    }\n  }, {\n    key: 'setLabelRef',\n    value: function setLabelRef(c) {\n      this.label = c;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this3 = this;\n\n      var _props3 = this.props;\n      var id = _props3.id;\n      var name = _props3.name;\n      var hasStickyPosition = _props3.hasStickyPosition;\n      var emojiProps = _props3.emojiProps;\n      var i18n = _props3.i18n;\n      var notFound = _props3.notFound;\n      var notFoundEmoji = _props3.notFoundEmoji;\n      var emojis = this.getEmojis();\n      var labelStyles = {};\n      var labelSpanStyles = {};\n      var containerStyles = {};\n\n      if (!emojis) {\n        containerStyles = {\n          display: 'none'\n        };\n      }\n\n      if (!hasStickyPosition) {\n        labelStyles = {\n          height: 28\n        };\n\n        labelSpanStyles = {\n          position: 'absolute'\n        };\n      }\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'section',\n        {\n          ref: this.setContainerRef,\n          className: 'emoji-mart-category',\n          'aria-label': i18n.categories[id],\n          style: containerStyles\n        },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          {\n            style: labelStyles,\n            'data-name': name,\n            className: 'emoji-mart-category-label'\n          },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'span',\n            {\n              style: labelSpanStyles,\n              ref: this.setLabelRef,\n              'aria-hidden': true /* already labeled by the section aria-label */\n            },\n            i18n.categories[id]\n          )\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'ul',\n          { className: 'emoji-mart-category-list' },\n          emojis && emojis.map(function (emoji) {\n            return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'li',\n              { key: emoji.id || emoji },\n              NimbleEmoji(_extends({ emoji: emoji, data: _this3.data }, emojiProps))\n            );\n          })\n        ),\n        emojis && !emojis.length && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(NotFound, {\n          i18n: i18n,\n          notFound: notFound,\n          notFoundEmoji: notFoundEmoji,\n          data: this.data,\n          emojiProps: emojiProps\n        })\n      );\n    }\n  }]);\n\n  return Category;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n\nCategory.propTypes /* remove-proptypes */ = {\n  emojis: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array,\n  hasStickyPosition: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n  native: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired,\n  perLine: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n  emojiProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n  recent: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n  notFound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  notFoundEmoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired\n};\n\nCategory.defaultProps = {\n  emojis: [],\n  hasStickyPosition: true\n};\n\nvar Skins = function (_React$PureComponent) {\n  inherits(Skins, _React$PureComponent);\n\n  function Skins(props) {\n    _classCallCheck(this, Skins);\n\n    var _this = possibleConstructorReturn(this, (Skins.__proto__ || _Object$getPrototypeOf(Skins)).call(this, props));\n\n    _this.state = {\n      opened: false\n    };\n    return _this;\n  }\n\n  _createClass(Skins, [{\n    key: 'handleClick',\n    value: function handleClick(e) {\n      var skin = parseInt(e.currentTarget.getAttribute('data-skin'));\n      var onChange = this.props.onChange;\n\n\n      if (!this.state.opened) {\n        this.setState({ opened: true });\n      } else {\n        this.setState({ opened: false });\n        if (skin != this.props.skin) {\n          onChange(skin);\n        }\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return null;\n    }\n  }]);\n\n  return Skins;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nSkins.propTypes /* remove-proptypes */ = {\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  skin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired\n};\n\nSkins.defaultProps = {\n  onChange: function onChange() {}\n};\n\nvar SkinsEmoji = function (_Skins) {\n  inherits(SkinsEmoji, _Skins);\n\n  function SkinsEmoji(props) {\n    _classCallCheck(this, SkinsEmoji);\n\n    var _this = possibleConstructorReturn(this, (SkinsEmoji.__proto__ || _Object$getPrototypeOf(SkinsEmoji)).call(this, props));\n\n    _this.handleClick = _this.handleClick.bind(_this);\n    return _this;\n  }\n\n  _createClass(SkinsEmoji, [{\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var skin = _props.skin;\n      var emojiProps = _props.emojiProps;\n      var data = _props.data;\n      var skinEmoji = _props.skinEmoji;\n      var i18n = _props.i18n;\n      var opened = this.state.opened;\n\n      var skinToneNodes = [];\n\n      for (var skinTone = 1; skinTone <= 6; skinTone++) {\n        var selected = skinTone === skin;\n        skinToneNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'span',\n          {\n            key: 'skin-tone-' + skinTone,\n            className: 'emoji-mart-skin-swatch custom' + (selected ? ' selected' : '')\n          },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'span',\n            {\n              onClick: this.handleClick,\n              'data-skin': skinTone,\n              className: 'emoji-mart-skin-tone-' + skinTone\n            },\n            NimbleEmoji({\n              emoji: skinEmoji,\n              data: data,\n              skin: skinTone,\n              backgroundImageFn: emojiProps.backgroundImageFn,\n              native: emojiProps.native,\n              set: emojiProps.set,\n              sheetSize: emojiProps.sheetSize,\n              size: 23\n            })\n          )\n        ));\n      }\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'div',\n        {\n          className: 'emoji-mart-skin-swatches custom' + (opened ? ' opened' : '')\n        },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-skin-text' + (opened ? ' opened' : '') },\n          i18n.skintext\n        ),\n        skinToneNodes\n      );\n    }\n  }]);\n\n  return SkinsEmoji;\n}(Skins);\n\n\nSkinsEmoji.propTypes /* remove-proptypes */ = {\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  skin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n  emojiProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n  skinTone: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  skinEmoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n  i18n: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nSkinsEmoji.defaultProps = {\n  onChange: function onChange() {},\n  skinTone: null\n};\n\nvar SkinsDot = function (_Skins) {\n  inherits(SkinsDot, _Skins);\n\n  function SkinsDot(props) {\n    _classCallCheck(this, SkinsDot);\n\n    var _this = possibleConstructorReturn(this, (SkinsDot.__proto__ || _Object$getPrototypeOf(SkinsDot)).call(this, props));\n\n    _this.handleClick = _this.handleClick.bind(_this);\n    _this.handleKeyDown = _this.handleKeyDown.bind(_this);\n    return _this;\n  }\n\n  _createClass(SkinsDot, [{\n    key: 'handleKeyDown',\n    value: function handleKeyDown(event) {\n      // if either enter or space is pressed, then execute\n      if (event.keyCode === 13 || event.keyCode === 32) {\n        this.handleClick(event);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var skin = _props.skin;\n      var i18n = _props.i18n;\n      var opened = this.state.opened;\n\n      var skinToneNodes = [];\n\n      for (var skinTone = 1; skinTone <= 6; skinTone++) {\n        var selected = skinTone === skin;\n        var visible = opened || selected;\n        skinToneNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'span',\n          _extends({\n            key: 'skin-tone-' + skinTone,\n            className: 'emoji-mart-skin-swatch' + (selected ? ' selected' : ''),\n            'aria-label': i18n.skintones[skinTone],\n            'aria-hidden': !visible\n          }, opened ? { role: 'menuitem' } : {}),\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('span', _extends({\n            onClick: this.handleClick,\n            onKeyDown: this.handleKeyDown,\n            role: 'button'\n          }, selected ? {\n            'aria-haspopup': true,\n            'aria-expanded': !!opened\n          } : {}, opened ? { 'aria-pressed': !!selected } : {}, {\n            tabIndex: visible ? '0' : '',\n            'aria-label': i18n.skintones[skinTone],\n            title: i18n.skintones[skinTone],\n            'data-skin': skinTone,\n            className: 'emoji-mart-skin emoji-mart-skin-tone-' + skinTone\n          }))\n        ));\n      }\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'section',\n        {\n          className: 'emoji-mart-skin-swatches' + (opened ? ' opened' : ''),\n          'aria-label': i18n.skintext\n        },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          opened ? { role: 'menubar' } : {},\n          skinToneNodes\n        )\n      );\n    }\n  }]);\n\n  return SkinsDot;\n}(Skins);\n\n\nSkinsDot.propTypes /* remove-proptypes */ = {\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  skin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n  i18n: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nSkinsDot.defaultProps = {\n  onChange: function onChange() {}\n};\n\nvar Preview = function (_React$PureComponent) {\n  inherits(Preview, _React$PureComponent);\n\n  function Preview(props) {\n    _classCallCheck(this, Preview);\n\n    var _this = possibleConstructorReturn(this, (Preview.__proto__ || _Object$getPrototypeOf(Preview)).call(this, props));\n\n    _this.data = props.data;\n    _this.state = { emoji: null };\n    return _this;\n  }\n\n  _createClass(Preview, [{\n    key: 'render',\n    value: function render() {\n      var emoji = this.state.emoji;\n      var _props = this.props;\n      var emojiProps = _props.emojiProps;\n      var skinsProps = _props.skinsProps;\n      var showSkinTones = _props.showSkinTones;\n      var title = _props.title;\n      var idleEmoji = _props.emoji;\n      var i18n = _props.i18n;\n      var showPreview = _props.showPreview;\n\n\n      if (emoji && showPreview) {\n        var emojiData = getData(emoji, null, null, this.data);\n        var _emojiData$emoticons = emojiData.emoticons;\n        var emoticons = _emojiData$emoticons === undefined ? [] : _emojiData$emoticons;\n        var knownEmoticons = [];\n        var listedEmoticons = [];\n\n        emoticons.forEach(function (emoticon) {\n          if (knownEmoticons.indexOf(emoticon.toLowerCase()) >= 0) {\n            return;\n          }\n\n          knownEmoticons.push(emoticon.toLowerCase());\n          listedEmoticons.push(emoticon);\n        });\n\n        return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-preview' },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'emoji-mart-preview-emoji', 'aria-hidden': 'true' },\n            NimbleEmoji(_extends({\n              key: emoji.id,\n              emoji: emoji,\n              data: this.data\n            }, emojiProps))\n          ),\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'emoji-mart-preview-data', 'aria-hidden': 'true' },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              { className: 'emoji-mart-preview-name' },\n              emoji.name\n            ),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              { className: 'emoji-mart-preview-shortnames' },\n              emojiData.short_names.map(function (short_name) {\n                return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n                  'span',\n                  { key: short_name, className: 'emoji-mart-preview-shortname' },\n                  ':',\n                  short_name,\n                  ':'\n                );\n              })\n            ),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              { className: 'emoji-mart-preview-emoticons' },\n              listedEmoticons.map(function (emoticon) {\n                return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n                  'span',\n                  { key: emoticon, className: 'emoji-mart-preview-emoticon' },\n                  emoticon\n                );\n              })\n            )\n          )\n        );\n      } else {\n        return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-preview' },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'emoji-mart-preview-emoji', 'aria-hidden': 'true' },\n            idleEmoji && idleEmoji.length && NimbleEmoji(_extends({ emoji: idleEmoji, data: this.data }, emojiProps))\n          ),\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'emoji-mart-preview-data', 'aria-hidden': 'true' },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'span',\n              { className: 'emoji-mart-title-label' },\n              title\n            )\n          ),\n          showSkinTones && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            {\n              className: 'emoji-mart-preview-skins' + (skinsProps.skinEmoji ? ' custom' : '')\n            },\n            skinsProps.skinEmoji ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(SkinsEmoji, {\n              skin: skinsProps.skin,\n              emojiProps: emojiProps,\n              data: this.data,\n              skinEmoji: skinsProps.skinEmoji,\n              i18n: i18n,\n              onChange: skinsProps.onChange\n            }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(SkinsDot, {\n              skin: skinsProps.skin,\n              i18n: i18n,\n              onChange: skinsProps.onChange\n            })\n          )\n        );\n      }\n    }\n  }]);\n\n  return Preview;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nPreview.propTypes /* remove-proptypes */ = {\n  showSkinTones: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n  emoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n  emojiProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n  skinsProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired\n};\n\nPreview.defaultProps = {\n  showSkinTones: true,\n  onChange: function onChange() {}\n};\n\nvar id = 0;\n\nvar Search = function (_React$PureComponent) {\n  inherits(Search, _React$PureComponent);\n\n  function Search(props) {\n    _classCallCheck(this, Search);\n\n    var _this = possibleConstructorReturn(this, (Search.__proto__ || _Object$getPrototypeOf(Search)).call(this, props));\n\n    _this.state = {\n      icon: search$1.search,\n      isSearching: false,\n      id: ++id\n    };\n\n    _this.data = props.data;\n    _this.emojiIndex = new NimbleEmojiIndex(_this.data);\n    _this.setRef = _this.setRef.bind(_this);\n    _this.clear = _this.clear.bind(_this);\n    _this.handleKeyUp = _this.handleKeyUp.bind(_this);\n\n    // throttle keyboard input so that typing isn't delayed\n    _this.handleChange = throttleIdleTask(_this.handleChange.bind(_this));\n    return _this;\n  }\n\n  _createClass(Search, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      // in some cases (e.g. preact) the input may already be pre-populated\n      // this.input is undefined in Jest tests\n      if (this.input && this.input.value) {\n        this.search(this.input.value);\n      }\n    }\n  }, {\n    key: 'search',\n    value: function search$$1(value) {\n      if (value == '') this.setState({\n        icon: search$1.search,\n        isSearching: false\n      });else this.setState({\n        icon: search$1.delete,\n        isSearching: true\n      });\n\n      this.props.onSearch(this.emojiIndex.search(value, {\n        emojisToShowFilter: this.props.emojisToShowFilter,\n        maxResults: this.props.maxResults,\n        include: this.props.include,\n        exclude: this.props.exclude,\n        custom: this.props.custom\n      }));\n    }\n  }, {\n    key: 'clear',\n    value: function clear() {\n      if (this.input.value == '') return;\n      this.input.value = '';\n      this.input.focus();\n      this.search('');\n    }\n  }, {\n    key: 'handleChange',\n    value: function handleChange() {\n      this.search(this.input.value);\n    }\n  }, {\n    key: 'handleKeyUp',\n    value: function handleKeyUp(e) {\n      if (e.keyCode === 13) {\n        this.clear();\n      }\n    }\n  }, {\n    key: 'setRef',\n    value: function setRef(c) {\n      this.input = c;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var i18n = _props.i18n;\n      var autoFocus = _props.autoFocus;\n      var _state = this.state;\n      var icon = _state.icon;\n      var isSearching = _state.isSearching;\n      var id = _state.id;\n\n      var inputId = 'emoji-mart-search-' + id;\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'section',\n        { className: 'emoji-mart-search', 'aria-label': i18n.search },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('input', {\n          id: inputId,\n          ref: this.setRef,\n          type: 'search',\n          onChange: this.handleChange,\n          placeholder: i18n.search,\n          autoFocus: autoFocus\n        }),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'label',\n          { className: 'emoji-mart-sr-only', htmlFor: inputId },\n          i18n.search\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'button',\n          {\n            className: 'emoji-mart-search-icon',\n            onClick: this.clear,\n            onKeyUp: this.handleKeyUp,\n            'aria-label': i18n.clear,\n            disabled: !isSearching\n          },\n          icon()\n        )\n      );\n    }\n  }]);\n\n  return Search;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nSearch.propTypes /* remove-proptypes */ = {\n  onSearch: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  maxResults: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  emojisToShowFilter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nSearch.defaultProps = {\n  onSearch: function onSearch() {},\n  maxResults: 75,\n  emojisToShowFilter: null,\n  autoFocus: false\n};\n\nvar I18N = {\n  search: 'Search',\n  clear: 'Clear', // Accessible label on \"clear\" button\n  notfound: 'No Emoji Found',\n  skintext: 'Choose your default skin tone',\n  categories: {\n    search: 'Search Results',\n    recent: 'Frequently Used',\n    people: 'Smileys & People',\n    nature: 'Animals & Nature',\n    foods: 'Food & Drink',\n    activity: 'Activity',\n    places: 'Travel & Places',\n    objects: 'Objects',\n    symbols: 'Symbols',\n    flags: 'Flags',\n    custom: 'Custom'\n  },\n  categorieslabel: 'Emoji categories', // Accessible title for the list of categories\n  skintones: {\n    1: 'Default Skin Tone',\n    2: 'Light Skin Tone',\n    3: 'Medium-Light Skin Tone',\n    4: 'Medium Skin Tone',\n    5: 'Medium-Dark Skin Tone',\n    6: 'Dark Skin Tone'\n  }\n};\n\nvar NimblePicker = function (_React$PureComponent) {\n  inherits(NimblePicker, _React$PureComponent);\n\n  function NimblePicker(props) {\n    _classCallCheck(this, NimblePicker);\n\n    var _this = possibleConstructorReturn(this, (NimblePicker.__proto__ || _Object$getPrototypeOf(NimblePicker)).call(this, props));\n\n    _this.RECENT_CATEGORY = { id: 'recent', name: 'Recent', emojis: null };\n    _this.CUSTOM_CATEGORY = { id: 'custom', name: 'Custom', emojis: [] };\n    _this.SEARCH_CATEGORY = {\n      id: 'search',\n      name: 'Search',\n      emojis: null,\n      anchor: false\n    };\n\n    if (props.data.compressed) {\n      uncompress(props.data);\n    }\n\n    _this.data = props.data;\n    _this.i18n = deepMerge(I18N, props.i18n);\n    _this.icons = deepMerge(icons, props.icons);\n    _this.state = {\n      skin: props.skin || store.get('skin') || props.defaultSkin,\n      firstRender: true\n    };\n\n    _this.categories = [];\n    var allCategories = [].concat(_this.data.categories);\n\n    if (props.custom.length > 0) {\n      _this.CUSTOM_CATEGORY.emojis = props.custom.map(function (emoji) {\n        return _extends({}, emoji, {\n          // `<Category />` expects emoji to have an `id`.\n          id: emoji.short_names[0],\n          custom: true\n        });\n      });\n\n      allCategories.push(_this.CUSTOM_CATEGORY);\n    }\n\n    _this.hideRecent = true;\n\n    if (props.include != undefined) {\n      allCategories.sort(function (a, b) {\n        if (props.include.indexOf(a.id) > props.include.indexOf(b.id)) {\n          return 1;\n        }\n\n        return -1;\n      });\n    }\n\n    for (var categoryIndex = 0; categoryIndex < allCategories.length; categoryIndex++) {\n      var category = allCategories[categoryIndex];\n      var isIncluded = props.include && props.include.length ? props.include.indexOf(category.id) > -1 : true;\n      var isExcluded = props.exclude && props.exclude.length ? props.exclude.indexOf(category.id) > -1 : false;\n      if (!isIncluded || isExcluded) {\n        continue;\n      }\n\n      if (props.emojisToShowFilter) {\n        var newEmojis = [];\n\n        var emojis = category.emojis;\n\n        for (var emojiIndex = 0; emojiIndex < emojis.length; emojiIndex++) {\n          var emoji = emojis[emojiIndex];\n          if (props.emojisToShowFilter(_this.data.emojis[emoji] || emoji)) {\n            newEmojis.push(emoji);\n          }\n        }\n\n        if (newEmojis.length) {\n          var newCategory = {\n            emojis: newEmojis,\n            name: category.name,\n            id: category.id\n          };\n\n          _this.categories.push(newCategory);\n        }\n      } else {\n        _this.categories.push(category);\n      }\n    }\n\n    var includeRecent = props.include && props.include.length ? props.include.indexOf(_this.RECENT_CATEGORY.id) > -1 : true;\n    var excludeRecent = props.exclude && props.exclude.length ? props.exclude.indexOf(_this.RECENT_CATEGORY.id) > -1 : false;\n    if (includeRecent && !excludeRecent) {\n      _this.hideRecent = false;\n      _this.categories.unshift(_this.RECENT_CATEGORY);\n    }\n\n    if (_this.categories[0]) {\n      _this.categories[0].first = true;\n    }\n\n    _this.categories.unshift(_this.SEARCH_CATEGORY);\n\n    _this.setAnchorsRef = _this.setAnchorsRef.bind(_this);\n    _this.handleAnchorClick = _this.handleAnchorClick.bind(_this);\n    _this.setSearchRef = _this.setSearchRef.bind(_this);\n    _this.handleSearch = _this.handleSearch.bind(_this);\n    _this.setScrollRef = _this.setScrollRef.bind(_this);\n    _this.handleScroll = _this.handleScroll.bind(_this);\n    _this.handleScrollPaint = _this.handleScrollPaint.bind(_this);\n    _this.handleEmojiOver = _this.handleEmojiOver.bind(_this);\n    _this.handleEmojiLeave = _this.handleEmojiLeave.bind(_this);\n    _this.handleEmojiClick = _this.handleEmojiClick.bind(_this);\n    _this.handleEmojiSelect = _this.handleEmojiSelect.bind(_this);\n    _this.setPreviewRef = _this.setPreviewRef.bind(_this);\n    _this.handleSkinChange = _this.handleSkinChange.bind(_this);\n    _this.handleKeyDown = _this.handleKeyDown.bind(_this);\n    return _this;\n  }\n\n  _createClass(NimblePicker, [{\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(props) {\n      if (props.skin) {\n        this.setState({ skin: props.skin });\n      } else if (props.defaultSkin && !store.get('skin')) {\n        this.setState({ skin: props.defaultSkin });\n      }\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      if (this.state.firstRender) {\n        this.testStickyPosition();\n        this.firstRenderTimeout = setTimeout(function () {\n          _this2.setState({ firstRender: false });\n        }, 60);\n      }\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      this.updateCategoriesSize();\n      this.handleScroll();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.SEARCH_CATEGORY.emojis = null;\n\n      clearTimeout(this.leaveTimeout);\n      clearTimeout(this.firstRenderTimeout);\n    }\n  }, {\n    key: 'testStickyPosition',\n    value: function testStickyPosition() {\n      var stickyTestElement = document.createElement('div');\n\n      var prefixes = ['', '-webkit-', '-ms-', '-moz-', '-o-'];\n\n      prefixes.forEach(function (prefix) {\n        return stickyTestElement.style.position = prefix + 'sticky';\n      });\n\n      this.hasStickyPosition = !!stickyTestElement.style.position.length;\n    }\n  }, {\n    key: 'handleEmojiOver',\n    value: function handleEmojiOver(emoji) {\n      var preview = this.preview;\n\n      if (!preview) {\n        return;\n      }\n\n      // Use Array.prototype.find() when it is more widely supported.\n      var emojiData = this.CUSTOM_CATEGORY.emojis.filter(function (customEmoji) {\n        return customEmoji.id === emoji.id;\n      })[0];\n      for (var key in emojiData) {\n        if (emojiData.hasOwnProperty(key)) {\n          emoji[key] = emojiData[key];\n        }\n      }\n\n      preview.setState({ emoji: emoji });\n      clearTimeout(this.leaveTimeout);\n    }\n  }, {\n    key: 'handleEmojiLeave',\n    value: function handleEmojiLeave(emoji) {\n      var preview = this.preview;\n\n      if (!preview) {\n        return;\n      }\n\n      this.leaveTimeout = setTimeout(function () {\n        preview.setState({ emoji: null });\n      }, 16);\n    }\n  }, {\n    key: 'handleEmojiClick',\n    value: function handleEmojiClick(emoji, e) {\n      this.props.onClick(emoji, e);\n      this.handleEmojiSelect(emoji);\n    }\n  }, {\n    key: 'handleEmojiSelect',\n    value: function handleEmojiSelect(emoji) {\n      var _this3 = this;\n\n      this.props.onSelect(emoji);\n      if (!this.hideRecent && !this.props.recent) frequently$1.add(emoji);\n\n      var component = this.categoryRefs['category-1'];\n      if (component) {\n        var maxMargin = component.maxMargin;\n        component.forceUpdate();\n\n        window.requestAnimationFrame(function () {\n          if (!_this3.scroll) return;\n          component.memoizeSize();\n          if (maxMargin == component.maxMargin) return;\n\n          _this3.updateCategoriesSize();\n          _this3.handleScrollPaint();\n\n          if (_this3.SEARCH_CATEGORY.emojis) {\n            component.updateDisplay('none');\n          }\n        });\n      }\n    }\n  }, {\n    key: 'handleScroll',\n    value: function handleScroll() {\n      if (!this.waitingForPaint) {\n        this.waitingForPaint = true;\n        window.requestAnimationFrame(this.handleScrollPaint);\n      }\n    }\n  }, {\n    key: 'handleScrollPaint',\n    value: function handleScrollPaint() {\n      this.waitingForPaint = false;\n\n      if (!this.scroll) {\n        return;\n      }\n\n      var activeCategory = null;\n\n      if (this.SEARCH_CATEGORY.emojis) {\n        activeCategory = this.SEARCH_CATEGORY;\n      } else {\n        var target = this.scroll,\n            scrollTop = target.scrollTop,\n            scrollingDown = scrollTop > (this.scrollTop || 0),\n            minTop = 0;\n\n        for (var i = 0, l = this.categories.length; i < l; i++) {\n          var ii = scrollingDown ? this.categories.length - 1 - i : i,\n              category = this.categories[ii],\n              component = this.categoryRefs['category-' + ii];\n\n          if (component) {\n            var active = component.handleScroll(scrollTop);\n\n            if (!minTop || component.top < minTop) {\n              if (component.top > 0) {\n                minTop = component.top;\n              }\n            }\n\n            if (active && !activeCategory) {\n              activeCategory = category;\n            }\n          }\n        }\n\n        if (scrollTop < minTop) {\n          activeCategory = this.categories.filter(function (category) {\n            return !(category.anchor === false);\n          })[0];\n        } else if (scrollTop + this.clientHeight >= this.scrollHeight) {\n          activeCategory = this.categories[this.categories.length - 1];\n        }\n      }\n\n      if (activeCategory) {\n        var anchors = this.anchors;\n        var _activeCategory = activeCategory;\n        var categoryName = _activeCategory.name;\n\n\n        if (anchors.state.selected != categoryName) {\n          anchors.setState({ selected: categoryName });\n        }\n      }\n\n      this.scrollTop = scrollTop;\n    }\n  }, {\n    key: 'handleSearch',\n    value: function handleSearch(emojis) {\n      this.SEARCH_CATEGORY.emojis = emojis;\n\n      for (var i = 0, l = this.categories.length; i < l; i++) {\n        var component = this.categoryRefs['category-' + i];\n\n        if (component && component.props.name != 'Search') {\n          var display = emojis ? 'none' : 'inherit';\n          component.updateDisplay(display);\n        }\n      }\n\n      this.forceUpdate();\n      if (this.scroll) {\n        this.scroll.scrollTop = 0;\n      }\n      this.handleScroll();\n    }\n  }, {\n    key: 'handleAnchorClick',\n    value: function handleAnchorClick(category, i) {\n      var component = this.categoryRefs['category-' + i];\n      var scroll = this.scroll;\n      var anchors = this.anchors;\n      var scrollToComponent = null;\n\n      scrollToComponent = function scrollToComponent() {\n        if (component) {\n          var top = component.top;\n\n\n          if (category.first) {\n            top = 0;\n          } else {\n            top += 1;\n          }\n\n          scroll.scrollTop = top;\n        }\n      };\n\n      if (this.SEARCH_CATEGORY.emojis) {\n        this.handleSearch(null);\n        this.search.clear();\n\n        window.requestAnimationFrame(scrollToComponent);\n      } else {\n        scrollToComponent();\n      }\n    }\n  }, {\n    key: 'handleSkinChange',\n    value: function handleSkinChange(skin) {\n      var newState = { skin: skin };\n      var onSkinChange = this.props.onSkinChange;\n\n\n      this.setState(newState);\n      store.update(newState);\n\n      onSkinChange(skin);\n    }\n  }, {\n    key: 'handleKeyDown',\n    value: function handleKeyDown(e) {\n      var handled = false;\n\n      switch (e.keyCode) {\n        case 13:\n          var emoji = void 0;\n\n          if (this.SEARCH_CATEGORY.emojis && this.SEARCH_CATEGORY.emojis.length && (emoji = getSanitizedData(this.SEARCH_CATEGORY.emojis[0], this.state.skin, this.props.set, this.props.data))) {\n            this.handleEmojiSelect(emoji);\n          }\n\n          handled = true;\n          break;\n      }\n\n      if (handled) {\n        e.preventDefault();\n      }\n    }\n  }, {\n    key: 'updateCategoriesSize',\n    value: function updateCategoriesSize() {\n      for (var i = 0, l = this.categories.length; i < l; i++) {\n        var component = this.categoryRefs['category-' + i];\n        if (component) component.memoizeSize();\n      }\n\n      if (this.scroll) {\n        var target = this.scroll;\n        this.scrollHeight = target.scrollHeight;\n        this.clientHeight = target.clientHeight;\n      }\n    }\n  }, {\n    key: 'getCategories',\n    value: function getCategories() {\n      return this.state.firstRender ? this.categories.slice(0, 3) : this.categories;\n    }\n  }, {\n    key: 'setAnchorsRef',\n    value: function setAnchorsRef(c) {\n      this.anchors = c;\n    }\n  }, {\n    key: 'setSearchRef',\n    value: function setSearchRef(c) {\n      this.search = c;\n    }\n  }, {\n    key: 'setPreviewRef',\n    value: function setPreviewRef(c) {\n      this.preview = c;\n    }\n  }, {\n    key: 'setScrollRef',\n    value: function setScrollRef(c) {\n      this.scroll = c;\n    }\n  }, {\n    key: 'setCategoryRef',\n    value: function setCategoryRef(name, c) {\n      if (!this.categoryRefs) {\n        this.categoryRefs = {};\n      }\n\n      this.categoryRefs[name] = c;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this4 = this;\n\n      var _props = this.props;\n      var perLine = _props.perLine;\n      var emojiSize = _props.emojiSize;\n      var set = _props.set;\n      var sheetSize = _props.sheetSize;\n      var sheetColumns = _props.sheetColumns;\n      var sheetRows = _props.sheetRows;\n      var style = _props.style;\n      var title = _props.title;\n      var emoji = _props.emoji;\n      var color = _props.color;\n      var native = _props.native;\n      var backgroundImageFn = _props.backgroundImageFn;\n      var emojisToShowFilter = _props.emojisToShowFilter;\n      var showPreview = _props.showPreview;\n      var showSkinTones = _props.showSkinTones;\n      var emojiTooltip = _props.emojiTooltip;\n      var include = _props.include;\n      var exclude = _props.exclude;\n      var recent = _props.recent;\n      var autoFocus = _props.autoFocus;\n      var skinEmoji = _props.skinEmoji;\n      var notFound = _props.notFound;\n      var notFoundEmoji = _props.notFoundEmoji;\n      var skin = this.state.skin;\n      var width = perLine * (emojiSize + 12) + 12 + 2 + measureScrollbar();\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'section',\n        {\n          style: _extends({ width: width }, style),\n          className: 'emoji-mart',\n          'aria-label': title,\n          onKeyDown: this.handleKeyDown\n        },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-bar' },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Anchors, {\n            ref: this.setAnchorsRef,\n            data: this.data,\n            i18n: this.i18n,\n            color: color,\n            categories: this.categories,\n            onAnchorClick: this.handleAnchorClick,\n            icons: this.icons\n          })\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Search, {\n          ref: this.setSearchRef,\n          onSearch: this.handleSearch,\n          data: this.data,\n          i18n: this.i18n,\n          emojisToShowFilter: emojisToShowFilter,\n          include: include,\n          exclude: exclude,\n          custom: this.CUSTOM_CATEGORY.emojis,\n          autoFocus: autoFocus\n        }),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          {\n            ref: this.setScrollRef,\n            className: 'emoji-mart-scroll',\n            onScroll: this.handleScroll\n          },\n          this.getCategories().map(function (category, i) {\n            return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Category, {\n              ref: _this4.setCategoryRef.bind(_this4, 'category-' + i),\n              key: category.name,\n              id: category.id,\n              name: category.name,\n              emojis: category.emojis,\n              perLine: perLine,\n              native: native,\n              hasStickyPosition: _this4.hasStickyPosition,\n              data: _this4.data,\n              i18n: _this4.i18n,\n              recent: category.id == _this4.RECENT_CATEGORY.id ? recent : undefined,\n              custom: category.id == _this4.RECENT_CATEGORY.id ? _this4.CUSTOM_CATEGORY.emojis : undefined,\n              emojiProps: {\n                native: native,\n                skin: skin,\n                size: emojiSize,\n                set: set,\n                sheetSize: sheetSize,\n                sheetColumns: sheetColumns,\n                sheetRows: sheetRows,\n                forceSize: native,\n                tooltip: emojiTooltip,\n                backgroundImageFn: backgroundImageFn,\n                onOver: _this4.handleEmojiOver,\n                onLeave: _this4.handleEmojiLeave,\n                onClick: _this4.handleEmojiClick\n              },\n              notFound: notFound,\n              notFoundEmoji: notFoundEmoji\n            });\n          })\n        ),\n        (showPreview || showSkinTones) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-bar' },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Preview, {\n            ref: this.setPreviewRef,\n            data: this.data,\n            title: title,\n            emoji: emoji,\n            showSkinTones: showSkinTones,\n            showPreview: showPreview,\n            emojiProps: {\n              native: native,\n              size: 38,\n              skin: skin,\n              set: set,\n              sheetSize: sheetSize,\n              sheetColumns: sheetColumns,\n              sheetRows: sheetRows,\n              backgroundImageFn: backgroundImageFn\n            },\n            skinsProps: {\n              skin: skin,\n              onChange: this.handleSkinChange,\n              skinEmoji: skinEmoji\n            },\n            i18n: this.i18n\n          })\n        )\n      );\n    }\n  }]);\n\n  return NimblePicker;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nNimblePicker.propTypes /* remove-proptypes */ = _extends({}, PickerPropTypes, {\n  data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired\n});\nNimblePicker.defaultProps = _extends({}, PickerDefaultProps);\n\nvar Picker = function (_React$PureComponent) {\n  inherits(Picker, _React$PureComponent);\n\n  function Picker() {\n    _classCallCheck(this, Picker);\n\n    return possibleConstructorReturn(this, (Picker.__proto__ || _Object$getPrototypeOf(Picker)).apply(this, arguments));\n  }\n\n  _createClass(Picker, [{\n    key: 'render',\n    value: function render() {\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(NimblePicker, _extends({}, this.props, this.state));\n    }\n  }]);\n\n  return Picker;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nPicker.propTypes /* remove-proptypes */ = PickerPropTypes;\nPicker.defaultProps = _extends({}, PickerDefaultProps, { data: data });\n\nvar Emoji = function Emoji(props) {\n  for (var k in Emoji.defaultProps) {\n    if (props[k] == undefined && Emoji.defaultProps[k] != undefined) {\n      props[k] = Emoji.defaultProps[k];\n    }\n  }\n\n  return NimbleEmoji(_extends({}, props));\n};\n\nEmoji.propTypes /* remove-proptypes */ = EmojiPropTypes;\nEmoji.defaultProps = _extends({}, EmojiDefaultProps, { data: data });\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nvar isObject_1 = isObject;\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\nvar _freeGlobal = freeGlobal;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = _freeGlobal || freeSelf || Function('return this')();\n\nvar _root = root;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return _root.Date.now();\n};\n\nvar now_1 = now;\n\n/** Built-in value references. */\nvar Symbol$1 = _root.Symbol;\n\nvar _Symbol = Symbol$1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$1 = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty$1.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nvar _getRawTag = getRawTag;\n\n/** Used for built-in method references. */\nvar objectProto$1 = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString$1 = objectProto$1.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString$1.call(value);\n}\n\nvar _objectToString = objectToString;\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag$1 && symToStringTag$1 in Object(value))\n    ? _getRawTag(value)\n    : _objectToString(value);\n}\n\nvar _baseGetTag = baseGetTag;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nvar isObjectLike_1 = isObjectLike;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike_1(value) && _baseGetTag(value) == symbolTag);\n}\n\nvar isSymbol_1 = isSymbol;\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol_1(value)) {\n    return NAN;\n  }\n  if (isObject_1(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject_1(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nvar toNumber_1 = toNumber;\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber_1(wait) || 0;\n  if (isObject_1(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber_1(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now_1();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now_1());\n  }\n\n  function debounced() {\n    var time = now_1(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nvar debounce_1 = debounce;\n\nvar css$1 = \".react-input-emoji--container {\\n  color: #4b4b4b;\\n  text-rendering: optimizeLegibility;\\n  background-color: #fff;\\n  border: 1px solid #fff;\\n  border-radius: 21px;\\n  margin: 5px 10px;\\n  box-sizing: border-box;\\n  flex: 1 1 auto;\\n  font-size: 15px;\\n  font-family: sans-serif;\\n  font-weight: 400;\\n  line-height: 20px;\\n  min-height: 20px;\\n  min-width: 0;\\n  outline: none;\\n  width: inherit;\\n  will-change: width;\\n  vertical-align: baseline;\\n  border: 1px solid #eaeaea;\\n  margin-right: 0;\\n}\\n\\n.react-input-emoji--wrapper {\\n  display: flex;\\n  overflow: hidden;\\n  flex: 1;\\n  position: relative;\\n  padding-right: 0;\\n  vertical-align: baseline;\\n  outline: none;\\n  margin: 0;\\n  padding: 0;\\n  border: 0;\\n}\\n\\n.react-input-emoji--input {\\n  font-weight: 400;\\n  max-height: 100px;\\n  min-height: 20px;\\n  outline: none;\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n  position: relative;\\n  white-space: pre-wrap;\\n  word-wrap: break-word;\\n  z-index: 1;\\n  width: 100%;\\n  user-select: text;\\n  padding: 9px 12px 11px;\\n  text-align: left;\\n}\\n\\n.react-input-emoji--input img {\\n  vertical-align: middle;\\n  width: 18px !important;\\n  height: 18px !important;\\n  display: inline !important;\\n  margin-left: 1px;\\n  margin-right: 1px;\\n}\\n\\n.react-input-emoji--overlay {\\n  position: fixed;\\n  width: 100%;\\n  height: 100%;\\n  top: 0;\\n  left: 0;\\n  z-index: 9;\\n}\\n\\n.react-input-emoji--placeholder {\\n  color: #a0a0a0;\\n  pointer-events: none;\\n  position: absolute;\\n  transition: opacity 0.08s linear;\\n  user-select: none;\\n  z-index: 2;\\n  left: 12px;\\n  top: 0;\\n  bottom: 0;\\n  display: flex;\\n  align-items: center;\\n  width: calc(100% - 22px);\\n}\\n\\n.react-input-emoji--button {\\n  position: relative;\\n  display: block;\\n  text-align: center;\\n  padding: 0 10px;\\n  overflow: hidden;\\n  transition: color 0.1s ease-out;\\n  margin: 0;\\n  box-shadow: none;\\n  background: none;\\n  border: none;\\n  outline: none;\\n  cursor: pointer;\\n  flex-shrink: 0;\\n  margin-bottom: 12px;\\n}\\n\\n.react-input-emoji--button svg {\\n  fill: #858585;\\n}\\n\\n.react-input-emoji--button__show svg {\\n  fill: #128b7e;\\n}\\n\\n.react-emoji {\\n  display: flex;\\n  align-items: flex-end;\\n  position: relative;\\n  width: 100%;\\n}\\n\\n.react-emoji-picker--container {\\n  position: absolute;\\n  top: 0;\\n  width: 100%;\\n}\\n\\n.react-emoji-picker--wrapper.react-emoji-picker--wrapper__show {\\n  height: 357px;\\n}\\n\\n.react-emoji-picker--wrapper {\\n  position: absolute;\\n  bottom: 0;\\n  right: 0;\\n  height: 0;\\n  width: 338px;\\n  overflow: hidden;\\n  z-index: 10;\\n}\\n\\n.react-emoji-picker {\\n  position: absolute;\\n  top: 357px;\\n  left: 0;\\n  transition: top 0.1s ease-in-out;\\n}\\n\\n.react-emoji-picker__show {\\n  top: 0;\\n}\\n\";\nstyleInject(css$1);\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar inherits$1 = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn$1 = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar slicedToArray = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if (Symbol.iterator in Object(arr)) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\n// vendors\n\nvar InputEmoji = function (_Component) {\n  inherits$1(InputEmoji, _Component);\n\n  function InputEmoji(props) {\n    classCallCheck(this, InputEmoji);\n\n    var _this = possibleConstructorReturn$1(this, (InputEmoji.__proto__ || Object.getPrototypeOf(InputEmoji)).call(this, props));\n\n    _this.state = {\n      html: '',\n      showPicker: false,\n      allEmojiStyle: {},\n      currentSize: null\n    };\n\n    _this.setCurrentSize = function () {\n      if (!_this.textInput.current) {\n        return;\n      }\n\n      _this.setState({\n        currentSize: {\n          width: _this.textInput.current.offsetWidth,\n          height: _this.textInput.current.offsetHeight\n        }\n      });\n    };\n\n    _this.checkAndEmitResize = function () {\n      var onResize = _this.props.onResize;\n      var currentSize = _this.state.currentSize;\n\n\n      var nextSize = {\n        width: _this.textInput.current.offsetWidth,\n        height: _this.textInput.current.offsetHeight\n      };\n\n      if (!_this.state.currentSize || currentSize.width !== nextSize.width || currentSize.height !== nextSize.height) {\n        onResize(nextSize);\n        _this.setState({ currentSize: nextSize });\n      }\n    };\n\n    _this.listenKeydown = function () {\n      var _this$props = _this.props,\n          cleanOnEnter = _this$props.cleanOnEnter,\n          onChange = _this$props.onChange,\n          onEnter = _this$props.onEnter;\n\n\n      if (cleanOnEnter) {\n        _this.textInput.current.addEventListener('keydown', function (event) {\n          if (event.keyCode === 13) {\n            event.preventDefault();\n            return false;\n          }\n        });\n        _this.textInput.current.addEventListener('keyup', function (event) {\n          if (event.keyCode === 13) {\n            var cleanedText = _this.replaceAllTextEmojiToString();\n            if (typeof onEnter === 'function') {\n              onEnter(cleanedText);\n            }\n\n            if (typeof onChange === 'function') {\n              onChange(cleanedText);\n            }\n\n            _this.updateHTML('');\n          }\n        });\n      }\n    };\n\n    _this.setValue = function (value) {\n      _this.updateHTML(value);\n      _this.textInput.current.blur();\n    };\n\n    _this.updateHTML = function () {\n      var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.props.value;\n\n      _this.setState({ html: value });\n      _this.textInput.current.innerHTML = _this.replaceAllTextEmojis(value || '');\n    };\n\n    _this.emitOnChange = function () {\n      _this.props.onChange(_this.replaceAllTextEmojiToString());\n    };\n\n    _this.getAllEmojiStyle = function () {\n      var allEmojiButton = document.querySelectorAll('.emoji-mart-category-list > li > button');\n\n      var allEmojiStyle = {};\n\n      allEmojiButton.forEach(function (emojiButton) {\n        var label = emojiButton.getAttribute('aria-label');\n\n        var _label$split = label.split(','),\n            _label$split2 = slicedToArray(_label$split, 1),\n            emoji = _label$split2[0];\n\n        var emojiSpanEl = emojiButton.querySelector('span');\n\n        var style = _this.replaceAll(emojiSpanEl.style.cssText, '\"', \"'\");\n\n        allEmojiStyle[emoji] = style;\n      });\n\n      _this.setState({ allEmojiStyle: allEmojiStyle });\n    };\n\n    _this.toggleShowPicker = function () {\n      _this.setState({ showPicker: !_this.state.showPicker });\n    };\n\n    _this.emitChange = function () {\n      var _this$props2 = _this.props,\n          onChange = _this$props2.onChange,\n          onResize = _this$props2.onResize,\n          maxLength = _this$props2.maxLength;\n\n\n      if (typeof maxLength !== 'undefined' && Number.isInteger(maxLength)) {\n        var totalCharacters = [].concat(toConsumableArray(_this.replaceAllTextEmojiToString())).length;\n\n        if (totalCharacters > maxLength) {\n          _this.textInput.current.innerHTML = '';\n          _this.pasteHtmlAtCaret(_this.state.html);\n          return;\n        }\n      }\n\n      var html = _this.textInput.current.innerHTML;\n\n      _this.setState({ html: html });\n\n      if (typeof onChange === 'function') {\n        _this.onChangeDebounced(html);\n      }\n\n      if (typeof onResize === 'function') {\n        _this.checkAndEmitResize();\n      }\n    };\n\n    _this.replaceAllTextEmojiToString = function () {\n      if (!_this.textInput.current) {\n        return '';\n      }\n\n      var container = document.createElement('div');\n      container.innerHTML = _this.textInput.current.innerHTML;\n\n      var images = container.querySelectorAll('img');\n\n      images.forEach(function (image) {\n        image.outerHTML = image.dataset.emoji;\n      });\n\n      var text = container.innerText;\n\n      // remove all ↵ for safari\n      text = text.replace(/\\n/ig, '');\n\n      return text;\n    };\n\n    _this.pasteHtmlAtCaret = function (html) {\n      var sel = void 0,\n          range = void 0;\n      if (window.getSelection) {\n        // IE9 and non-IE\n        sel = window.getSelection();\n        if (sel.getRangeAt && sel.rangeCount) {\n          range = sel.getRangeAt(0);\n          range.deleteContents();\n\n          // Range.createContextualFragment() would be useful here but is\n          // non-standard and not supported in all browsers (IE9, for one)\n          var el = document.createElement('div');\n          el.innerHTML = html;\n          var frag = document.createDocumentFragment();var node;var lastNode;\n          while (node = el.firstChild) {\n            lastNode = frag.appendChild(node);\n          }\n          range.insertNode(frag);\n\n          // Preserve the selection\n          if (lastNode) {\n            range = range.cloneRange();\n            range.setStartAfter(lastNode);\n            range.collapse(true);\n            sel.removeAllRanges();\n            sel.addRange(range);\n          }\n        }\n      } else if (document.selection && document.selection.type !== 'Control') {\n        // IE < 9\n        document.selection.createRange().pasteHTML(html);\n      }\n    };\n\n    _this.replaceAll = function (str, find, replace) {\n      return str.replace(new RegExp(find, 'g'), replace);\n    };\n\n    _this.getImage = function (emoji) {\n      var shortNames = '' + emoji.short_names;\n\n      shortNames = _this.replaceAll(shortNames, ',', ', ');\n\n      var emojiSpanEl = document.querySelector('[aria-label=\"' + emoji.native + ', ' + shortNames + '\"] > span');\n\n      if (!emojiSpanEl) return '';\n\n      var style = _this.replaceAll(emojiSpanEl.style.cssText, '\"', \"'\");\n\n      return '<img style=\"' + style + '\" data-emoji=\"' + emoji.native + '\" src=\"https://upload.wikimedia.org/wikipedia/commons/c/ce/Transparent.gif\" />';\n    };\n\n    _this.replaceAllTextEmojis = function (text) {\n      var allEmojis = _this.getAllEmojisFromText(text);\n\n      if (allEmojis) {\n        allEmojis = [].concat(toConsumableArray(new Set(allEmojis))); // remove duplicates\n        var allEmojiStyle = _this.state.allEmojiStyle;\n\n        allEmojis.forEach(function (emoji) {\n          var style = allEmojiStyle[emoji];\n\n          if (!style) return;\n\n          text = _this.replaceAll(text, emoji, '<img style=\"' + style + '\" data-emoji=\"' + emoji + '\" src=\"https://upload.wikimedia.org/wikipedia/commons/c/ce/Transparent.gif\" />');\n        });\n      }\n\n      return text;\n    };\n\n    _this.handleSelectEmoji = function (emoji) {\n      var keepOpenend = _this.props.keepOpenend;\n\n\n      _this.textInput.current.focus();\n\n      _this.pasteHtmlAtCaret(_this.getImage(emoji));\n\n      _this.textInput.current.focus();\n\n      _this.emitChange();\n\n      if (!keepOpenend) {\n        _this.toggleShowPicker();\n      }\n    };\n\n    _this.getAllEmojisFromText = function (text) {\n      return text.match(/(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?)*/g);\n    };\n\n    _this.handleContentEditableInputCopyAndPaste = function () {\n      var self = _this;\n      _this.textInput.current.addEventListener('copy', function (e) {\n        var selectedText = window.getSelection();\n\n        var container = document.createElement('div');\n\n        for (var i = 0, len = selectedText.rangeCount; i < len; ++i) {\n          container.appendChild(selectedText.getRangeAt(i).cloneContents());\n        }\n\n        container = replaceEmojiToString(container);\n\n        e.clipboardData.setData('text', container.innerText);\n        e.preventDefault();\n\n        function replaceEmojiToString(container) {\n          var images = container.querySelectorAll('img');\n\n          images.forEach(function (image) {\n            image.outerHTML = image.dataset.emoji;\n          });\n\n          return container;\n        }\n      });\n\n      // Paste fix for contenteditable\n      _this.textInput.current.addEventListener('paste', function (e) {\n        e.preventDefault();\n        var content = void 0;\n        if (window.clipboardData) {\n          content = window.clipboardData.getData('Text');\n          content = self.replaceAllTextEmojis(content);\n          if (window.getSelection) {\n            var selObj = window.getSelection();\n            var selRange = selObj.getRangeAt(0);\n            selRange.deleteContents();\n            selRange.insertNode(document.createTextNode(content));\n          }\n        } else if (e.clipboardData) {\n          content = e.clipboardData.getData('text/plain');\n          content = self.replaceAllTextEmojis(content);\n          document.execCommand('insertHTML', false, content);\n        }\n      });\n    };\n\n    _this.checkIsEmpty = function () {\n      var text = _this.replaceAllTextEmojiToString();\n\n      return text === '';\n    };\n\n    _this.handleClick = function () {\n      var onClick = _this.props.onClick;\n\n\n      if (typeof onClick === 'function') {\n        onClick();\n      }\n    };\n\n    _this.listenFocus = function () {\n      _this.textInput.current.addEventListener('focus', function () {\n        var onFocus = _this.props.onFocus;\n\n\n        if (typeof onFocus === 'function') {\n          onFocus();\n        }\n      });\n    };\n\n    _this.handleKeyDown = function (event) {\n      var onKeyDown = _this.props.onKeyDown;\n\n\n      if (typeof onKeyDown === 'function') {\n        onKeyDown(event);\n      }\n    };\n\n    _this.getExcludePicker = function () {\n      var disableRecent = _this.props.disableRecent;\n\n\n      var exclude = [];\n\n      if (disableRecent) {\n        exclude.push('recent');\n      }\n\n      return exclude;\n    };\n\n    _this.textInput = react__WEBPACK_IMPORTED_MODULE_0___default.a.createRef();\n\n    if (typeof props.onChange === 'function') {\n      _this.onChangeDebounced = debounce_1(_this.emitOnChange, 100);\n    }\n    return _this;\n  }\n\n  createClass(InputEmoji, [{\n    key: 'focus',\n    value: function focus() {\n      this.textInput.current.focus();\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.handleContentEditableInputCopyAndPaste();\n\n      this.getAllEmojiStyle();\n\n      this.updateHTML();\n\n      this.listenKeydown();\n\n      this.listenFocus();\n\n      this.setCurrentSize();\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          _props$height = _props.height,\n          height = _props$height === undefined ? 40 : _props$height,\n          _props$placeholder = _props.placeholder,\n          placeholder = _props$placeholder === undefined ? 'Type a message' : _props$placeholder,\n          _props$borderRadius = _props.borderRadius,\n          borderRadius = _props$borderRadius === undefined ? 21 : _props$borderRadius,\n          _props$borderColor = _props.borderColor,\n          borderColor = _props$borderColor === undefined ? '#EAEAEA' : _props$borderColor,\n          _props$fontSize = _props.fontSize,\n          fontSize = _props$fontSize === undefined ? 15 : _props$fontSize,\n          _props$fontFamily = _props.fontFamily,\n          fontFamily = _props$fontFamily === undefined ? 'sans-serif' : _props$fontFamily,\n          inputClass = _props.inputClass,\n          _props$tabIndex = _props.tabIndex,\n          tabIndex = _props$tabIndex === undefined ? 0 : _props$tabIndex;\n      var showPicker = this.state.showPicker;\n\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'div',\n        { className: 'react-emoji' },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          {\n            className: 'react-emoji-picker--container',\n            onClick: this.handleContainerClick\n          },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'react-emoji-picker--wrapper' + (showPicker ? ' react-emoji-picker--wrapper__show' : '') },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              {\n                className: 'react-emoji-picker' + (showPicker ? ' react-emoji-picker__show' : '')\n              },\n              react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Picker, {\n                showPreview: false,\n                showSkinTones: false,\n                set: 'apple',\n                onSelect: this.handleSelectEmoji,\n                exclude: this.getExcludePicker()\n              })\n            )\n          )\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          {\n            className: 'react-input-emoji--container',\n            style: {\n              borderRadius: borderRadius,\n              borderColor: borderColor,\n              fontSize: fontSize,\n              fontFamily: fontFamily\n            }\n          },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'react-input-emoji--wrapper', onClick: this.handleClick },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              {\n                className: 'react-input-emoji--placeholder',\n                style: {\n                  visibility: !this.checkIsEmpty() ? 'hidden' : 'visible'\n                }\n              },\n              placeholder\n            ),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('div', {\n              ref: this.textInput,\n              tabIndex: tabIndex,\n              contentEditable: true,\n              className: 'react-input-emoji--input' + (inputClass ? ' ' + inputClass : ''),\n              onInput: this.emitChange,\n              onBlur: this.emitChange,\n              onKeyDown: this.handleKeyDown,\n              style: {\n                paddingTop: (height - 20) / 2 + 'px',\n                paddingBottom: (height - 20) / 2 + 'px',\n                minHeight: height + 'px'\n              }\n            })\n          )\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'button',\n          {\n            className: 'react-input-emoji--button' + (showPicker ? ' react-input-emoji--button__show' : ''),\n            onClick: this.toggleShowPicker },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'svg',\n            { xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 24 24', width: '24', height: '24' },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('path', { d: 'M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10' }),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('path', { d: 'M8 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 8 7M16 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 16 7M15.232 15c-.693 1.195-1.87 2-3.349 2-1.477 0-2.655-.805-3.347-2H15m3-2H6a6 6 0 1 0 12 0' })\n          )\n        ),\n        showPicker && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('div', {\n          className: 'react-input-emoji--overlay',\n          onClick: this.toggleShowPicker\n        })\n      );\n    }\n  }, {\n    key: 'value',\n    get: function get() {\n      return this.replaceAllTextEmojiToString();\n    },\n    set: function set(value) {\n      this.setValue(value);\n    }\n  }]);\n  return InputEmoji;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n\nInputEmoji.propTypes = {\n  value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  cleanOnEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  onResize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  maxLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  keepOpenend: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  inputClass: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  disableRecent: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  // style\n  height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  borderRadius: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  borderColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  fontSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  fontFamily: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (InputEmoji);\n//# sourceMappingURL=index.es.js.map\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-input-emoji/dist/index.es.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-is/cjs/react-is.development.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/react-is/cjs/react-is.development.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n  if (typeof object === 'object' && object !== null) {\n    var $$typeof = object.$$typeof;\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n\n          default:\n            var $$typeofType = type && type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n\n              default:\n                return $$typeof;\n            }\n\n        }\n\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n    }\n  }\n\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-is/cjs/react-is.development.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-is/index.js":
/*!****************************************************!*\
  !*** ./jaas-client/node_modules/react-is/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"./jaas-client/node_modules/react-is/cjs/react-is.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-is/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js ***!
  \***************************************************************************/
/*! exports provided: MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter, BrowserRouter, HashRouter, Link, NavLink */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BrowserRouter\", function() { return BrowserRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HashRouter\", function() { return HashRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Link\", function() { return Link; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NavLink\", function() { return NavLink; });\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-router */ \"./jaas-client/node_modules/react-router/esm/react-router.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MemoryRouter\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"MemoryRouter\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Prompt\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Prompt\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Redirect\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Redirect\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Route\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Route\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Router\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Router\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StaticRouter\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"StaticRouter\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Switch\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Switch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"generatePath\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"generatePath\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matchPath\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"matchPath\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useHistory\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useHistory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useLocation\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useLocation\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useParams\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useParams\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useRouteMatch\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useRouteMatch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withRouter\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"withRouter\"]; });\n\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! history */ \"./jaas-client/node_modules/history/esm/history.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tiny-invariant */ \"./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\n\n\n\n\n\n\n\n\n\n\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BrowserRouter, _React$Component);\n\n  function BrowserRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createBrowserHistory\"])(_this.props);\n    return _this;\n  }\n\n  var _proto = BrowserRouter.prototype;\n\n  _proto.render = function render() {\n    return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"Router\"], {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return BrowserRouter;\n}(react__WEBPACK_IMPORTED_MODULE_2___default.a.Component);\n\nif (true) {\n  BrowserRouter.propTypes = {\n    basename: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n    forceRefresh: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    getUserConfirmation: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n    keyLength: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  };\n\n  BrowserRouter.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\") : undefined;\n  };\n}\n\n/**\n * The public API for a <Router> that uses window.location.hash.\n */\n\nvar HashRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(HashRouter, _React$Component);\n\n  function HashRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createHashHistory\"])(_this.props);\n    return _this;\n  }\n\n  var _proto = HashRouter.prototype;\n\n  _proto.render = function render() {\n    return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"Router\"], {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return HashRouter;\n}(react__WEBPACK_IMPORTED_MODULE_2___default.a.Component);\n\nif (true) {\n  HashRouter.propTypes = {\n    basename: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n    getUserConfirmation: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n    hashType: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n  };\n\n  HashRouter.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(!this.props.history, \"<HashRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { HashRouter as Router }`.\") : undefined;\n  };\n}\n\nvar resolveToLocation = function resolveToLocation(to, currentLocation) {\n  return typeof to === \"function\" ? to(currentLocation) : to;\n};\nvar normalizeToLocation = function normalizeToLocation(to, currentLocation) {\n  return typeof to === \"string\" ? Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(to, null, null, currentLocation) : to;\n};\n\nvar forwardRefShim = function forwardRefShim(C) {\n  return C;\n};\n\nvar forwardRef = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n  forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nvar LinkAnchor = forwardRef(function (_ref, forwardedRef) {\n  var innerRef = _ref.innerRef,\n      navigate = _ref.navigate,\n      _onClick = _ref.onClick,\n      rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ref, [\"innerRef\", \"navigate\", \"onClick\"]);\n\n  var target = rest.target;\n\n  var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, rest, {\n    onClick: function onClick(event) {\n      try {\n        if (_onClick) _onClick(event);\n      } catch (ex) {\n        event.preventDefault();\n        throw ex;\n      }\n\n      if (!event.defaultPrevented && // onClick prevented default\n      event.button === 0 && ( // ignore everything but left clicks\n      !target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n      !isModifiedEvent(event) // ignore clicks with modifier keys\n      ) {\n          event.preventDefault();\n          navigate();\n        }\n    }\n  }); // React 15 compat\n\n\n  if (forwardRefShim !== forwardRef) {\n    props.ref = forwardedRef || innerRef;\n  } else {\n    props.ref = innerRef;\n  }\n  /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n\n\n  return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"a\", props);\n});\n\nif (true) {\n  LinkAnchor.displayName = \"LinkAnchor\";\n}\n/**\n * The public API for rendering a history-aware <a>.\n */\n\n\nvar Link = forwardRef(function (_ref2, forwardedRef) {\n  var _ref2$component = _ref2.component,\n      component = _ref2$component === void 0 ? LinkAnchor : _ref2$component,\n      replace = _ref2.replace,\n      to = _ref2.to,\n      innerRef = _ref2.innerRef,\n      rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ref2, [\"component\", \"replace\", \"to\", \"innerRef\"]);\n\n  return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"__RouterContext\"].Consumer, null, function (context) {\n    !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(false, \"You should not use <Link> outside a <Router>\") : undefined : void 0;\n    var history = context.history;\n    var location = normalizeToLocation(resolveToLocation(to, context.location), context.location);\n    var href = location ? history.createHref(location) : \"\";\n\n    var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, rest, {\n      href: href,\n      navigate: function navigate() {\n        var location = resolveToLocation(to, context.location);\n        var method = replace ? history.replace : history.push;\n        method(location);\n      }\n    }); // React 15 compat\n\n\n    if (forwardRefShim !== forwardRef) {\n      props.ref = forwardedRef || innerRef;\n    } else {\n      props.innerRef = innerRef;\n    }\n\n    return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component, props);\n  });\n});\n\nif (true) {\n  var toType = prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func]);\n  var refType = prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    current: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any\n  })]);\n  Link.displayName = \"Link\";\n  Link.propTypes = {\n    innerRef: refType,\n    onClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n    replace: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    target: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    to: toType.isRequired\n  };\n}\n\nvar forwardRefShim$1 = function forwardRefShim(C) {\n  return C;\n};\n\nvar forwardRef$1 = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef;\n\nif (typeof forwardRef$1 === \"undefined\") {\n  forwardRef$1 = forwardRefShim$1;\n}\n\nfunction joinClassnames() {\n  for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n    classnames[_key] = arguments[_key];\n  }\n\n  return classnames.filter(function (i) {\n    return i;\n  }).join(\" \");\n}\n/**\n * A <Link> wrapper that knows if it's \"active\" or not.\n */\n\n\nvar NavLink = forwardRef$1(function (_ref, forwardedRef) {\n  var _ref$ariaCurrent = _ref[\"aria-current\"],\n      ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n      _ref$activeClassName = _ref.activeClassName,\n      activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n      activeStyle = _ref.activeStyle,\n      classNameProp = _ref.className,\n      exact = _ref.exact,\n      isActiveProp = _ref.isActive,\n      locationProp = _ref.location,\n      sensitive = _ref.sensitive,\n      strict = _ref.strict,\n      styleProp = _ref.style,\n      to = _ref.to,\n      innerRef = _ref.innerRef,\n      rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"sensitive\", \"strict\", \"style\", \"to\", \"innerRef\"]);\n\n  return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"__RouterContext\"].Consumer, null, function (context) {\n    !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(false, \"You should not use <NavLink> outside a <Router>\") : undefined : void 0;\n    var currentLocation = locationProp || context.location;\n    var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation);\n    var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n    var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n    var match = escapedPath ? Object(react_router__WEBPACK_IMPORTED_MODULE_0__[\"matchPath\"])(currentLocation.pathname, {\n      path: escapedPath,\n      exact: exact,\n      sensitive: sensitive,\n      strict: strict\n    }) : null;\n    var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match);\n    var className = isActive ? joinClassnames(classNameProp, activeClassName) : classNameProp;\n    var style = isActive ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, styleProp, {}, activeStyle) : styleProp;\n\n    var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({\n      \"aria-current\": isActive && ariaCurrent || null,\n      className: className,\n      style: style,\n      to: toLocation\n    }, rest); // React 15 compat\n\n\n    if (forwardRefShim$1 !== forwardRef$1) {\n      props.ref = forwardedRef || innerRef;\n    } else {\n      props.innerRef = innerRef;\n    }\n\n    return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Link, props);\n  });\n});\n\nif (true) {\n  NavLink.displayName = \"NavLink\";\n  var ariaCurrentType = prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf([\"page\", \"step\", \"location\", \"date\", \"time\", \"true\"]);\n  NavLink.propTypes = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, Link.propTypes, {\n    \"aria-current\": ariaCurrentType,\n    activeClassName: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    activeStyle: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n    className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    exact: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    isActive: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n    location: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n    sensitive: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    strict: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    style: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object\n  });\n}\n\n\n//# sourceMappingURL=react-router-dom.js.map\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-router/esm/react-router.js":
/*!*******************************************************************!*\
  !*** ./jaas-client/node_modules/react-router/esm/react-router.js ***!
  \*******************************************************************/
/*! exports provided: MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, __HistoryContext, __RouterContext, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MemoryRouter\", function() { return MemoryRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Prompt\", function() { return Prompt; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Redirect\", function() { return Redirect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Route\", function() { return Route; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Router\", function() { return Router; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StaticRouter\", function() { return StaticRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Switch\", function() { return Switch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__HistoryContext\", function() { return historyContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__RouterContext\", function() { return context; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"generatePath\", function() { return generatePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"matchPath\", function() { return matchPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useHistory\", function() { return useHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useLocation\", function() { return useLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useParams\", function() { return useParams; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useRouteMatch\", function() { return useRouteMatch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"withRouter\", function() { return withRouter; });\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! history */ \"./jaas-client/node_modules/history/esm/history.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var mini_create_react_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! mini-create-react-context */ \"./jaas-client/node_modules/mini-create-react-context/dist/esm/index.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! tiny-invariant */ \"./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! path-to-regexp */ \"./jaas-client/node_modules/path-to-regexp/index.js\");\n/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(path_to_regexp__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! hoist-non-react-statics */ \"./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n// TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext = function createNamedContext(name) {\n  var context = Object(mini_create_react_context__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n  context.displayName = name;\n  return context;\n};\n\nvar historyContext =\n/*#__PURE__*/\ncreateNamedContext(\"Router-History\");\n\n// TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext$1 = function createNamedContext(name) {\n  var context = Object(mini_create_react_context__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n  context.displayName = name;\n  return context;\n};\n\nvar context =\n/*#__PURE__*/\ncreateNamedContext$1(\"Router\");\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Router, _React$Component);\n\n  Router.computeRootMatch = function computeRootMatch(pathname) {\n    return {\n      path: \"/\",\n      url: \"/\",\n      params: {},\n      isExact: pathname === \"/\"\n    };\n  };\n\n  function Router(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this;\n    _this.state = {\n      location: props.history.location\n    }; // This is a bit of a hack. We have to start listening for location\n    // changes here in the constructor in case there are any <Redirect>s\n    // on the initial render. If there are, they will replace/push when\n    // they mount and since cDM fires in children before parents, we may\n    // get a new location before the <Router> is mounted.\n\n    _this._isMounted = false;\n    _this._pendingLocation = null;\n\n    if (!props.staticContext) {\n      _this.unlisten = props.history.listen(function (location) {\n        if (_this._isMounted) {\n          _this.setState({\n            location: location\n          });\n        } else {\n          _this._pendingLocation = location;\n        }\n      });\n    }\n\n    return _this;\n  }\n\n  var _proto = Router.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this._isMounted = true;\n\n    if (this._pendingLocation) {\n      this.setState({\n        location: this._pendingLocation\n      });\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.unlisten) this.unlisten();\n  };\n\n  _proto.render = function render() {\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Provider, {\n      value: {\n        history: this.props.history,\n        location: this.state.location,\n        match: Router.computeRootMatch(this.state.location.pathname),\n        staticContext: this.props.staticContext\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(historyContext.Provider, {\n      children: this.props.children || null,\n      value: this.props.history\n    }));\n  };\n\n  return Router;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  Router.propTypes = {\n    children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n    history: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object.isRequired,\n    staticContext: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n  };\n\n  Router.prototype.componentDidUpdate = function (prevProps) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(prevProps.history === this.props.history, \"You cannot change <Router history>\") : undefined;\n  };\n}\n\n/**\n * The public API for a <Router> that stores location in memory.\n */\n\nvar MemoryRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(MemoryRouter, _React$Component);\n\n  function MemoryRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createMemoryHistory\"])(_this.props);\n    return _this;\n  }\n\n  var _proto = MemoryRouter.prototype;\n\n  _proto.render = function render() {\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return MemoryRouter;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  MemoryRouter.propTypes = {\n    initialEntries: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.array,\n    initialIndex: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number,\n    getUserConfirmation: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n    keyLength: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number,\n    children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node\n  };\n\n  MemoryRouter.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!this.props.history, \"<MemoryRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\") : undefined;\n  };\n}\n\nvar Lifecycle =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Lifecycle, _React$Component);\n\n  function Lifecycle() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Lifecycle.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    if (this.props.onMount) this.props.onMount.call(this, this);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n  };\n\n  _proto.render = function render() {\n    return null;\n  };\n\n  return Lifecycle;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\n\nfunction Prompt(_ref) {\n  var message = _ref.message,\n      _ref$when = _ref.when,\n      when = _ref$when === void 0 ? true : _ref$when;\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n    !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Prompt> outside a <Router>\") : undefined : void 0;\n    if (!when || context.staticContext) return null;\n    var method = context.history.block;\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Lifecycle, {\n      onMount: function onMount(self) {\n        self.release = method(message);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        if (prevProps.message !== message) {\n          self.release();\n          self.release = method(message);\n        }\n      },\n      onUnmount: function onUnmount(self) {\n        self.release();\n      },\n      message: message\n    });\n  });\n}\n\nif (true) {\n  var messageType = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string]);\n  Prompt.propTypes = {\n    when: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n    message: messageType.isRequired\n  };\n}\n\nvar cache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nfunction compilePath(path) {\n  if (cache[path]) return cache[path];\n  var generator = path_to_regexp__WEBPACK_IMPORTED_MODULE_8___default.a.compile(path);\n\n  if (cacheCount < cacheLimit) {\n    cache[path] = generator;\n    cacheCount++;\n  }\n\n  return generator;\n}\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\n\n\nfunction generatePath(path, params) {\n  if (path === void 0) {\n    path = \"/\";\n  }\n\n  if (params === void 0) {\n    params = {};\n  }\n\n  return path === \"/\" ? path : compilePath(path)(params, {\n    pretty: true\n  });\n}\n\n/**\n * The public API for navigating programmatically with a component.\n */\n\nfunction Redirect(_ref) {\n  var computedMatch = _ref.computedMatch,\n      to = _ref.to,\n      _ref$push = _ref.push,\n      push = _ref$push === void 0 ? false : _ref$push;\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n    !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Redirect> outside a <Router>\") : undefined : void 0;\n    var history = context.history,\n        staticContext = context.staticContext;\n    var method = push ? history.push : history.replace;\n    var location = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(computedMatch ? typeof to === \"string\" ? generatePath(to, computedMatch.params) : Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, to, {\n      pathname: generatePath(to.pathname, computedMatch.params)\n    }) : to); // When rendering in a static context,\n    // set the new location immediately.\n\n    if (staticContext) {\n      method(location);\n      return null;\n    }\n\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Lifecycle, {\n      onMount: function onMount() {\n        method(location);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        var prevLocation = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(prevProps.to);\n\n        if (!Object(history__WEBPACK_IMPORTED_MODULE_3__[\"locationsAreEqual\"])(prevLocation, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, location, {\n          key: prevLocation.key\n        }))) {\n          method(location);\n        }\n      },\n      to: to\n    });\n  });\n}\n\nif (true) {\n  Redirect.propTypes = {\n    push: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n    from: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string,\n    to: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object]).isRequired\n  };\n}\n\nvar cache$1 = {};\nvar cacheLimit$1 = 10000;\nvar cacheCount$1 = 0;\n\nfunction compilePath$1(path, options) {\n  var cacheKey = \"\" + options.end + options.strict + options.sensitive;\n  var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {});\n  if (pathCache[path]) return pathCache[path];\n  var keys = [];\n  var regexp = path_to_regexp__WEBPACK_IMPORTED_MODULE_8___default()(path, keys, options);\n  var result = {\n    regexp: regexp,\n    keys: keys\n  };\n\n  if (cacheCount$1 < cacheLimit$1) {\n    pathCache[path] = result;\n    cacheCount$1++;\n  }\n\n  return result;\n}\n/**\n * Public API for matching a URL pathname to a path.\n */\n\n\nfunction matchPath(pathname, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  if (typeof options === \"string\" || Array.isArray(options)) {\n    options = {\n      path: options\n    };\n  }\n\n  var _options = options,\n      path = _options.path,\n      _options$exact = _options.exact,\n      exact = _options$exact === void 0 ? false : _options$exact,\n      _options$strict = _options.strict,\n      strict = _options$strict === void 0 ? false : _options$strict,\n      _options$sensitive = _options.sensitive,\n      sensitive = _options$sensitive === void 0 ? false : _options$sensitive;\n  var paths = [].concat(path);\n  return paths.reduce(function (matched, path) {\n    if (!path && path !== \"\") return null;\n    if (matched) return matched;\n\n    var _compilePath = compilePath$1(path, {\n      end: exact,\n      strict: strict,\n      sensitive: sensitive\n    }),\n        regexp = _compilePath.regexp,\n        keys = _compilePath.keys;\n\n    var match = regexp.exec(pathname);\n    if (!match) return null;\n    var url = match[0],\n        values = match.slice(1);\n    var isExact = pathname === url;\n    if (exact && !isExact) return null;\n    return {\n      path: path,\n      // the path used to match\n      url: path === \"/\" && url === \"\" ? \"/\" : url,\n      // the matched portion of the URL\n      isExact: isExact,\n      // whether or not we matched exactly\n      params: keys.reduce(function (memo, key, index) {\n        memo[key.name] = values[index];\n        return memo;\n      }, {})\n    };\n  }, null);\n}\n\nfunction isEmptyChildren(children) {\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n  var value = children(props);\n   true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value !== undefined, \"You returned `undefined` from the `children` function of \" + (\"<Route\" + (path ? \" path=\\\"\" + path + \"\\\"\" : \"\") + \">, but you \") + \"should have returned a React element or `null`\") : undefined;\n  return value || null;\n}\n/**\n * The public API for matching a single path and rendering.\n */\n\n\nvar Route =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Route, _React$Component);\n\n  function Route() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Route.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context$1) {\n      !context$1 ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Route> outside a <Router>\") : undefined : void 0;\n      var location = _this.props.location || context$1.location;\n      var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us\n      : _this.props.path ? matchPath(location.pathname, _this.props) : context$1.match;\n\n      var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, context$1, {\n        location: location,\n        match: match\n      });\n\n      var _this$props = _this.props,\n          children = _this$props.children,\n          component = _this$props.component,\n          render = _this$props.render; // Preact uses an empty array as children by\n      // default, so use null if that's the case.\n\n      if (Array.isArray(children) && children.length === 0) {\n        children = null;\n      }\n\n      return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Provider, {\n        value: props\n      }, props.match ? children ? typeof children === \"function\" ?  true ? evalChildrenDev(children, props, _this.props.path) : undefined : children : component ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component, props) : render ? render(props) : null : typeof children === \"function\" ?  true ? evalChildrenDev(children, props, _this.props.path) : undefined : null);\n    });\n  };\n\n  return Route;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  Route.propTypes = {\n    children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node]),\n    component: function component(props, propName) {\n      if (props[propName] && !Object(react_is__WEBPACK_IMPORTED_MODULE_9__[\"isValidElementType\"])(props[propName])) {\n        return new Error(\"Invalid prop 'component' supplied to 'Route': the prop is not a valid React component\");\n      }\n    },\n    exact: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n    location: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object,\n    path: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string)]),\n    render: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n    sensitive: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n    strict: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool\n  };\n\n  Route.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.component), \"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored\") : undefined;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.render), \"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored\") : undefined;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.component && this.props.render), \"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\") : undefined;\n  };\n\n  Route.prototype.componentDidUpdate = function (prevProps) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.location && !prevProps.location), '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : undefined;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(!this.props.location && prevProps.location), '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : undefined;\n  };\n}\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n  if (!basename) return location;\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, location, {\n    pathname: addLeadingSlash(basename) + location.pathname\n  });\n}\n\nfunction stripBasename(basename, location) {\n  if (!basename) return location;\n  var base = addLeadingSlash(basename);\n  if (location.pathname.indexOf(base) !== 0) return location;\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, location, {\n    pathname: location.pathname.substr(base.length)\n  });\n}\n\nfunction createURL(location) {\n  return typeof location === \"string\" ? location : Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createPath\"])(location);\n}\n\nfunction staticHandler(methodName) {\n  return function () {\n      true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You cannot %s with <StaticRouter>\", methodName) : undefined ;\n  };\n}\n\nfunction noop() {}\n/**\n * The public top-level API for a \"static\" <Router>, so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\n\nvar StaticRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(StaticRouter, _React$Component);\n\n  function StaticRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n    _this.handlePush = function (location) {\n      return _this.navigateTo(location, \"PUSH\");\n    };\n\n    _this.handleReplace = function (location) {\n      return _this.navigateTo(location, \"REPLACE\");\n    };\n\n    _this.handleListen = function () {\n      return noop;\n    };\n\n    _this.handleBlock = function () {\n      return noop;\n    };\n\n    return _this;\n  }\n\n  var _proto = StaticRouter.prototype;\n\n  _proto.navigateTo = function navigateTo(location, action) {\n    var _this$props = this.props,\n        _this$props$basename = _this$props.basename,\n        basename = _this$props$basename === void 0 ? \"\" : _this$props$basename,\n        _this$props$context = _this$props.context,\n        context = _this$props$context === void 0 ? {} : _this$props$context;\n    context.action = action;\n    context.location = addBasename(basename, Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(location));\n    context.url = createURL(context.location);\n  };\n\n  _proto.render = function render() {\n    var _this$props2 = this.props,\n        _this$props2$basename = _this$props2.basename,\n        basename = _this$props2$basename === void 0 ? \"\" : _this$props2$basename,\n        _this$props2$context = _this$props2.context,\n        context = _this$props2$context === void 0 ? {} : _this$props2$context,\n        _this$props2$location = _this$props2.location,\n        location = _this$props2$location === void 0 ? \"/\" : _this$props2$location,\n        rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(_this$props2, [\"basename\", \"context\", \"location\"]);\n\n    var history = {\n      createHref: function createHref(path) {\n        return addLeadingSlash(basename + createURL(path));\n      },\n      action: \"POP\",\n      location: stripBasename(basename, Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(location)),\n      push: this.handlePush,\n      replace: this.handleReplace,\n      go: staticHandler(\"go\"),\n      goBack: staticHandler(\"goBack\"),\n      goForward: staticHandler(\"goForward\"),\n      listen: this.handleListen,\n      block: this.handleBlock\n    };\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Router, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, rest, {\n      history: history,\n      staticContext: context\n    }));\n  };\n\n  return StaticRouter;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  StaticRouter.propTypes = {\n    basename: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string,\n    context: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object,\n    location: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object])\n  };\n\n  StaticRouter.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!this.props.history, \"<StaticRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { StaticRouter as Router }`.\") : undefined;\n  };\n}\n\n/**\n * The public API for rendering the first <Route> that matches.\n */\n\nvar Switch =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Switch, _React$Component);\n\n  function Switch() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Switch.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n      !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Switch> outside a <Router>\") : undefined : void 0;\n      var location = _this.props.location || context.location;\n      var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()\n      // here because toArray adds keys to all child elements and we do not want\n      // to trigger an unmount/remount for two <Route>s that render the same\n      // component at different URLs.\n\n      react__WEBPACK_IMPORTED_MODULE_1___default.a.Children.forEach(_this.props.children, function (child) {\n        if (match == null && react__WEBPACK_IMPORTED_MODULE_1___default.a.isValidElement(child)) {\n          element = child;\n          var path = child.props.path || child.props.from;\n          match = path ? matchPath(location.pathname, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, child.props, {\n            path: path\n          })) : context.match;\n        }\n      });\n      return match ? react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(element, {\n        location: location,\n        computedMatch: match\n      }) : null;\n    });\n  };\n\n  return Switch;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  Switch.propTypes = {\n    children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n    location: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n  };\n\n  Switch.prototype.componentDidUpdate = function (prevProps) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.location && !prevProps.location), '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : undefined;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(!this.props.location && prevProps.location), '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : undefined;\n  };\n}\n\n/**\n * A public higher-order component to access the imperative API\n */\n\nfunction withRouter(Component) {\n  var displayName = \"withRouter(\" + (Component.displayName || Component.name) + \")\";\n\n  var C = function C(props) {\n    var wrappedComponentRef = props.wrappedComponentRef,\n        remainingProps = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(props, [\"wrappedComponentRef\"]);\n\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n      !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <\" + displayName + \" /> outside a <Router>\") : undefined : void 0;\n      return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, remainingProps, context, {\n        ref: wrappedComponentRef\n      }));\n    });\n  };\n\n  C.displayName = displayName;\n  C.WrappedComponent = Component;\n\n  if (true) {\n    C.propTypes = {\n      wrappedComponentRef: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object])\n    };\n  }\n\n  return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11___default()(C, Component);\n}\n\nvar useContext = react__WEBPACK_IMPORTED_MODULE_1___default.a.useContext;\nfunction useHistory() {\n  if (true) {\n    !(typeof useContext === \"function\") ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useHistory()\") : undefined : void 0;\n  }\n\n  return useContext(historyContext);\n}\nfunction useLocation() {\n  if (true) {\n    !(typeof useContext === \"function\") ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useLocation()\") : undefined : void 0;\n  }\n\n  return useContext(context).location;\n}\nfunction useParams() {\n  if (true) {\n    !(typeof useContext === \"function\") ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useParams()\") : undefined : void 0;\n  }\n\n  var match = useContext(context).match;\n  return match ? match.params : {};\n}\nfunction useRouteMatch(path) {\n  if (true) {\n    !(typeof useContext === \"function\") ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useRouteMatch()\") : undefined : void 0;\n  }\n\n  var location = useLocation();\n  var match = useContext(context).match;\n  return path ? matchPath(location.pathname, path) : match;\n}\n\nif (true) {\n  if (typeof window !== \"undefined\") {\n    var global = window;\n    var key = \"__react_router_build__\";\n    var buildNames = {\n      cjs: \"CommonJS\",\n      esm: \"ES modules\",\n      umd: \"UMD\"\n    };\n\n    if (global[key] && global[key] !== \"esm\") {\n      var initialBuildName = buildNames[global[key]];\n      var secondaryBuildName = buildNames[\"esm\"]; // TODO: Add link to article that explains in detail how to avoid\n      // loading 2 different builds.\n\n      throw new Error(\"You are loading the \" + secondaryBuildName + \" build of React Router \" + (\"on a page that is already running the \" + initialBuildName + \" \") + \"build, so things won't work right.\");\n    }\n\n    global[key] = \"esm\";\n  }\n}\n\n\n//# sourceMappingURL=react-router.js.map\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-router/esm/react-router.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-sound/lib/index.js":
/*!***********************************************************!*\
  !*** ./jaas-client/node_modules/react-sound/lib/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar pendingCalls = [];\nvar initialized = false;\n\nvar soundManager = void 0;\n// Allow server side rendering\nif (typeof window !== 'undefined') {\n  if (true) {\n    var _require = __webpack_require__(/*! soundmanager2 */ \"./jaas-client/node_modules/soundmanager2/script/soundmanager2.js\");\n\n    soundManager = _require.soundManager;\n  } else { var _require2; }\n\n  soundManager.onready(function () {\n    pendingCalls.slice().forEach(function (cb) {\n      return cb();\n    });\n  });\n}\n\nfunction _createSound(options, cb) {\n  if (soundManager.ok()) {\n    cb(soundManager.createSound(options));\n    return function () {};\n  } else {\n    if (!initialized) {\n      initialized = true;\n      soundManager.beginDelayedInit();\n    }\n\n    var call = function call() {\n      cb(soundManager.createSound(options));\n    };\n\n    pendingCalls.push(call);\n\n    return function () {\n      pendingCalls.splice(pendingCalls.indexOf(call), 1);\n    };\n  }\n}\n\nfunction noop() {}\n\nvar playStatuses = {\n  PLAYING: 'PLAYING',\n  STOPPED: 'STOPPED',\n  PAUSED: 'PAUSED'\n};\n\nvar Sound = function (_React$Component) {\n  _inherits(Sound, _React$Component);\n\n  function Sound() {\n    _classCallCheck(this, Sound);\n\n    return _possibleConstructorReturn(this, (Sound.__proto__ || Object.getPrototypeOf(Sound)).apply(this, arguments));\n  }\n\n  _createClass(Sound, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      this.createSound(function (sound) {\n        return _this2.updateSound(sound);\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.removeSound();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps) {\n      var _this3 = this;\n\n      if (this.props.url !== prevProps.url) {\n        this.createSound(function (sound) {\n          return _this3.updateSound(sound, prevProps);\n        });\n      } else {\n        this.updateSound(this.sound);\n      }\n    }\n  }, {\n    key: 'updateSound',\n    value: function updateSound(sound) {\n      var prevProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (!sound) {\n        return;\n      }\n\n      if (this.props.playStatus === playStatuses.PLAYING) {\n        if (sound.playState === 0) {\n          sound.play();\n        }\n\n        if (sound.paused) {\n          sound.resume();\n        }\n      } else if (this.props.playStatus === playStatuses.STOPPED) {\n        if (sound.playState !== 0) {\n          sound.stop();\n        }\n      } else {\n        // this.props.playStatus === playStatuses.PAUSED\n        if (!sound.paused) {\n          sound.pause();\n        }\n      }\n\n      if (this.props.playFromPosition != null) {\n        if (this.props.playFromPosition !== prevProps.playFromPosition) {\n          sound.setPosition(this.props.playFromPosition);\n        }\n      }\n\n      if (this.props.position != null) {\n        if (sound.position !== this.props.position && Math.round(sound.position) !== Math.round(this.props.position)) {\n\n          sound.setPosition(this.props.position);\n        }\n      }\n\n      if (this.props.volume !== prevProps.volume) {\n        sound.setVolume(this.props.volume);\n      }\n\n      if (this.props.playbackRate !== prevProps.playbackRate) {\n        sound.setPlaybackRate(this.props.playbackRate);\n      }\n    }\n  }, {\n    key: 'createSound',\n    value: function createSound(callback) {\n      var _this4 = this;\n\n      this.removeSound();\n\n      var instance = this;\n\n      if (!this.props.url) {\n        return;\n      }\n\n      this.stopCreatingSound = _createSound({\n        url: this.props.url,\n        autoLoad: this.props.autoLoad,\n        volume: this.props.volume,\n        position: this.props.playFromPosition || this.props.position || 0,\n        playbackRate: this.props.playbackRate,\n        whileloading: function whileloading() {\n          instance.props.onLoading(this);\n        },\n        whileplaying: function whileplaying() {\n          instance.props.onPlaying(this);\n        },\n        onerror: function onerror(errorCode, description) {\n          instance.props.onError(errorCode, description, this);\n        },\n        onload: function onload() {\n          instance.props.onLoad(this);\n        },\n        onpause: function onpause() {\n          instance.props.onPause(this);\n        },\n        onresume: function onresume() {\n          instance.props.onResume(this);\n        },\n        onstop: function onstop() {\n          instance.props.onStop(this);\n        },\n        onfinish: function onfinish() {\n          if (instance.props.loop && instance.props.playStatus === playStatuses.PLAYING) {\n            instance.sound.play();\n          } else {\n            instance.props.onFinishedPlaying();\n          }\n        },\n        onbufferchange: function onbufferchange() {\n          instance.props.onBufferChange(this.isBuffering);\n        }\n      }, function (sound) {\n        _this4.sound = sound;\n        callback(sound);\n      });\n    }\n  }, {\n    key: 'removeSound',\n    value: function removeSound() {\n      if (this.stopCreatingSound) {\n        this.stopCreatingSound();\n        delete this.stopCreatingSound;\n      }\n\n      if (this.sound) {\n        try {\n          this.sound.destruct();\n        } catch (e) {} // eslint-disable-line\n\n        delete this.sound;\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return null;\n    }\n  }]);\n\n  return Sound;\n}(_react2.default.Component);\n\nSound.status = playStatuses;\nSound.propTypes = {\n  url: _propTypes2.default.string.isRequired,\n  playStatus: _propTypes2.default.oneOf(Object.keys(playStatuses)).isRequired,\n  position: _propTypes2.default.number,\n  playFromPosition: _propTypes2.default.number,\n  volume: _propTypes2.default.number,\n  playbackRate: _propTypes2.default.number,\n  onError: _propTypes2.default.func,\n  onLoading: _propTypes2.default.func,\n  onLoad: _propTypes2.default.func,\n  onPlaying: _propTypes2.default.func,\n  onPause: _propTypes2.default.func,\n  onResume: _propTypes2.default.func,\n  onStop: _propTypes2.default.func,\n  onFinishedPlaying: _propTypes2.default.func,\n  onBufferChange: _propTypes2.default.func,\n  autoLoad: _propTypes2.default.bool,\n  loop: _propTypes2.default.bool\n};\nSound.defaultProps = {\n  volume: 100,\n  playbackRate: 1,\n  onError: noop,\n  onLoading: noop,\n  onPlaying: noop,\n  onLoad: noop,\n  onPause: noop,\n  onResume: noop,\n  onStop: noop,\n  onFinishedPlaying: noop,\n  onBufferChange: noop,\n  autoLoad: false,\n  loop: false\n};\nexports.default = Sound;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-sound/lib/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/CSSTransition.js":
/*!******************************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/CSSTransition.js ***!
  \******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var dom_helpers_addClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dom-helpers/addClass */ \"./jaas-client/node_modules/dom-helpers/esm/addClass.js\");\n/* harmony import */ var dom_helpers_removeClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! dom-helpers/removeClass */ \"./jaas-client/node_modules/dom-helpers/esm/removeClass.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Transition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Transition */ \"./jaas-client/node_modules/react-transition-group/esm/Transition.js\");\n/* harmony import */ var _utils_PropTypes__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/PropTypes */ \"./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js\");\n\n\n\n\n\n\n\n\n\n\nvar _addClass = function addClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return Object(dom_helpers_addClass__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(node, c);\n  });\n};\n\nvar removeClass = function removeClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return Object(dom_helpers_removeClass__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(node, c);\n  });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n *         <div>\n *           {\"I'll receive my-node-* classes\"}\n *         </div>\n *       </CSSTransition>\n *       <button type=\"button\" onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n *   opacity: 0;\n * }\n * .my-node-enter-active {\n *   opacity: 1;\n *   transition: opacity 200ms;\n * }\n * .my-node-exit {\n *   opacity: 1;\n * }\n * .my-node-exit-active {\n *   opacity: 0;\n *   transition: opacity 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**, so it's\n * important to add `transition` declaration only to them, otherwise transitions\n * might not behave as intended! This might not be obvious when the transitions\n * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in\n * the example above (minus `transition`), but it becomes apparent in more\n * complex transitions.\n *\n * **Note**: If you're using the\n * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)\n * prop, make sure to define styles for `.appear-*` classes as well.\n */\n\n\nvar CSSTransition = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(CSSTransition, _React$Component);\n\n  function CSSTransition() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.appliedClasses = {\n      appear: {},\n      enter: {},\n      exit: {}\n    };\n\n    _this.onEnter = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument[0],\n          appearing = _this$resolveArgument[1];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, appearing ? 'appear' : 'enter', 'base');\n\n      if (_this.props.onEnter) {\n        _this.props.onEnter(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntering = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument2[0],\n          appearing = _this$resolveArgument2[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.addClass(node, type, 'active');\n\n      if (_this.props.onEntering) {\n        _this.props.onEntering(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntered = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument3[0],\n          appearing = _this$resolveArgument3[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.removeClasses(node, type);\n\n      _this.addClass(node, type, 'done');\n\n      if (_this.props.onEntered) {\n        _this.props.onEntered(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onExit = function (maybeNode) {\n      var _this$resolveArgument4 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument4[0];\n\n      _this.removeClasses(node, 'appear');\n\n      _this.removeClasses(node, 'enter');\n\n      _this.addClass(node, 'exit', 'base');\n\n      if (_this.props.onExit) {\n        _this.props.onExit(maybeNode);\n      }\n    };\n\n    _this.onExiting = function (maybeNode) {\n      var _this$resolveArgument5 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument5[0];\n\n      _this.addClass(node, 'exit', 'active');\n\n      if (_this.props.onExiting) {\n        _this.props.onExiting(maybeNode);\n      }\n    };\n\n    _this.onExited = function (maybeNode) {\n      var _this$resolveArgument6 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument6[0];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, 'exit', 'done');\n\n      if (_this.props.onExited) {\n        _this.props.onExited(maybeNode);\n      }\n    };\n\n    _this.resolveArguments = function (maybeNode, maybeAppearing) {\n      return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`\n      : [maybeNode, maybeAppearing];\n    };\n\n    _this.getClassNames = function (type) {\n      var classNames = _this.props.classNames;\n      var isStringClassNames = typeof classNames === 'string';\n      var prefix = isStringClassNames && classNames ? classNames + \"-\" : '';\n      var baseClassName = isStringClassNames ? \"\" + prefix + type : classNames[type];\n      var activeClassName = isStringClassNames ? baseClassName + \"-active\" : classNames[type + \"Active\"];\n      var doneClassName = isStringClassNames ? baseClassName + \"-done\" : classNames[type + \"Done\"];\n      return {\n        baseClassName: baseClassName,\n        activeClassName: activeClassName,\n        doneClassName: doneClassName\n      };\n    };\n\n    return _this;\n  }\n\n  var _proto = CSSTransition.prototype;\n\n  _proto.addClass = function addClass(node, type, phase) {\n    var className = this.getClassNames(type)[phase + \"ClassName\"];\n\n    var _this$getClassNames = this.getClassNames('enter'),\n        doneClassName = _this$getClassNames.doneClassName;\n\n    if (type === 'appear' && phase === 'done' && doneClassName) {\n      className += \" \" + doneClassName;\n    } // This is for to force a repaint,\n    // which is necessary in order to transition styles when adding a class name.\n\n\n    if (phase === 'active') {\n      /* eslint-disable no-unused-expressions */\n      node && node.scrollTop;\n    }\n\n    if (className) {\n      this.appliedClasses[type][phase] = className;\n\n      _addClass(node, className);\n    }\n  };\n\n  _proto.removeClasses = function removeClasses(node, type) {\n    var _this$appliedClasses$ = this.appliedClasses[type],\n        baseClassName = _this$appliedClasses$.base,\n        activeClassName = _this$appliedClasses$.active,\n        doneClassName = _this$appliedClasses$.done;\n    this.appliedClasses[type] = {};\n\n    if (baseClassName) {\n      removeClass(node, baseClassName);\n    }\n\n    if (activeClassName) {\n      removeClass(node, activeClassName);\n    }\n\n    if (doneClassName) {\n      removeClass(node, doneClassName);\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        _ = _this$props.classNames,\n        props = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_this$props, [\"classNames\"]);\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(_Transition__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, props, {\n      onEnter: this.onEnter,\n      onEntered: this.onEntered,\n      onEntering: this.onEntering,\n      onExit: this.onExit,\n      onExiting: this.onExiting,\n      onExited: this.onExited\n    }));\n  };\n\n  return CSSTransition;\n}(react__WEBPACK_IMPORTED_MODULE_6___default.a.Component);\n\nCSSTransition.defaultProps = {\n  classNames: ''\n};\nCSSTransition.propTypes =  true ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, _Transition__WEBPACK_IMPORTED_MODULE_7__[\"default\"].propTypes, {\n  /**\n   * The animation classNames applied to the component as it appears, enters,\n   * exits or has finished the transition. A single name can be provided, which\n   * will be suffixed for each stage, e.g. `classNames=\"fade\"` applies:\n   *\n   * - `fade-appear`, `fade-appear-active`, `fade-appear-done`\n   * - `fade-enter`, `fade-enter-active`, `fade-enter-done`\n   * - `fade-exit`, `fade-exit-active`, `fade-exit-done`\n   *\n   * A few details to note about how these classes are applied:\n   *\n   * 1. They are _joined_ with the ones that are already defined on the child\n   *    component, so if you want to add some base styles, you can use\n   *    `className` without worrying that it will be overridden.\n   *\n   * 2. If the transition component mounts with `in={false}`, no classes are\n   *    applied yet. You might be expecting `*-exit-done`, but if you think\n   *    about it, a component cannot finish exiting if it hasn't entered yet.\n   *\n   * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This\n   *    allows you to define different behavior for when appearing is done and\n   *    when regular entering is done, using selectors like\n   *    `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply\n   *    an epic entrance animation when element first appears in the DOM using\n   *    [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n   *    simply use `fade-enter-done` for defining both cases.\n   *\n   * Each individual classNames can also be specified independently like:\n   *\n   * ```js\n   * classNames={{\n   *  appear: 'my-appear',\n   *  appearActive: 'my-active-appear',\n   *  appearDone: 'my-done-appear',\n   *  enter: 'my-enter',\n   *  enterActive: 'my-active-enter',\n   *  enterDone: 'my-done-enter',\n   *  exit: 'my-exit',\n   *  exitActive: 'my-active-exit',\n   *  exitDone: 'my-done-exit',\n   * }}\n   * ```\n   *\n   * If you want to set these classes using CSS Modules:\n   *\n   * ```js\n   * import styles from './styles.css';\n   * ```\n   *\n   * you might want to use camelCase in your CSS file, that way could simply\n   * spread them instead of listing them one by one:\n   *\n   * ```js\n   * classNames={{ ...styles }}\n   * ```\n   *\n   * @type {string | {\n   *  appear?: string,\n   *  appearActive?: string,\n   *  appearDone?: string,\n   *  enter?: string,\n   *  enterActive?: string,\n   *  enterDone?: string,\n   *  exit?: string,\n   *  exitActive?: string,\n   *  exitDone?: string,\n   * }}\n   */\n  classNames: _utils_PropTypes__WEBPACK_IMPORTED_MODULE_8__[\"classNamesShape\"],\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter-active' or\n   * 'appear-active' class is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or\n   * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' classes\n   * are **removed** and the `exit-done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func\n}) : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (CSSTransition);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/CSSTransition.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/ReplaceTransition.js":
/*!**********************************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/ReplaceTransition.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _TransitionGroup__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TransitionGroup */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js\");\n\n\n\n\n\n\n/**\n * The `<ReplaceTransition>` component is a specialized `Transition` component\n * that animates between two children.\n *\n * ```jsx\n * <ReplaceTransition in>\n *   <Fade><div>I appear first</div></Fade>\n *   <Fade><div>I replace the above</div></Fade>\n * </ReplaceTransition>\n * ```\n */\n\nvar ReplaceTransition = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(ReplaceTransition, _React$Component);\n\n  function ReplaceTransition() {\n    var _this;\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n\n    _this.handleEnter = function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return _this.handleLifecycle('onEnter', 0, args);\n    };\n\n    _this.handleEntering = function () {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return _this.handleLifecycle('onEntering', 0, args);\n    };\n\n    _this.handleEntered = function () {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      return _this.handleLifecycle('onEntered', 0, args);\n    };\n\n    _this.handleExit = function () {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\n      return _this.handleLifecycle('onExit', 1, args);\n    };\n\n    _this.handleExiting = function () {\n      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        args[_key6] = arguments[_key6];\n      }\n\n      return _this.handleLifecycle('onExiting', 1, args);\n    };\n\n    _this.handleExited = function () {\n      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        args[_key7] = arguments[_key7];\n      }\n\n      return _this.handleLifecycle('onExited', 1, args);\n    };\n\n    return _this;\n  }\n\n  var _proto = ReplaceTransition.prototype;\n\n  _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {\n    var _child$props;\n\n    var children = this.props.children;\n    var child = react__WEBPACK_IMPORTED_MODULE_3___default.a.Children.toArray(children)[idx];\n    if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);\n\n    if (this.props[handler]) {\n      var maybeNode = child.props.nodeRef ? undefined : react_dom__WEBPACK_IMPORTED_MODULE_4___default.a.findDOMNode(this);\n      this.props[handler](maybeNode);\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        children = _this$props.children,\n        inProp = _this$props.in,\n        props = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_this$props, [\"children\", \"in\"]);\n\n    var _React$Children$toArr = react__WEBPACK_IMPORTED_MODULE_3___default.a.Children.toArray(children),\n        first = _React$Children$toArr[0],\n        second = _React$Children$toArr[1];\n\n    delete props.onEnter;\n    delete props.onEntering;\n    delete props.onEntered;\n    delete props.onExit;\n    delete props.onExiting;\n    delete props.onExited;\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_TransitionGroup__WEBPACK_IMPORTED_MODULE_5__[\"default\"], props, inProp ? react__WEBPACK_IMPORTED_MODULE_3___default.a.cloneElement(first, {\n      key: 'first',\n      onEnter: this.handleEnter,\n      onEntering: this.handleEntering,\n      onEntered: this.handleEntered\n    }) : react__WEBPACK_IMPORTED_MODULE_3___default.a.cloneElement(second, {\n      key: 'second',\n      onEnter: this.handleExit,\n      onEntering: this.handleExiting,\n      onEntered: this.handleExited\n    }));\n  };\n\n  return ReplaceTransition;\n}(react__WEBPACK_IMPORTED_MODULE_3___default.a.Component);\n\nReplaceTransition.propTypes =  true ? {\n  in: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,\n  children: function children(props, propName) {\n    if (react__WEBPACK_IMPORTED_MODULE_3___default.a.Children.count(props[propName]) !== 2) return new Error(\"\\\"\" + propName + \"\\\" must be exactly two transition components.\");\n    return null;\n  }\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (ReplaceTransition);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/ReplaceTransition.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/SwitchTransition.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/SwitchTransition.js ***!
  \*********************************************************************************/
/*! exports provided: modes, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"modes\", function() { return modes; });\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Transition__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Transition */ \"./jaas-client/node_modules/react-transition-group/esm/Transition.js\");\n/* harmony import */ var _TransitionGroupContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./TransitionGroupContext */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js\");\n\n\nvar _leaveRenders, _enterRenders;\n\n\n\n\n\n\nfunction areChildrenDifferent(oldChildren, newChildren) {\n  if (oldChildren === newChildren) return false;\n\n  if (react__WEBPACK_IMPORTED_MODULE_1___default.a.isValidElement(oldChildren) && react__WEBPACK_IMPORTED_MODULE_1___default.a.isValidElement(newChildren) && oldChildren.key != null && oldChildren.key === newChildren.key) {\n    return false;\n  }\n\n  return true;\n}\n/**\n * Enum of modes for SwitchTransition component\n * @enum { string }\n */\n\n\nvar modes = {\n  out: 'out-in',\n  in: 'in-out'\n};\n\nvar callHook = function callHook(element, name, cb) {\n  return function () {\n    var _element$props;\n\n    element.props[name] && (_element$props = element.props)[name].apply(_element$props, arguments);\n    cb();\n  };\n};\n\nvar leaveRenders = (_leaveRenders = {}, _leaveRenders[modes.out] = function (_ref) {\n  var current = _ref.current,\n      changeState = _ref.changeState;\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(current, {\n    in: false,\n    onExited: callHook(current, 'onExited', function () {\n      changeState(_Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"], null);\n    })\n  });\n}, _leaveRenders[modes.in] = function (_ref2) {\n  var current = _ref2.current,\n      changeState = _ref2.changeState,\n      children = _ref2.children;\n  return [current, react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n    in: true,\n    onEntered: callHook(children, 'onEntered', function () {\n      changeState(_Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"]);\n    })\n  })];\n}, _leaveRenders);\nvar enterRenders = (_enterRenders = {}, _enterRenders[modes.out] = function (_ref3) {\n  var children = _ref3.children,\n      changeState = _ref3.changeState;\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n    in: true,\n    onEntered: callHook(children, 'onEntered', function () {\n      changeState(_Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERED\"], react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n        in: true\n      }));\n    })\n  });\n}, _enterRenders[modes.in] = function (_ref4) {\n  var current = _ref4.current,\n      children = _ref4.children,\n      changeState = _ref4.changeState;\n  return [react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(current, {\n    in: false,\n    onExited: callHook(current, 'onExited', function () {\n      changeState(_Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERED\"], react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n        in: true\n      }));\n    })\n  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n    in: true\n  })];\n}, _enterRenders);\n/**\n * A transition component inspired by the [vue transition modes](https://vuejs.org/v2/guide/transitions.html#Transition-Modes).\n * You can use it when you want to control the render between state transitions.\n * Based on the selected mode and the child's key which is the `Transition` or `CSSTransition` component, the `SwitchTransition` makes a consistent transition between them.\n *\n * If the `out-in` mode is selected, the `SwitchTransition` waits until the old child leaves and then inserts a new child.\n * If the `in-out` mode is selected, the `SwitchTransition` inserts a new child first, waits for the new child to enter and then removes the old child.\n *\n * **Note**: If you want the animation to happen simultaneously\n * (that is, to have the old child removed and a new child inserted **at the same time**),\n * you should use\n * [`TransitionGroup`](https://reactcommunity.org/react-transition-group/transition-group)\n * instead.\n *\n * ```jsx\n * function App() {\n *  const [state, setState] = useState(false);\n *  return (\n *    <SwitchTransition>\n *      <CSSTransition\n *        key={state ? \"Goodbye, world!\" : \"Hello, world!\"}\n *        addEndListener={(node, done) => node.addEventListener(\"transitionend\", done, false)}\n *        classNames='fade'\n *      >\n *        <button onClick={() => setState(state => !state)}>\n *          {state ? \"Goodbye, world!\" : \"Hello, world!\"}\n *        </button>\n *      </CSSTransition>\n *    </SwitchTransition>\n *  );\n * }\n * ```\n *\n * ```css\n * .fade-enter{\n *    opacity: 0;\n * }\n * .fade-exit{\n *    opacity: 1;\n * }\n * .fade-enter-active{\n *    opacity: 1;\n * }\n * .fade-exit-active{\n *    opacity: 0;\n * }\n * .fade-enter-active,\n * .fade-exit-active{\n *    transition: opacity 500ms;\n * }\n * ```\n */\n\nvar SwitchTransition = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(SwitchTransition, _React$Component);\n\n  function SwitchTransition() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.state = {\n      status: _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERED\"],\n      current: null\n    };\n    _this.appeared = false;\n\n    _this.changeState = function (status, current) {\n      if (current === void 0) {\n        current = _this.state.current;\n      }\n\n      _this.setState({\n        status: status,\n        current: current\n      });\n    };\n\n    return _this;\n  }\n\n  var _proto = SwitchTransition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.appeared = true;\n  };\n\n  SwitchTransition.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n    if (props.children == null) {\n      return {\n        current: null\n      };\n    }\n\n    if (state.status === _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"] && props.mode === modes.in) {\n      return {\n        status: _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"]\n      };\n    }\n\n    if (state.current && areChildrenDifferent(state.current, props.children)) {\n      return {\n        status: _Transition__WEBPACK_IMPORTED_MODULE_3__[\"EXITING\"]\n      };\n    }\n\n    return {\n      current: react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(props.children, {\n        in: true\n      })\n    };\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        children = _this$props.children,\n        mode = _this$props.mode,\n        _this$state = this.state,\n        status = _this$state.status,\n        current = _this$state.current;\n    var data = {\n      children: children,\n      current: current,\n      changeState: this.changeState,\n      status: status\n    };\n    var component;\n\n    switch (status) {\n      case _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"]:\n        component = enterRenders[mode](data);\n        break;\n\n      case _Transition__WEBPACK_IMPORTED_MODULE_3__[\"EXITING\"]:\n        component = leaveRenders[mode](data);\n        break;\n\n      case _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERED\"]:\n        component = current;\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_TransitionGroupContext__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Provider, {\n      value: {\n        isMounting: !this.appeared\n      }\n    }, component);\n  };\n\n  return SwitchTransition;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nSwitchTransition.propTypes =  true ? {\n  /**\n   * Transition modes.\n   * `out-in`: Current element transitions out first, then when complete, the new element transitions in.\n   * `in-out`: New element transitions in first, then when complete, the current element transitions out.\n   *\n   * @type {'out-in'|'in-out'}\n   */\n  mode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf([modes.in, modes.out]),\n\n  /**\n   * Any `Transition` or `CSSTransition` component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.element.isRequired])\n} : undefined;\nSwitchTransition.defaultProps = {\n  mode: modes.out\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (SwitchTransition);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/SwitchTransition.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/Transition.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/Transition.js ***!
  \***************************************************************************/
/*! exports provided: UNMOUNTED, EXITED, ENTERING, ENTERED, EXITING, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UNMOUNTED\", function() { return UNMOUNTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EXITED\", function() { return EXITED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ENTERING\", function() { return ENTERING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ENTERED\", function() { return ENTERED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EXITING\", function() { return EXITING; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./config */ \"./jaas-client/node_modules/react-transition-group/esm/config.js\");\n/* harmony import */ var _utils_PropTypes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/PropTypes */ \"./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js\");\n/* harmony import */ var _TransitionGroupContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./TransitionGroupContext */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js\");\n\n\n\n\n\n\n\n\nvar UNMOUNTED = 'unmounted';\nvar EXITED = 'exited';\nvar ENTERING = 'entering';\nvar ENTERED = 'entered';\nvar EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 1 },\n *   entered:  { opacity: 1 },\n *   exiting:  { opacity: 0 },\n *   exited:  { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {state => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <Transition in={inProp} timeout={500}>\n *         {state => (\n *           // ...\n *         )}\n *       </Transition>\n *       <button onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Transition, _React$Component);\n\n  function Transition(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n    var initialStatus;\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = {\n      status: initialStatus\n    };\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return {\n        status: EXITED\n      };\n    }\n\n    return null;\n  } // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n  //   return { nextStatus }\n  // }\n  ;\n\n  var _proto = Transition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n\n    this.updateStatus(false, nextStatus);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  _proto.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n    var exit, enter, appear;\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter; // TODO: remove fallback for next major\n\n      appear = timeout.appear !== undefined ? timeout.appear : enter;\n    }\n\n    return {\n      exit: exit,\n      enter: enter,\n      appear: appear\n    };\n  };\n\n  _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n    if (mounting === void 0) {\n      mounting = false;\n    }\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n\n      if (nextStatus === ENTERING) {\n        this.performEnter(mounting);\n      } else {\n        this.performExit();\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({\n        status: UNMOUNTED\n      });\n    }\n  };\n\n  _proto.performEnter = function performEnter(mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n    var appearing = this.context ? this.context.isMounting : mounting;\n\n    var _ref2 = this.props.nodeRef ? [appearing] : [react_dom__WEBPACK_IMPORTED_MODULE_4___default.a.findDOMNode(this), appearing],\n        maybeNode = _ref2[0],\n        maybeAppearing = _ref2[1];\n\n    var timeouts = this.getTimeouts();\n    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n\n    if (!mounting && !enter || _config__WEBPACK_IMPORTED_MODULE_5__[\"default\"].disabled) {\n      this.safeSetState({\n        status: ENTERED\n      }, function () {\n        _this2.props.onEntered(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onEnter(maybeNode, maybeAppearing);\n    this.safeSetState({\n      status: ENTERING\n    }, function () {\n      _this2.props.onEntering(maybeNode, maybeAppearing);\n\n      _this2.onTransitionEnd(enterTimeout, function () {\n        _this2.safeSetState({\n          status: ENTERED\n        }, function () {\n          _this2.props.onEntered(maybeNode, maybeAppearing);\n        });\n      });\n    });\n  };\n\n  _proto.performExit = function performExit() {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n    var timeouts = this.getTimeouts();\n    var maybeNode = this.props.nodeRef ? undefined : react_dom__WEBPACK_IMPORTED_MODULE_4___default.a.findDOMNode(this); // no exit animation skip right to EXITED\n\n    if (!exit || _config__WEBPACK_IMPORTED_MODULE_5__[\"default\"].disabled) {\n      this.safeSetState({\n        status: EXITED\n      }, function () {\n        _this3.props.onExited(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onExit(maybeNode);\n    this.safeSetState({\n      status: EXITING\n    }, function () {\n      _this3.props.onExiting(maybeNode);\n\n      _this3.onTransitionEnd(timeouts.exit, function () {\n        _this3.safeSetState({\n          status: EXITED\n        }, function () {\n          _this3.props.onExited(maybeNode);\n        });\n      });\n    });\n  };\n\n  _proto.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  _proto.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  _proto.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n    this.setNextCallback(handler);\n    var node = this.props.nodeRef ? this.props.nodeRef.current : react_dom__WEBPACK_IMPORTED_MODULE_4___default.a.findDOMNode(this);\n    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n    if (!node || doesNotHaveTimeoutOrListener) {\n      setTimeout(this.nextCallback, 0);\n      return;\n    }\n\n    if (this.props.addEndListener) {\n      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n          maybeNode = _ref3[0],\n          maybeNextCallback = _ref3[1];\n\n      this.props.addEndListener(maybeNode, maybeNextCallback);\n    }\n\n    if (timeout != null) {\n      setTimeout(this.nextCallback, timeout);\n    }\n  };\n\n  _proto.render = function render() {\n    var status = this.state.status;\n\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        _in = _this$props.in,\n        _mountOnEnter = _this$props.mountOnEnter,\n        _unmountOnExit = _this$props.unmountOnExit,\n        _appear = _this$props.appear,\n        _enter = _this$props.enter,\n        _exit = _this$props.exit,\n        _timeout = _this$props.timeout,\n        _addEndListener = _this$props.addEndListener,\n        _onEnter = _this$props.onEnter,\n        _onEntering = _this$props.onEntering,\n        _onEntered = _this$props.onEntered,\n        _onExit = _this$props.onExit,\n        _onExiting = _this$props.onExiting,\n        _onExited = _this$props.onExited,\n        _nodeRef = _this$props.nodeRef,\n        childProps = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n    return (\n      /*#__PURE__*/\n      // allows for nested Transitions\n      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_TransitionGroupContext__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Provider, {\n        value: null\n      }, typeof children === 'function' ? children(status, childProps) : react__WEBPACK_IMPORTED_MODULE_3___default.a.cloneElement(react__WEBPACK_IMPORTED_MODULE_3___default.a.Children.only(children), childProps))\n    );\n  };\n\n  return Transition;\n}(react__WEBPACK_IMPORTED_MODULE_3___default.a.Component);\n\nTransition.contextType = _TransitionGroupContext__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\nTransition.propTypes =  true ? {\n  /**\n   * A React reference to DOM element that need to transition:\n   * https://stackoverflow.com/a/51127130/4671932\n   *\n   *   - When `nodeRef` prop is used, `node` is not passed to callback functions\n   *      (e.g. `onEnter`) because user already has direct access to the node.\n   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n   *     `nodeRef` need to be provided to `Transition` with changed `key` prop\n   *     (see\n   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n   */\n  nodeRef: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({\n    current: typeof Element === 'undefined' ? prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.any : prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(Element)\n  }),\n\n  /**\n   * A `function` child can be used instead of a React element. This function is\n   * called with the current transition status (`'entering'`, `'entered'`,\n   * `'exiting'`, `'exited'`), which can be used to apply context\n   * specific props to a component.\n   *\n   * ```jsx\n   * <Transition in={this.state.in} timeout={150}>\n   *   {state => (\n   *     <MyComponent className={`fade fade-${state}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * By default the child component does not perform the enter transition when\n   * it first mounts, regardless of the value of `in`. If you want this\n   * behavior, set both `appear` and `in` to `true`.\n   *\n   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n   * > only adds an additional enter transition. However, in the\n   * > `<CSSTransition>` component that first enter transition does result in\n   * > additional `.appear-*` classes, that way you can choose to style it\n   * > differently.\n   */\n  appear: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided.\n   *\n   * You may specify a single timeout for all transitions:\n   *\n   * ```jsx\n   * timeout={500}\n   * ```\n   *\n   * or individually:\n   *\n   * ```jsx\n   * timeout={{\n   *  appear: 500,\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * - `appear` defaults to the value of `enter`\n   * - `enter` defaults to `0`\n   * - `exit` defaults to `0`\n   *\n   * @type {number | { enter?: number, exit?: number, appear?: number }}\n   */\n  timeout: function timeout(props) {\n    var pt = _utils_PropTypes__WEBPACK_IMPORTED_MODULE_6__[\"timeoutsShape\"];\n    if (!props.addEndListener) pt = pt.isRequired;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return pt.apply(void 0, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. Timeouts are still used as a fallback if provided.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func\n} : undefined; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Transition);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/Transition.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _TransitionGroupContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TransitionGroupContext */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js\");\n/* harmony import */ var _utils_ChildMapping__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/ChildMapping */ \"./jaas-client/node_modules/react-transition-group/esm/utils/ChildMapping.js\");\n\n\n\n\n\n\n\n\n\nvar values = Object.values || function (obj) {\n  return Object.keys(obj).map(function (k) {\n    return obj[k];\n  });\n};\n\nvar defaultProps = {\n  component: 'div',\n  childFactory: function childFactory(child) {\n    return child;\n  }\n};\n/**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>`  does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(TransitionGroup, _React$Component);\n\n  function TransitionGroup(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n\n    var handleExited = _this.handleExited.bind(Object(_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_this)); // Initial children should all be entering, dependent on appear\n\n\n    _this.state = {\n      contextValue: {\n        isMounting: true\n      },\n      handleExited: handleExited,\n      firstRender: true\n    };\n    return _this;\n  }\n\n  var _proto = TransitionGroup.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.mounted = true;\n    this.setState({\n      contextValue: {\n        isMounting: false\n      }\n    });\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.mounted = false;\n  };\n\n  TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n    var prevChildMapping = _ref.children,\n        handleExited = _ref.handleExited,\n        firstRender = _ref.firstRender;\n    return {\n      children: firstRender ? Object(_utils_ChildMapping__WEBPACK_IMPORTED_MODULE_7__[\"getInitialChildMapping\"])(nextProps, handleExited) : Object(_utils_ChildMapping__WEBPACK_IMPORTED_MODULE_7__[\"getNextChildMapping\"])(nextProps, prevChildMapping, handleExited),\n      firstRender: false\n    };\n  } // node is `undefined` when user provided `nodeRef` prop\n  ;\n\n  _proto.handleExited = function handleExited(child, node) {\n    var currentChildMapping = Object(_utils_ChildMapping__WEBPACK_IMPORTED_MODULE_7__[\"getChildMapping\"])(this.props.children);\n    if (child.key in currentChildMapping) return;\n\n    if (child.props.onExited) {\n      child.props.onExited(node);\n    }\n\n    if (this.mounted) {\n      this.setState(function (state) {\n        var children = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state.children);\n\n        delete children[child.key];\n        return {\n          children: children\n        };\n      });\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        Component = _this$props.component,\n        childFactory = _this$props.childFactory,\n        props = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_this$props, [\"component\", \"childFactory\"]);\n\n    var contextValue = this.state.contextValue;\n    var children = values(this.state.children).map(childFactory);\n    delete props.appear;\n    delete props.enter;\n    delete props.exit;\n\n    if (Component === null) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_TransitionGroupContext__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Provider, {\n        value: contextValue\n      }, children);\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_TransitionGroupContext__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Provider, {\n      value: contextValue\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(Component, props, children));\n  };\n\n  return TransitionGroup;\n}(react__WEBPACK_IMPORTED_MODULE_5___default.a.Component);\n\nTransitionGroup.propTypes =  true ? {\n  /**\n   * `<TransitionGroup>` renders a `<div>` by default. You can change this\n   * behavior by providing a `component` prop.\n   * If you use React v16+ and would like to avoid a wrapping `<div>` element\n   * you can pass in `component={null}`. This is useful if the wrapping div\n   * borks your css styles.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any,\n\n  /**\n   * A set of `<Transition>` components, that are toggled `in` and out as they\n   * leave. the `<TransitionGroup>` will inject specific transition props, so\n   * remember to spread them through if you are wrapping the `<Transition>` as\n   * with our `<Fade>` example.\n   *\n   * While this component is meant for multiple `Transition` or `CSSTransition`\n   * children, sometimes you may want to have a single transition child with\n   * content that you want to be transitioned out and in when you change it\n   * (e.g. routes, images etc.) In that case you can change the `key` prop of\n   * the transition child as you change its content, this will cause\n   * `TransitionGroup` to transition the child out and back in.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * A convenience prop that enables or disables appear animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * A convenience prop that enables or disables enter animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * A convenience prop that enables or disables exit animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * You may need to apply reactive updates to a child as it is exiting.\n   * This is generally done by using `cloneElement` however in the case of an exiting\n   * child the element has already been removed and not accessible to the consumer.\n   *\n   * If you do need to update a child as it leaves you can provide a `childFactory`\n   * to wrap every child, even the ones that are leaving.\n   *\n   * @type Function(child: ReactElement) -> ReactElement\n   */\n  childFactory: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func\n} : undefined;\nTransitionGroup.defaultProps = defaultProps;\n/* harmony default export */ __webpack_exports__[\"default\"] = (TransitionGroup);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js":
/*!***************************************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js ***!
  \***************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/config.js":
/*!***********************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/config.js ***!
  \***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  disabled: false\n});\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/config.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/index.js":
/*!**********************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/index.js ***!
  \**********************************************************************/
/*! exports provided: CSSTransition, ReplaceTransition, SwitchTransition, TransitionGroup, Transition, config */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _CSSTransition__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CSSTransition */ \"./jaas-client/node_modules/react-transition-group/esm/CSSTransition.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CSSTransition\", function() { return _CSSTransition__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _ReplaceTransition__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ReplaceTransition */ \"./jaas-client/node_modules/react-transition-group/esm/ReplaceTransition.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReplaceTransition\", function() { return _ReplaceTransition__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _SwitchTransition__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SwitchTransition */ \"./jaas-client/node_modules/react-transition-group/esm/SwitchTransition.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SwitchTransition\", function() { return _SwitchTransition__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _TransitionGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./TransitionGroup */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TransitionGroup\", function() { return _TransitionGroup__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _Transition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Transition */ \"./jaas-client/node_modules/react-transition-group/esm/Transition.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Transition\", function() { return _Transition__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./config */ \"./jaas-client/node_modules/react-transition-group/esm/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"config\", function() { return _config__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/utils/ChildMapping.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/utils/ChildMapping.js ***!
  \***********************************************************************************/
/*! exports provided: getChildMapping, mergeChildMappings, getInitialChildMapping, getNextChildMapping */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getChildMapping\", function() { return getChildMapping; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeChildMappings\", function() { return mergeChildMappings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getInitialChildMapping\", function() { return getInitialChildMapping; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getNextChildMapping\", function() { return getNextChildMapping; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nfunction getChildMapping(children, mapFn) {\n  var mapper = function mapper(child) {\n    return mapFn && Object(react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"])(child) ? mapFn(child) : child;\n  };\n\n  var result = Object.create(null);\n  if (children) react__WEBPACK_IMPORTED_MODULE_0__[\"Children\"].map(children, function (c) {\n    return c;\n  }).forEach(function (child) {\n    // run the map function here instead so that the key is the computed one\n    result[child.key] = mapper(child);\n  });\n  return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nfunction mergeChildMappings(prev, next) {\n  prev = prev || {};\n  next = next || {};\n\n  function getValueForKey(key) {\n    return key in next ? next[key] : prev[key];\n  } // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n\n\n  var nextKeysPending = Object.create(null);\n  var pendingKeys = [];\n\n  for (var prevKey in prev) {\n    if (prevKey in next) {\n      if (pendingKeys.length) {\n        nextKeysPending[prevKey] = pendingKeys;\n        pendingKeys = [];\n      }\n    } else {\n      pendingKeys.push(prevKey);\n    }\n  }\n\n  var i;\n  var childMapping = {};\n\n  for (var nextKey in next) {\n    if (nextKeysPending[nextKey]) {\n      for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n        var pendingNextKey = nextKeysPending[nextKey][i];\n        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n      }\n    }\n\n    childMapping[nextKey] = getValueForKey(nextKey);\n  } // Finally, add the keys which didn't appear before any key in `next`\n\n\n  for (i = 0; i < pendingKeys.length; i++) {\n    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n  }\n\n  return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n  return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nfunction getInitialChildMapping(props, onExited) {\n  return getChildMapping(props.children, function (child) {\n    return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n      onExited: onExited.bind(null, child),\n      in: true,\n      appear: getProp(child, 'appear', props),\n      enter: getProp(child, 'enter', props),\n      exit: getProp(child, 'exit', props)\n    });\n  });\n}\nfunction getNextChildMapping(nextProps, prevChildMapping, onExited) {\n  var nextChildMapping = getChildMapping(nextProps.children);\n  var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n  Object.keys(children).forEach(function (key) {\n    var child = children[key];\n    if (!Object(react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"])(child)) return;\n    var hasPrev = (key in prevChildMapping);\n    var hasNext = (key in nextChildMapping);\n    var prevChild = prevChildMapping[key];\n    var isLeaving = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"])(prevChild) && !prevChild.props.in; // item is new (entering)\n\n    if (hasNext && (!hasPrev || isLeaving)) {\n      // console.log('entering', key)\n      children[key] = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n        onExited: onExited.bind(null, child),\n        in: true,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    } else if (!hasNext && hasPrev && !isLeaving) {\n      // item is old (exiting)\n      // console.log('leaving', key)\n      children[key] = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n        in: false\n      });\n    } else if (hasNext && hasPrev && Object(react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"])(prevChild)) {\n      // item hasn't changed transition states\n      // copy over the last transition props;\n      // console.log('unchanged', key)\n      children[key] = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n        onExited: onExited.bind(null, child),\n        in: prevChild.props.in,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    }\n  });\n  return children;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/utils/ChildMapping.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js":
/*!********************************************************************************!*\
  !*** ./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js ***!
  \********************************************************************************/
/*! exports provided: timeoutsShape, classNamesShape */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"timeoutsShape\", function() { return timeoutsShape; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"classNamesShape\", function() { return classNamesShape; });\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n\nvar timeoutsShape =  true ? prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number,\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number,\n  appear: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number\n}).isRequired]) : undefined;\nvar classNamesShape =  true ? prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  active: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string\n}), prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  enterDone: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  enterActive: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  exitDone: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  exitActive: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string\n})]) : undefined;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react/cjs/react.development.js":
/*!*****************************************************************!*\
  !*** ./jaas-client/node_modules/react/cjs/react.development.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/** @license React v16.13.1\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar _assign = __webpack_require__(/*! object-assign */ \"./jaas-client/node_modules/object-assign/index.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./jaas-client/node_modules/prop-types/checkPropTypes.js\");\n\nvar ReactVersion = '16.13.1';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher = {\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n};\n\n/**\n * Keeps track of the current batch's configuration such as how long an update\n * should suspend for if it needs to.\n */\nvar ReactCurrentBatchConfig = {\n  suspense: null\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n};\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n  var sourceInfo = '';\n\n  if (source) {\n    var path = source.fileName;\n    var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n    {\n      // In DEV, include code for a common special case:\n      // prefer \"folder/index.js\" instead of just \"index.js\".\n      if (/^index\\./.test(fileName)) {\n        var match = path.match(BEFORE_SLASH_RE);\n\n        if (match) {\n          var pathBeforeSlash = match[1];\n\n          if (pathBeforeSlash) {\n            var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n            fileName = folderName + '/' + fileName;\n          }\n        }\n      }\n    }\n\n    sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n  } else if (ownerName) {\n    sourceInfo = ' (created by ' + ownerName + ')';\n  }\n\n  return '\\n    in ' + (name || 'Unknown') + sourceInfo;\n}\n\nvar Resolved = 1;\nfunction refineResolvedLazyComponent(lazyComponent) {\n  return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var functionName = innerType.displayName || innerType.name || '';\n  return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        return 'Context.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        return 'Context.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        return getComponentName(type.type);\n\n      case REACT_BLOCK_TYPE:\n        return getComponentName(type.render);\n\n      case REACT_LAZY_TYPE:\n        {\n          var thenable = type;\n          var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n          if (resolvedThenable) {\n            return getComponentName(resolvedThenable);\n          }\n\n          break;\n        }\n    }\n  }\n\n  return null;\n}\n\nvar ReactDebugCurrentFrame = {};\nvar currentlyValidatingElement = null;\nfunction setCurrentlyValidatingElement(element) {\n  {\n    currentlyValidatingElement = element;\n  }\n}\n\n{\n  // Stack implementation injected by the current renderer.\n  ReactDebugCurrentFrame.getCurrentStack = null;\n\n  ReactDebugCurrentFrame.getStackAddendum = function () {\n    var stack = ''; // Add an extra top frame while an element is being validated\n\n    if (currentlyValidatingElement) {\n      var name = getComponentName(currentlyValidatingElement.type);\n      var owner = currentlyValidatingElement._owner;\n      stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\n    } // Delegate to the injected renderer-specific implementation\n\n\n    var impl = ReactDebugCurrentFrame.getCurrentStack;\n\n    if (impl) {\n      stack += impl() || '';\n    }\n\n    return stack;\n  };\n}\n\n/**\n * Used by act() to track whether you're inside an act() scope.\n */\nvar IsSomeRendererActing = {\n  current: false\n};\n\nvar ReactSharedInternals = {\n  ReactCurrentDispatcher: ReactCurrentDispatcher,\n  ReactCurrentBatchConfig: ReactCurrentBatchConfig,\n  ReactCurrentOwner: ReactCurrentOwner,\n  IsSomeRendererActing: IsSomeRendererActing,\n  // Used by renderers to avoid bundling object-assign twice in UMD bundles:\n  assign: _assign\n};\n\n{\n  _assign(ReactSharedInternals, {\n    // These should not be included in production.\n    ReactDebugCurrentFrame: ReactDebugCurrentFrame,\n    // Shim for React DOM 16.0.0 which still destructured (but not used) this.\n    // TODO: remove in React 17.0.\n    ReactComponentTreeHook: {}\n  });\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n  {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    printWarning('warn', format, args);\n  }\n}\nfunction error(format) {\n  {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    printWarning('error', format, args);\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n    in') === 0;\n\n    if (!hasExistingStack) {\n      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n      var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n      if (stack !== '') {\n        format += '%s';\n        args = args.concat([stack]);\n      }\n    }\n\n    var argsWithFormat = args.map(function (item) {\n      return '' + item;\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      var argIndex = 0;\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      });\n      throw new Error(message);\n    } catch (x) {}\n  }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n  {\n    var _constructor = publicInstance.constructor;\n    var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n    var warningKey = componentName + \".\" + callerName;\n\n    if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n      return;\n    }\n\n    error(\"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n\n    didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n  }\n}\n/**\n * This is the abstract API for an update queue.\n */\n\n\nvar ReactNoopUpdateQueue = {\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    return false;\n  },\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} callerName name of the calling function in the public API.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance, callback, callerName) {\n    warnNoop(publicInstance, 'forceUpdate');\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} callerName name of the calling function in the public API.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n    warnNoop(publicInstance, 'replaceState');\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} Name of the calling function in the public API.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n    warnNoop(publicInstance, 'setState');\n  }\n};\n\nvar emptyObject = {};\n\n{\n  Object.freeze(emptyObject);\n}\n/**\n * Base class helpers for the updating state of a component.\n */\n\n\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context; // If a component has string refs, we will assign a different object later.\n\n  this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the\n  // renderer.\n\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together.  You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n *        produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\n\nComponent.prototype.setState = function (partialState, callback) {\n  if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) {\n    {\n      throw Error( \"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\" );\n    }\n  }\n\n  this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\n\n\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n\n\n{\n  var deprecatedAPIs = {\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n  };\n\n  var defineDeprecationWarning = function (methodName, info) {\n    Object.defineProperty(Component.prototype, methodName, {\n      get: function () {\n        warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n\n        return undefined;\n      }\n    });\n  };\n\n  for (var fnName in deprecatedAPIs) {\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n    }\n  }\n}\n\nfunction ComponentDummy() {}\n\nComponentDummy.prototype = Component.prototype;\n/**\n * Convenience component with default shallow equality check for sCU.\n */\n\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context; // If a component has string refs, we will assign a different object later.\n\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.\n\n_assign(pureComponentPrototype, Component.prototype);\n\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n  var refObject = {\n    current: null\n  };\n\n  {\n    Object.seal(refObject);\n  }\n\n  return refObject;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  var warnAboutAccessingKey = function () {\n    {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n      }\n    }\n  };\n\n  warnAboutAccessingKey.isReactWarning = true;\n  Object.defineProperty(props, 'key', {\n    get: warnAboutAccessingKey,\n    configurable: true\n  });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  var warnAboutAccessingRef = function () {\n    {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n      }\n    }\n  };\n\n  warnAboutAccessingRef.isReactWarning = true;\n  Object.defineProperty(props, 'ref', {\n    get: warnAboutAccessingRef,\n    configurable: true\n  });\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {\n      var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\n\nfunction createElement(type, config, children) {\n  var propName; // Reserved names are extracted\n\n  var props = {};\n  var key = null;\n  var ref = null;\n  var self = null;\n  var source = null;\n\n  if (config != null) {\n    if (hasValidRef(config)) {\n      ref = config.ref;\n\n      {\n        warnIfStringRefCannotBeAutoConverted(config);\n      }\n    }\n\n    if (hasValidKey(config)) {\n      key = '' + config.key;\n    }\n\n    self = config.__self === undefined ? null : config.__self;\n    source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  } // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n\n\n  var childrenLength = arguments.length - 2;\n\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n\n    {\n      if (Object.freeze) {\n        Object.freeze(childArray);\n      }\n    }\n\n    props.children = childArray;\n  } // Resolve default props\n\n\n  if (type && type.defaultProps) {\n    var defaultProps = type.defaultProps;\n\n    for (propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n  }\n\n  {\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n  }\n\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n  return newElement;\n}\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\n\nfunction cloneElement(element, config, children) {\n  if (!!(element === null || element === undefined)) {\n    {\n      throw Error( \"React.cloneElement(...): The argument must be a React element, but you passed \" + element + \".\" );\n    }\n  }\n\n  var propName; // Original props are copied\n\n  var props = _assign({}, element.props); // Reserved names are extracted\n\n\n  var key = element.key;\n  var ref = element.ref; // Self is preserved since the owner is preserved.\n\n  var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a\n  // transpiler, and the original source is probably a better indicator of the\n  // true owner.\n\n  var source = element._source; // Owner will be preserved, unless ref is overridden\n\n  var owner = element._owner;\n\n  if (config != null) {\n    if (hasValidRef(config)) {\n      // Silently steal the ref from the parent.\n      ref = config.ref;\n      owner = ReactCurrentOwner.current;\n    }\n\n    if (hasValidKey(config)) {\n      key = '' + config.key;\n    } // Remaining properties override existing props\n\n\n    var defaultProps;\n\n    if (element.type && element.type.defaultProps) {\n      defaultProps = element.type.defaultProps;\n    }\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        if (config[propName] === undefined && defaultProps !== undefined) {\n          // Resolve default props\n          props[propName] = defaultProps[propName];\n        } else {\n          props[propName] = config[propName];\n        }\n      }\n    }\n  } // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n\n\n  var childrenLength = arguments.length - 2;\n\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n\n    props.children = childArray;\n  }\n\n  return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n  var escapeRegex = /[=:]/g;\n  var escaperLookup = {\n    '=': '=0',\n    ':': '=2'\n  };\n  var escapedString = ('' + key).replace(escapeRegex, function (match) {\n    return escaperLookup[match];\n  });\n  return '$' + escapedString;\n}\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\n\nvar didWarnAboutMaps = false;\nvar userProvidedKeyEscapeRegex = /\\/+/g;\n\nfunction escapeUserProvidedKey(text) {\n  return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\nvar POOL_SIZE = 10;\nvar traverseContextPool = [];\n\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\n  if (traverseContextPool.length) {\n    var traverseContext = traverseContextPool.pop();\n    traverseContext.result = mapResult;\n    traverseContext.keyPrefix = keyPrefix;\n    traverseContext.func = mapFunction;\n    traverseContext.context = mapContext;\n    traverseContext.count = 0;\n    return traverseContext;\n  } else {\n    return {\n      result: mapResult,\n      keyPrefix: keyPrefix,\n      func: mapFunction,\n      context: mapContext,\n      count: 0\n    };\n  }\n}\n\nfunction releaseTraverseContext(traverseContext) {\n  traverseContext.result = null;\n  traverseContext.keyPrefix = null;\n  traverseContext.func = null;\n  traverseContext.context = null;\n  traverseContext.count = 0;\n\n  if (traverseContextPool.length < POOL_SIZE) {\n    traverseContextPool.push(traverseContext);\n  }\n}\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\n\n\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n  var type = typeof children;\n\n  if (type === 'undefined' || type === 'boolean') {\n    // All of the above are perceived as null.\n    children = null;\n  }\n\n  var invokeCallback = false;\n\n  if (children === null) {\n    invokeCallback = true;\n  } else {\n    switch (type) {\n      case 'string':\n      case 'number':\n        invokeCallback = true;\n        break;\n\n      case 'object':\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = true;\n        }\n\n    }\n  }\n\n  if (invokeCallback) {\n    callback(traverseContext, children, // If it's the only child, treat the name as if it was wrapped in an array\n    // so that it's consistent if the number of children grows.\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n    return 1;\n  }\n\n  var child;\n  var nextName;\n  var subtreeCount = 0; // Count of children found in the current subtree.\n\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      nextName = nextNamePrefix + getComponentKey(child, i);\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n    }\n  } else {\n    var iteratorFn = getIteratorFn(children);\n\n    if (typeof iteratorFn === 'function') {\n\n      {\n        // Warn about using Maps as children\n        if (iteratorFn === children.entries) {\n          if (!didWarnAboutMaps) {\n            warn('Using Maps as children is deprecated and will be removed in ' + 'a future major release. Consider converting children to ' + 'an array of keyed ReactElements instead.');\n          }\n\n          didWarnAboutMaps = true;\n        }\n      }\n\n      var iterator = iteratorFn.call(children);\n      var step;\n      var ii = 0;\n\n      while (!(step = iterator.next()).done) {\n        child = step.value;\n        nextName = nextNamePrefix + getComponentKey(child, ii++);\n        subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n      }\n    } else if (type === 'object') {\n      var addendum = '';\n\n      {\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\n      }\n\n      var childrenString = '' + children;\n\n      {\n        {\n          throw Error( \"Objects are not valid as a React child (found: \" + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + \").\" + addendum );\n        }\n      }\n    }\n  }\n\n  return subtreeCount;\n}\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\n\n\nfunction traverseAllChildren(children, callback, traverseContext) {\n  if (children == null) {\n    return 0;\n  }\n\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\n\n\nfunction getComponentKey(component, index) {\n  // Do some typechecking here since we call this blindly. We want to ensure\n  // that we don't block potential future ES APIs.\n  if (typeof component === 'object' && component !== null && component.key != null) {\n    // Explicit key\n    return escape(component.key);\n  } // Implicit key determined by the index in the set\n\n\n  return index.toString(36);\n}\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n  var func = bookKeeping.func,\n      context = bookKeeping.context;\n  func.call(context, child, bookKeeping.count++);\n}\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\n\n\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n  if (children == null) {\n    return children;\n  }\n\n  var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\n  releaseTraverseContext(traverseContext);\n}\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n  var result = bookKeeping.result,\n      keyPrefix = bookKeeping.keyPrefix,\n      func = bookKeeping.func,\n      context = bookKeeping.context;\n  var mappedChild = func.call(context, child, bookKeeping.count++);\n\n  if (Array.isArray(mappedChild)) {\n    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\n      return c;\n    });\n  } else if (mappedChild != null) {\n    if (isValidElement(mappedChild)) {\n      mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as\n      // traverseAllChildren used to do for objects as children\n      keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n    }\n\n    result.push(mappedChild);\n  }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n  var escapedPrefix = '';\n\n  if (prefix != null) {\n    escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n  }\n\n  var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n  releaseTraverseContext(traverseContext);\n}\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\n\n\nfunction mapChildren(children, func, context) {\n  if (children == null) {\n    return children;\n  }\n\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n  return result;\n}\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\n\n\nfunction countChildren(children) {\n  return traverseAllChildren(children, function () {\n    return null;\n  }, null);\n}\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\n\n\nfunction toArray(children) {\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\n    return child;\n  });\n  return result;\n}\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\n\n\nfunction onlyChild(children) {\n  if (!isValidElement(children)) {\n    {\n      throw Error( \"React.Children.only expected to receive a single React element child.\" );\n    }\n  }\n\n  return children;\n}\n\nfunction createContext(defaultValue, calculateChangedBits) {\n  if (calculateChangedBits === undefined) {\n    calculateChangedBits = null;\n  } else {\n    {\n      if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {\n        error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);\n      }\n    }\n  }\n\n  var context = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _calculateChangedBits: calculateChangedBits,\n    // As a workaround to support multiple concurrent renderers, we categorize\n    // some renderers as primary and others as secondary. We only expect\n    // there to be two concurrent renderers at most: React Native (primary) and\n    // Fabric (secondary); React DOM (primary) and React ART (secondary).\n    // Secondary renderers store their context values on separate fields.\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    // Used to track how many concurrent renderers this context currently\n    // supports within in a single renderer. Such as parallel server rendering.\n    _threadCount: 0,\n    // These are circular\n    Provider: null,\n    Consumer: null\n  };\n  context.Provider = {\n    $$typeof: REACT_PROVIDER_TYPE,\n    _context: context\n  };\n  var hasWarnedAboutUsingNestedContextConsumers = false;\n  var hasWarnedAboutUsingConsumerProvider = false;\n\n  {\n    // A separate object, but proxies back to the original context object for\n    // backwards compatibility. It has a different $$typeof, so we can properly\n    // warn for the incorrect usage of Context as a Consumer.\n    var Consumer = {\n      $$typeof: REACT_CONTEXT_TYPE,\n      _context: context,\n      _calculateChangedBits: context._calculateChangedBits\n    }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n\n    Object.defineProperties(Consumer, {\n      Provider: {\n        get: function () {\n          if (!hasWarnedAboutUsingConsumerProvider) {\n            hasWarnedAboutUsingConsumerProvider = true;\n\n            error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n          }\n\n          return context.Provider;\n        },\n        set: function (_Provider) {\n          context.Provider = _Provider;\n        }\n      },\n      _currentValue: {\n        get: function () {\n          return context._currentValue;\n        },\n        set: function (_currentValue) {\n          context._currentValue = _currentValue;\n        }\n      },\n      _currentValue2: {\n        get: function () {\n          return context._currentValue2;\n        },\n        set: function (_currentValue2) {\n          context._currentValue2 = _currentValue2;\n        }\n      },\n      _threadCount: {\n        get: function () {\n          return context._threadCount;\n        },\n        set: function (_threadCount) {\n          context._threadCount = _threadCount;\n        }\n      },\n      Consumer: {\n        get: function () {\n          if (!hasWarnedAboutUsingNestedContextConsumers) {\n            hasWarnedAboutUsingNestedContextConsumers = true;\n\n            error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n          }\n\n          return context.Consumer;\n        }\n      }\n    }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n\n    context.Consumer = Consumer;\n  }\n\n  {\n    context._currentRenderer = null;\n    context._currentRenderer2 = null;\n  }\n\n  return context;\n}\n\nfunction lazy(ctor) {\n  var lazyType = {\n    $$typeof: REACT_LAZY_TYPE,\n    _ctor: ctor,\n    // React uses these fields to store the result.\n    _status: -1,\n    _result: null\n  };\n\n  {\n    // In production, this would just set it on the object.\n    var defaultProps;\n    var propTypes;\n    Object.defineProperties(lazyType, {\n      defaultProps: {\n        configurable: true,\n        get: function () {\n          return defaultProps;\n        },\n        set: function (newDefaultProps) {\n          error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n          defaultProps = newDefaultProps; // Match production behavior more closely:\n\n          Object.defineProperty(lazyType, 'defaultProps', {\n            enumerable: true\n          });\n        }\n      },\n      propTypes: {\n        configurable: true,\n        get: function () {\n          return propTypes;\n        },\n        set: function (newPropTypes) {\n          error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n          propTypes = newPropTypes; // Match production behavior more closely:\n\n          Object.defineProperty(lazyType, 'propTypes', {\n            enumerable: true\n          });\n        }\n      }\n    });\n  }\n\n  return lazyType;\n}\n\nfunction forwardRef(render) {\n  {\n    if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n      error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n    } else if (typeof render !== 'function') {\n      error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n    } else {\n      if (render.length !== 0 && render.length !== 2) {\n        error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');\n      }\n    }\n\n    if (render != null) {\n      if (render.defaultProps != null || render.propTypes != null) {\n        error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');\n      }\n    }\n  }\n\n  return {\n    $$typeof: REACT_FORWARD_REF_TYPE,\n    render: render\n  };\n}\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction memo(type, compare) {\n  {\n    if (!isValidElementType(type)) {\n      error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n    }\n  }\n\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: compare === undefined ? null : compare\n  };\n}\n\nfunction resolveDispatcher() {\n  var dispatcher = ReactCurrentDispatcher.current;\n\n  if (!(dispatcher !== null)) {\n    {\n      throw Error( \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.\" );\n    }\n  }\n\n  return dispatcher;\n}\n\nfunction useContext(Context, unstable_observedBits) {\n  var dispatcher = resolveDispatcher();\n\n  {\n    if (unstable_observedBits !== undefined) {\n      error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\\n\\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '');\n    } // TODO: add a more generic warning for invalid values.\n\n\n    if (Context._context !== undefined) {\n      var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs\n      // and nobody should be using this in existing code.\n\n      if (realContext.Consumer === Context) {\n        error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n      } else if (realContext.Provider === Context) {\n        error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n      }\n    }\n  }\n\n  return dispatcher.useContext(Context, unstable_observedBits);\n}\nfunction useState(initialState) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useState(initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useReducer(reducer, initialArg, init);\n}\nfunction useRef(initialValue) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useRef(initialValue);\n}\nfunction useEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useEffect(create, deps);\n}\nfunction useLayoutEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useLayoutEffect(create, deps);\n}\nfunction useCallback(callback, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useCallback(callback, deps);\n}\nfunction useMemo(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useMemo(create, deps);\n}\nfunction useImperativeHandle(ref, create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useImperativeHandle(ref, create, deps);\n}\nfunction useDebugValue(value, formatterFn) {\n  {\n    var dispatcher = resolveDispatcher();\n    return dispatcher.useDebugValue(value, formatterFn);\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n  if (ReactCurrentOwner.current) {\n    var name = getComponentName(ReactCurrentOwner.current.type);\n\n    if (name) {\n      return '\\n\\nCheck the render method of `' + name + '`.';\n    }\n  }\n\n  return '';\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  if (source !== undefined) {\n    var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n    var lineNumber = source.lineNumber;\n    return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n  }\n\n  return '';\n}\n\nfunction getSourceInfoErrorAddendumForProps(elementProps) {\n  if (elementProps !== null && elementProps !== undefined) {\n    return getSourceInfoErrorAddendum(elementProps.__source);\n  }\n\n  return '';\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  var info = getDeclarationErrorAddendum();\n\n  if (!info) {\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n    if (parentName) {\n      info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n    }\n  }\n\n  return info;\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  if (!element._store || element._store.validated || element.key != null) {\n    return;\n  }\n\n  element._store.validated = true;\n  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n  if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n    return;\n  }\n\n  ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n  // property, it may be the creator of the child that's responsible for\n  // assigning it a key.\n\n  var childOwner = '';\n\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n    // Give the component that originally created this child.\n    childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n  }\n\n  setCurrentlyValidatingElement(element);\n\n  {\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);\n  }\n\n  setCurrentlyValidatingElement(null);\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  if (typeof node !== 'object') {\n    return;\n  }\n\n  if (Array.isArray(node)) {\n    for (var i = 0; i < node.length; i++) {\n      var child = node[i];\n\n      if (isValidElement(child)) {\n        validateExplicitKey(child, parentType);\n      }\n    }\n  } else if (isValidElement(node)) {\n    // This element was passed in a valid location.\n    if (node._store) {\n      node._store.validated = true;\n    }\n  } else if (node) {\n    var iteratorFn = getIteratorFn(node);\n\n    if (typeof iteratorFn === 'function') {\n      // Entry iterators used to provide implicit keys,\n      // but now we print a separate warning for them later.\n      if (iteratorFn !== node.entries) {\n        var iterator = iteratorFn.call(node);\n        var step;\n\n        while (!(step = iterator.next()).done) {\n          if (isValidElement(step.value)) {\n            validateExplicitKey(step.value, parentType);\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var name = getComponentName(type);\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      setCurrentlyValidatingElement(element);\n      checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\n      setCurrentlyValidatingElement(null);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true;\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    setCurrentlyValidatingElement(fragment);\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n    }\n\n    setCurrentlyValidatingElement(null);\n  }\n}\nfunction createElementWithValidation(type, props, children) {\n  var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n  // succeed and there will likely be errors in render.\n\n  if (!validType) {\n    var info = '';\n\n    if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n      info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n    }\n\n    var sourceInfo = getSourceInfoErrorAddendumForProps(props);\n\n    if (sourceInfo) {\n      info += sourceInfo;\n    } else {\n      info += getDeclarationErrorAddendum();\n    }\n\n    var typeString;\n\n    if (type === null) {\n      typeString = 'null';\n    } else if (Array.isArray(type)) {\n      typeString = 'array';\n    } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n      typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n      info = ' Did you accidentally export a JSX literal instead of a component?';\n    } else {\n      typeString = typeof type;\n    }\n\n    {\n      error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n  }\n\n  var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.\n  // TODO: Drop this when these are no longer allowed as the type argument.\n\n  if (element == null) {\n    return element;\n  } // Skip key warning if the type isn't valid since our key validation logic\n  // doesn't expect a non-string/function type and can throw confusing errors.\n  // We don't want exception behavior to differ between dev and prod.\n  // (Rendering will throw with a helpful message and as soon as the type is\n  // fixed, the key warnings will appear.)\n\n\n  if (validType) {\n    for (var i = 2; i < arguments.length; i++) {\n      validateChildKeys(arguments[i], type);\n    }\n  }\n\n  if (type === REACT_FRAGMENT_TYPE) {\n    validateFragmentProps(element);\n  } else {\n    validatePropTypes(element);\n  }\n\n  return element;\n}\nvar didWarnAboutDeprecatedCreateFactory = false;\nfunction createFactoryWithValidation(type) {\n  var validatedFactory = createElementWithValidation.bind(null, type);\n  validatedFactory.type = type;\n\n  {\n    if (!didWarnAboutDeprecatedCreateFactory) {\n      didWarnAboutDeprecatedCreateFactory = true;\n\n      warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');\n    } // Legacy hook: remove it\n\n\n    Object.defineProperty(validatedFactory, 'type', {\n      enumerable: false,\n      get: function () {\n        warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n\n        Object.defineProperty(this, 'type', {\n          value: type\n        });\n        return type;\n      }\n    });\n  }\n\n  return validatedFactory;\n}\nfunction cloneElementWithValidation(element, props, children) {\n  var newElement = cloneElement.apply(this, arguments);\n\n  for (var i = 2; i < arguments.length; i++) {\n    validateChildKeys(arguments[i], newElement.type);\n  }\n\n  validatePropTypes(newElement);\n  return newElement;\n}\n\n{\n\n  try {\n    var frozenObject = Object.freeze({});\n    var testMap = new Map([[frozenObject, null]]);\n    var testSet = new Set([frozenObject]); // This is necessary for Rollup to not consider these unused.\n    // https://github.com/rollup/rollup/issues/1771\n    // TODO: we can remove these if Rollup fixes the bug.\n\n    testMap.set(0, 0);\n    testSet.add(0);\n  } catch (e) {\n  }\n}\n\nvar createElement$1 =  createElementWithValidation ;\nvar cloneElement$1 =  cloneElementWithValidation ;\nvar createFactory =  createFactoryWithValidation ;\nvar Children = {\n  map: mapChildren,\n  forEach: forEachChildren,\n  count: countChildren,\n  toArray: toArray,\n  only: onlyChild\n};\n\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;\nexports.cloneElement = cloneElement$1;\nexports.createContext = createContext;\nexports.createElement = createElement$1;\nexports.createFactory = createFactory;\nexports.createRef = createRef;\nexports.forwardRef = forwardRef;\nexports.isValidElement = isValidElement;\nexports.lazy = lazy;\nexports.memo = memo;\nexports.useCallback = useCallback;\nexports.useContext = useContext;\nexports.useDebugValue = useDebugValue;\nexports.useEffect = useEffect;\nexports.useImperativeHandle = useImperativeHandle;\nexports.useLayoutEffect = useLayoutEffect;\nexports.useMemo = useMemo;\nexports.useReducer = useReducer;\nexports.useRef = useRef;\nexports.useState = useState;\nexports.version = ReactVersion;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react/cjs/react.development.js?");

/***/ }),

/***/ "./jaas-client/node_modules/react/index.js":
/*!*************************************************!*\
  !*** ./jaas-client/node_modules/react/index.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"./jaas-client/node_modules/react/cjs/react.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/resolve-pathname/esm/resolve-pathname.js":
/*!***************************************************************************!*\
  !*** ./jaas-client/node_modules/resolve-pathname/esm/resolve-pathname.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n  if (from === undefined) from = '';\n\n  var toParts = (to && to.split('/')) || [];\n  var fromParts = (from && from.split('/')) || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n  if (\n    mustEndAbs &&\n    fromParts[0] !== '' &&\n    (!fromParts[0] || !isAbsolute(fromParts[0]))\n  )\n    fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (resolvePathname);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/resolve-pathname/esm/resolve-pathname.js?");

/***/ }),

/***/ "./jaas-client/node_modules/scheduler/cjs/scheduler-tracing.development.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/scheduler/cjs/scheduler-tracing.development.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/** @license React v0.19.1\n * scheduler-tracing.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar DEFAULT_THREAD_ID = 0; // Counters used to generate unique IDs.\n\nvar interactionIDCounter = 0;\nvar threadIDCounter = 0; // Set of currently traced interactions.\n// Interactions \"stack\"–\n// Meaning that newly traced interactions are appended to the previously active set.\n// When an interaction goes out of scope, the previous set (if any) is restored.\n\nexports.__interactionsRef = null; // Listener(s) to notify when interactions begin and end.\n\nexports.__subscriberRef = null;\n\n{\n  exports.__interactionsRef = {\n    current: new Set()\n  };\n  exports.__subscriberRef = {\n    current: null\n  };\n}\nfunction unstable_clear(callback) {\n\n  var prevInteractions = exports.__interactionsRef.current;\n  exports.__interactionsRef.current = new Set();\n\n  try {\n    return callback();\n  } finally {\n    exports.__interactionsRef.current = prevInteractions;\n  }\n}\nfunction unstable_getCurrent() {\n  {\n    return exports.__interactionsRef.current;\n  }\n}\nfunction unstable_getThreadID() {\n  return ++threadIDCounter;\n}\nfunction unstable_trace(name, timestamp, callback) {\n  var threadID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_THREAD_ID;\n\n  var interaction = {\n    __count: 1,\n    id: interactionIDCounter++,\n    name: name,\n    timestamp: timestamp\n  };\n  var prevInteractions = exports.__interactionsRef.current; // Traced interactions should stack/accumulate.\n  // To do that, clone the current interactions.\n  // The previous set will be restored upon completion.\n\n  var interactions = new Set(prevInteractions);\n  interactions.add(interaction);\n  exports.__interactionsRef.current = interactions;\n  var subscriber = exports.__subscriberRef.current;\n  var returnValue;\n\n  try {\n    if (subscriber !== null) {\n      subscriber.onInteractionTraced(interaction);\n    }\n  } finally {\n    try {\n      if (subscriber !== null) {\n        subscriber.onWorkStarted(interactions, threadID);\n      }\n    } finally {\n      try {\n        returnValue = callback();\n      } finally {\n        exports.__interactionsRef.current = prevInteractions;\n\n        try {\n          if (subscriber !== null) {\n            subscriber.onWorkStopped(interactions, threadID);\n          }\n        } finally {\n          interaction.__count--; // If no async work was scheduled for this interaction,\n          // Notify subscribers that it's completed.\n\n          if (subscriber !== null && interaction.__count === 0) {\n            subscriber.onInteractionScheduledWorkCompleted(interaction);\n          }\n        }\n      }\n    }\n  }\n\n  return returnValue;\n}\nfunction unstable_wrap(callback) {\n  var threadID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_THREAD_ID;\n\n  var wrappedInteractions = exports.__interactionsRef.current;\n  var subscriber = exports.__subscriberRef.current;\n\n  if (subscriber !== null) {\n    subscriber.onWorkScheduled(wrappedInteractions, threadID);\n  } // Update the pending async work count for the current interactions.\n  // Update after calling subscribers in case of error.\n\n\n  wrappedInteractions.forEach(function (interaction) {\n    interaction.__count++;\n  });\n  var hasRun = false;\n\n  function wrapped() {\n    var prevInteractions = exports.__interactionsRef.current;\n    exports.__interactionsRef.current = wrappedInteractions;\n    subscriber = exports.__subscriberRef.current;\n\n    try {\n      var returnValue;\n\n      try {\n        if (subscriber !== null) {\n          subscriber.onWorkStarted(wrappedInteractions, threadID);\n        }\n      } finally {\n        try {\n          returnValue = callback.apply(undefined, arguments);\n        } finally {\n          exports.__interactionsRef.current = prevInteractions;\n\n          if (subscriber !== null) {\n            subscriber.onWorkStopped(wrappedInteractions, threadID);\n          }\n        }\n      }\n\n      return returnValue;\n    } finally {\n      if (!hasRun) {\n        // We only expect a wrapped function to be executed once,\n        // But in the event that it's executed more than once–\n        // Only decrement the outstanding interaction counts once.\n        hasRun = true; // Update pending async counts for all wrapped interactions.\n        // If this was the last scheduled async work for any of them,\n        // Mark them as completed.\n\n        wrappedInteractions.forEach(function (interaction) {\n          interaction.__count--;\n\n          if (subscriber !== null && interaction.__count === 0) {\n            subscriber.onInteractionScheduledWorkCompleted(interaction);\n          }\n        });\n      }\n    }\n  }\n\n  wrapped.cancel = function cancel() {\n    subscriber = exports.__subscriberRef.current;\n\n    try {\n      if (subscriber !== null) {\n        subscriber.onWorkCanceled(wrappedInteractions, threadID);\n      }\n    } finally {\n      // Update pending async counts for all wrapped interactions.\n      // If this was the last scheduled async work for any of them,\n      // Mark them as completed.\n      wrappedInteractions.forEach(function (interaction) {\n        interaction.__count--;\n\n        if (subscriber && interaction.__count === 0) {\n          subscriber.onInteractionScheduledWorkCompleted(interaction);\n        }\n      });\n    }\n  };\n\n  return wrapped;\n}\n\nvar subscribers = null;\n\n{\n  subscribers = new Set();\n}\n\nfunction unstable_subscribe(subscriber) {\n  {\n    subscribers.add(subscriber);\n\n    if (subscribers.size === 1) {\n      exports.__subscriberRef.current = {\n        onInteractionScheduledWorkCompleted: onInteractionScheduledWorkCompleted,\n        onInteractionTraced: onInteractionTraced,\n        onWorkCanceled: onWorkCanceled,\n        onWorkScheduled: onWorkScheduled,\n        onWorkStarted: onWorkStarted,\n        onWorkStopped: onWorkStopped\n      };\n    }\n  }\n}\nfunction unstable_unsubscribe(subscriber) {\n  {\n    subscribers.delete(subscriber);\n\n    if (subscribers.size === 0) {\n      exports.__subscriberRef.current = null;\n    }\n  }\n}\n\nfunction onInteractionTraced(interaction) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onInteractionTraced(interaction);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onInteractionScheduledWorkCompleted(interaction) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onInteractionScheduledWorkCompleted(interaction);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onWorkScheduled(interactions, threadID) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onWorkScheduled(interactions, threadID);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onWorkStarted(interactions, threadID) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onWorkStarted(interactions, threadID);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onWorkStopped(interactions, threadID) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onWorkStopped(interactions, threadID);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onWorkCanceled(interactions, threadID) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onWorkCanceled(interactions, threadID);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nexports.unstable_clear = unstable_clear;\nexports.unstable_getCurrent = unstable_getCurrent;\nexports.unstable_getThreadID = unstable_getThreadID;\nexports.unstable_subscribe = unstable_subscribe;\nexports.unstable_trace = unstable_trace;\nexports.unstable_unsubscribe = unstable_unsubscribe;\nexports.unstable_wrap = unstable_wrap;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/scheduler/cjs/scheduler-tracing.development.js?");

/***/ }),

/***/ "./jaas-client/node_modules/scheduler/cjs/scheduler.development.js":
/*!*************************************************************************!*\
  !*** ./jaas-client/node_modules/scheduler/cjs/scheduler.development.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/** @license React v0.19.1\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar enableSchedulerDebugging = false;\nvar enableProfiling = true;\n\nvar requestHostCallback;\nvar requestHostTimeout;\nvar cancelHostTimeout;\nvar shouldYieldToHost;\nvar requestPaint;\n\nif ( // If Scheduler runs in a non-DOM environment, it falls back to a naive\n// implementation using setTimeout.\ntypeof window === 'undefined' || // Check if MessageChannel is supported, too.\ntypeof MessageChannel !== 'function') {\n  // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore,\n  // fallback to a naive implementation.\n  var _callback = null;\n  var _timeoutID = null;\n\n  var _flushCallback = function () {\n    if (_callback !== null) {\n      try {\n        var currentTime = exports.unstable_now();\n        var hasRemainingTime = true;\n\n        _callback(hasRemainingTime, currentTime);\n\n        _callback = null;\n      } catch (e) {\n        setTimeout(_flushCallback, 0);\n        throw e;\n      }\n    }\n  };\n\n  var initialTime = Date.now();\n\n  exports.unstable_now = function () {\n    return Date.now() - initialTime;\n  };\n\n  requestHostCallback = function (cb) {\n    if (_callback !== null) {\n      // Protect against re-entrancy.\n      setTimeout(requestHostCallback, 0, cb);\n    } else {\n      _callback = cb;\n      setTimeout(_flushCallback, 0);\n    }\n  };\n\n  requestHostTimeout = function (cb, ms) {\n    _timeoutID = setTimeout(cb, ms);\n  };\n\n  cancelHostTimeout = function () {\n    clearTimeout(_timeoutID);\n  };\n\n  shouldYieldToHost = function () {\n    return false;\n  };\n\n  requestPaint = exports.unstable_forceFrameRate = function () {};\n} else {\n  // Capture local references to native APIs, in case a polyfill overrides them.\n  var performance = window.performance;\n  var _Date = window.Date;\n  var _setTimeout = window.setTimeout;\n  var _clearTimeout = window.clearTimeout;\n\n  if (typeof console !== 'undefined') {\n    // TODO: Scheduler no longer requires these methods to be polyfilled. But\n    // maybe we want to continue warning if they don't exist, to preserve the\n    // option to rely on it in the future?\n    var requestAnimationFrame = window.requestAnimationFrame;\n    var cancelAnimationFrame = window.cancelAnimationFrame; // TODO: Remove fb.me link\n\n    if (typeof requestAnimationFrame !== 'function') {\n      // Using console['error'] to evade Babel and ESLint\n      console['error'](\"This browser doesn't support requestAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n    }\n\n    if (typeof cancelAnimationFrame !== 'function') {\n      // Using console['error'] to evade Babel and ESLint\n      console['error'](\"This browser doesn't support cancelAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n    }\n  }\n\n  if (typeof performance === 'object' && typeof performance.now === 'function') {\n    exports.unstable_now = function () {\n      return performance.now();\n    };\n  } else {\n    var _initialTime = _Date.now();\n\n    exports.unstable_now = function () {\n      return _Date.now() - _initialTime;\n    };\n  }\n\n  var isMessageLoopRunning = false;\n  var scheduledHostCallback = null;\n  var taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n  // thread, like user events. By default, it yields multiple times per frame.\n  // It does not attempt to align with frame boundaries, since most tasks don't\n  // need to be frame aligned; for those that do, use requestAnimationFrame.\n\n  var yieldInterval = 5;\n  var deadline = 0; // TODO: Make this configurable\n\n  {\n    // `isInputPending` is not available. Since we have no way of knowing if\n    // there's pending input, always yield at the end of the frame.\n    shouldYieldToHost = function () {\n      return exports.unstable_now() >= deadline;\n    }; // Since we yield every frame regardless, `requestPaint` has no effect.\n\n\n    requestPaint = function () {};\n  }\n\n  exports.unstable_forceFrameRate = function (fps) {\n    if (fps < 0 || fps > 125) {\n      // Using console['error'] to evade Babel and ESLint\n      console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing framerates higher than 125 fps is not unsupported');\n      return;\n    }\n\n    if (fps > 0) {\n      yieldInterval = Math.floor(1000 / fps);\n    } else {\n      // reset the framerate\n      yieldInterval = 5;\n    }\n  };\n\n  var performWorkUntilDeadline = function () {\n    if (scheduledHostCallback !== null) {\n      var currentTime = exports.unstable_now(); // Yield after `yieldInterval` ms, regardless of where we are in the vsync\n      // cycle. This means there's always time remaining at the beginning of\n      // the message event.\n\n      deadline = currentTime + yieldInterval;\n      var hasTimeRemaining = true;\n\n      try {\n        var hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);\n\n        if (!hasMoreWork) {\n          isMessageLoopRunning = false;\n          scheduledHostCallback = null;\n        } else {\n          // If there's more work, schedule the next message event at the end\n          // of the preceding one.\n          port.postMessage(null);\n        }\n      } catch (error) {\n        // If a scheduler task throws, exit the current browser task so the\n        // error can be observed.\n        port.postMessage(null);\n        throw error;\n      }\n    } else {\n      isMessageLoopRunning = false;\n    } // Yielding to the browser will give it a chance to paint, so we can\n  };\n\n  var channel = new MessageChannel();\n  var port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n\n  requestHostCallback = function (callback) {\n    scheduledHostCallback = callback;\n\n    if (!isMessageLoopRunning) {\n      isMessageLoopRunning = true;\n      port.postMessage(null);\n    }\n  };\n\n  requestHostTimeout = function (callback, ms) {\n    taskTimeoutID = _setTimeout(function () {\n      callback(exports.unstable_now());\n    }, ms);\n  };\n\n  cancelHostTimeout = function () {\n    _clearTimeout(taskTimeoutID);\n\n    taskTimeoutID = -1;\n  };\n}\n\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  siftUp(heap, node, index);\n}\nfunction peek(heap) {\n  var first = heap[0];\n  return first === undefined ? null : first;\n}\nfunction pop(heap) {\n  var first = heap[0];\n\n  if (first !== undefined) {\n    var last = heap.pop();\n\n    if (last !== first) {\n      heap[0] = last;\n      siftDown(heap, last, 0);\n    }\n\n    return first;\n  } else {\n    return null;\n  }\n}\n\nfunction siftUp(heap, node, i) {\n  var index = i;\n\n  while (true) {\n    var parentIndex = index - 1 >>> 1;\n    var parent = heap[parentIndex];\n\n    if (parent !== undefined && compare(parent, node) > 0) {\n      // The parent is larger. Swap positions.\n      heap[parentIndex] = node;\n      heap[index] = parent;\n      index = parentIndex;\n    } else {\n      // The parent is smaller. Exit.\n      return;\n    }\n  }\n}\n\nfunction siftDown(heap, node, i) {\n  var index = i;\n  var length = heap.length;\n\n  while (index < length) {\n    var leftIndex = (index + 1) * 2 - 1;\n    var left = heap[leftIndex];\n    var rightIndex = leftIndex + 1;\n    var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n    if (left !== undefined && compare(left, node) < 0) {\n      if (right !== undefined && compare(right, left) < 0) {\n        heap[index] = right;\n        heap[rightIndex] = node;\n        index = rightIndex;\n      } else {\n        heap[index] = left;\n        heap[leftIndex] = node;\n        index = leftIndex;\n      }\n    } else if (right !== undefined && compare(right, node) < 0) {\n      heap[index] = right;\n      heap[rightIndex] = node;\n      index = rightIndex;\n    } else {\n      // Neither child is smaller. Exit.\n      return;\n    }\n  }\n}\n\nfunction compare(a, b) {\n  // Compare sort index first, then task id.\n  var diff = a.sortIndex - b.sortIndex;\n  return diff !== 0 ? diff : a.id - b.id;\n}\n\n// TODO: Use symbols?\nvar NoPriority = 0;\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\nvar runIdCounter = 0;\nvar mainThreadIdCounter = 0;\nvar profilingStateSize = 4;\nvar sharedProfilingBuffer =  // $FlowFixMe Flow doesn't know about SharedArrayBuffer\ntypeof SharedArrayBuffer === 'function' ? new SharedArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : // $FlowFixMe Flow doesn't know about ArrayBuffer\ntypeof ArrayBuffer === 'function' ? new ArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : null // Don't crash the init path on IE9\n;\nvar profilingState =  sharedProfilingBuffer !== null ? new Int32Array(sharedProfilingBuffer) : []; // We can't read this but it helps save bytes for null checks\n\nvar PRIORITY = 0;\nvar CURRENT_TASK_ID = 1;\nvar CURRENT_RUN_ID = 2;\nvar QUEUE_SIZE = 3;\n\n{\n  profilingState[PRIORITY] = NoPriority; // This is maintained with a counter, because the size of the priority queue\n  // array might include canceled tasks.\n\n  profilingState[QUEUE_SIZE] = 0;\n  profilingState[CURRENT_TASK_ID] = 0;\n} // Bytes per element is 4\n\n\nvar INITIAL_EVENT_LOG_SIZE = 131072;\nvar MAX_EVENT_LOG_SIZE = 524288; // Equivalent to 2 megabytes\n\nvar eventLogSize = 0;\nvar eventLogBuffer = null;\nvar eventLog = null;\nvar eventLogIndex = 0;\nvar TaskStartEvent = 1;\nvar TaskCompleteEvent = 2;\nvar TaskErrorEvent = 3;\nvar TaskCancelEvent = 4;\nvar TaskRunEvent = 5;\nvar TaskYieldEvent = 6;\nvar SchedulerSuspendEvent = 7;\nvar SchedulerResumeEvent = 8;\n\nfunction logEvent(entries) {\n  if (eventLog !== null) {\n    var offset = eventLogIndex;\n    eventLogIndex += entries.length;\n\n    if (eventLogIndex + 1 > eventLogSize) {\n      eventLogSize *= 2;\n\n      if (eventLogSize > MAX_EVENT_LOG_SIZE) {\n        // Using console['error'] to evade Babel and ESLint\n        console['error'](\"Scheduler Profiling: Event log exceeded maximum size. Don't \" + 'forget to call `stopLoggingProfilingEvents()`.');\n        stopLoggingProfilingEvents();\n        return;\n      }\n\n      var newEventLog = new Int32Array(eventLogSize * 4);\n      newEventLog.set(eventLog);\n      eventLogBuffer = newEventLog.buffer;\n      eventLog = newEventLog;\n    }\n\n    eventLog.set(entries, offset);\n  }\n}\n\nfunction startLoggingProfilingEvents() {\n  eventLogSize = INITIAL_EVENT_LOG_SIZE;\n  eventLogBuffer = new ArrayBuffer(eventLogSize * 4);\n  eventLog = new Int32Array(eventLogBuffer);\n  eventLogIndex = 0;\n}\nfunction stopLoggingProfilingEvents() {\n  var buffer = eventLogBuffer;\n  eventLogSize = 0;\n  eventLogBuffer = null;\n  eventLog = null;\n  eventLogIndex = 0;\n  return buffer;\n}\nfunction markTaskStart(task, ms) {\n  {\n    profilingState[QUEUE_SIZE]++;\n\n    if (eventLog !== null) {\n      // performance.now returns a float, representing milliseconds. When the\n      // event is logged, it's coerced to an int. Convert to microseconds to\n      // maintain extra degrees of precision.\n      logEvent([TaskStartEvent, ms * 1000, task.id, task.priorityLevel]);\n    }\n  }\n}\nfunction markTaskCompleted(task, ms) {\n  {\n    profilingState[PRIORITY] = NoPriority;\n    profilingState[CURRENT_TASK_ID] = 0;\n    profilingState[QUEUE_SIZE]--;\n\n    if (eventLog !== null) {\n      logEvent([TaskCompleteEvent, ms * 1000, task.id]);\n    }\n  }\n}\nfunction markTaskCanceled(task, ms) {\n  {\n    profilingState[QUEUE_SIZE]--;\n\n    if (eventLog !== null) {\n      logEvent([TaskCancelEvent, ms * 1000, task.id]);\n    }\n  }\n}\nfunction markTaskErrored(task, ms) {\n  {\n    profilingState[PRIORITY] = NoPriority;\n    profilingState[CURRENT_TASK_ID] = 0;\n    profilingState[QUEUE_SIZE]--;\n\n    if (eventLog !== null) {\n      logEvent([TaskErrorEvent, ms * 1000, task.id]);\n    }\n  }\n}\nfunction markTaskRun(task, ms) {\n  {\n    runIdCounter++;\n    profilingState[PRIORITY] = task.priorityLevel;\n    profilingState[CURRENT_TASK_ID] = task.id;\n    profilingState[CURRENT_RUN_ID] = runIdCounter;\n\n    if (eventLog !== null) {\n      logEvent([TaskRunEvent, ms * 1000, task.id, runIdCounter]);\n    }\n  }\n}\nfunction markTaskYield(task, ms) {\n  {\n    profilingState[PRIORITY] = NoPriority;\n    profilingState[CURRENT_TASK_ID] = 0;\n    profilingState[CURRENT_RUN_ID] = 0;\n\n    if (eventLog !== null) {\n      logEvent([TaskYieldEvent, ms * 1000, task.id, runIdCounter]);\n    }\n  }\n}\nfunction markSchedulerSuspended(ms) {\n  {\n    mainThreadIdCounter++;\n\n    if (eventLog !== null) {\n      logEvent([SchedulerSuspendEvent, ms * 1000, mainThreadIdCounter]);\n    }\n  }\n}\nfunction markSchedulerUnsuspended(ms) {\n  {\n    if (eventLog !== null) {\n      logEvent([SchedulerResumeEvent, ms * 1000, mainThreadIdCounter]);\n    }\n  }\n}\n\n/* eslint-disable no-var */\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\n\nvar maxSigned31BitInt = 1073741823; // Times out immediately\n\nvar IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out\n\nvar USER_BLOCKING_PRIORITY = 250;\nvar NORMAL_PRIORITY_TIMEOUT = 5000;\nvar LOW_PRIORITY_TIMEOUT = 10000; // Never times out\n\nvar IDLE_PRIORITY = maxSigned31BitInt; // Tasks are stored on a min heap\n\nvar taskQueue = [];\nvar timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\nvar taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\nvar currentTask = null;\nvar currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrancy.\n\nvar isPerformingWork = false;\nvar isHostCallbackScheduled = false;\nvar isHostTimeoutScheduled = false;\n\nfunction advanceTimers(currentTime) {\n  // Check for tasks that are no longer delayed and add them to the queue.\n  var timer = peek(timerQueue);\n\n  while (timer !== null) {\n    if (timer.callback === null) {\n      // Timer was cancelled.\n      pop(timerQueue);\n    } else if (timer.startTime <= currentTime) {\n      // Timer fired. Transfer to the task queue.\n      pop(timerQueue);\n      timer.sortIndex = timer.expirationTime;\n      push(taskQueue, timer);\n\n      {\n        markTaskStart(timer, currentTime);\n        timer.isQueued = true;\n      }\n    } else {\n      // Remaining timers are pending.\n      return;\n    }\n\n    timer = peek(timerQueue);\n  }\n}\n\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = false;\n  advanceTimers(currentTime);\n\n  if (!isHostCallbackScheduled) {\n    if (peek(taskQueue) !== null) {\n      isHostCallbackScheduled = true;\n      requestHostCallback(flushWork);\n    } else {\n      var firstTimer = peek(timerQueue);\n\n      if (firstTimer !== null) {\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n      }\n    }\n  }\n}\n\nfunction flushWork(hasTimeRemaining, initialTime) {\n  {\n    markSchedulerUnsuspended(initialTime);\n  } // We'll need a host callback the next time work is scheduled.\n\n\n  isHostCallbackScheduled = false;\n\n  if (isHostTimeoutScheduled) {\n    // We scheduled a timeout but it's no longer needed. Cancel it.\n    isHostTimeoutScheduled = false;\n    cancelHostTimeout();\n  }\n\n  isPerformingWork = true;\n  var previousPriorityLevel = currentPriorityLevel;\n\n  try {\n    if (enableProfiling) {\n      try {\n        return workLoop(hasTimeRemaining, initialTime);\n      } catch (error) {\n        if (currentTask !== null) {\n          var currentTime = exports.unstable_now();\n          markTaskErrored(currentTask, currentTime);\n          currentTask.isQueued = false;\n        }\n\n        throw error;\n      }\n    } else {\n      // No catch in prod codepath.\n      return workLoop(hasTimeRemaining, initialTime);\n    }\n  } finally {\n    currentTask = null;\n    currentPriorityLevel = previousPriorityLevel;\n    isPerformingWork = false;\n\n    {\n      var _currentTime = exports.unstable_now();\n\n      markSchedulerSuspended(_currentTime);\n    }\n  }\n}\n\nfunction workLoop(hasTimeRemaining, initialTime) {\n  var currentTime = initialTime;\n  advanceTimers(currentTime);\n  currentTask = peek(taskQueue);\n\n  while (currentTask !== null && !(enableSchedulerDebugging )) {\n    if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n      // This currentTask hasn't expired, and we've reached the deadline.\n      break;\n    }\n\n    var callback = currentTask.callback;\n\n    if (callback !== null) {\n      currentTask.callback = null;\n      currentPriorityLevel = currentTask.priorityLevel;\n      var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n      markTaskRun(currentTask, currentTime);\n      var continuationCallback = callback(didUserCallbackTimeout);\n      currentTime = exports.unstable_now();\n\n      if (typeof continuationCallback === 'function') {\n        currentTask.callback = continuationCallback;\n        markTaskYield(currentTask, currentTime);\n      } else {\n        {\n          markTaskCompleted(currentTask, currentTime);\n          currentTask.isQueued = false;\n        }\n\n        if (currentTask === peek(taskQueue)) {\n          pop(taskQueue);\n        }\n      }\n\n      advanceTimers(currentTime);\n    } else {\n      pop(taskQueue);\n    }\n\n    currentTask = peek(taskQueue);\n  } // Return whether there's additional work\n\n\n  if (currentTask !== null) {\n    return true;\n  } else {\n    var firstTimer = peek(timerQueue);\n\n    if (firstTimer !== null) {\n      requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n\n    return false;\n  }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case ImmediatePriority:\n    case UserBlockingPriority:\n    case NormalPriority:\n    case LowPriority:\n    case IdlePriority:\n      break;\n\n    default:\n      priorityLevel = NormalPriority;\n  }\n\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n}\n\nfunction unstable_next(eventHandler) {\n  var priorityLevel;\n\n  switch (currentPriorityLevel) {\n    case ImmediatePriority:\n    case UserBlockingPriority:\n    case NormalPriority:\n      // Shift down to normal priority\n      priorityLevel = NormalPriority;\n      break;\n\n    default:\n      // Anything lower than normal priority should remain at the current level.\n      priorityLevel = currentPriorityLevel;\n      break;\n  }\n\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n}\n\nfunction unstable_wrapCallback(callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    // This is a fork of runWithPriority, inlined for performance.\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n}\n\nfunction timeoutForPriorityLevel(priorityLevel) {\n  switch (priorityLevel) {\n    case ImmediatePriority:\n      return IMMEDIATE_PRIORITY_TIMEOUT;\n\n    case UserBlockingPriority:\n      return USER_BLOCKING_PRIORITY;\n\n    case IdlePriority:\n      return IDLE_PRIORITY;\n\n    case LowPriority:\n      return LOW_PRIORITY_TIMEOUT;\n\n    case NormalPriority:\n    default:\n      return NORMAL_PRIORITY_TIMEOUT;\n  }\n}\n\nfunction unstable_scheduleCallback(priorityLevel, callback, options) {\n  var currentTime = exports.unstable_now();\n  var startTime;\n  var timeout;\n\n  if (typeof options === 'object' && options !== null) {\n    var delay = options.delay;\n\n    if (typeof delay === 'number' && delay > 0) {\n      startTime = currentTime + delay;\n    } else {\n      startTime = currentTime;\n    }\n\n    timeout = typeof options.timeout === 'number' ? options.timeout : timeoutForPriorityLevel(priorityLevel);\n  } else {\n    timeout = timeoutForPriorityLevel(priorityLevel);\n    startTime = currentTime;\n  }\n\n  var expirationTime = startTime + timeout;\n  var newTask = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: startTime,\n    expirationTime: expirationTime,\n    sortIndex: -1\n  };\n\n  {\n    newTask.isQueued = false;\n  }\n\n  if (startTime > currentTime) {\n    // This is a delayed task.\n    newTask.sortIndex = startTime;\n    push(timerQueue, newTask);\n\n    if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n      // All tasks are delayed, and this is the task with the earliest delay.\n      if (isHostTimeoutScheduled) {\n        // Cancel an existing timeout.\n        cancelHostTimeout();\n      } else {\n        isHostTimeoutScheduled = true;\n      } // Schedule a timeout.\n\n\n      requestHostTimeout(handleTimeout, startTime - currentTime);\n    }\n  } else {\n    newTask.sortIndex = expirationTime;\n    push(taskQueue, newTask);\n\n    {\n      markTaskStart(newTask, currentTime);\n      newTask.isQueued = true;\n    } // Schedule a host callback, if needed. If we're already performing work,\n    // wait until the next time we yield.\n\n\n    if (!isHostCallbackScheduled && !isPerformingWork) {\n      isHostCallbackScheduled = true;\n      requestHostCallback(flushWork);\n    }\n  }\n\n  return newTask;\n}\n\nfunction unstable_pauseExecution() {\n}\n\nfunction unstable_continueExecution() {\n\n  if (!isHostCallbackScheduled && !isPerformingWork) {\n    isHostCallbackScheduled = true;\n    requestHostCallback(flushWork);\n  }\n}\n\nfunction unstable_getFirstCallbackNode() {\n  return peek(taskQueue);\n}\n\nfunction unstable_cancelCallback(task) {\n  {\n    if (task.isQueued) {\n      var currentTime = exports.unstable_now();\n      markTaskCanceled(task, currentTime);\n      task.isQueued = false;\n    }\n  } // Null out the callback to indicate the task has been canceled. (Can't\n  // remove from the queue because you can't remove arbitrary nodes from an\n  // array based heap, only the first one.)\n\n\n  task.callback = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n  return currentPriorityLevel;\n}\n\nfunction unstable_shouldYield() {\n  var currentTime = exports.unstable_now();\n  advanceTimers(currentTime);\n  var firstTask = peek(taskQueue);\n  return firstTask !== currentTask && currentTask !== null && firstTask !== null && firstTask.callback !== null && firstTask.startTime <= currentTime && firstTask.expirationTime < currentTask.expirationTime || shouldYieldToHost();\n}\n\nvar unstable_requestPaint = requestPaint;\nvar unstable_Profiling =  {\n  startLoggingProfilingEvents: startLoggingProfilingEvents,\n  stopLoggingProfilingEvents: stopLoggingProfilingEvents,\n  sharedProfilingBuffer: sharedProfilingBuffer\n} ;\n\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_Profiling = unstable_Profiling;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\nexports.unstable_next = unstable_next;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_requestPaint = unstable_requestPaint;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_shouldYield = unstable_shouldYield;\nexports.unstable_wrapCallback = unstable_wrapCallback;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/scheduler/cjs/scheduler.development.js?");

/***/ }),

/***/ "./jaas-client/node_modules/scheduler/index.js":
/*!*****************************************************!*\
  !*** ./jaas-client/node_modules/scheduler/index.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"./jaas-client/node_modules/scheduler/cjs/scheduler.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/scheduler/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/scheduler/tracing.js":
/*!*******************************************************!*\
  !*** ./jaas-client/node_modules/scheduler/tracing.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/scheduler-tracing.development.js */ \"./jaas-client/node_modules/scheduler/cjs/scheduler-tracing.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/scheduler/tracing.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-client/lib/index.js":
/*!****************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-client/lib/index.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\n/**\n * Module dependencies.\n */\n\nvar url = __webpack_require__(/*! ./url */ \"./jaas-client/node_modules/socket.io-client/lib/url.js\");\nvar parser = __webpack_require__(/*! socket.io-parser */ \"./jaas-client/node_modules/socket.io-parser/index.js\");\nvar Manager = __webpack_require__(/*! ./manager */ \"./jaas-client/node_modules/socket.io-client/lib/manager.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = __webpack_require__(/*! ./manager */ \"./jaas-client/node_modules/socket.io-client/lib/manager.js\");\nexports.Socket = __webpack_require__(/*! ./socket */ \"./jaas-client/node_modules/socket.io-client/lib/socket.js\");\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-client/lib/manager.js":
/*!******************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-client/lib/manager.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\n/**\n * Module dependencies.\n */\n\nvar eio = __webpack_require__(/*! engine.io-client */ \"./jaas-client/node_modules/engine.io-client/lib/index.js\");\nvar Socket = __webpack_require__(/*! ./socket */ \"./jaas-client/node_modules/socket.io-client/lib/socket.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js\");\nvar parser = __webpack_require__(/*! socket.io-parser */ \"./jaas-client/node_modules/socket.io-parser/index.js\");\nvar on = __webpack_require__(/*! ./on */ \"./jaas-client/node_modules/socket.io-client/lib/on.js\");\nvar bind = __webpack_require__(/*! component-bind */ \"./jaas-client/node_modules/component-bind/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('socket.io-client:manager');\nvar indexOf = __webpack_require__(/*! indexof */ \"./jaas-client/node_modules/indexof/index.js\");\nvar Backoff = __webpack_require__(/*! backo2 */ \"./jaas-client/node_modules/backo2/index.js\");\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/manager.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-client/lib/on.js":
/*!*************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-client/lib/on.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/on.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-client/lib/socket.js":
/*!*****************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-client/lib/socket.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\n/**\n * Module dependencies.\n */\n\nvar parser = __webpack_require__(/*! socket.io-parser */ \"./jaas-client/node_modules/socket.io-parser/index.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js\");\nvar toArray = __webpack_require__(/*! to-array */ \"./jaas-client/node_modules/to-array/index.js\");\nvar on = __webpack_require__(/*! ./on */ \"./jaas-client/node_modules/socket.io-client/lib/on.js\");\nvar bind = __webpack_require__(/*! component-bind */ \"./jaas-client/node_modules/component-bind/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('socket.io-client:socket');\nvar parseqs = __webpack_require__(/*! parseqs */ \"./jaas-client/node_modules/parseqs/index.js\");\nvar hasBin = __webpack_require__(/*! has-binary2 */ \"./jaas-client/node_modules/has-binary2/index.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/socket.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-client/lib/url.js":
/*!**************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-client/lib/url.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\n/**\n * Module dependencies.\n */\n\nvar parseuri = __webpack_require__(/*! parseuri */ \"./jaas-client/node_modules/parseuri/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/url.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js":
/*!*******************************************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js ***!
  \*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (true) {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-parser/binary.js":
/*!*************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-parser/binary.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = __webpack_require__(/*! isarray */ \"./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js\");\nvar isBuf = __webpack_require__(/*! ./is-buffer */ \"./jaas-client/node_modules/socket.io-parser/is-buffer.js\");\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/binary.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-parser/index.js":
/*!************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-parser/index.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\n/**\n * Module dependencies.\n */\n\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/browser.js\")('socket.io-parser');\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js\");\nvar binary = __webpack_require__(/*! ./binary */ \"./jaas-client/node_modules/socket.io-parser/binary.js\");\nvar isArray = __webpack_require__(/*! isarray */ \"./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js\");\nvar isBuf = __webpack_require__(/*! ./is-buffer */ \"./jaas-client/node_modules/socket.io-parser/is-buffer.js\");\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-parser/is-buffer.js":
/*!****************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-parser/is-buffer.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(Buffer) {\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/is-buffer.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js":
/*!*******************************************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js ***!
  \*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (true) {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/browser.js":
/*!*************************************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/browser.js ***!
  \*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(process) {/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = __webpack_require__(/*! ./debug */ \"./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/debug.js\");\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../../node_modules/process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/browser.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/debug.js":
/*!***********************************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/debug.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = __webpack_require__(/*! ms */ \"./jaas-client/node_modules/socket.io-parser/node_modules/ms/index.js\");\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n\n  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  if (name[name.length - 1] === '*') {\n    return true;\n  }\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/debug.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js":
/*!*********************************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/ms/index.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/ms/index.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/ms/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/soundmanager2/script/soundmanager2.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/soundmanager2/script/soundmanager2.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_RESULT__;/** @license\r\n *\r\n * SoundManager 2: JavaScript Sound for the Web\r\n * ----------------------------------------------\r\n * http://schillmania.com/projects/soundmanager2/\r\n *\r\n * Copyright (c) 2007, Scott Schiller. All rights reserved.\r\n * Code provided under the BSD License:\r\n * http://schillmania.com/projects/soundmanager2/license.txt\r\n *\r\n * V2.97a.20170601\r\n */\r\n\r\n/**\r\n * About this file\r\n * -------------------------------------------------------------------------------------\r\n * This is the fully-commented source version of the SoundManager 2 API,\r\n * recommended for use during development and testing.\r\n *\r\n * See soundmanager2-nodebug-jsmin.js for an optimized build (~11KB with gzip.)\r\n * http://schillmania.com/projects/soundmanager2/doc/getstarted/#basic-inclusion\r\n * Alternately, serve this file with gzip for 75% compression savings (~30KB over HTTP.)\r\n *\r\n * You may notice <d> and </d> comments in this source; these are delimiters for\r\n * debug blocks which are removed in the -nodebug builds, further optimizing code size.\r\n *\r\n * Also, as you may note: Whoa, reliable cross-platform/device audio support is hard! ;)\r\n */\r\n\r\n(function SM2(window, _undefined) {\r\n\r\n/* global Audio, document, window, navigator, define, module, SM2_DEFER, opera, setTimeout, setInterval, clearTimeout, sm2Debugger */\r\n\r\n'use strict';\r\n\r\nif (!window || !window.document) {\r\n\r\n  // Don't cross the [environment] streams. SM2 expects to be running in a browser, not under node.js etc.\r\n  // Additionally, if a browser somehow manages to fail this test, as Egon said: \"It would be bad.\"\r\n\r\n  throw new Error('SoundManager requires a browser with window and document objects.');\r\n\r\n}\r\n\r\nvar soundManager = null;\r\n\r\n/**\r\n * The SoundManager constructor.\r\n *\r\n * @constructor\r\n * @param {string} smURL Optional: Path to SWF files\r\n * @param {string} smID Optional: The ID to use for the SWF container element\r\n * @this {SoundManager}\r\n * @return {SoundManager} The new SoundManager instance\r\n */\r\n\r\nfunction SoundManager(smURL, smID) {\r\n\r\n  /**\r\n   * soundManager configuration options list\r\n   * defines top-level configuration properties to be applied to the soundManager instance (eg. soundManager.flashVersion)\r\n   * to set these properties, use the setup() method - eg., soundManager.setup({url: '/swf/', flashVersion: 9})\r\n   */\r\n\r\n  this.setupOptions = {\r\n\r\n    url: (smURL || null),             // path (directory) where SoundManager 2 SWFs exist, eg., /path/to/swfs/\r\n    flashVersion: 8,                  // flash build to use (8 or 9.) Some API features require 9.\r\n    debugMode: true,                  // enable debugging output (console.log() with HTML fallback)\r\n    debugFlash: false,                // enable debugging output inside SWF, troubleshoot Flash/browser issues\r\n    useConsole: true,                 // use console.log() if available (otherwise, writes to #soundmanager-debug element)\r\n    consoleOnly: true,                // if console is being used, do not create/write to #soundmanager-debug\r\n    waitForWindowLoad: false,         // force SM2 to wait for window.onload() before trying to call soundManager.onload()\r\n    bgColor: '#ffffff',               // SWF background color. N/A when wmode = 'transparent'\r\n    useHighPerformance: false,        // position:fixed flash movie can help increase js/flash speed, minimize lag\r\n    flashPollingInterval: null,       // msec affecting whileplaying/loading callback frequency. If null, default of 50 msec is used.\r\n    html5PollingInterval: null,       // msec affecting whileplaying() for HTML5 audio, excluding mobile devices. If null, native HTML5 update events are used.\r\n    flashLoadTimeout: 1000,           // msec to wait for flash movie to load before failing (0 = infinity)\r\n    wmode: null,                      // flash rendering mode - null, 'transparent', or 'opaque' (last two allow z-index to work)\r\n    allowScriptAccess: 'always',      // for scripting the SWF (object/embed property), 'always' or 'sameDomain'\r\n    useFlashBlock: false,             // *requires flashblock.css, see demos* - allow recovery from flash blockers. Wait indefinitely and apply timeout CSS to SWF, if applicable.\r\n    useHTML5Audio: true,              // use HTML5 Audio() where API is supported (most Safari, Chrome versions), Firefox (MP3/MP4 support varies.) Ideally, transparent vs. Flash API where possible.\r\n    forceUseGlobalHTML5Audio: false,  // if true, a single Audio() object is used for all sounds - and only one can play at a time.\r\n    ignoreMobileRestrictions: false,  // if true, SM2 will not apply global HTML5 audio rules to mobile UAs. iOS > 7 and WebViews may allow multiple Audio() instances.\r\n    html5Test: /^(probably|maybe)$/i, // HTML5 Audio() format support test. Use /^probably$/i; if you want to be more conservative.\r\n    preferFlash: false,               // overrides useHTML5audio, will use Flash for MP3/MP4/AAC if present. Potential option if HTML5 playback with these formats is quirky.\r\n    noSWFCache: false,                // if true, appends ?ts={date} to break aggressive SWF caching.\r\n    idPrefix: 'sound'                 // if an id is not provided to createSound(), this prefix is used for generated IDs - 'sound0', 'sound1' etc.\r\n\r\n  };\r\n\r\n  this.defaultOptions = {\r\n\r\n    /**\r\n     * the default configuration for sound objects made with createSound() and related methods\r\n     * eg., volume, auto-load behaviour and so forth\r\n     */\r\n\r\n    autoLoad: false,        // enable automatic loading (otherwise .load() will be called on demand with .play(), the latter being nicer on bandwidth - if you want to .load yourself, you also can)\r\n    autoPlay: false,        // enable playing of file as soon as possible (much faster if \"stream\" is true)\r\n    from: null,             // position to start playback within a sound (msec), default = beginning\r\n    loops: 1,               // how many times to repeat the sound (position will wrap around to 0, setPosition() will break out of loop when >0)\r\n    onid3: null,            // callback function for \"ID3 data is added/available\"\r\n    onerror: null,          // callback function for \"load failed\" (or, playback/network/decode error under HTML5.)\r\n    onload: null,           // callback function for \"load finished\"\r\n    whileloading: null,     // callback function for \"download progress update\" (X of Y bytes received)\r\n    onplay: null,           // callback for \"play\" start\r\n    onpause: null,          // callback for \"pause\"\r\n    onresume: null,         // callback for \"resume\" (pause toggle)\r\n    whileplaying: null,     // callback during play (position update)\r\n    onposition: null,       // object containing times and function callbacks for positions of interest\r\n    onstop: null,           // callback for \"user stop\"\r\n    onfinish: null,         // callback function for \"sound finished playing\"\r\n    multiShot: true,        // let sounds \"restart\" or layer on top of each other when played multiple times, rather than one-shot/one at a time\r\n    multiShotEvents: false, // fire multiple sound events (currently onfinish() only) when multiShot is enabled\r\n    position: null,         // offset (milliseconds) to seek to within loaded sound data.\r\n    pan: 0,                 // \"pan\" settings, left-to-right, -100 to 100\r\n    playbackRate: 1,        // rate at which to play the sound (HTML5-only)\r\n    stream: true,           // allows playing before entire file has loaded (recommended)\r\n    to: null,               // position to end playback within a sound (msec), default = end\r\n    type: null,             // MIME-like hint for file pattern / canPlay() tests, eg. audio/mp3\r\n    usePolicyFile: false,   // enable crossdomain.xml request for audio on remote domains (for ID3/waveform access)\r\n    volume: 100             // self-explanatory. 0-100, the latter being the max.\r\n\r\n  };\r\n\r\n  this.flash9Options = {\r\n\r\n    /**\r\n     * flash 9-only options,\r\n     * merged into defaultOptions if flash 9 is being used\r\n     */\r\n\r\n    onfailure: null,        // callback function for when playing fails (Flash 9, MovieStar + RTMP-only)\r\n    isMovieStar: null,      // \"MovieStar\" MPEG4 audio mode. Null (default) = auto detect MP4, AAC etc. based on URL. true = force on, ignore URL\r\n    usePeakData: false,     // enable left/right channel peak (level) data\r\n    useWaveformData: false, // enable sound spectrum (raw waveform data) - NOTE: May increase CPU load.\r\n    useEQData: false,       // enable sound EQ (frequency spectrum data) - NOTE: May increase CPU load.\r\n    onbufferchange: null,   // callback for \"isBuffering\" property change\r\n    ondataerror: null       // callback for waveform/eq data access error (flash playing audio in other tabs/domains)\r\n\r\n  };\r\n\r\n  this.movieStarOptions = {\r\n\r\n    /**\r\n     * flash 9.0r115+ MPEG4 audio options,\r\n     * merged into defaultOptions if flash 9+movieStar mode is enabled\r\n     */\r\n\r\n    bufferTime: 3,          // seconds of data to buffer before playback begins (null = flash default of 0.1 seconds - if AAC playback is gappy, try increasing.)\r\n    serverURL: null,        // rtmp: FMS or FMIS server to connect to, required when requesting media via RTMP or one of its variants\r\n    onconnect: null,        // rtmp: callback for connection to flash media server\r\n    duration: null          // rtmp: song duration (msec)\r\n\r\n  };\r\n\r\n  this.audioFormats = {\r\n\r\n    /**\r\n     * determines HTML5 support + flash requirements.\r\n     * if no support (via flash and/or HTML5) for a \"required\" format, SM2 will fail to start.\r\n     * flash fallback is used for MP3 or MP4 if HTML5 can't play it (or if preferFlash = true)\r\n     */\r\n\r\n    mp3: {\r\n      type: ['audio/mpeg; codecs=\"mp3\"', 'audio/mpeg', 'audio/mp3', 'audio/MPA', 'audio/mpa-robust'],\r\n      required: true\r\n    },\r\n\r\n    mp4: {\r\n      related: ['aac', 'm4a', 'm4b'], // additional formats under the MP4 container\r\n      type: ['audio/mp4; codecs=\"mp4a.40.2\"', 'audio/aac', 'audio/x-m4a', 'audio/MP4A-LATM', 'audio/mpeg4-generic'],\r\n      required: false\r\n    },\r\n\r\n    ogg: {\r\n      type: ['audio/ogg; codecs=vorbis'],\r\n      required: false\r\n    },\r\n\r\n    opus: {\r\n      type: ['audio/ogg; codecs=opus', 'audio/opus'],\r\n      required: false\r\n    },\r\n\r\n    wav: {\r\n      type: ['audio/wav; codecs=\"1\"', 'audio/wav', 'audio/wave', 'audio/x-wav'],\r\n      required: false\r\n    },\r\n\r\n    flac: {\r\n      type: ['audio/flac'],\r\n      required: false\r\n    }\r\n\r\n  };\r\n\r\n  // HTML attributes (id + class names) for the SWF container\r\n\r\n  this.movieID = 'sm2-container';\r\n  this.id = (smID || 'sm2movie');\r\n\r\n  this.debugID = 'soundmanager-debug';\r\n  this.debugURLParam = /([#?&])debug=1/i;\r\n\r\n  // dynamic attributes\r\n\r\n  this.versionNumber = 'V2.97a.20170601';\r\n  this.version = null;\r\n  this.movieURL = null;\r\n  this.altURL = null;\r\n  this.swfLoaded = false;\r\n  this.enabled = false;\r\n  this.oMC = null;\r\n  this.sounds = {};\r\n  this.soundIDs = [];\r\n  this.muted = false;\r\n  this.didFlashBlock = false;\r\n  this.filePattern = null;\r\n\r\n  this.filePatterns = {\r\n    flash8: /\\.mp3(\\?.*)?$/i,\r\n    flash9: /\\.mp3(\\?.*)?$/i\r\n  };\r\n\r\n  // support indicators, set at init\r\n\r\n  this.features = {\r\n    buffering: false,\r\n    peakData: false,\r\n    waveformData: false,\r\n    eqData: false,\r\n    movieStar: false\r\n  };\r\n\r\n  // flash sandbox info, used primarily in troubleshooting\r\n\r\n  this.sandbox = {\r\n    // <d>\r\n    type: null,\r\n    types: {\r\n      remote: 'remote (domain-based) rules',\r\n      localWithFile: 'local with file access (no internet access)',\r\n      localWithNetwork: 'local with network (internet access only, no local access)',\r\n      localTrusted: 'local, trusted (local+internet access)'\r\n    },\r\n    description: null,\r\n    noRemote: null,\r\n    noLocal: null\r\n    // </d>\r\n  };\r\n\r\n  /**\r\n   * format support (html5/flash)\r\n   * stores canPlayType() results based on audioFormats.\r\n   * eg. { mp3: boolean, mp4: boolean }\r\n   * treat as read-only.\r\n   */\r\n\r\n  this.html5 = {\r\n    usingFlash: null // set if/when flash fallback is needed\r\n  };\r\n\r\n  // file type support hash\r\n  this.flash = {};\r\n\r\n  // determined at init time\r\n  this.html5Only = false;\r\n\r\n  // used for special cases (eg. iPad/iPhone/palm OS?)\r\n  this.ignoreFlash = false;\r\n\r\n  /**\r\n   * a few private internals (OK, a lot. :D)\r\n   */\r\n\r\n  var SMSound,\r\n  sm2 = this, globalHTML5Audio = null, flash = null, sm = 'soundManager', smc = sm + ': ', h5 = 'HTML5::', id, ua = navigator.userAgent, wl = window.location.href.toString(), doc = document, doNothing, setProperties, init, fV, on_queue = [], debugOpen = true, debugTS, didAppend = false, appendSuccess = false, didInit = false, disabled = false, windowLoaded = false, _wDS, wdCount = 0, initComplete, mixin, assign, extraOptions, addOnEvent, processOnEvents, initUserOnload, delayWaitForEI, waitForEI, rebootIntoHTML5, setVersionInfo, handleFocus, strings, initMovie, domContentLoaded, winOnLoad, didDCLoaded, getDocument, createMovie, catchError, setPolling, initDebug, debugLevels = ['log', 'info', 'warn', 'error'], defaultFlashVersion = 8, disableObject, failSafely, normalizeMovieURL, oRemoved = null, oRemovedHTML = null, str, flashBlockHandler, getSWFCSS, swfCSS, toggleDebug, loopFix, policyFix, complain, idCheck, waitingForEI = false, initPending = false, startTimer, stopTimer, timerExecute, h5TimerCount = 0, h5IntervalTimer = null, parseURL, messages = [],\r\n  canIgnoreFlash, needsFlash = null, featureCheck, html5OK, html5CanPlay, html5ErrorCodes, html5Ext, html5Unload, domContentLoadedIE, testHTML5, event, slice = Array.prototype.slice, useGlobalHTML5Audio = false, lastGlobalHTML5URL, hasFlash, detectFlash, badSafariFix, html5_events, showSupport, flushMessages, wrapCallback, idCounter = 0, didSetup, msecScale = 1000,\r\n  is_iDevice = ua.match(/(ipad|iphone|ipod)/i), isAndroid = ua.match(/android/i), isIE = ua.match(/msie|trident/i),\r\n  isWebkit = ua.match(/webkit/i),\r\n  isSafari = (ua.match(/safari/i) && !ua.match(/chrome/i)),\r\n  isOpera = (ua.match(/opera/i)),\r\n  mobileHTML5 = (ua.match(/(mobile|pre\\/|xoom)/i) || is_iDevice || isAndroid),\r\n  isBadSafari = (!wl.match(/usehtml5audio/i) && !wl.match(/sm2-ignorebadua/i) && isSafari && !ua.match(/silk/i) && ua.match(/OS\\sX\\s10_6_([3-7])/i)), // Safari 4 and 5 (excluding Kindle Fire, \"Silk\") occasionally fail to load/play HTML5 audio on Snow Leopard 10.6.3 through 10.6.7 due to bug(s) in QuickTime X and/or other underlying frameworks. :/ Confirmed bug. https://bugs.webkit.org/show_bug.cgi?id=32159\r\n  hasConsole = (window.console !== _undefined && console.log !== _undefined),\r\n  isFocused = (doc.hasFocus !== _undefined ? doc.hasFocus() : null),\r\n  tryInitOnFocus = (isSafari && (doc.hasFocus === _undefined || !doc.hasFocus())),\r\n  okToDisable = !tryInitOnFocus,\r\n  flashMIME = /(mp3|mp4|mpa|m4a|m4b)/i,\r\n  emptyURL = 'about:blank', // safe URL to unload, or load nothing from (flash 8 + most HTML5 UAs)\r\n  emptyWAV = 'data:audio/wave;base64,/UklGRiYAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQIAAAD//w==', // tiny WAV for HTML5 unloading\r\n  overHTTP = (doc.location ? doc.location.protocol.match(/http/i) : null),\r\n  http = (!overHTTP ? '//' : ''),\r\n  // mp3, mp4, aac etc.\r\n  netStreamMimeTypes = /^\\s*audio\\/(?:x-)?(?:mpeg4|aac|flv|mov|mp4|m4v|m4a|m4b|mp4v|3gp|3g2)\\s*(?:$|;)/i,\r\n  // Flash v9.0r115+ \"moviestar\" formats\r\n  netStreamTypes = ['mpeg4', 'aac', 'flv', 'mov', 'mp4', 'm4v', 'f4v', 'm4a', 'm4b', 'mp4v', '3gp', '3g2'],\r\n  netStreamPattern = new RegExp('\\\\.(' + netStreamTypes.join('|') + ')(\\\\?.*)?$', 'i');\r\n\r\n  this.mimePattern = /^\\s*audio\\/(?:x-)?(?:mp(?:eg|3))\\s*(?:$|;)/i; // default mp3 set\r\n\r\n  // use altURL if not \"online\"\r\n  this.useAltURL = !overHTTP;\r\n\r\n  swfCSS = {\r\n    swfBox: 'sm2-object-box',\r\n    swfDefault: 'movieContainer',\r\n    swfError: 'swf_error', // SWF loaded, but SM2 couldn't start (other error)\r\n    swfTimedout: 'swf_timedout',\r\n    swfLoaded: 'swf_loaded',\r\n    swfUnblocked: 'swf_unblocked', // or loaded OK\r\n    sm2Debug: 'sm2_debug',\r\n    highPerf: 'high_performance',\r\n    flashDebug: 'flash_debug'\r\n  };\r\n\r\n  /**\r\n   * HTML5 error codes, per W3C\r\n   * Error code 1, MEDIA_ERR_ABORTED: Client aborted download at user's request.\r\n   * Error code 2, MEDIA_ERR_NETWORK: A network error of some description caused the user agent to stop fetching the media resource, after the resource was established to be usable.\r\n   * Error code 3, MEDIA_ERR_DECODE: An error of some description occurred while decoding the media resource, after the resource was established to be usable.\r\n   * Error code 4, MEDIA_ERR_SRC_NOT_SUPPORTED: Media (audio file) not supported (\"not usable.\")\r\n   * Reference: https://html.spec.whatwg.org/multipage/embedded-content.html#error-codes\r\n   */\r\n  html5ErrorCodes = [\r\n    null,\r\n    'MEDIA_ERR_ABORTED',\r\n    'MEDIA_ERR_NETWORK',\r\n    'MEDIA_ERR_DECODE',\r\n    'MEDIA_ERR_SRC_NOT_SUPPORTED'\r\n  ];\r\n\r\n  /**\r\n   * basic HTML5 Audio() support test\r\n   * try...catch because of IE 9 \"not implemented\" nonsense\r\n   * https://github.com/Modernizr/Modernizr/issues/224\r\n   */\r\n\r\n  this.hasHTML5 = (function() {\r\n    try {\r\n      // new Audio(null) for stupid Opera 9.64 case, which throws not_enough_arguments exception otherwise.\r\n      return (Audio !== _undefined && (isOpera && opera !== _undefined && opera.version() < 10 ? new Audio(null) : new Audio()).canPlayType !== _undefined);\r\n    } catch(e) {\r\n      return false;\r\n    }\r\n  }());\r\n\r\n  /**\r\n   * Public SoundManager API\r\n   * -----------------------\r\n   */\r\n\r\n  /**\r\n   * Configures top-level soundManager properties.\r\n   *\r\n   * @param {object} options Option parameters, eg. { flashVersion: 9, url: '/path/to/swfs/' }\r\n   * onready and ontimeout are also accepted parameters. call soundManager.setup() to see the full list.\r\n   */\r\n\r\n  this.setup = function(options) {\r\n\r\n    var noURL = (!sm2.url);\r\n\r\n    // warn if flash options have already been applied\r\n\r\n    if (options !== _undefined && didInit && needsFlash && sm2.ok() && (options.flashVersion !== _undefined || options.url !== _undefined || options.html5Test !== _undefined)) {\r\n      complain(str('setupLate'));\r\n    }\r\n\r\n    // TODO: defer: true?\r\n\r\n    assign(options);\r\n\r\n    if (!useGlobalHTML5Audio) {\r\n\r\n      if (mobileHTML5) {\r\n\r\n        // force the singleton HTML5 pattern on mobile, by default.\r\n        if (!sm2.setupOptions.ignoreMobileRestrictions || sm2.setupOptions.forceUseGlobalHTML5Audio) {\r\n          messages.push(strings.globalHTML5);\r\n          useGlobalHTML5Audio = true;\r\n        }\r\n\r\n      } else if (sm2.setupOptions.forceUseGlobalHTML5Audio) {\r\n\r\n        // only apply singleton HTML5 on desktop if forced.\r\n        messages.push(strings.globalHTML5);\r\n        useGlobalHTML5Audio = true;\r\n\r\n      }\r\n\r\n    }\r\n\r\n    if (!didSetup && mobileHTML5) {\r\n\r\n      if (sm2.setupOptions.ignoreMobileRestrictions) {\r\n\r\n        messages.push(strings.ignoreMobile);\r\n\r\n      } else {\r\n\r\n        // prefer HTML5 for mobile + tablet-like devices, probably more reliable vs. flash at this point.\r\n\r\n        // <d>\r\n        if (!sm2.setupOptions.useHTML5Audio || sm2.setupOptions.preferFlash) {\r\n          // notify that defaults are being changed.\r\n          sm2._wD(strings.mobileUA);\r\n        }\r\n        // </d>\r\n\r\n        sm2.setupOptions.useHTML5Audio = true;\r\n        sm2.setupOptions.preferFlash = false;\r\n\r\n        if (is_iDevice) {\r\n\r\n          // no flash here.\r\n          sm2.ignoreFlash = true;\r\n\r\n        } else if ((isAndroid && !ua.match(/android\\s2\\.3/i)) || !isAndroid) {\r\n\r\n          /**\r\n           * Android devices tend to work better with a single audio instance, specifically for chained playback of sounds in sequence.\r\n           * Common use case: exiting sound onfinish() -> createSound() -> play()\r\n           * Presuming similar restrictions for other mobile, non-Android, non-iOS devices.\r\n           */\r\n\r\n          // <d>\r\n          sm2._wD(strings.globalHTML5);\r\n          // </d>\r\n\r\n          useGlobalHTML5Audio = true;\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    // special case 1: \"Late setup\". SM2 loaded normally, but user didn't assign flash URL eg., setup({url:...}) before SM2 init. Treat as delayed init.\r\n\r\n    if (options) {\r\n\r\n      if (noURL && didDCLoaded && options.url !== _undefined) {\r\n        sm2.beginDelayedInit();\r\n      }\r\n\r\n      // special case 2: If lazy-loading SM2 (DOMContentLoaded has already happened) and user calls setup() with url: parameter, try to init ASAP.\r\n\r\n      if (!didDCLoaded && options.url !== _undefined && doc.readyState === 'complete') {\r\n        setTimeout(domContentLoaded, 1);\r\n      }\r\n\r\n    }\r\n\r\n    didSetup = true;\r\n\r\n    return sm2;\r\n\r\n  };\r\n\r\n  this.ok = function() {\r\n\r\n    return (needsFlash ? (didInit && !disabled) : (sm2.useHTML5Audio && sm2.hasHTML5));\r\n\r\n  };\r\n\r\n  this.supported = this.ok; // legacy\r\n\r\n  this.getMovie = function(movie_id) {\r\n\r\n    // safety net: some old browsers differ on SWF references, possibly related to ExternalInterface / flash version\r\n    return id(movie_id) || doc[movie_id] || window[movie_id];\r\n\r\n  };\r\n\r\n  /**\r\n   * Creates a SMSound sound object instance. Can also be overloaded, e.g., createSound('mySound', '/some.mp3');\r\n   *\r\n   * @param {object} oOptions Sound options (at minimum, url parameter is required.)\r\n   * @return {object} SMSound The new SMSound object.\r\n   */\r\n\r\n  this.createSound = function(oOptions, _url) {\r\n\r\n    var cs, cs_string, options, oSound = null;\r\n\r\n    // <d>\r\n    cs = sm + '.createSound(): ';\r\n    cs_string = cs + str(!didInit ? 'notReady' : 'notOK');\r\n    // </d>\r\n\r\n    if (!didInit || !sm2.ok()) {\r\n      complain(cs_string);\r\n      return false;\r\n    }\r\n\r\n    if (_url !== _undefined) {\r\n      // function overloading in JS! :) ... assume simple createSound(id, url) use case.\r\n      oOptions = {\r\n        id: oOptions,\r\n        url: _url\r\n      };\r\n    }\r\n\r\n    // inherit from defaultOptions\r\n    options = mixin(oOptions);\r\n\r\n    options.url = parseURL(options.url);\r\n\r\n    // generate an id, if needed.\r\n    if (options.id === _undefined) {\r\n      options.id = sm2.setupOptions.idPrefix + (idCounter++);\r\n    }\r\n\r\n    // <d>\r\n    if (options.id.toString().charAt(0).match(/^[0-9]$/)) {\r\n      sm2._wD(cs + str('badID', options.id), 2);\r\n    }\r\n\r\n    sm2._wD(cs + options.id + (options.url ? ' (' + options.url + ')' : ''), 1);\r\n    // </d>\r\n\r\n    if (idCheck(options.id, true)) {\r\n      sm2._wD(cs + options.id + ' exists', 1);\r\n      return sm2.sounds[options.id];\r\n    }\r\n\r\n    function make() {\r\n\r\n      options = loopFix(options);\r\n      sm2.sounds[options.id] = new SMSound(options);\r\n      sm2.soundIDs.push(options.id);\r\n      return sm2.sounds[options.id];\r\n\r\n    }\r\n\r\n    if (html5OK(options)) {\r\n\r\n      oSound = make();\r\n      // <d>\r\n      if (!sm2.html5Only) {\r\n        sm2._wD(options.id + ': Using HTML5');\r\n      }\r\n      // </d>\r\n      oSound._setup_html5(options);\r\n\r\n    } else {\r\n\r\n      if (sm2.html5Only) {\r\n        sm2._wD(options.id + ': No HTML5 support for this sound, and no Flash. Exiting.');\r\n        return make();\r\n      }\r\n\r\n      // TODO: Move HTML5/flash checks into generic URL parsing/handling function.\r\n\r\n      if (sm2.html5.usingFlash && options.url && options.url.match(/data:/i)) {\r\n        // data: URIs not supported by Flash, either.\r\n        sm2._wD(options.id + ': data: URIs not supported via Flash. Exiting.');\r\n        return make();\r\n      }\r\n\r\n      if (fV > 8) {\r\n        if (options.isMovieStar === null) {\r\n          // attempt to detect MPEG-4 formats\r\n          options.isMovieStar = !!(options.serverURL || (options.type ? options.type.match(netStreamMimeTypes) : false) || (options.url && options.url.match(netStreamPattern)));\r\n        }\r\n        // <d>\r\n        if (options.isMovieStar) {\r\n          sm2._wD(cs + 'using MovieStar handling');\r\n          if (options.loops > 1) {\r\n            _wDS('noNSLoop');\r\n          }\r\n        }\r\n        // </d>\r\n      }\r\n\r\n      options = policyFix(options, cs);\r\n      oSound = make();\r\n\r\n      if (fV === 8) {\r\n        flash._createSound(options.id, options.loops || 1, options.usePolicyFile);\r\n      } else {\r\n        flash._createSound(options.id, options.url, options.usePeakData, options.useWaveformData, options.useEQData, options.isMovieStar, (options.isMovieStar ? options.bufferTime : false), options.loops || 1, options.serverURL, options.duration || null, options.autoPlay, true, options.autoLoad, options.usePolicyFile);\r\n        if (!options.serverURL) {\r\n          // We are connected immediately\r\n          oSound.connected = true;\r\n          if (options.onconnect) {\r\n            options.onconnect.apply(oSound);\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!options.serverURL && (options.autoLoad || options.autoPlay)) {\r\n        // call load for non-rtmp streams\r\n        oSound.load(options);\r\n      }\r\n\r\n    }\r\n\r\n    // rtmp will play in onconnect\r\n    if (!options.serverURL && options.autoPlay) {\r\n      oSound.play();\r\n    }\r\n\r\n    return oSound;\r\n\r\n  };\r\n\r\n  /**\r\n   * Destroys a SMSound sound object instance.\r\n   *\r\n   * @param {string} sID The ID of the sound to destroy\r\n   */\r\n\r\n  this.destroySound = function(sID, _bFromSound) {\r\n\r\n    // explicitly destroy a sound before normal page unload, etc.\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    var oS = sm2.sounds[sID], i;\r\n\r\n    oS.stop();\r\n\r\n    // Disable all callbacks after stop(), when the sound is being destroyed\r\n    oS._iO = {};\r\n\r\n    oS.unload();\r\n\r\n    for (i = 0; i < sm2.soundIDs.length; i++) {\r\n      if (sm2.soundIDs[i] === sID) {\r\n        sm2.soundIDs.splice(i, 1);\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!_bFromSound) {\r\n      // ignore if being called from SMSound instance\r\n      oS.destruct(true);\r\n    }\r\n\r\n    oS = null;\r\n    delete sm2.sounds[sID];\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the load() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {object} oOptions Optional: Sound options\r\n   */\r\n\r\n  this.load = function(sID, oOptions) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].load(oOptions);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the unload() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   */\r\n\r\n  this.unload = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].unload();\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the onPosition() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nPosition The position to watch for\r\n   * @param {function} oMethod The relevant callback to fire\r\n   * @param {object} oScope Optional: The scope to apply the callback to\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.onPosition = function(sID, nPosition, oMethod, oScope) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].onposition(nPosition, oMethod, oScope);\r\n\r\n  };\r\n\r\n  // legacy/backwards-compability: lower-case method name\r\n  this.onposition = this.onPosition;\r\n\r\n  /**\r\n   * Calls the clearOnPosition() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nPosition The position to watch for\r\n   * @param {function} oMethod Optional: The relevant callback to fire\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.clearOnPosition = function(sID, nPosition, oMethod) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].clearOnPosition(nPosition, oMethod);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the play() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {object} oOptions Optional: Sound options\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.play = function(sID, oOptions) {\r\n\r\n    var result = null,\r\n        // legacy function-overloading use case: play('mySound', '/path/to/some.mp3');\r\n        overloaded = (oOptions && !(oOptions instanceof Object));\r\n\r\n    if (!didInit || !sm2.ok()) {\r\n      complain(sm + '.play(): ' + str(!didInit ? 'notReady' : 'notOK'));\r\n      return false;\r\n    }\r\n\r\n    if (!idCheck(sID, overloaded)) {\r\n\r\n      // no sound found for the given ID. Bail.\r\n      if (!overloaded) return false;\r\n\r\n      if (overloaded) {\r\n        oOptions = {\r\n          url: oOptions\r\n        };\r\n      }\r\n\r\n      if (oOptions && oOptions.url) {\r\n        // overloading use case, create+play: .play('someID', {url:'/path/to.mp3'});\r\n        sm2._wD(sm + '.play(): Attempting to create \"' + sID + '\"', 1);\r\n        oOptions.id = sID;\r\n        result = sm2.createSound(oOptions).play();\r\n      }\r\n\r\n    } else if (overloaded) {\r\n\r\n      // existing sound object case\r\n      oOptions = {\r\n        url: oOptions\r\n      };\r\n\r\n    }\r\n\r\n    if (result === null) {\r\n      // default case\r\n      result = sm2.sounds[sID].play(oOptions);\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  // just for convenience\r\n  this.start = this.play;\r\n\r\n  /**\r\n   * Calls the setPlaybackRate() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.setPlaybackRate = function(sID, rate, allowOverride) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].setPlaybackRate(rate, allowOverride);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the setPosition() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nMsecOffset Position (milliseconds)\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.setPosition = function(sID, nMsecOffset) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].setPosition(nMsecOffset);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the stop() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.stop = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    sm2._wD(sm + '.stop(' + sID + ')', 1);\r\n\r\n    return sm2.sounds[sID].stop();\r\n\r\n  };\r\n\r\n  /**\r\n   * Stops all currently-playing sounds.\r\n   */\r\n\r\n  this.stopAll = function() {\r\n\r\n    var oSound;\r\n    sm2._wD(sm + '.stopAll()', 1);\r\n\r\n    for (oSound in sm2.sounds) {\r\n      if (sm2.sounds.hasOwnProperty(oSound)) {\r\n        // apply only to sound objects\r\n        sm2.sounds[oSound].stop();\r\n      }\r\n    }\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the pause() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.pause = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].pause();\r\n\r\n  };\r\n\r\n  /**\r\n   * Pauses all currently-playing sounds.\r\n   */\r\n\r\n  this.pauseAll = function() {\r\n\r\n    var i;\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n      sm2.sounds[sm2.soundIDs[i]].pause();\r\n    }\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the resume() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.resume = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].resume();\r\n\r\n  };\r\n\r\n  /**\r\n   * Resumes all currently-paused sounds.\r\n   */\r\n\r\n  this.resumeAll = function() {\r\n\r\n    var i;\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n      sm2.sounds[sm2.soundIDs[i]].resume();\r\n    }\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the togglePause() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.togglePause = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].togglePause();\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the setPan() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nPan The pan value (-100 to 100)\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.setPan = function(sID, nPan) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].setPan(nPan);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the setVolume() method of a SMSound object by ID\r\n   * Overloaded case: pass only volume argument eg., setVolume(50) to apply to all sounds.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nVol The volume value (0 to 100)\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.setVolume = function(sID, nVol) {\r\n\r\n    // setVolume(50) function overloading case - apply to all sounds\r\n\r\n    var i, j;\r\n\r\n    if (sID !== _undefined && !isNaN(sID) && nVol === _undefined) {\r\n      for (i = 0, j = sm2.soundIDs.length; i < j; i++) {\r\n        sm2.sounds[sm2.soundIDs[i]].setVolume(sID);\r\n      }\r\n      return false;\r\n    }\r\n\r\n    // setVolume('mySound', 50) case\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].setVolume(nVol);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the mute() method of either a single SMSound object by ID, or all sound objects.\r\n   *\r\n   * @param {string} sID Optional: The ID of the sound (if omitted, all sounds will be used.)\r\n   */\r\n\r\n  this.mute = function(sID) {\r\n\r\n    var i = 0;\r\n\r\n    if (sID instanceof String) {\r\n      sID = null;\r\n    }\r\n\r\n    if (!sID) {\r\n\r\n      sm2._wD(sm + '.mute(): Muting all sounds');\r\n      for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n        sm2.sounds[sm2.soundIDs[i]].mute();\r\n      }\r\n      sm2.muted = true;\r\n\r\n    } else {\r\n\r\n      if (!idCheck(sID)) return false;\r\n\r\n      sm2._wD(sm + '.mute(): Muting \"' + sID + '\"');\r\n      return sm2.sounds[sID].mute();\r\n\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  /**\r\n   * Mutes all sounds.\r\n   */\r\n\r\n  this.muteAll = function() {\r\n\r\n    sm2.mute();\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the unmute() method of either a single SMSound object by ID, or all sound objects.\r\n   *\r\n   * @param {string} sID Optional: The ID of the sound (if omitted, all sounds will be used.)\r\n   */\r\n\r\n  this.unmute = function(sID) {\r\n\r\n    var i;\r\n\r\n    if (sID instanceof String) {\r\n      sID = null;\r\n    }\r\n\r\n    if (!sID) {\r\n\r\n      sm2._wD(sm + '.unmute(): Unmuting all sounds');\r\n      for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n        sm2.sounds[sm2.soundIDs[i]].unmute();\r\n      }\r\n      sm2.muted = false;\r\n\r\n    } else {\r\n\r\n      if (!idCheck(sID)) return false;\r\n\r\n      sm2._wD(sm + '.unmute(): Unmuting \"' + sID + '\"');\r\n\r\n      return sm2.sounds[sID].unmute();\r\n\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  /**\r\n   * Unmutes all sounds.\r\n   */\r\n\r\n  this.unmuteAll = function() {\r\n\r\n    sm2.unmute();\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the toggleMute() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.toggleMute = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].toggleMute();\r\n\r\n  };\r\n\r\n  /**\r\n   * Retrieves the memory used by the flash plugin.\r\n   *\r\n   * @return {number} The amount of memory in use\r\n   */\r\n\r\n  this.getMemoryUse = function() {\r\n\r\n    // flash-only\r\n    var ram = 0;\r\n\r\n    if (flash && fV !== 8) {\r\n      ram = parseInt(flash._getMemoryUse(), 10);\r\n    }\r\n\r\n    return ram;\r\n\r\n  };\r\n\r\n  /**\r\n   * Undocumented: NOPs soundManager and all SMSound objects.\r\n   */\r\n\r\n  this.disable = function(bNoDisable) {\r\n\r\n    // destroy all functions\r\n    var i;\r\n\r\n    if (bNoDisable === _undefined) {\r\n      bNoDisable = false;\r\n    }\r\n\r\n    // already disabled?\r\n    if (disabled) return false;\r\n\r\n    disabled = true;\r\n\r\n    _wDS('shutdown', 1);\r\n\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n      disableObject(sm2.sounds[sm2.soundIDs[i]]);\r\n    }\r\n\r\n    disableObject(sm2);\r\n\r\n    // fire \"complete\", despite fail\r\n    initComplete(bNoDisable);\r\n\r\n    event.remove(window, 'load', initUserOnload);\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  /**\r\n   * Determines playability of a MIME type, eg. 'audio/mp3'.\r\n   */\r\n\r\n  this.canPlayMIME = function(sMIME) {\r\n\r\n    var result;\r\n\r\n    if (sm2.hasHTML5) {\r\n      result = html5CanPlay({\r\n        type: sMIME\r\n      });\r\n    }\r\n\r\n    if (!result && needsFlash) {\r\n      // if flash 9, test netStream (movieStar) types as well.\r\n      result = (sMIME && sm2.ok() ? !!((fV > 8 ? sMIME.match(netStreamMimeTypes) : null) || sMIME.match(sm2.mimePattern)) : null); // TODO: make less \"weird\" (per JSLint)\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Determines playability of a URL based on audio support.\r\n   *\r\n   * @param {string} sURL The URL to test\r\n   * @return {boolean} URL playability\r\n   */\r\n\r\n  this.canPlayURL = function(sURL) {\r\n\r\n    var result;\r\n\r\n    if (sm2.hasHTML5) {\r\n      result = html5CanPlay({\r\n        url: sURL\r\n      });\r\n    }\r\n\r\n    if (!result && needsFlash) {\r\n      result = (sURL && sm2.ok() ? !!(sURL.match(sm2.filePattern)) : null);\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Determines playability of an HTML DOM &lt;a&gt; object (or similar object literal) based on audio support.\r\n   *\r\n   * @param {object} oLink an HTML DOM &lt;a&gt; object or object literal including href and/or type attributes\r\n   * @return {boolean} URL playability\r\n   */\r\n\r\n  this.canPlayLink = function(oLink) {\r\n\r\n    if (oLink.type !== _undefined && oLink.type && sm2.canPlayMIME(oLink.type)) return true;\r\n\r\n    return sm2.canPlayURL(oLink.href);\r\n\r\n  };\r\n\r\n  /**\r\n   * Retrieves a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.getSoundById = function(sID, _suppressDebug) {\r\n\r\n    if (!sID) return null;\r\n\r\n    var result = sm2.sounds[sID];\r\n\r\n    // <d>\r\n    if (!result && !_suppressDebug) {\r\n      sm2._wD(sm + '.getSoundById(): Sound \"' + sID + '\" not found.', 2);\r\n    }\r\n    // </d>\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Queues a callback for execution when SoundManager has successfully initialized.\r\n   *\r\n   * @param {function} oMethod The callback method to fire\r\n   * @param {object} oScope Optional: The scope to apply to the callback\r\n   */\r\n\r\n  this.onready = function(oMethod, oScope) {\r\n\r\n    var sType = 'onready',\r\n        result = false;\r\n\r\n    if (typeof oMethod === 'function') {\r\n\r\n      // <d>\r\n      if (didInit) {\r\n        sm2._wD(str('queue', sType));\r\n      }\r\n      // </d>\r\n\r\n      if (!oScope) {\r\n        oScope = window;\r\n      }\r\n\r\n      addOnEvent(sType, oMethod, oScope);\r\n      processOnEvents();\r\n\r\n      result = true;\r\n\r\n    } else {\r\n\r\n      throw str('needFunction', sType);\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Queues a callback for execution when SoundManager has failed to initialize.\r\n   *\r\n   * @param {function} oMethod The callback method to fire\r\n   * @param {object} oScope Optional: The scope to apply to the callback\r\n   */\r\n\r\n  this.ontimeout = function(oMethod, oScope) {\r\n\r\n    var sType = 'ontimeout',\r\n        result = false;\r\n\r\n    if (typeof oMethod === 'function') {\r\n\r\n      // <d>\r\n      if (didInit) {\r\n        sm2._wD(str('queue', sType));\r\n      }\r\n      // </d>\r\n\r\n      if (!oScope) {\r\n        oScope = window;\r\n      }\r\n\r\n      addOnEvent(sType, oMethod, oScope);\r\n      processOnEvents({ type: sType });\r\n\r\n      result = true;\r\n\r\n    } else {\r\n\r\n      throw str('needFunction', sType);\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Writes console.log()-style debug output to a console or in-browser element.\r\n   * Applies when debugMode = true\r\n   *\r\n   * @param {string} sText The console message\r\n   * @param {object} nType Optional log level (number), or object. Number case: Log type/style where 0 = 'info', 1 = 'warn', 2 = 'error'. Object case: Object to be dumped.\r\n   */\r\n\r\n  this._writeDebug = function(sText, sTypeOrObject) {\r\n\r\n    // pseudo-private console.log()-style output\r\n    // <d>\r\n\r\n    var sDID = 'soundmanager-debug', o, oItem;\r\n\r\n    if (!sm2.setupOptions.debugMode) return false;\r\n\r\n    if (hasConsole && sm2.useConsole) {\r\n      if (sTypeOrObject && typeof sTypeOrObject === 'object') {\r\n        // object passed; dump to console.\r\n        console.log(sText, sTypeOrObject);\r\n      } else if (debugLevels[sTypeOrObject] !== _undefined) {\r\n        console[debugLevels[sTypeOrObject]](sText);\r\n      } else {\r\n        console.log(sText);\r\n      }\r\n      if (sm2.consoleOnly) return true;\r\n    }\r\n\r\n    o = id(sDID);\r\n\r\n    if (!o) return false;\r\n\r\n    oItem = doc.createElement('div');\r\n\r\n    if (++wdCount % 2 === 0) {\r\n      oItem.className = 'sm2-alt';\r\n    }\r\n\r\n    if (sTypeOrObject === _undefined) {\r\n      sTypeOrObject = 0;\r\n    } else {\r\n      sTypeOrObject = parseInt(sTypeOrObject, 10);\r\n    }\r\n\r\n    oItem.appendChild(doc.createTextNode(sText));\r\n\r\n    if (sTypeOrObject) {\r\n      if (sTypeOrObject >= 2) {\r\n        oItem.style.fontWeight = 'bold';\r\n      }\r\n      if (sTypeOrObject === 3) {\r\n        oItem.style.color = '#ff3333';\r\n      }\r\n    }\r\n\r\n    // top-to-bottom\r\n    // o.appendChild(oItem);\r\n\r\n    // bottom-to-top\r\n    o.insertBefore(oItem, o.firstChild);\r\n\r\n    o = null;\r\n    // </d>\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  // <d>\r\n  // last-resort debugging option\r\n  if (wl.indexOf('sm2-debug=alert') !== -1) {\r\n    this._writeDebug = function(sText) {\r\n      window.alert(sText);\r\n    };\r\n  }\r\n  // </d>\r\n\r\n  // alias\r\n  this._wD = this._writeDebug;\r\n\r\n  /**\r\n   * Provides debug / state information on all SMSound objects.\r\n   */\r\n\r\n  this._debug = function() {\r\n\r\n    // <d>\r\n    var i, j;\r\n    _wDS('currentObj', 1);\r\n\r\n    for (i = 0, j = sm2.soundIDs.length; i < j; i++) {\r\n      sm2.sounds[sm2.soundIDs[i]]._debug();\r\n    }\r\n    // </d>\r\n\r\n  };\r\n\r\n  /**\r\n   * Restarts and re-initializes the SoundManager instance.\r\n   *\r\n   * @param {boolean} resetEvents Optional: When true, removes all registered onready and ontimeout event callbacks.\r\n   * @param {boolean} excludeInit Options: When true, does not call beginDelayedInit() (which would restart SM2).\r\n   * @return {object} soundManager The soundManager instance.\r\n   */\r\n\r\n  this.reboot = function(resetEvents, excludeInit) {\r\n\r\n    // reset some (or all) state, and re-init unless otherwise specified.\r\n\r\n    // <d>\r\n    if (sm2.soundIDs.length) {\r\n      sm2._wD('Destroying ' + sm2.soundIDs.length + ' SMSound object' + (sm2.soundIDs.length !== 1 ? 's' : '') + '...');\r\n    }\r\n    // </d>\r\n\r\n    var i, j, k;\r\n\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n      sm2.sounds[sm2.soundIDs[i]].destruct();\r\n    }\r\n\r\n    // trash ze flash (remove from the DOM)\r\n\r\n    if (flash) {\r\n\r\n      try {\r\n\r\n        if (isIE) {\r\n          oRemovedHTML = flash.innerHTML;\r\n        }\r\n\r\n        oRemoved = flash.parentNode.removeChild(flash);\r\n\r\n      } catch(e) {\r\n\r\n        // Remove failed? May be due to flash blockers silently removing the SWF object/embed node from the DOM. Warn and continue.\r\n\r\n        _wDS('badRemove', 2);\r\n\r\n      }\r\n\r\n    }\r\n\r\n    // actually, force recreate of movie.\r\n\r\n    oRemovedHTML = oRemoved = needsFlash = flash = null;\r\n\r\n    sm2.enabled = didDCLoaded = didInit = waitingForEI = initPending = didAppend = appendSuccess = disabled = useGlobalHTML5Audio = sm2.swfLoaded = false;\r\n\r\n    sm2.soundIDs = [];\r\n    sm2.sounds = {};\r\n\r\n    idCounter = 0;\r\n    didSetup = false;\r\n\r\n    if (!resetEvents) {\r\n      // reset callbacks for onready, ontimeout etc. so that they will fire again on re-init\r\n      for (i in on_queue) {\r\n        if (on_queue.hasOwnProperty(i)) {\r\n          for (j = 0, k = on_queue[i].length; j < k; j++) {\r\n            on_queue[i][j].fired = false;\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // remove all callbacks entirely\r\n      on_queue = [];\r\n    }\r\n\r\n    // <d>\r\n    if (!excludeInit) {\r\n      sm2._wD(sm + ': Rebooting...');\r\n    }\r\n    // </d>\r\n\r\n    // reset HTML5 and flash canPlay test results\r\n\r\n    sm2.html5 = {\r\n      usingFlash: null\r\n    };\r\n\r\n    sm2.flash = {};\r\n\r\n    // reset device-specific HTML/flash mode switches\r\n\r\n    sm2.html5Only = false;\r\n    sm2.ignoreFlash = false;\r\n\r\n    window.setTimeout(function() {\r\n\r\n      // by default, re-init\r\n\r\n      if (!excludeInit) {\r\n        sm2.beginDelayedInit();\r\n      }\r\n\r\n    }, 20);\r\n\r\n    return sm2;\r\n\r\n  };\r\n\r\n  this.reset = function() {\r\n\r\n    /**\r\n     * Shuts down and restores the SoundManager instance to its original loaded state, without an explicit reboot. All onready/ontimeout handlers are removed.\r\n     * After this call, SM2 may be re-initialized via soundManager.beginDelayedInit().\r\n     * @return {object} soundManager The soundManager instance.\r\n     */\r\n\r\n    _wDS('reset');\r\n\r\n    return sm2.reboot(true, true);\r\n\r\n  };\r\n\r\n  /**\r\n   * Undocumented: Determines the SM2 flash movie's load progress.\r\n   *\r\n   * @return {number or null} Percent loaded, or if invalid/unsupported, null.\r\n   */\r\n\r\n  this.getMoviePercent = function() {\r\n\r\n    /**\r\n     * Interesting syntax notes...\r\n     * Flash/ExternalInterface (ActiveX/NPAPI) bridge methods are not typeof \"function\" nor instanceof Function, but are still valid.\r\n     * Furthermore, using (flash && flash.PercentLoaded) causes IE to throw \"object doesn't support this property or method\".\r\n     * Thus, 'in' syntax must be used.\r\n     */\r\n\r\n    return (flash && 'PercentLoaded' in flash ? flash.PercentLoaded() : null);\r\n\r\n  };\r\n\r\n  /**\r\n   * Additional helper for manually invoking SM2's init process after DOM Ready / window.onload().\r\n   */\r\n\r\n  this.beginDelayedInit = function() {\r\n\r\n    windowLoaded = true;\r\n    domContentLoaded();\r\n\r\n    setTimeout(function() {\r\n\r\n      if (initPending) return false;\r\n\r\n      createMovie();\r\n      initMovie();\r\n      initPending = true;\r\n\r\n      return true;\r\n\r\n    }, 20);\r\n\r\n    delayWaitForEI();\r\n\r\n  };\r\n\r\n  /**\r\n   * Destroys the SoundManager instance and all SMSound instances.\r\n   */\r\n\r\n  this.destruct = function() {\r\n\r\n    sm2._wD(sm + '.destruct()');\r\n    sm2.disable(true);\r\n\r\n  };\r\n\r\n  /**\r\n   * SMSound() (sound object) constructor\r\n   * ------------------------------------\r\n   *\r\n   * @param {object} oOptions Sound options (id and url are required attributes)\r\n   * @return {SMSound} The new SMSound object\r\n   */\r\n\r\n  SMSound = function(oOptions) {\r\n\r\n    var s = this, resetProperties, add_html5_events, remove_html5_events, stop_html5_timer, start_html5_timer, attachOnPosition, onplay_called = false, onPositionItems = [], onPositionFired = 0, detachOnPosition, applyFromTo, lastURL = null, lastHTML5State, urlOmitted;\r\n\r\n    lastHTML5State = {\r\n      // tracks duration + position (time)\r\n      duration: null,\r\n      time: null\r\n    };\r\n\r\n    this.id = oOptions.id;\r\n\r\n    // legacy\r\n    this.sID = this.id;\r\n\r\n    this.url = oOptions.url;\r\n    this.options = mixin(oOptions);\r\n\r\n    // per-play-instance-specific options\r\n    this.instanceOptions = this.options;\r\n\r\n    // short alias\r\n    this._iO = this.instanceOptions;\r\n\r\n    // assign property defaults\r\n    this.pan = this.options.pan;\r\n    this.volume = this.options.volume;\r\n\r\n    // whether or not this object is using HTML5\r\n    this.isHTML5 = false;\r\n\r\n    // internal HTML5 Audio() object reference\r\n    this._a = null;\r\n\r\n    // for flash 8 special-case createSound() without url, followed by load/play with url case\r\n    urlOmitted = (!this.url);\r\n\r\n    /**\r\n     * SMSound() public methods\r\n     * ------------------------\r\n     */\r\n\r\n    this.id3 = {};\r\n\r\n    /**\r\n     * Writes SMSound object parameters to debug console\r\n     */\r\n\r\n    this._debug = function() {\r\n\r\n      // <d>\r\n      sm2._wD(s.id + ': Merged options:', s.options);\r\n      // </d>\r\n\r\n    };\r\n\r\n    /**\r\n     * Begins loading a sound per its *url*.\r\n     *\r\n     * @param {object} options Optional: Sound options\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.load = function(options) {\r\n\r\n      var oSound = null, instanceOptions;\r\n\r\n      if (options !== _undefined) {\r\n        s._iO = mixin(options, s.options);\r\n      } else {\r\n        options = s.options;\r\n        s._iO = options;\r\n        if (lastURL && lastURL !== s.url) {\r\n          _wDS('manURL');\r\n          s._iO.url = s.url;\r\n          s.url = null;\r\n        }\r\n      }\r\n\r\n      if (!s._iO.url) {\r\n        s._iO.url = s.url;\r\n      }\r\n\r\n      s._iO.url = parseURL(s._iO.url);\r\n\r\n      // ensure we're in sync\r\n      s.instanceOptions = s._iO;\r\n\r\n      // local shortcut\r\n      instanceOptions = s._iO;\r\n\r\n      sm2._wD(s.id + ': load (' + instanceOptions.url + ')');\r\n\r\n      if (!instanceOptions.url && !s.url) {\r\n        sm2._wD(s.id + ': load(): url is unassigned. Exiting.', 2);\r\n        return s;\r\n      }\r\n\r\n      // <d>\r\n      if (!s.isHTML5 && fV === 8 && !s.url && !instanceOptions.autoPlay) {\r\n        // flash 8 load() -> play() won't work before onload has fired.\r\n        sm2._wD(s.id + ': Flash 8 load() limitation: Wait for onload() before calling play().', 1);\r\n      }\r\n      // </d>\r\n\r\n      if (instanceOptions.url === s.url && s.readyState !== 0 && s.readyState !== 2) {\r\n        _wDS('onURL', 1);\r\n        // if loaded and an onload() exists, fire immediately.\r\n        if (s.readyState === 3 && instanceOptions.onload) {\r\n          // assume success based on truthy duration.\r\n          wrapCallback(s, function() {\r\n            instanceOptions.onload.apply(s, [(!!s.duration)]);\r\n          });\r\n        }\r\n        return s;\r\n      }\r\n\r\n      // reset a few state properties\r\n\r\n      s.loaded = false;\r\n      s.readyState = 1;\r\n      s.playState = 0;\r\n      s.id3 = {};\r\n\r\n      // TODO: If switching from HTML5 -> flash (or vice versa), stop currently-playing audio.\r\n\r\n      if (html5OK(instanceOptions)) {\r\n\r\n        oSound = s._setup_html5(instanceOptions);\r\n\r\n        if (!oSound._called_load) {\r\n\r\n          s._html5_canplay = false;\r\n\r\n          // TODO: review called_load / html5_canplay logic\r\n\r\n          // if url provided directly to load(), assign it here.\r\n\r\n          if (s.url !== instanceOptions.url) {\r\n\r\n            sm2._wD(_wDS('manURL') + ': ' + instanceOptions.url);\r\n\r\n            s._a.src = instanceOptions.url;\r\n\r\n            // TODO: review / re-apply all relevant options (volume, loop, onposition etc.)\r\n\r\n            // reset position for new URL\r\n            s.setPosition(0);\r\n\r\n          }\r\n\r\n          // given explicit load call, try to preload.\r\n\r\n          // early HTML5 implementation (non-standard)\r\n          s._a.autobuffer = 'auto';\r\n\r\n          // standard property, values: none / metadata / auto\r\n          // reference: http://msdn.microsoft.com/en-us/library/ie/ff974759%28v=vs.85%29.aspx\r\n          s._a.preload = 'auto';\r\n\r\n          s._a._called_load = true;\r\n\r\n        } else {\r\n\r\n          sm2._wD(s.id + ': Ignoring request to load again');\r\n\r\n        }\r\n\r\n      } else {\r\n\r\n        if (sm2.html5Only) {\r\n          sm2._wD(s.id + ': No flash support. Exiting.');\r\n          return s;\r\n        }\r\n\r\n        if (s._iO.url && s._iO.url.match(/data:/i)) {\r\n          // data: URIs not supported by Flash, either.\r\n          sm2._wD(s.id + ': data: URIs not supported via Flash. Exiting.');\r\n          return s;\r\n        }\r\n\r\n        try {\r\n          s.isHTML5 = false;\r\n          s._iO = policyFix(loopFix(instanceOptions));\r\n          // if we have \"position\", disable auto-play as we'll be seeking to that position at onload().\r\n          if (s._iO.autoPlay && (s._iO.position || s._iO.from)) {\r\n            sm2._wD(s.id + ': Disabling autoPlay because of non-zero offset case');\r\n            s._iO.autoPlay = false;\r\n          }\r\n          // re-assign local shortcut\r\n          instanceOptions = s._iO;\r\n          if (fV === 8) {\r\n            flash._load(s.id, instanceOptions.url, instanceOptions.stream, instanceOptions.autoPlay, instanceOptions.usePolicyFile);\r\n          } else {\r\n            flash._load(s.id, instanceOptions.url, !!(instanceOptions.stream), !!(instanceOptions.autoPlay), instanceOptions.loops || 1, !!(instanceOptions.autoLoad), instanceOptions.usePolicyFile);\r\n          }\r\n        } catch(e) {\r\n          _wDS('smError', 2);\r\n          debugTS('onload', false);\r\n          catchError({\r\n            type: 'SMSOUND_LOAD_JS_EXCEPTION',\r\n            fatal: true\r\n          });\r\n        }\r\n\r\n      }\r\n\r\n      // after all of this, ensure sound url is up to date.\r\n      s.url = instanceOptions.url;\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Unloads a sound, canceling any open HTTP requests.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.unload = function() {\r\n\r\n      // Flash 8/AS2 can't \"close\" a stream - fake it by loading an empty URL\r\n      // Flash 9/AS3: Close stream, preventing further load\r\n      // HTML5: Most UAs will use empty URL\r\n\r\n      if (s.readyState !== 0) {\r\n\r\n        sm2._wD(s.id + ': unload()');\r\n\r\n        if (!s.isHTML5) {\r\n\r\n          if (fV === 8) {\r\n            flash._unload(s.id, emptyURL);\r\n          } else {\r\n            flash._unload(s.id);\r\n          }\r\n\r\n        } else {\r\n\r\n          stop_html5_timer();\r\n\r\n          if (s._a) {\r\n\r\n            s._a.pause();\r\n\r\n            // update empty URL, too\r\n            lastURL = html5Unload(s._a);\r\n\r\n          }\r\n\r\n        }\r\n\r\n        // reset load/status flags\r\n        resetProperties();\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Unloads and destroys a sound.\r\n     */\r\n\r\n    this.destruct = function(_bFromSM) {\r\n\r\n      sm2._wD(s.id + ': Destruct');\r\n\r\n      if (!s.isHTML5) {\r\n\r\n        // kill sound within Flash\r\n        // Disable the onfailure handler\r\n        s._iO.onfailure = null;\r\n        flash._destroySound(s.id);\r\n\r\n      } else {\r\n\r\n        stop_html5_timer();\r\n\r\n        if (s._a) {\r\n          s._a.pause();\r\n          html5Unload(s._a);\r\n          if (!useGlobalHTML5Audio) {\r\n            remove_html5_events();\r\n          }\r\n          // break obvious circular reference\r\n          s._a._s = null;\r\n          s._a = null;\r\n        }\r\n\r\n      }\r\n\r\n      if (!_bFromSM) {\r\n        // ensure deletion from controller\r\n        sm2.destroySound(s.id, true);\r\n      }\r\n\r\n    };\r\n\r\n    /**\r\n     * Begins playing a sound.\r\n     *\r\n     * @param {object} options Optional: Sound options\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.play = function(options, _updatePlayState) {\r\n\r\n      var fN, allowMulti, a, onready,\r\n          audioClone, onended, oncanplay,\r\n          startOK = true;\r\n\r\n      // <d>\r\n      fN = s.id + ': play(): ';\r\n      // </d>\r\n\r\n      // default to true\r\n      _updatePlayState = (_updatePlayState === _undefined ? true : _updatePlayState);\r\n\r\n      if (!options) {\r\n        options = {};\r\n      }\r\n\r\n      // first, use local URL (if specified)\r\n      if (s.url) {\r\n        s._iO.url = s.url;\r\n      }\r\n\r\n      // mix in any options defined at createSound()\r\n      s._iO = mixin(s._iO, s.options);\r\n\r\n      // mix in any options specific to this method\r\n      s._iO = mixin(options, s._iO);\r\n\r\n      s._iO.url = parseURL(s._iO.url);\r\n\r\n      s.instanceOptions = s._iO;\r\n\r\n      // RTMP-only\r\n      if (!s.isHTML5 && s._iO.serverURL && !s.connected) {\r\n        if (!s.getAutoPlay()) {\r\n          sm2._wD(fN + ' Netstream not connected yet - setting autoPlay');\r\n          s.setAutoPlay(true);\r\n        }\r\n        // play will be called in onconnect()\r\n        return s;\r\n      }\r\n\r\n      if (html5OK(s._iO)) {\r\n        s._setup_html5(s._iO);\r\n        start_html5_timer();\r\n      }\r\n\r\n      if (s.playState === 1 && !s.paused) {\r\n\r\n        allowMulti = s._iO.multiShot;\r\n\r\n        if (!allowMulti) {\r\n\r\n          sm2._wD(fN + 'Already playing (one-shot)', 1);\r\n\r\n          if (s.isHTML5) {\r\n            // go back to original position.\r\n            s.setPosition(s._iO.position);\r\n          }\r\n\r\n          return s;\r\n\r\n        }\r\n\r\n        sm2._wD(fN + 'Already playing (multi-shot)', 1);\r\n\r\n      }\r\n\r\n      // edge case: play() with explicit URL parameter\r\n      if (options.url && options.url !== s.url) {\r\n\r\n        // special case for createSound() followed by load() / play() with url; avoid double-load case.\r\n        if (!s.readyState && !s.isHTML5 && fV === 8 && urlOmitted) {\r\n\r\n          urlOmitted = false;\r\n\r\n        } else {\r\n\r\n          // load using merged options\r\n          s.load(s._iO);\r\n\r\n        }\r\n\r\n      }\r\n\r\n      if (!s.loaded) {\r\n\r\n        if (s.readyState === 0) {\r\n\r\n          sm2._wD(fN + 'Attempting to load');\r\n\r\n          // try to get this sound playing ASAP\r\n          if (!s.isHTML5 && !sm2.html5Only) {\r\n\r\n            // flash: assign directly because setAutoPlay() increments the instanceCount\r\n            s._iO.autoPlay = true;\r\n            s.load(s._iO);\r\n\r\n          } else if (s.isHTML5) {\r\n\r\n            // iOS needs this when recycling sounds, loading a new URL on an existing object.\r\n            s.load(s._iO);\r\n\r\n          } else {\r\n\r\n            sm2._wD(fN + 'Unsupported type. Exiting.');\r\n\r\n            return s;\r\n\r\n          }\r\n\r\n          // HTML5 hack - re-set instanceOptions?\r\n          s.instanceOptions = s._iO;\r\n\r\n        } else if (s.readyState === 2) {\r\n\r\n          sm2._wD(fN + 'Could not load - exiting', 2);\r\n\r\n          return s;\r\n\r\n        } else {\r\n\r\n          sm2._wD(fN + 'Loading - attempting to play...');\r\n\r\n        }\r\n\r\n      } else {\r\n\r\n        // \"play()\"\r\n        sm2._wD(fN.substr(0, fN.lastIndexOf(':')));\r\n\r\n      }\r\n\r\n      if (!s.isHTML5 && fV === 9 && s.position > 0 && s.position === s.duration) {\r\n        // flash 9 needs a position reset if play() is called while at the end of a sound.\r\n        sm2._wD(fN + 'Sound at end, resetting to position: 0');\r\n        options.position = 0;\r\n      }\r\n\r\n      /**\r\n       * Streams will pause when their buffer is full if they are being loaded.\r\n       * In this case paused is true, but the song hasn't started playing yet.\r\n       * If we just call resume() the onplay() callback will never be called.\r\n       * So only call resume() if the position is > 0.\r\n       * Another reason is because options like volume won't have been applied yet.\r\n       * For normal sounds, just resume.\r\n       */\r\n\r\n      if (s.paused && s.position >= 0 && (!s._iO.serverURL || s.position > 0)) {\r\n\r\n        // https://gist.github.com/37b17df75cc4d7a90bf6\r\n        sm2._wD(fN + 'Resuming from paused state', 1);\r\n        s.resume();\r\n\r\n      } else {\r\n\r\n        s._iO = mixin(options, s._iO);\r\n\r\n        /**\r\n         * Preload in the event of play() with position under Flash,\r\n         * or from/to parameters and non-RTMP case\r\n         */\r\n        if (((!s.isHTML5 && s._iO.position !== null && s._iO.position > 0) || (s._iO.from !== null && s._iO.from > 0) || s._iO.to !== null) && s.instanceCount === 0 && s.playState === 0 && !s._iO.serverURL) {\r\n\r\n          onready = function() {\r\n            // sound \"canplay\" or onload()\r\n            // re-apply position/from/to to instance options, and start playback\r\n            s._iO = mixin(options, s._iO);\r\n            s.play(s._iO);\r\n          };\r\n\r\n          // HTML5 needs to at least have \"canplay\" fired before seeking.\r\n          if (s.isHTML5 && !s._html5_canplay) {\r\n\r\n            // this hasn't been loaded yet. load it first, and then do this again.\r\n            sm2._wD(fN + 'Beginning load for non-zero offset case');\r\n\r\n            s.load({\r\n              // note: custom HTML5-only event added for from/to implementation.\r\n              _oncanplay: onready\r\n            });\r\n\r\n          } else if (!s.isHTML5 && !s.loaded && (!s.readyState || s.readyState !== 2)) {\r\n\r\n            // to be safe, preload the whole thing in Flash.\r\n\r\n            sm2._wD(fN + 'Preloading for non-zero offset case');\r\n\r\n            s.load({\r\n              onload: onready\r\n            });\r\n\r\n          }\r\n\r\n          // otherwise, we're ready to go. re-apply local options, and continue\r\n\r\n          s._iO = applyFromTo();\r\n\r\n        }\r\n\r\n        // sm2._wD(fN + 'Starting to play');\r\n\r\n        // increment instance counter, where enabled + supported\r\n        if (!s.instanceCount || s._iO.multiShotEvents || (s.isHTML5 && s._iO.multiShot && !useGlobalHTML5Audio) || (!s.isHTML5 && fV > 8 && !s.getAutoPlay())) {\r\n          s.instanceCount++;\r\n        }\r\n\r\n        // if first play and onposition parameters exist, apply them now\r\n        if (s._iO.onposition && s.playState === 0) {\r\n          attachOnPosition(s);\r\n        }\r\n\r\n        s.playState = 1;\r\n        s.paused = false;\r\n\r\n        s.position = (s._iO.position !== _undefined && !isNaN(s._iO.position) ? s._iO.position : 0);\r\n\r\n        if (!s.isHTML5) {\r\n          s._iO = policyFix(loopFix(s._iO));\r\n        }\r\n\r\n        if (s._iO.onplay && _updatePlayState) {\r\n          s._iO.onplay.apply(s);\r\n          onplay_called = true;\r\n        }\r\n\r\n        s.setVolume(s._iO.volume, true);\r\n        s.setPan(s._iO.pan, true);\r\n\r\n        if (s._iO.playbackRate !== 1) {\r\n          s.setPlaybackRate(s._iO.playbackRate);\r\n        }\r\n\r\n        if (!s.isHTML5) {\r\n\r\n          startOK = flash._start(s.id, s._iO.loops || 1, (fV === 9 ? s.position : s.position / msecScale), s._iO.multiShot || false);\r\n\r\n          if (fV === 9 && !startOK) {\r\n            // edge case: no sound hardware, or 32-channel flash ceiling hit.\r\n            // applies only to Flash 9, non-NetStream/MovieStar sounds.\r\n            // http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Sound.html#play%28%29\r\n            sm2._wD(fN + 'No sound hardware, or 32-sound ceiling hit', 2);\r\n            if (s._iO.onplayerror) {\r\n              s._iO.onplayerror.apply(s);\r\n            }\r\n\r\n          }\r\n\r\n        } else if (s.instanceCount < 2) {\r\n\r\n            // HTML5 single-instance case\r\n\r\n            start_html5_timer();\r\n\r\n            a = s._setup_html5();\r\n\r\n            s.setPosition(s._iO.position);\r\n\r\n            a.play();\r\n\r\n          } else {\r\n\r\n            // HTML5 multi-shot case\r\n\r\n            sm2._wD(s.id + ': Cloning Audio() for instance #' + s.instanceCount + '...');\r\n\r\n            audioClone = new Audio(s._iO.url);\r\n\r\n            onended = function() {\r\n              event.remove(audioClone, 'ended', onended);\r\n              s._onfinish(s);\r\n              // cleanup\r\n              html5Unload(audioClone);\r\n              audioClone = null;\r\n            };\r\n\r\n            oncanplay = function() {\r\n              event.remove(audioClone, 'canplay', oncanplay);\r\n              try {\r\n                audioClone.currentTime = s._iO.position / msecScale;\r\n              } catch(err) {\r\n                complain(s.id + ': multiShot play() failed to apply position of ' + (s._iO.position / msecScale));\r\n              }\r\n              audioClone.play();\r\n            };\r\n\r\n            event.add(audioClone, 'ended', onended);\r\n\r\n            // apply volume to clones, too\r\n            if (s._iO.volume !== _undefined) {\r\n              audioClone.volume = Math.max(0, Math.min(1, s._iO.volume / 100));\r\n            }\r\n\r\n            // playing multiple muted sounds? if you do this, you're weird ;) - but let's cover it.\r\n            if (s.muted) {\r\n              audioClone.muted = true;\r\n            }\r\n\r\n            if (s._iO.position) {\r\n              // HTML5 audio can't seek before onplay() event has fired.\r\n              // wait for canplay, then seek to position and start playback.\r\n              event.add(audioClone, 'canplay', oncanplay);\r\n            } else {\r\n              // begin playback at currentTime: 0\r\n              audioClone.play();\r\n            }\r\n\r\n          }\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    // just for convenience\r\n    this.start = this.play;\r\n\r\n    /**\r\n     * Stops playing a sound (and optionally, all sounds)\r\n     *\r\n     * @param {boolean} bAll Optional: Whether to stop all sounds\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.stop = function(bAll) {\r\n\r\n      var instanceOptions = s._iO,\r\n          originalPosition;\r\n\r\n      if (s.playState === 1) {\r\n\r\n        sm2._wD(s.id + ': stop()');\r\n\r\n        s._onbufferchange(0);\r\n        s._resetOnPosition(0);\r\n        s.paused = false;\r\n\r\n        if (!s.isHTML5) {\r\n          s.playState = 0;\r\n        }\r\n\r\n        // remove onPosition listeners, if any\r\n        detachOnPosition();\r\n\r\n        // and \"to\" position, if set\r\n        if (instanceOptions.to) {\r\n          s.clearOnPosition(instanceOptions.to);\r\n        }\r\n\r\n        if (!s.isHTML5) {\r\n\r\n          flash._stop(s.id, bAll);\r\n\r\n          // hack for netStream: just unload\r\n          if (instanceOptions.serverURL) {\r\n            s.unload();\r\n          }\r\n\r\n        } else if (s._a) {\r\n\r\n            originalPosition = s.position;\r\n\r\n            // act like Flash, though\r\n            s.setPosition(0);\r\n\r\n            // hack: reflect old position for onstop() (also like Flash)\r\n            s.position = originalPosition;\r\n\r\n            // html5 has no stop()\r\n            // NOTE: pausing means iOS requires interaction to resume.\r\n            s._a.pause();\r\n\r\n            s.playState = 0;\r\n\r\n            // and update UI\r\n            s._onTimer();\r\n\r\n            stop_html5_timer();\r\n\r\n          }\r\n\r\n        s.instanceCount = 0;\r\n        s._iO = {};\r\n\r\n        if (instanceOptions.onstop) {\r\n          instanceOptions.onstop.apply(s);\r\n        }\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Undocumented/internal: Sets autoPlay for RTMP.\r\n     *\r\n     * @param {boolean} autoPlay state\r\n     */\r\n\r\n    this.setAutoPlay = function(autoPlay) {\r\n\r\n      sm2._wD(s.id + ': Autoplay turned ' + (autoPlay ? 'on' : 'off'));\r\n      s._iO.autoPlay = autoPlay;\r\n\r\n      if (!s.isHTML5) {\r\n        flash._setAutoPlay(s.id, autoPlay);\r\n        if (autoPlay) {\r\n          // only increment the instanceCount if the sound isn't loaded (TODO: verify RTMP)\r\n          if (!s.instanceCount && s.readyState === 1) {\r\n            s.instanceCount++;\r\n            sm2._wD(s.id + ': Incremented instance count to ' + s.instanceCount);\r\n          }\r\n        }\r\n      }\r\n\r\n    };\r\n\r\n    /**\r\n     * Undocumented/internal: Returns the autoPlay boolean.\r\n     *\r\n     * @return {boolean} The current autoPlay value\r\n     */\r\n\r\n    this.getAutoPlay = function() {\r\n\r\n      return s._iO.autoPlay;\r\n\r\n    };\r\n\r\n    /**\r\n     * Sets the playback rate of a sound (HTML5-only.)\r\n     *\r\n     * @param {number} playbackRate (+/-)\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.setPlaybackRate = function(playbackRate) {\r\n\r\n      // Per Mozilla, limit acceptable values to prevent playback from stopping (unless allowOverride is truthy.)\r\n      // https://developer.mozilla.org/en-US/Apps/Build/Audio_and_video_delivery/WebAudio_playbackRate_explained\r\n      var normalizedRate = Math.max(0.5, Math.min(4, playbackRate));\r\n\r\n      // <d>\r\n      if (normalizedRate !== playbackRate) {\r\n        sm2._wD(s.id + ': setPlaybackRate(' + playbackRate + '): limiting rate to ' + normalizedRate, 2);\r\n      }\r\n      // </d>\r\n\r\n      if (s.isHTML5) {\r\n        try {\r\n          s._iO.playbackRate = normalizedRate;\r\n          s._a.playbackRate = normalizedRate;\r\n        } catch(e) {\r\n          sm2._wD(s.id + ': setPlaybackRate(' + normalizedRate + ') failed: ' + e.message, 2);\r\n        }\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Sets the position of a sound.\r\n     *\r\n     * @param {number} nMsecOffset Position (milliseconds)\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.setPosition = function(nMsecOffset) {\r\n\r\n      if (nMsecOffset === _undefined) {\r\n        nMsecOffset = 0;\r\n      }\r\n\r\n      var position, position1K,\r\n          // Use the duration from the instance options, if we don't have a track duration yet.\r\n          // position >= 0 and <= current available (loaded) duration\r\n          offset = (s.isHTML5 ? Math.max(nMsecOffset, 0) : Math.min(s.duration || s._iO.duration, Math.max(nMsecOffset, 0)));\r\n\r\n      s.position = offset;\r\n      position1K = s.position / msecScale;\r\n      s._resetOnPosition(s.position);\r\n      s._iO.position = offset;\r\n\r\n      if (!s.isHTML5) {\r\n\r\n        position = (fV === 9 ? s.position : position1K);\r\n\r\n        if (s.readyState && s.readyState !== 2) {\r\n          // if paused or not playing, will not resume (by playing)\r\n          flash._setPosition(s.id, position, (s.paused || !s.playState), s._iO.multiShot);\r\n        }\r\n\r\n      } else if (s._a) {\r\n\r\n        // Set the position in the canplay handler if the sound is not ready yet\r\n        if (s._html5_canplay) {\r\n\r\n          if (s._a.currentTime.toFixed(3) !== position1K.toFixed(3)) {\r\n\r\n            /**\r\n             * DOM/JS errors/exceptions to watch out for:\r\n             * if seek is beyond (loaded?) position, \"DOM exception 11\"\r\n             * \"INDEX_SIZE_ERR\": DOM exception 1\r\n             */\r\n            sm2._wD(s.id + ': setPosition(' + position1K + ')');\r\n\r\n            try {\r\n              s._a.currentTime = position1K;\r\n              if (s.playState === 0 || s.paused) {\r\n                // allow seek without auto-play/resume\r\n                s._a.pause();\r\n              }\r\n            } catch(e) {\r\n              sm2._wD(s.id + ': setPosition(' + position1K + ') failed: ' + e.message, 2);\r\n            }\r\n\r\n          }\r\n\r\n        } else if (position1K) {\r\n\r\n          // warn on non-zero seek attempts\r\n          sm2._wD(s.id + ': setPosition(' + position1K + '): Cannot seek yet, sound not ready', 2);\r\n          return s;\r\n\r\n        }\r\n\r\n        if (s.paused) {\r\n\r\n          // if paused, refresh UI right away by forcing update\r\n          s._onTimer(true);\r\n\r\n        }\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Pauses sound playback.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.pause = function(_bCallFlash) {\r\n\r\n      if (s.paused || (s.playState === 0 && s.readyState !== 1)) return s;\r\n\r\n      sm2._wD(s.id + ': pause()');\r\n      s.paused = true;\r\n\r\n      if (!s.isHTML5) {\r\n        if (_bCallFlash || _bCallFlash === _undefined) {\r\n          flash._pause(s.id, s._iO.multiShot);\r\n        }\r\n      } else {\r\n        s._setup_html5().pause();\r\n        stop_html5_timer();\r\n      }\r\n\r\n      if (s._iO.onpause) {\r\n        s._iO.onpause.apply(s);\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Resumes sound playback.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    /**\r\n     * When auto-loaded streams pause on buffer full they have a playState of 0.\r\n     * We need to make sure that the playState is set to 1 when these streams \"resume\".\r\n     * When a paused stream is resumed, we need to trigger the onplay() callback if it\r\n     * hasn't been called already. In this case since the sound is being played for the\r\n     * first time, I think it's more appropriate to call onplay() rather than onresume().\r\n     */\r\n\r\n    this.resume = function() {\r\n\r\n      var instanceOptions = s._iO;\r\n\r\n      if (!s.paused) return s;\r\n\r\n      sm2._wD(s.id + ': resume()');\r\n      s.paused = false;\r\n      s.playState = 1;\r\n\r\n      if (!s.isHTML5) {\r\n\r\n        if (instanceOptions.isMovieStar && !instanceOptions.serverURL) {\r\n          // Bizarre Webkit bug (Chrome reported via 8tracks.com dudes): AAC content paused for 30+ seconds(?) will not resume without a reposition.\r\n          s.setPosition(s.position);\r\n        }\r\n\r\n        // flash method is toggle-based (pause/resume)\r\n        flash._pause(s.id, instanceOptions.multiShot);\r\n\r\n      } else {\r\n\r\n        s._setup_html5().play();\r\n        start_html5_timer();\r\n\r\n      }\r\n\r\n      if (!onplay_called && instanceOptions.onplay) {\r\n\r\n        instanceOptions.onplay.apply(s);\r\n        onplay_called = true;\r\n\r\n      } else if (instanceOptions.onresume) {\r\n\r\n        instanceOptions.onresume.apply(s);\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Toggles sound playback.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.togglePause = function() {\r\n\r\n      sm2._wD(s.id + ': togglePause()');\r\n\r\n      if (s.playState === 0) {\r\n        s.play({\r\n          position: (fV === 9 && !s.isHTML5 ? s.position : s.position / msecScale)\r\n        });\r\n        return s;\r\n      }\r\n\r\n      if (s.paused) {\r\n        s.resume();\r\n      } else {\r\n        s.pause();\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Sets the panning (L-R) effect.\r\n     *\r\n     * @param {number} nPan The pan value (-100 to 100)\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.setPan = function(nPan, bInstanceOnly) {\r\n\r\n      if (nPan === _undefined) {\r\n        nPan = 0;\r\n      }\r\n\r\n      if (bInstanceOnly === _undefined) {\r\n        bInstanceOnly = false;\r\n      }\r\n\r\n      if (!s.isHTML5) {\r\n        flash._setPan(s.id, nPan);\r\n      } // else { no HTML5 pan? }\r\n\r\n      s._iO.pan = nPan;\r\n\r\n      if (!bInstanceOnly) {\r\n        s.pan = nPan;\r\n        s.options.pan = nPan;\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Sets the volume.\r\n     *\r\n     * @param {number} nVol The volume value (0 to 100)\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.setVolume = function(nVol, _bInstanceOnly) {\r\n\r\n      /**\r\n       * Note: Setting volume has no effect on iOS \"special snowflake\" devices.\r\n       * Hardware volume control overrides software, and volume\r\n       * will always return 1 per Apple docs. (iOS 4 + 5.)\r\n       * http://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/AddingSoundtoCanvasAnimations/AddingSoundtoCanvasAnimations.html\r\n       */\r\n\r\n      if (nVol === _undefined) {\r\n        nVol = 100;\r\n      }\r\n\r\n      if (_bInstanceOnly === _undefined) {\r\n        _bInstanceOnly = false;\r\n      }\r\n\r\n      if (!s.isHTML5) {\r\n\r\n        flash._setVolume(s.id, (sm2.muted && !s.muted) || s.muted ? 0 : nVol);\r\n\r\n      } else if (s._a) {\r\n\r\n        if (sm2.muted && !s.muted) {\r\n          s.muted = true;\r\n          s._a.muted = true;\r\n        }\r\n\r\n        // valid range for native HTML5 Audio(): 0-1\r\n        s._a.volume = Math.max(0, Math.min(1, nVol / 100));\r\n\r\n      }\r\n\r\n      s._iO.volume = nVol;\r\n\r\n      if (!_bInstanceOnly) {\r\n        s.volume = nVol;\r\n        s.options.volume = nVol;\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Mutes the sound.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.mute = function() {\r\n\r\n      s.muted = true;\r\n\r\n      if (!s.isHTML5) {\r\n        flash._setVolume(s.id, 0);\r\n      } else if (s._a) {\r\n        s._a.muted = true;\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Unmutes the sound.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.unmute = function() {\r\n\r\n      s.muted = false;\r\n      var hasIO = (s._iO.volume !== _undefined);\r\n\r\n      if (!s.isHTML5) {\r\n        flash._setVolume(s.id, hasIO ? s._iO.volume : s.options.volume);\r\n      } else if (s._a) {\r\n        s._a.muted = false;\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Toggles the muted state of a sound.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.toggleMute = function() {\r\n\r\n      return (s.muted ? s.unmute() : s.mute());\r\n\r\n    };\r\n\r\n    /**\r\n     * Registers a callback to be fired when a sound reaches a given position during playback.\r\n     *\r\n     * @param {number} nPosition The position to watch for\r\n     * @param {function} oMethod The relevant callback to fire\r\n     * @param {object} oScope Optional: The scope to apply the callback to\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.onPosition = function(nPosition, oMethod, oScope) {\r\n\r\n      // TODO: basic dupe checking?\r\n\r\n      onPositionItems.push({\r\n        position: parseInt(nPosition, 10),\r\n        method: oMethod,\r\n        scope: (oScope !== _undefined ? oScope : s),\r\n        fired: false\r\n      });\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    // legacy/backwards-compability: lower-case method name\r\n    this.onposition = this.onPosition;\r\n\r\n    /**\r\n     * Removes registered callback(s) from a sound, by position and/or callback.\r\n     *\r\n     * @param {number} nPosition The position to clear callback(s) for\r\n     * @param {function} oMethod Optional: Identify one callback to be removed when multiple listeners exist for one position\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.clearOnPosition = function(nPosition, oMethod) {\r\n\r\n      var i;\r\n\r\n      nPosition = parseInt(nPosition, 10);\r\n\r\n      if (isNaN(nPosition)) {\r\n        // safety check\r\n        return;\r\n      }\r\n\r\n      for (i = 0; i < onPositionItems.length; i++) {\r\n\r\n        if (nPosition === onPositionItems[i].position) {\r\n          // remove this item if no method was specified, or, if the method matches\r\n\r\n          if (!oMethod || (oMethod === onPositionItems[i].method)) {\r\n\r\n            if (onPositionItems[i].fired) {\r\n              // decrement \"fired\" counter, too\r\n              onPositionFired--;\r\n            }\r\n\r\n            onPositionItems.splice(i, 1);\r\n\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    this._processOnPosition = function() {\r\n\r\n      var i, item, j = onPositionItems.length;\r\n\r\n      if (!j || !s.playState || onPositionFired >= j) return false;\r\n\r\n      for (i = j - 1; i >= 0; i--) {\r\n\r\n        item = onPositionItems[i];\r\n\r\n        if (!item.fired && s.position >= item.position) {\r\n\r\n          item.fired = true;\r\n          onPositionFired++;\r\n          item.method.apply(item.scope, [item.position]);\r\n\r\n          //  reset j -- onPositionItems.length can be changed in the item callback above... occasionally breaking the loop.\r\n          j = onPositionItems.length;\r\n\r\n        }\r\n\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    this._resetOnPosition = function(nPosition) {\r\n\r\n      // reset \"fired\" for items interested in this position\r\n      var i, item, j = onPositionItems.length;\r\n\r\n      if (!j) return false;\r\n\r\n      for (i = j - 1; i >= 0; i--) {\r\n\r\n        item = onPositionItems[i];\r\n\r\n        if (item.fired && nPosition <= item.position) {\r\n          item.fired = false;\r\n          onPositionFired--;\r\n        }\r\n\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    /**\r\n     * SMSound() private internals\r\n     * --------------------------------\r\n     */\r\n\r\n    applyFromTo = function() {\r\n\r\n      var instanceOptions = s._iO,\r\n          f = instanceOptions.from,\r\n          t = instanceOptions.to,\r\n          start, end;\r\n\r\n      end = function() {\r\n\r\n        // end has been reached.\r\n        sm2._wD(s.id + ': \"To\" time of ' + t + ' reached.');\r\n\r\n        // detach listener\r\n        s.clearOnPosition(t, end);\r\n\r\n        // stop should clear this, too\r\n        s.stop();\r\n\r\n      };\r\n\r\n      start = function() {\r\n\r\n        sm2._wD(s.id + ': Playing \"from\" ' + f);\r\n\r\n        // add listener for end\r\n        if (t !== null && !isNaN(t)) {\r\n          s.onPosition(t, end);\r\n        }\r\n\r\n      };\r\n\r\n      if (f !== null && !isNaN(f)) {\r\n\r\n        // apply to instance options, guaranteeing correct start position.\r\n        instanceOptions.position = f;\r\n\r\n        // multiShot timing can't be tracked, so prevent that.\r\n        instanceOptions.multiShot = false;\r\n\r\n        start();\r\n\r\n      }\r\n\r\n      // return updated instanceOptions including starting position\r\n      return instanceOptions;\r\n\r\n    };\r\n\r\n    attachOnPosition = function() {\r\n\r\n      var item,\r\n          op = s._iO.onposition;\r\n\r\n      // attach onposition things, if any, now.\r\n\r\n      if (op) {\r\n\r\n        for (item in op) {\r\n          if (op.hasOwnProperty(item)) {\r\n            s.onPosition(parseInt(item, 10), op[item]);\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    detachOnPosition = function() {\r\n\r\n      var item,\r\n          op = s._iO.onposition;\r\n\r\n      // detach any onposition()-style listeners.\r\n\r\n      if (op) {\r\n\r\n        for (item in op) {\r\n          if (op.hasOwnProperty(item)) {\r\n            s.clearOnPosition(parseInt(item, 10));\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    start_html5_timer = function() {\r\n\r\n      if (s.isHTML5) {\r\n        startTimer(s);\r\n      }\r\n\r\n    };\r\n\r\n    stop_html5_timer = function() {\r\n\r\n      if (s.isHTML5) {\r\n        stopTimer(s);\r\n      }\r\n\r\n    };\r\n\r\n    resetProperties = function(retainPosition) {\r\n\r\n      if (!retainPosition) {\r\n        onPositionItems = [];\r\n        onPositionFired = 0;\r\n      }\r\n\r\n      onplay_called = false;\r\n\r\n      s._hasTimer = null;\r\n      s._a = null;\r\n      s._html5_canplay = false;\r\n      s.bytesLoaded = null;\r\n      s.bytesTotal = null;\r\n      s.duration = (s._iO && s._iO.duration ? s._iO.duration : null);\r\n      s.durationEstimate = null;\r\n      s.buffered = [];\r\n\r\n      // legacy: 1D array\r\n      s.eqData = [];\r\n\r\n      s.eqData.left = [];\r\n      s.eqData.right = [];\r\n\r\n      s.failures = 0;\r\n      s.isBuffering = false;\r\n      s.instanceOptions = {};\r\n      s.instanceCount = 0;\r\n      s.loaded = false;\r\n      s.metadata = {};\r\n\r\n      // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success\r\n      s.readyState = 0;\r\n\r\n      s.muted = false;\r\n      s.paused = false;\r\n\r\n      s.peakData = {\r\n        left: 0,\r\n        right: 0\r\n      };\r\n\r\n      s.waveformData = {\r\n        left: [],\r\n        right: []\r\n      };\r\n\r\n      s.playState = 0;\r\n      s.position = null;\r\n\r\n      s.id3 = {};\r\n\r\n    };\r\n\r\n    resetProperties();\r\n\r\n    /**\r\n     * Pseudo-private SMSound internals\r\n     * --------------------------------\r\n     */\r\n\r\n    this._onTimer = function(bForce) {\r\n\r\n      /**\r\n       * HTML5-only _whileplaying() etc.\r\n       * called from both HTML5 native events, and polling/interval-based timers\r\n       * mimics flash and fires only when time/duration change, so as to be polling-friendly\r\n       */\r\n\r\n      var duration, isNew = false, time, x = {};\r\n\r\n      if (s._hasTimer || bForce) {\r\n\r\n        // TODO: May not need to track readyState (1 = loading)\r\n\r\n        if (s._a && (bForce || ((s.playState > 0 || s.readyState === 1) && !s.paused))) {\r\n\r\n          duration = s._get_html5_duration();\r\n\r\n          if (duration !== lastHTML5State.duration) {\r\n\r\n            lastHTML5State.duration = duration;\r\n            s.duration = duration;\r\n            isNew = true;\r\n\r\n          }\r\n\r\n          // TODO: investigate why this goes wack if not set/re-set each time.\r\n          s.durationEstimate = s.duration;\r\n\r\n          time = (s._a.currentTime * msecScale || 0);\r\n\r\n          if (time !== lastHTML5State.time) {\r\n\r\n            lastHTML5State.time = time;\r\n            isNew = true;\r\n\r\n          }\r\n\r\n          if (isNew || bForce) {\r\n\r\n            s._whileplaying(time, x, x, x, x);\r\n\r\n          }\r\n\r\n        }/* else {\r\n\r\n          // sm2._wD('_onTimer: Warn for \"'+s.id+'\": '+(!s._a?'Could not find element. ':'')+(s.playState === 0?'playState bad, 0?':'playState = '+s.playState+', OK'));\r\n\r\n          return false;\r\n\r\n        }*/\r\n\r\n      }\r\n\r\n      return isNew;\r\n\r\n    };\r\n\r\n    this._get_html5_duration = function() {\r\n\r\n      var instanceOptions = s._iO,\r\n          // if audio object exists, use its duration - else, instance option duration (if provided - it's a hack, really, and should be retired) OR null\r\n          d = (s._a && s._a.duration ? s._a.duration * msecScale : (instanceOptions && instanceOptions.duration ? instanceOptions.duration : null)),\r\n          result = (d && !isNaN(d) && d !== Infinity ? d : null);\r\n\r\n      return result;\r\n\r\n    };\r\n\r\n    this._apply_loop = function(a, nLoops) {\r\n\r\n      /**\r\n       * boolean instead of \"loop\", for webkit? - spec says string. http://www.w3.org/TR/html-markup/audio.html#audio.attrs.loop\r\n       * note that loop is either off or infinite under HTML5, unlike Flash which allows arbitrary loop counts to be specified.\r\n       */\r\n\r\n      // <d>\r\n      if (!a.loop && nLoops > 1) {\r\n        sm2._wD('Note: Native HTML5 looping is infinite.', 1);\r\n      }\r\n      // </d>\r\n\r\n      a.loop = (nLoops > 1 ? 'loop' : '');\r\n\r\n    };\r\n\r\n    this._setup_html5 = function(options) {\r\n\r\n      var instanceOptions = mixin(s._iO, options),\r\n          a = useGlobalHTML5Audio ? globalHTML5Audio : s._a,\r\n          dURL = decodeURI(instanceOptions.url),\r\n          sameURL;\r\n\r\n      /**\r\n       * \"First things first, I, Poppa...\" (reset the previous state of the old sound, if playing)\r\n       * Fixes case with devices that can only play one sound at a time\r\n       * Otherwise, other sounds in mid-play will be terminated without warning and in a stuck state\r\n       */\r\n\r\n      if (useGlobalHTML5Audio) {\r\n\r\n        if (dURL === decodeURI(lastGlobalHTML5URL)) {\r\n          // global HTML5 audio: re-use of URL\r\n          sameURL = true;\r\n        }\r\n\r\n      } else if (dURL === decodeURI(lastURL)) {\r\n\r\n        // options URL is the same as the \"last\" URL, and we used (loaded) it\r\n        sameURL = true;\r\n\r\n      }\r\n\r\n      if (a) {\r\n\r\n        if (a._s) {\r\n\r\n          if (useGlobalHTML5Audio) {\r\n\r\n            if (a._s && a._s.playState && !sameURL) {\r\n\r\n              // global HTML5 audio case, and loading a new URL. stop the currently-playing one.\r\n              a._s.stop();\r\n\r\n            }\r\n\r\n          } else if (!useGlobalHTML5Audio && dURL === decodeURI(lastURL)) {\r\n\r\n            // non-global HTML5 reuse case: same url, ignore request\r\n            s._apply_loop(a, instanceOptions.loops);\r\n\r\n            return a;\r\n\r\n          }\r\n\r\n        }\r\n\r\n        if (!sameURL) {\r\n\r\n          // don't retain onPosition() stuff with new URLs.\r\n\r\n          if (lastURL) {\r\n            resetProperties(false);\r\n          }\r\n\r\n          // assign new HTML5 URL\r\n\r\n          a.src = instanceOptions.url;\r\n\r\n          s.url = instanceOptions.url;\r\n\r\n          lastURL = instanceOptions.url;\r\n\r\n          lastGlobalHTML5URL = instanceOptions.url;\r\n\r\n          a._called_load = false;\r\n\r\n        }\r\n\r\n      } else {\r\n\r\n        if (instanceOptions.autoLoad || instanceOptions.autoPlay) {\r\n\r\n          s._a = new Audio(instanceOptions.url);\r\n          s._a.load();\r\n\r\n        } else {\r\n\r\n          // null for stupid Opera 9.64 case\r\n          s._a = (isOpera && opera.version() < 10 ? new Audio(null) : new Audio());\r\n\r\n        }\r\n\r\n        // assign local reference\r\n        a = s._a;\r\n\r\n        a._called_load = false;\r\n\r\n        if (useGlobalHTML5Audio) {\r\n\r\n          globalHTML5Audio = a;\r\n\r\n        }\r\n\r\n      }\r\n\r\n      s.isHTML5 = true;\r\n\r\n      // store a ref on the track\r\n      s._a = a;\r\n\r\n      // store a ref on the audio\r\n      a._s = s;\r\n\r\n      add_html5_events();\r\n\r\n      s._apply_loop(a, instanceOptions.loops);\r\n\r\n      if (instanceOptions.autoLoad || instanceOptions.autoPlay) {\r\n\r\n        s.load();\r\n\r\n      } else {\r\n\r\n        // early HTML5 implementation (non-standard)\r\n        a.autobuffer = false;\r\n\r\n        // standard ('none' is also an option.)\r\n        a.preload = 'auto';\r\n\r\n      }\r\n\r\n      return a;\r\n\r\n    };\r\n\r\n    add_html5_events = function() {\r\n\r\n      if (s._a._added_events) return false;\r\n\r\n      var f;\r\n\r\n      function add(oEvt, oFn, bCapture) {\r\n        return s._a ? s._a.addEventListener(oEvt, oFn, bCapture || false) : null;\r\n      }\r\n\r\n      s._a._added_events = true;\r\n\r\n      for (f in html5_events) {\r\n        if (html5_events.hasOwnProperty(f)) {\r\n          add(f, html5_events[f]);\r\n        }\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    remove_html5_events = function() {\r\n\r\n      // Remove event listeners\r\n\r\n      var f;\r\n\r\n      function remove(oEvt, oFn, bCapture) {\r\n        return (s._a ? s._a.removeEventListener(oEvt, oFn, bCapture || false) : null);\r\n      }\r\n\r\n      sm2._wD(s.id + ': Removing event listeners');\r\n      s._a._added_events = false;\r\n\r\n      for (f in html5_events) {\r\n        if (html5_events.hasOwnProperty(f)) {\r\n          remove(f, html5_events[f]);\r\n        }\r\n      }\r\n\r\n    };\r\n\r\n    /**\r\n     * Pseudo-private event internals\r\n     * ------------------------------\r\n     */\r\n\r\n    this._onload = function(nSuccess) {\r\n\r\n      var fN,\r\n          // check for duration to prevent false positives from flash 8 when loading from cache.\r\n          loadOK = !!nSuccess || (!s.isHTML5 && fV === 8 && s.duration);\r\n\r\n      // <d>\r\n      fN = s.id + ': ';\r\n      sm2._wD(fN + (loadOK ? 'onload()' : 'Failed to load / invalid sound?' + (!s.duration ? ' Zero-length duration reported.' : ' -') + ' (' + s.url + ')'), (loadOK ? 1 : 2));\r\n\r\n      if (!loadOK && !s.isHTML5) {\r\n        if (sm2.sandbox.noRemote === true) {\r\n          sm2._wD(fN + str('noNet'), 1);\r\n        }\r\n        if (sm2.sandbox.noLocal === true) {\r\n          sm2._wD(fN + str('noLocal'), 1);\r\n        }\r\n      }\r\n      // </d>\r\n\r\n      s.loaded = loadOK;\r\n      s.readyState = (loadOK ? 3 : 2);\r\n      s._onbufferchange(0);\r\n\r\n      if (!loadOK && !s.isHTML5) {\r\n        // note: no error code from Flash.\r\n        s._onerror();\r\n      }\r\n\r\n      if (s._iO.onload) {\r\n        wrapCallback(s, function() {\r\n          s._iO.onload.apply(s, [loadOK]);\r\n        });\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    this._onerror = function(errorCode, description) {\r\n\r\n      // https://html.spec.whatwg.org/multipage/embedded-content.html#error-codes\r\n      if (s._iO.onerror) {\r\n        wrapCallback(s, function() {\r\n          s._iO.onerror.apply(s, [errorCode, description]);\r\n        });\r\n      }\r\n\r\n    };\r\n\r\n    this._onbufferchange = function(nIsBuffering) {\r\n\r\n      // ignore if not playing\r\n      if (s.playState === 0) return false;\r\n\r\n      if ((nIsBuffering && s.isBuffering) || (!nIsBuffering && !s.isBuffering)) return false;\r\n\r\n      s.isBuffering = (nIsBuffering === 1);\r\n\r\n      if (s._iO.onbufferchange) {\r\n        sm2._wD(s.id + ': Buffer state change: ' + nIsBuffering);\r\n        s._iO.onbufferchange.apply(s, [nIsBuffering]);\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    /**\r\n     * Playback may have stopped due to buffering, or related reason.\r\n     * This state can be encountered on iOS < 6 when auto-play is blocked.\r\n     */\r\n\r\n    this._onsuspend = function() {\r\n\r\n      if (s._iO.onsuspend) {\r\n        sm2._wD(s.id + ': Playback suspended');\r\n        s._iO.onsuspend.apply(s);\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    /**\r\n     * flash 9/movieStar + RTMP-only method, should fire only once at most\r\n     * at this point we just recreate failed sounds rather than trying to reconnect\r\n     */\r\n\r\n    this._onfailure = function(msg, level, code) {\r\n\r\n      s.failures++;\r\n      sm2._wD(s.id + ': Failure (' + s.failures + '): ' + msg);\r\n\r\n      if (s._iO.onfailure && s.failures === 1) {\r\n        s._iO.onfailure(msg, level, code);\r\n      } else {\r\n        sm2._wD(s.id + ': Ignoring failure');\r\n      }\r\n\r\n    };\r\n\r\n    /**\r\n     * flash 9/movieStar + RTMP-only method for unhandled warnings/exceptions from Flash\r\n     * e.g., RTMP \"method missing\" warning (non-fatal) for getStreamLength on server\r\n     */\r\n\r\n    this._onwarning = function(msg, level, code) {\r\n\r\n      if (s._iO.onwarning) {\r\n        s._iO.onwarning(msg, level, code);\r\n      }\r\n\r\n    };\r\n\r\n    this._onfinish = function() {\r\n\r\n      // store local copy before it gets trashed...\r\n      var io_onfinish = s._iO.onfinish;\r\n\r\n      s._onbufferchange(0);\r\n      s._resetOnPosition(0);\r\n\r\n      // reset some state items\r\n      if (s.instanceCount) {\r\n\r\n        s.instanceCount--;\r\n\r\n        if (!s.instanceCount) {\r\n\r\n          // remove onPosition listeners, if any\r\n          detachOnPosition();\r\n\r\n          // reset instance options\r\n          s.playState = 0;\r\n          s.paused = false;\r\n          s.instanceCount = 0;\r\n          s.instanceOptions = {};\r\n          s._iO = {};\r\n          stop_html5_timer();\r\n\r\n          // reset position, too\r\n          if (s.isHTML5) {\r\n            s.position = 0;\r\n          }\r\n\r\n        }\r\n\r\n        if (!s.instanceCount || s._iO.multiShotEvents) {\r\n          // fire onfinish for last, or every instance\r\n          if (io_onfinish) {\r\n            sm2._wD(s.id + ': onfinish()');\r\n            wrapCallback(s, function() {\r\n              io_onfinish.apply(s);\r\n            });\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    this._whileloading = function(nBytesLoaded, nBytesTotal, nDuration, nBufferLength) {\r\n\r\n      var instanceOptions = s._iO;\r\n\r\n      s.bytesLoaded = nBytesLoaded;\r\n      s.bytesTotal = nBytesTotal;\r\n      s.duration = Math.floor(nDuration);\r\n      s.bufferLength = nBufferLength;\r\n\r\n      if (!s.isHTML5 && !instanceOptions.isMovieStar) {\r\n\r\n        if (instanceOptions.duration) {\r\n          // use duration from options, if specified and larger. nobody should be specifying duration in options, actually, and it should be retired.\r\n          s.durationEstimate = (s.duration > instanceOptions.duration) ? s.duration : instanceOptions.duration;\r\n        } else {\r\n          s.durationEstimate = parseInt((s.bytesTotal / s.bytesLoaded) * s.duration, 10);\r\n        }\r\n\r\n      } else {\r\n\r\n        s.durationEstimate = s.duration;\r\n\r\n      }\r\n\r\n      // for flash, reflect sequential-load-style buffering\r\n      if (!s.isHTML5) {\r\n        s.buffered = [{\r\n          start: 0,\r\n          end: s.duration\r\n        }];\r\n      }\r\n\r\n      // allow whileloading to fire even if \"load\" fired under HTML5, due to HTTP range/partials\r\n      if ((s.readyState !== 3 || s.isHTML5) && instanceOptions.whileloading) {\r\n        instanceOptions.whileloading.apply(s);\r\n      }\r\n\r\n    };\r\n\r\n    this._whileplaying = function(nPosition, oPeakData, oWaveformDataLeft, oWaveformDataRight, oEQData) {\r\n\r\n      var instanceOptions = s._iO,\r\n          eqLeft;\r\n\r\n      // flash safety net\r\n      if (isNaN(nPosition) || nPosition === null) return false;\r\n\r\n      // Safari HTML5 play() may return small -ve values when starting from position: 0, eg. -50.120396875. Unexpected/invalid per W3, I think. Normalize to 0.\r\n      s.position = Math.max(0, nPosition);\r\n\r\n      s._processOnPosition();\r\n\r\n      if (!s.isHTML5 && fV > 8) {\r\n\r\n        if (instanceOptions.usePeakData && oPeakData !== _undefined && oPeakData) {\r\n          s.peakData = {\r\n            left: oPeakData.leftPeak,\r\n            right: oPeakData.rightPeak\r\n          };\r\n        }\r\n\r\n        if (instanceOptions.useWaveformData && oWaveformDataLeft !== _undefined && oWaveformDataLeft) {\r\n          s.waveformData = {\r\n            left: oWaveformDataLeft.split(','),\r\n            right: oWaveformDataRight.split(',')\r\n          };\r\n        }\r\n\r\n        if (instanceOptions.useEQData) {\r\n          if (oEQData !== _undefined && oEQData && oEQData.leftEQ) {\r\n            eqLeft = oEQData.leftEQ.split(',');\r\n            s.eqData = eqLeft;\r\n            s.eqData.left = eqLeft;\r\n            if (oEQData.rightEQ !== _undefined && oEQData.rightEQ) {\r\n              s.eqData.right = oEQData.rightEQ.split(',');\r\n            }\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n      if (s.playState === 1) {\r\n\r\n        // special case/hack: ensure buffering is false if loading from cache (and not yet started)\r\n        if (!s.isHTML5 && fV === 8 && !s.position && s.isBuffering) {\r\n          s._onbufferchange(0);\r\n        }\r\n\r\n        if (instanceOptions.whileplaying) {\r\n          // flash may call after actual finish\r\n          instanceOptions.whileplaying.apply(s);\r\n        }\r\n\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    this._oncaptiondata = function(oData) {\r\n\r\n      /**\r\n       * internal: flash 9 + NetStream (MovieStar/RTMP-only) feature\r\n       *\r\n       * @param {object} oData\r\n       */\r\n\r\n      sm2._wD(s.id + ': Caption data received.');\r\n\r\n      s.captiondata = oData;\r\n\r\n      if (s._iO.oncaptiondata) {\r\n        s._iO.oncaptiondata.apply(s, [oData]);\r\n      }\r\n\r\n    };\r\n\r\n    this._onmetadata = function(oMDProps, oMDData) {\r\n\r\n      /**\r\n       * internal: flash 9 + NetStream (MovieStar/RTMP-only) feature\r\n       * RTMP may include song title, MovieStar content may include encoding info\r\n       *\r\n       * @param {array} oMDProps (names)\r\n       * @param {array} oMDData (values)\r\n       */\r\n\r\n      sm2._wD(s.id + ': Metadata received.');\r\n\r\n      var oData = {}, i, j;\r\n\r\n      for (i = 0, j = oMDProps.length; i < j; i++) {\r\n        oData[oMDProps[i]] = oMDData[i];\r\n      }\r\n\r\n      s.metadata = oData;\r\n\r\n      if (s._iO.onmetadata) {\r\n        s._iO.onmetadata.call(s, s.metadata);\r\n      }\r\n\r\n    };\r\n\r\n    this._onid3 = function(oID3Props, oID3Data) {\r\n\r\n      /**\r\n       * internal: flash 8 + flash 9 ID3 feature\r\n       * may include artist, song title etc.\r\n       *\r\n       * @param {array} oID3Props (names)\r\n       * @param {array} oID3Data (values)\r\n       */\r\n\r\n      sm2._wD(s.id + ': ID3 data received.');\r\n\r\n      var oData = [], i, j;\r\n\r\n      for (i = 0, j = oID3Props.length; i < j; i++) {\r\n        oData[oID3Props[i]] = oID3Data[i];\r\n      }\r\n\r\n      s.id3 = mixin(s.id3, oData);\r\n\r\n      if (s._iO.onid3) {\r\n        s._iO.onid3.apply(s);\r\n      }\r\n\r\n    };\r\n\r\n    // flash/RTMP-only\r\n\r\n    this._onconnect = function(bSuccess) {\r\n\r\n      bSuccess = (bSuccess === 1);\r\n      sm2._wD(s.id + ': ' + (bSuccess ? 'Connected.' : 'Failed to connect? - ' + s.url), (bSuccess ? 1 : 2));\r\n      s.connected = bSuccess;\r\n\r\n      if (bSuccess) {\r\n\r\n        s.failures = 0;\r\n\r\n        if (idCheck(s.id)) {\r\n          if (s.getAutoPlay()) {\r\n            // only update the play state if auto playing\r\n            s.play(_undefined, s.getAutoPlay());\r\n          } else if (s._iO.autoLoad) {\r\n            s.load();\r\n          }\r\n        }\r\n\r\n        if (s._iO.onconnect) {\r\n          s._iO.onconnect.apply(s, [bSuccess]);\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    this._ondataerror = function(sError) {\r\n\r\n      // flash 9 wave/eq data handler\r\n      // hack: called at start, and end from flash at/after onfinish()\r\n      if (s.playState > 0) {\r\n        sm2._wD(s.id + ': Data error: ' + sError);\r\n        if (s._iO.ondataerror) {\r\n          s._iO.ondataerror.apply(s);\r\n        }\r\n      }\r\n\r\n    };\r\n\r\n    // <d>\r\n    this._debug();\r\n    // </d>\r\n\r\n  }; // SMSound()\r\n\r\n  /**\r\n   * Private SoundManager internals\r\n   * ------------------------------\r\n   */\r\n\r\n  getDocument = function() {\r\n\r\n    return (doc.body || doc.getElementsByTagName('div')[0]);\r\n\r\n  };\r\n\r\n  id = function(sID) {\r\n\r\n    return doc.getElementById(sID);\r\n\r\n  };\r\n\r\n  mixin = function(oMain, oAdd) {\r\n\r\n    // non-destructive merge\r\n    var o1 = (oMain || {}), o2, o;\r\n\r\n    // if unspecified, o2 is the default options object\r\n    o2 = (oAdd === _undefined ? sm2.defaultOptions : oAdd);\r\n\r\n    for (o in o2) {\r\n\r\n      if (o2.hasOwnProperty(o) && o1[o] === _undefined) {\r\n\r\n        if (typeof o2[o] !== 'object' || o2[o] === null) {\r\n\r\n          // assign directly\r\n          o1[o] = o2[o];\r\n\r\n        } else {\r\n\r\n          // recurse through o2\r\n          o1[o] = mixin(o1[o], o2[o]);\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return o1;\r\n\r\n  };\r\n\r\n  wrapCallback = function(oSound, callback) {\r\n\r\n    /**\r\n     * 03/03/2013: Fix for Flash Player 11.6.602.171 + Flash 8 (flashVersion = 8) SWF issue\r\n     * setTimeout() fix for certain SMSound callbacks like onload() and onfinish(), where subsequent calls like play() and load() fail when Flash Player 11.6.602.171 is installed, and using soundManager with flashVersion = 8 (which is the default).\r\n     * Not sure of exact cause. Suspect race condition and/or invalid (NaN-style) position argument trickling down to the next JS -> Flash _start() call, in the play() case.\r\n     * Fix: setTimeout() to yield, plus safer null / NaN checking on position argument provided to Flash.\r\n     * https://getsatisfaction.com/schillmania/topics/recent_chrome_update_seems_to_have_broken_my_sm2_audio_player\r\n     */\r\n    if (!oSound.isHTML5 && fV === 8) {\r\n      window.setTimeout(callback, 0);\r\n    } else {\r\n      callback();\r\n    }\r\n\r\n  };\r\n\r\n  // additional soundManager properties that soundManager.setup() will accept\r\n\r\n  extraOptions = {\r\n    onready: 1,\r\n    ontimeout: 1,\r\n    defaultOptions: 1,\r\n    flash9Options: 1,\r\n    movieStarOptions: 1\r\n  };\r\n\r\n  assign = function(o, oParent) {\r\n\r\n    /**\r\n     * recursive assignment of properties, soundManager.setup() helper\r\n     * allows property assignment based on whitelist\r\n     */\r\n\r\n    var i,\r\n        result = true,\r\n        hasParent = (oParent !== _undefined),\r\n        setupOptions = sm2.setupOptions,\r\n        bonusOptions = extraOptions;\r\n\r\n    // <d>\r\n\r\n    // if soundManager.setup() called, show accepted parameters.\r\n\r\n    if (o === _undefined) {\r\n\r\n      result = [];\r\n\r\n      for (i in setupOptions) {\r\n\r\n        if (setupOptions.hasOwnProperty(i)) {\r\n          result.push(i);\r\n        }\r\n\r\n      }\r\n\r\n      for (i in bonusOptions) {\r\n\r\n        if (bonusOptions.hasOwnProperty(i)) {\r\n\r\n          if (typeof sm2[i] === 'object') {\r\n            result.push(i + ': {...}');\r\n          } else if (sm2[i] instanceof Function) {\r\n            result.push(i + ': function() {...}');\r\n          } else {\r\n            result.push(i);\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n      sm2._wD(str('setup', result.join(', ')));\r\n\r\n      return false;\r\n\r\n    }\r\n\r\n    // </d>\r\n\r\n    for (i in o) {\r\n\r\n      if (o.hasOwnProperty(i)) {\r\n\r\n        // if not an {object} we want to recurse through...\r\n\r\n        if (typeof o[i] !== 'object' || o[i] === null || o[i] instanceof Array || o[i] instanceof RegExp) {\r\n\r\n          // check \"allowed\" options\r\n\r\n          if (hasParent && bonusOptions[oParent] !== _undefined) {\r\n\r\n            // valid recursive / nested object option, eg., { defaultOptions: { volume: 50 } }\r\n            sm2[oParent][i] = o[i];\r\n\r\n          } else if (setupOptions[i] !== _undefined) {\r\n\r\n            // special case: assign to setupOptions object, which soundManager property references\r\n            sm2.setupOptions[i] = o[i];\r\n\r\n            // assign directly to soundManager, too\r\n            sm2[i] = o[i];\r\n\r\n          } else if (bonusOptions[i] === _undefined) {\r\n\r\n            // invalid or disallowed parameter. complain.\r\n            complain(str((sm2[i] === _undefined ? 'setupUndef' : 'setupError'), i), 2);\r\n\r\n            result = false;\r\n\r\n          } else if (sm2[i] instanceof Function) {\r\n\r\n            /**\r\n             * valid extraOptions (bonusOptions) parameter.\r\n             * is it a method, like onready/ontimeout? call it.\r\n             * multiple parameters should be in an array, eg. soundManager.setup({onready: [myHandler, myScope]});\r\n             */\r\n            sm2[i].apply(sm2, (o[i] instanceof Array ? o[i] : [o[i]]));\r\n\r\n          } else {\r\n\r\n            // good old-fashioned direct assignment\r\n            sm2[i] = o[i];\r\n\r\n          }\r\n\r\n        } else if (bonusOptions[i] === _undefined) {\r\n\r\n          // recursion case, eg., { defaultOptions: { ... } }\r\n\r\n          // invalid or disallowed parameter. complain.\r\n          complain(str((sm2[i] === _undefined ? 'setupUndef' : 'setupError'), i), 2);\r\n\r\n          result = false;\r\n\r\n        } else {\r\n\r\n          // recurse through object\r\n          return assign(o[i], i);\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  function preferFlashCheck(kind) {\r\n\r\n    // whether flash should play a given type\r\n    return (sm2.preferFlash && hasFlash && !sm2.ignoreFlash && (sm2.flash[kind] !== _undefined && sm2.flash[kind]));\r\n\r\n  }\r\n\r\n  /**\r\n   * Internal DOM2-level event helpers\r\n   * ---------------------------------\r\n   */\r\n\r\n  event = (function() {\r\n\r\n    // normalize event methods\r\n    var old = (window.attachEvent),\r\n    evt = {\r\n      add: (old ? 'attachEvent' : 'addEventListener'),\r\n      remove: (old ? 'detachEvent' : 'removeEventListener')\r\n    };\r\n\r\n    // normalize \"on\" event prefix, optional capture argument\r\n    function getArgs(oArgs) {\r\n\r\n      var args = slice.call(oArgs),\r\n          len = args.length;\r\n\r\n      if (old) {\r\n        // prefix\r\n        args[1] = 'on' + args[1];\r\n        if (len > 3) {\r\n          // no capture\r\n          args.pop();\r\n        }\r\n      } else if (len === 3) {\r\n        args.push(false);\r\n      }\r\n\r\n      return args;\r\n\r\n    }\r\n\r\n    function apply(args, sType) {\r\n\r\n      // normalize and call the event method, with the proper arguments\r\n      var element = args.shift(),\r\n          method = [evt[sType]];\r\n\r\n      if (old) {\r\n        // old IE can't do apply().\r\n        element[method](args[0], args[1]);\r\n      } else {\r\n        element[method].apply(element, args);\r\n      }\r\n\r\n    }\r\n\r\n    function add() {\r\n      apply(getArgs(arguments), 'add');\r\n    }\r\n\r\n    function remove() {\r\n      apply(getArgs(arguments), 'remove');\r\n    }\r\n\r\n    return {\r\n      add: add,\r\n      remove: remove\r\n    };\r\n\r\n  }());\r\n\r\n  /**\r\n   * Internal HTML5 event handling\r\n   * -----------------------------\r\n   */\r\n\r\n  function html5_event(oFn) {\r\n\r\n    // wrap html5 event handlers so we don't call them on destroyed and/or unloaded sounds\r\n\r\n    return function(e) {\r\n\r\n      var s = this._s,\r\n          result;\r\n\r\n      if (!s || !s._a) {\r\n        // <d>\r\n        if (s && s.id) {\r\n          sm2._wD(s.id + ': Ignoring ' + e.type);\r\n        } else {\r\n          sm2._wD(h5 + 'Ignoring ' + e.type);\r\n        }\r\n        // </d>\r\n        result = null;\r\n      } else {\r\n        result = oFn.call(this, e);\r\n      }\r\n\r\n      return result;\r\n\r\n    };\r\n\r\n  }\r\n\r\n  html5_events = {\r\n\r\n    // HTML5 event-name-to-handler map\r\n\r\n    abort: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': abort');\r\n\r\n    }),\r\n\r\n    // enough has loaded to play\r\n\r\n    canplay: html5_event(function() {\r\n\r\n      var s = this._s,\r\n          position1K;\r\n\r\n      if (s._html5_canplay) {\r\n        // this event has already fired. ignore.\r\n        return;\r\n      }\r\n\r\n      s._html5_canplay = true;\r\n      sm2._wD(s.id + ': canplay');\r\n      s._onbufferchange(0);\r\n\r\n      // position according to instance options\r\n      position1K = (s._iO.position !== _undefined && !isNaN(s._iO.position) ? s._iO.position / msecScale : null);\r\n\r\n      // set the position if position was provided before the sound loaded\r\n      if (this.currentTime !== position1K) {\r\n        sm2._wD(s.id + ': canplay: Setting position to ' + position1K);\r\n        try {\r\n          this.currentTime = position1K;\r\n        } catch(ee) {\r\n          sm2._wD(s.id + ': canplay: Setting position of ' + position1K + ' failed: ' + ee.message, 2);\r\n        }\r\n      }\r\n\r\n      // hack for HTML5 from/to case\r\n      if (s._iO._oncanplay) {\r\n        s._iO._oncanplay();\r\n      }\r\n\r\n    }),\r\n\r\n    canplaythrough: html5_event(function() {\r\n\r\n      var s = this._s;\r\n\r\n      if (!s.loaded) {\r\n        s._onbufferchange(0);\r\n        s._whileloading(s.bytesLoaded, s.bytesTotal, s._get_html5_duration());\r\n        s._onload(true);\r\n      }\r\n\r\n    }),\r\n\r\n    durationchange: html5_event(function() {\r\n\r\n      // durationchange may fire at various times, probably the safest way to capture accurate/final duration.\r\n\r\n      var s = this._s,\r\n          duration;\r\n\r\n      duration = s._get_html5_duration();\r\n\r\n      if (!isNaN(duration) && duration !== s.duration) {\r\n\r\n        sm2._wD(this._s.id + ': durationchange (' + duration + ')' + (s.duration ? ', previously ' + s.duration : ''));\r\n\r\n        s.durationEstimate = s.duration = duration;\r\n\r\n      }\r\n\r\n    }),\r\n\r\n    // TODO: Reserved for potential use\r\n    /*\r\n    emptied: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': emptied');\r\n\r\n    }),\r\n    */\r\n\r\n    ended: html5_event(function() {\r\n\r\n      var s = this._s;\r\n\r\n      sm2._wD(s.id + ': ended');\r\n\r\n      s._onfinish();\r\n\r\n    }),\r\n\r\n    error: html5_event(function() {\r\n\r\n      var description = (html5ErrorCodes[this.error.code] || null);\r\n      sm2._wD(this._s.id + ': HTML5 error, code ' + this.error.code + (description ? ' (' + description + ')' : ''));\r\n      this._s._onload(false);\r\n      this._s._onerror(this.error.code, description);\r\n\r\n    }),\r\n\r\n    loadeddata: html5_event(function() {\r\n\r\n      var s = this._s;\r\n\r\n      sm2._wD(s.id + ': loadeddata');\r\n\r\n      // safari seems to nicely report progress events, eventually totalling 100%\r\n      if (!s._loaded && !isSafari) {\r\n        s.duration = s._get_html5_duration();\r\n      }\r\n\r\n    }),\r\n\r\n    loadedmetadata: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': loadedmetadata');\r\n\r\n    }),\r\n\r\n    loadstart: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': loadstart');\r\n      // assume buffering at first\r\n      this._s._onbufferchange(1);\r\n\r\n    }),\r\n\r\n    play: html5_event(function() {\r\n\r\n      // sm2._wD(this._s.id + ': play()');\r\n      // once play starts, no buffering\r\n      this._s._onbufferchange(0);\r\n\r\n    }),\r\n\r\n    playing: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': playing ' + String.fromCharCode(9835));\r\n      // once play starts, no buffering\r\n      this._s._onbufferchange(0);\r\n\r\n    }),\r\n\r\n    progress: html5_event(function(e) {\r\n\r\n      // note: can fire repeatedly after \"loaded\" event, due to use of HTTP range/partials\r\n\r\n      var s = this._s,\r\n          i, j, progStr, buffered = 0,\r\n          isProgress = (e.type === 'progress'),\r\n          ranges = e.target.buffered,\r\n          // firefox 3.6 implements e.loaded/total (bytes)\r\n          loaded = (e.loaded || 0),\r\n          total = (e.total || 1);\r\n\r\n      // reset the \"buffered\" (loaded byte ranges) array\r\n      s.buffered = [];\r\n\r\n      if (ranges && ranges.length) {\r\n\r\n        // if loaded is 0, try TimeRanges implementation as % of load\r\n        // https://developer.mozilla.org/en/DOM/TimeRanges\r\n\r\n        // re-build \"buffered\" array\r\n        // HTML5 returns seconds. SM2 API uses msec for setPosition() etc., whether Flash or HTML5.\r\n        for (i = 0, j = ranges.length; i < j; i++) {\r\n          s.buffered.push({\r\n            start: ranges.start(i) * msecScale,\r\n            end: ranges.end(i) * msecScale\r\n          });\r\n        }\r\n\r\n        // use the last value locally\r\n        buffered = (ranges.end(0) - ranges.start(0)) * msecScale;\r\n\r\n        // linear case, buffer sum; does not account for seeking and HTTP partials / byte ranges\r\n        loaded = Math.min(1, buffered / (e.target.duration * msecScale));\r\n\r\n        // <d>\r\n        if (isProgress && ranges.length > 1) {\r\n          progStr = [];\r\n          j = ranges.length;\r\n          for (i = 0; i < j; i++) {\r\n            progStr.push((e.target.buffered.start(i) * msecScale) + '-' + (e.target.buffered.end(i) * msecScale));\r\n          }\r\n          sm2._wD(this._s.id + ': progress, timeRanges: ' + progStr.join(', '));\r\n        }\r\n\r\n        if (isProgress && !isNaN(loaded)) {\r\n          sm2._wD(this._s.id + ': progress, ' + Math.floor(loaded * 100) + '% loaded');\r\n        }\r\n        // </d>\r\n\r\n      }\r\n\r\n      if (!isNaN(loaded)) {\r\n\r\n        // TODO: prevent calls with duplicate values.\r\n        s._whileloading(loaded, total, s._get_html5_duration());\r\n        if (loaded && total && loaded === total) {\r\n          // in case \"onload\" doesn't fire (eg. gecko 1.9.2)\r\n          html5_events.canplaythrough.call(this, e);\r\n        }\r\n\r\n      }\r\n\r\n    }),\r\n\r\n    ratechange: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': ratechange');\r\n\r\n    }),\r\n\r\n    suspend: html5_event(function(e) {\r\n\r\n      // download paused/stopped, may have finished (eg. onload)\r\n      var s = this._s;\r\n\r\n      sm2._wD(this._s.id + ': suspend');\r\n      html5_events.progress.call(this, e);\r\n      s._onsuspend();\r\n\r\n    }),\r\n\r\n    stalled: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': stalled');\r\n\r\n    }),\r\n\r\n    timeupdate: html5_event(function() {\r\n\r\n      this._s._onTimer();\r\n\r\n    }),\r\n\r\n    waiting: html5_event(function() {\r\n\r\n      var s = this._s;\r\n\r\n      // see also: seeking\r\n      sm2._wD(this._s.id + ': waiting');\r\n\r\n      // playback faster than download rate, etc.\r\n      s._onbufferchange(1);\r\n\r\n    })\r\n\r\n  };\r\n\r\n  html5OK = function(iO) {\r\n\r\n    // playability test based on URL or MIME type\r\n\r\n    var result;\r\n\r\n    if (!iO || (!iO.type && !iO.url && !iO.serverURL)) {\r\n\r\n      // nothing to check\r\n      result = false;\r\n\r\n    } else if (iO.serverURL || (iO.type && preferFlashCheck(iO.type))) {\r\n\r\n      // RTMP, or preferring flash\r\n      result = false;\r\n\r\n    } else {\r\n\r\n      // Use type, if specified. Pass data: URIs to HTML5. If HTML5-only mode, no other options, so just give 'er\r\n      result = ((iO.type ? html5CanPlay({ type: iO.type }) : html5CanPlay({ url: iO.url }) || sm2.html5Only || iO.url.match(/data:/i)));\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  html5Unload = function(oAudio) {\r\n\r\n    /**\r\n     * Internal method: Unload media, and cancel any current/pending network requests.\r\n     * Firefox can load an empty URL, which allegedly destroys the decoder and stops the download.\r\n     * https://developer.mozilla.org/En/Using_audio_and_video_in_Firefox#Stopping_the_download_of_media\r\n     * However, Firefox has been seen loading a relative URL from '' and thus requesting the hosting page on unload.\r\n     * Other UA behaviour is unclear, so everyone else gets an about:blank-style URL.\r\n     */\r\n\r\n    var url;\r\n\r\n    if (oAudio) {\r\n\r\n      // Firefox and Chrome accept short WAVe data: URIs. Chome dislikes audio/wav, but accepts audio/wav for data: MIME.\r\n      // Desktop Safari complains / fails on data: URI, so it gets about:blank.\r\n      url = (isSafari ? emptyURL : (sm2.html5.canPlayType('audio/wav') ? emptyWAV : emptyURL));\r\n\r\n      oAudio.src = url;\r\n\r\n      // reset some state, too\r\n      if (oAudio._called_unload !== _undefined) {\r\n        oAudio._called_load = false;\r\n      }\r\n\r\n    }\r\n\r\n    if (useGlobalHTML5Audio) {\r\n\r\n      // ensure URL state is trashed, also\r\n      lastGlobalHTML5URL = null;\r\n\r\n    }\r\n\r\n    return url;\r\n\r\n  };\r\n\r\n  html5CanPlay = function(o) {\r\n\r\n    /**\r\n     * Try to find MIME, test and return truthiness\r\n     * o = {\r\n     *  url: '/path/to/an.mp3',\r\n     *  type: 'audio/mp3'\r\n     * }\r\n     */\r\n\r\n    if (!sm2.useHTML5Audio || !sm2.hasHTML5) return false;\r\n\r\n    var url = (o.url || null),\r\n        mime = (o.type || null),\r\n        aF = sm2.audioFormats,\r\n        result,\r\n        offset,\r\n        fileExt,\r\n        item;\r\n\r\n    // account for known cases like audio/mp3\r\n\r\n    if (mime && sm2.html5[mime] !== _undefined) return (sm2.html5[mime] && !preferFlashCheck(mime));\r\n\r\n    if (!html5Ext) {\r\n\r\n      html5Ext = [];\r\n\r\n      for (item in aF) {\r\n\r\n        if (aF.hasOwnProperty(item)) {\r\n\r\n          html5Ext.push(item);\r\n\r\n          if (aF[item].related) {\r\n            html5Ext = html5Ext.concat(aF[item].related);\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n      html5Ext = new RegExp('\\\\.(' + html5Ext.join('|') + ')(\\\\?.*)?$', 'i');\r\n\r\n    }\r\n\r\n    // TODO: Strip URL queries, etc.\r\n    fileExt = (url ? url.toLowerCase().match(html5Ext) : null);\r\n\r\n    if (!fileExt || !fileExt.length) {\r\n\r\n      if (!mime) {\r\n\r\n        result = false;\r\n\r\n      } else {\r\n\r\n        // audio/mp3 -> mp3, result should be known\r\n        offset = mime.indexOf(';');\r\n\r\n        // strip \"audio/X; codecs...\"\r\n        fileExt = (offset !== -1 ? mime.substr(0, offset) : mime).substr(6);\r\n\r\n      }\r\n\r\n    } else {\r\n\r\n      // match the raw extension name - \"mp3\", for example\r\n      fileExt = fileExt[1];\r\n\r\n    }\r\n\r\n    if (fileExt && sm2.html5[fileExt] !== _undefined) {\r\n\r\n      // result known\r\n      result = (sm2.html5[fileExt] && !preferFlashCheck(fileExt));\r\n\r\n    } else {\r\n\r\n      mime = 'audio/' + fileExt;\r\n      result = sm2.html5.canPlayType({ type: mime });\r\n\r\n      sm2.html5[fileExt] = result;\r\n\r\n      // sm2._wD('canPlayType, found result: ' + result);\r\n      result = (result && sm2.html5[mime] && !preferFlashCheck(mime));\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  testHTML5 = function() {\r\n\r\n    /**\r\n     * Internal: Iterates over audioFormats, determining support eg. audio/mp3, audio/mpeg and so on\r\n     * assigns results to html5[] and flash[].\r\n     */\r\n\r\n    if (!sm2.useHTML5Audio || !sm2.hasHTML5) {\r\n\r\n      // without HTML5, we need Flash.\r\n      sm2.html5.usingFlash = true;\r\n      needsFlash = true;\r\n\r\n      return false;\r\n\r\n    }\r\n\r\n    // double-whammy: Opera 9.64 throws WRONG_ARGUMENTS_ERR if no parameter passed to Audio(), and Webkit + iOS happily tries to load \"null\" as a URL. :/\r\n    var a = (Audio !== _undefined ? (isOpera && opera.version() < 10 ? new Audio(null) : new Audio()) : null),\r\n        item, lookup, support = {}, aF, i;\r\n\r\n    function cp(m) {\r\n\r\n      var canPlay, j,\r\n          result = false,\r\n          isOK = false;\r\n\r\n      if (!a || typeof a.canPlayType !== 'function') return result;\r\n\r\n      if (m instanceof Array) {\r\n\r\n        // iterate through all mime types, return any successes\r\n\r\n        for (i = 0, j = m.length; i < j; i++) {\r\n\r\n          if (sm2.html5[m[i]] || a.canPlayType(m[i]).match(sm2.html5Test)) {\r\n\r\n            isOK = true;\r\n            sm2.html5[m[i]] = true;\r\n\r\n            // note flash support, too\r\n            sm2.flash[m[i]] = !!(m[i].match(flashMIME));\r\n\r\n          }\r\n\r\n        }\r\n\r\n        result = isOK;\r\n\r\n      } else {\r\n\r\n        canPlay = (a && typeof a.canPlayType === 'function' ? a.canPlayType(m) : false);\r\n        result = !!(canPlay && (canPlay.match(sm2.html5Test)));\r\n\r\n      }\r\n\r\n      return result;\r\n\r\n    }\r\n\r\n    // test all registered formats + codecs\r\n\r\n    aF = sm2.audioFormats;\r\n\r\n    for (item in aF) {\r\n\r\n      if (aF.hasOwnProperty(item)) {\r\n\r\n        lookup = 'audio/' + item;\r\n\r\n        support[item] = cp(aF[item].type);\r\n\r\n        // write back generic type too, eg. audio/mp3\r\n        support[lookup] = support[item];\r\n\r\n        // assign flash\r\n        if (item.match(flashMIME)) {\r\n\r\n          sm2.flash[item] = true;\r\n          sm2.flash[lookup] = true;\r\n\r\n        } else {\r\n\r\n          sm2.flash[item] = false;\r\n          sm2.flash[lookup] = false;\r\n\r\n        }\r\n\r\n        // assign result to related formats, too\r\n\r\n        if (aF[item] && aF[item].related) {\r\n\r\n          for (i = aF[item].related.length - 1; i >= 0; i--) {\r\n\r\n            // eg. audio/m4a\r\n            support['audio/' + aF[item].related[i]] = support[item];\r\n            sm2.html5[aF[item].related[i]] = support[item];\r\n            sm2.flash[aF[item].related[i]] = support[item];\r\n\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    support.canPlayType = (a ? cp : null);\r\n    sm2.html5 = mixin(sm2.html5, support);\r\n\r\n    sm2.html5.usingFlash = featureCheck();\r\n    needsFlash = sm2.html5.usingFlash;\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  strings = {\r\n\r\n    // <d>\r\n    notReady: 'Unavailable - wait until onready() has fired.',\r\n    notOK: 'Audio support is not available.',\r\n    domError: sm + 'exception caught while appending SWF to DOM.',\r\n    spcWmode: 'Removing wmode, preventing known SWF loading issue(s)',\r\n    swf404: smc + 'Verify that %s is a valid path.',\r\n    tryDebug: 'Try ' + sm + '.debugFlash = true for more security details (output goes to SWF.)',\r\n    checkSWF: 'See SWF output for more debug info.',\r\n    localFail: smc + 'Non-HTTP page (' + doc.location.protocol + ' URL?) Review Flash player security settings for this special case:\\nhttp://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html\\nMay need to add/allow path, eg. c:/sm2/ or /users/me/sm2/',\r\n    waitFocus: smc + 'Special case: Waiting for SWF to load with window focus...',\r\n    waitForever: smc + 'Waiting indefinitely for Flash (will recover if unblocked)...',\r\n    waitSWF: smc + 'Waiting for 100% SWF load...',\r\n    needFunction: smc + 'Function object expected for %s',\r\n    badID: 'Sound ID \"%s\" should be a string, starting with a non-numeric character',\r\n    currentObj: smc + '_debug(): Current sound objects',\r\n    waitOnload: smc + 'Waiting for window.onload()',\r\n    docLoaded: smc + 'Document already loaded',\r\n    onload: smc + 'initComplete(): calling soundManager.onload()',\r\n    onloadOK: sm + '.onload() complete',\r\n    didInit: smc + 'init(): Already called?',\r\n    secNote: 'Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html',\r\n    badRemove: smc + 'Failed to remove Flash node.',\r\n    shutdown: sm + '.disable(): Shutting down',\r\n    queue: smc + 'Queueing %s handler',\r\n    smError: 'SMSound.load(): Exception: JS-Flash communication failed, or JS error.',\r\n    fbTimeout: 'No flash response, applying .' + swfCSS.swfTimedout + ' CSS...',\r\n    fbLoaded: 'Flash loaded',\r\n    fbHandler: smc + 'flashBlockHandler()',\r\n    manURL: 'SMSound.load(): Using manually-assigned URL',\r\n    onURL: sm + '.load(): current URL already assigned.',\r\n    badFV: sm + '.flashVersion must be 8 or 9. \"%s\" is invalid. Reverting to %s.',\r\n    as2loop: 'Note: Setting stream:false so looping can work (flash 8 limitation)',\r\n    noNSLoop: 'Note: Looping not implemented for MovieStar formats',\r\n    needfl9: 'Note: Switching to flash 9, required for MP4 formats.',\r\n    mfTimeout: 'Setting flashLoadTimeout = 0 (infinite) for off-screen, mobile flash case',\r\n    needFlash: smc + 'Fatal error: Flash is needed to play some required formats, but is not available.',\r\n    gotFocus: smc + 'Got window focus.',\r\n    policy: 'Enabling usePolicyFile for data access',\r\n    setup: sm + '.setup(): allowed parameters: %s',\r\n    setupError: sm + '.setup(): \"%s\" cannot be assigned with this method.',\r\n    setupUndef: sm + '.setup(): Could not find option \"%s\"',\r\n    setupLate: sm + '.setup(): url, flashVersion and html5Test property changes will not take effect until reboot().',\r\n    noURL: smc + 'Flash URL required. Call soundManager.setup({url:...}) to get started.',\r\n    sm2Loaded: 'SoundManager 2: Ready. ' + String.fromCharCode(10003),\r\n    reset: sm + '.reset(): Removing event callbacks',\r\n    mobileUA: 'Mobile UA detected, preferring HTML5 by default.',\r\n    globalHTML5: 'Using singleton HTML5 Audio() pattern for this device.',\r\n    ignoreMobile: 'Ignoring mobile restrictions for this device.'\r\n    // </d>\r\n\r\n  };\r\n\r\n  str = function() {\r\n\r\n    // internal string replace helper.\r\n    // arguments: o [,items to replace]\r\n    // <d>\r\n\r\n    var args,\r\n        i, j, o,\r\n        sstr;\r\n\r\n    // real array, please\r\n    args = slice.call(arguments);\r\n\r\n    // first argument\r\n    o = args.shift();\r\n\r\n    sstr = (strings && strings[o] ? strings[o] : '');\r\n\r\n    if (sstr && args && args.length) {\r\n      for (i = 0, j = args.length; i < j; i++) {\r\n        sstr = sstr.replace('%s', args[i]);\r\n      }\r\n    }\r\n\r\n    return sstr;\r\n    // </d>\r\n\r\n  };\r\n\r\n  loopFix = function(sOpt) {\r\n\r\n    // flash 8 requires stream = false for looping to work\r\n    if (fV === 8 && sOpt.loops > 1 && sOpt.stream) {\r\n      _wDS('as2loop');\r\n      sOpt.stream = false;\r\n    }\r\n\r\n    return sOpt;\r\n\r\n  };\r\n\r\n  policyFix = function(sOpt, sPre) {\r\n\r\n    if (sOpt && !sOpt.usePolicyFile && (sOpt.onid3 || sOpt.usePeakData || sOpt.useWaveformData || sOpt.useEQData)) {\r\n      sm2._wD((sPre || '') + str('policy'));\r\n      sOpt.usePolicyFile = true;\r\n    }\r\n\r\n    return sOpt;\r\n\r\n  };\r\n\r\n  complain = function(sMsg) {\r\n\r\n    // <d>\r\n    if (hasConsole && console.warn !== _undefined) {\r\n      console.warn(sMsg);\r\n    } else {\r\n      sm2._wD(sMsg);\r\n    }\r\n    // </d>\r\n\r\n  };\r\n\r\n  doNothing = function() {\r\n\r\n    return false;\r\n\r\n  };\r\n\r\n  disableObject = function(o) {\r\n\r\n    var oProp;\r\n\r\n    for (oProp in o) {\r\n      if (o.hasOwnProperty(oProp) && typeof o[oProp] === 'function') {\r\n        o[oProp] = doNothing;\r\n      }\r\n    }\r\n\r\n    oProp = null;\r\n\r\n  };\r\n\r\n  failSafely = function(bNoDisable) {\r\n\r\n    // general failure exception handler\r\n\r\n    if (bNoDisable === _undefined) {\r\n      bNoDisable = false;\r\n    }\r\n\r\n    if (disabled || bNoDisable) {\r\n      sm2.disable(bNoDisable);\r\n    }\r\n\r\n  };\r\n\r\n  normalizeMovieURL = function(movieURL) {\r\n\r\n    var urlParams = null, url;\r\n\r\n    if (movieURL) {\r\n\r\n      if (movieURL.match(/\\.swf(\\?.*)?$/i)) {\r\n\r\n        urlParams = movieURL.substr(movieURL.toLowerCase().lastIndexOf('.swf?') + 4);\r\n\r\n        // assume user knows what they're doing\r\n        if (urlParams) return movieURL;\r\n\r\n      } else if (movieURL.lastIndexOf('/') !== movieURL.length - 1) {\r\n\r\n        // append trailing slash, if needed\r\n        movieURL += '/';\r\n\r\n      }\r\n\r\n    }\r\n\r\n    url = (movieURL && movieURL.lastIndexOf('/') !== -1 ? movieURL.substr(0, movieURL.lastIndexOf('/') + 1) : './') + sm2.movieURL;\r\n\r\n    if (sm2.noSWFCache) {\r\n      url += ('?ts=' + new Date().getTime());\r\n    }\r\n\r\n    return url;\r\n\r\n  };\r\n\r\n  setVersionInfo = function() {\r\n\r\n    // short-hand for internal use\r\n\r\n    fV = parseInt(sm2.flashVersion, 10);\r\n\r\n    if (fV !== 8 && fV !== 9) {\r\n      sm2._wD(str('badFV', fV, defaultFlashVersion));\r\n      sm2.flashVersion = fV = defaultFlashVersion;\r\n    }\r\n\r\n    // debug flash movie, if applicable\r\n\r\n    var isDebug = (sm2.debugMode || sm2.debugFlash ? '_debug.swf' : '.swf');\r\n\r\n    if (sm2.useHTML5Audio && !sm2.html5Only && sm2.audioFormats.mp4.required && fV < 9) {\r\n      sm2._wD(str('needfl9'));\r\n      sm2.flashVersion = fV = 9;\r\n    }\r\n\r\n    sm2.version = sm2.versionNumber + (sm2.html5Only ? ' (HTML5-only mode)' : (fV === 9 ? ' (AS3/Flash 9)' : ' (AS2/Flash 8)'));\r\n\r\n    // set up default options\r\n    if (fV > 8) {\r\n\r\n      // +flash 9 base options\r\n      sm2.defaultOptions = mixin(sm2.defaultOptions, sm2.flash9Options);\r\n      sm2.features.buffering = true;\r\n\r\n      // +moviestar support\r\n      sm2.defaultOptions = mixin(sm2.defaultOptions, sm2.movieStarOptions);\r\n      sm2.filePatterns.flash9 = new RegExp('\\\\.(mp3|' + netStreamTypes.join('|') + ')(\\\\?.*)?$', 'i');\r\n      sm2.features.movieStar = true;\r\n\r\n    } else {\r\n\r\n      sm2.features.movieStar = false;\r\n\r\n    }\r\n\r\n    // regExp for flash canPlay(), etc.\r\n    sm2.filePattern = sm2.filePatterns[(fV !== 8 ? 'flash9' : 'flash8')];\r\n\r\n    // if applicable, use _debug versions of SWFs\r\n    sm2.movieURL = (fV === 8 ? 'soundmanager2.swf' : 'soundmanager2_flash9.swf').replace('.swf', isDebug);\r\n\r\n    sm2.features.peakData = sm2.features.waveformData = sm2.features.eqData = (fV > 8);\r\n\r\n  };\r\n\r\n  setPolling = function(bPolling, bHighPerformance) {\r\n\r\n    if (!flash) {\r\n      return;\r\n    }\r\n\r\n    flash._setPolling(bPolling, bHighPerformance);\r\n\r\n  };\r\n\r\n  initDebug = function() {\r\n\r\n    // starts debug mode, creating output <div> for UAs without console object\r\n\r\n    // allow force of debug mode via URL\r\n    // <d>\r\n    if (sm2.debugURLParam.test(wl)) {\r\n      sm2.setupOptions.debugMode = sm2.debugMode = true;\r\n    }\r\n\r\n    if (id(sm2.debugID)) {\r\n      return;\r\n    }\r\n\r\n    var oD, oDebug, oTarget, oToggle, tmp;\r\n\r\n    if (sm2.debugMode && !id(sm2.debugID) && (!hasConsole || !sm2.useConsole || !sm2.consoleOnly)) {\r\n\r\n      oD = doc.createElement('div');\r\n      oD.id = sm2.debugID + '-toggle';\r\n\r\n      oToggle = {\r\n        position: 'fixed',\r\n        bottom: '0px',\r\n        right: '0px',\r\n        width: '1.2em',\r\n        height: '1.2em',\r\n        lineHeight: '1.2em',\r\n        margin: '2px',\r\n        textAlign: 'center',\r\n        border: '1px solid #999',\r\n        cursor: 'pointer',\r\n        background: '#fff',\r\n        color: '#333',\r\n        zIndex: 10001\r\n      };\r\n\r\n      oD.appendChild(doc.createTextNode('-'));\r\n      oD.onclick = toggleDebug;\r\n      oD.title = 'Toggle SM2 debug console';\r\n\r\n      if (ua.match(/msie 6/i)) {\r\n        oD.style.position = 'absolute';\r\n        oD.style.cursor = 'hand';\r\n      }\r\n\r\n      for (tmp in oToggle) {\r\n        if (oToggle.hasOwnProperty(tmp)) {\r\n          oD.style[tmp] = oToggle[tmp];\r\n        }\r\n      }\r\n\r\n      oDebug = doc.createElement('div');\r\n      oDebug.id = sm2.debugID;\r\n      oDebug.style.display = (sm2.debugMode ? 'block' : 'none');\r\n\r\n      if (sm2.debugMode && !id(oD.id)) {\r\n        try {\r\n          oTarget = getDocument();\r\n          oTarget.appendChild(oD);\r\n        } catch(e2) {\r\n          throw new Error(str('domError') + ' \\n' + e2.toString());\r\n        }\r\n        oTarget.appendChild(oDebug);\r\n      }\r\n\r\n    }\r\n\r\n    oTarget = null;\r\n    // </d>\r\n\r\n  };\r\n\r\n  idCheck = this.getSoundById;\r\n\r\n  // <d>\r\n  _wDS = function(o, errorLevel) {\r\n\r\n    return (!o ? '' : sm2._wD(str(o), errorLevel));\r\n\r\n  };\r\n\r\n  toggleDebug = function() {\r\n\r\n    var o = id(sm2.debugID),\r\n    oT = id(sm2.debugID + '-toggle');\r\n\r\n    if (!o) {\r\n      return;\r\n    }\r\n\r\n    if (debugOpen) {\r\n      // minimize\r\n      oT.innerHTML = '+';\r\n      o.style.display = 'none';\r\n    } else {\r\n      oT.innerHTML = '-';\r\n      o.style.display = 'block';\r\n    }\r\n\r\n    debugOpen = !debugOpen;\r\n\r\n  };\r\n\r\n  debugTS = function(sEventType, bSuccess, sMessage) {\r\n\r\n    // troubleshooter debug hooks\r\n\r\n    if (window.sm2Debugger !== _undefined) {\r\n      try {\r\n        sm2Debugger.handleEvent(sEventType, bSuccess, sMessage);\r\n      } catch(e) {\r\n        // oh well\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n  // </d>\r\n\r\n  getSWFCSS = function() {\r\n\r\n    var css = [];\r\n\r\n    if (sm2.debugMode) {\r\n      css.push(swfCSS.sm2Debug);\r\n    }\r\n\r\n    if (sm2.debugFlash) {\r\n      css.push(swfCSS.flashDebug);\r\n    }\r\n\r\n    if (sm2.useHighPerformance) {\r\n      css.push(swfCSS.highPerf);\r\n    }\r\n\r\n    return css.join(' ');\r\n\r\n  };\r\n\r\n  flashBlockHandler = function() {\r\n\r\n    // *possible* flash block situation.\r\n\r\n    var name = str('fbHandler'),\r\n        p = sm2.getMoviePercent(),\r\n        css = swfCSS,\r\n        error = {\r\n          type: 'FLASHBLOCK'\r\n        };\r\n\r\n    if (sm2.html5Only) {\r\n      // no flash, or unused\r\n      return;\r\n    }\r\n\r\n    if (!sm2.ok()) {\r\n\r\n      if (needsFlash) {\r\n        // make the movie more visible, so user can fix\r\n        sm2.oMC.className = getSWFCSS() + ' ' + css.swfDefault + ' ' + (p === null ? css.swfTimedout : css.swfError);\r\n        sm2._wD(name + ': ' + str('fbTimeout') + (p ? ' (' + str('fbLoaded') + ')' : ''));\r\n      }\r\n\r\n      sm2.didFlashBlock = true;\r\n\r\n      // fire onready(), complain lightly\r\n      processOnEvents({\r\n        type: 'ontimeout',\r\n        ignoreInit: true,\r\n        error: error\r\n      });\r\n\r\n      catchError(error);\r\n\r\n    } else {\r\n\r\n      // SM2 loaded OK (or recovered)\r\n\r\n      // <d>\r\n      if (sm2.didFlashBlock) {\r\n        sm2._wD(name + ': Unblocked');\r\n      }\r\n      // </d>\r\n\r\n      if (sm2.oMC) {\r\n        sm2.oMC.className = [getSWFCSS(), css.swfDefault, css.swfLoaded + (sm2.didFlashBlock ? ' ' + css.swfUnblocked : '')].join(' ');\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  addOnEvent = function(sType, oMethod, oScope) {\r\n\r\n    if (on_queue[sType] === _undefined) {\r\n      on_queue[sType] = [];\r\n    }\r\n\r\n    on_queue[sType].push({\r\n      method: oMethod,\r\n      scope: (oScope || null),\r\n      fired: false\r\n    });\r\n\r\n  };\r\n\r\n  processOnEvents = function(oOptions) {\r\n\r\n    // if unspecified, assume OK/error\r\n\r\n    if (!oOptions) {\r\n      oOptions = {\r\n        type: (sm2.ok() ? 'onready' : 'ontimeout')\r\n      };\r\n    }\r\n\r\n    // not ready yet.\r\n    if (!didInit && oOptions && !oOptions.ignoreInit) return false;\r\n\r\n    // invalid case\r\n    if (oOptions.type === 'ontimeout' && (sm2.ok() || (disabled && !oOptions.ignoreInit))) return false;\r\n\r\n    var status = {\r\n          success: (oOptions && oOptions.ignoreInit ? sm2.ok() : !disabled)\r\n        },\r\n\r\n        // queue specified by type, or none\r\n        srcQueue = (oOptions && oOptions.type ? on_queue[oOptions.type] || [] : []),\r\n\r\n        queue = [], i, j,\r\n        args = [status],\r\n        canRetry = (needsFlash && !sm2.ok());\r\n\r\n    if (oOptions.error) {\r\n      args[0].error = oOptions.error;\r\n    }\r\n\r\n    for (i = 0, j = srcQueue.length; i < j; i++) {\r\n      if (srcQueue[i].fired !== true) {\r\n        queue.push(srcQueue[i]);\r\n      }\r\n    }\r\n\r\n    if (queue.length) {\r\n\r\n      // sm2._wD(sm + ': Firing ' + queue.length + ' ' + oOptions.type + '() item' + (queue.length === 1 ? '' : 's'));\r\n      for (i = 0, j = queue.length; i < j; i++) {\r\n\r\n        if (queue[i].scope) {\r\n          queue[i].method.apply(queue[i].scope, args);\r\n        } else {\r\n          queue[i].method.apply(this, args);\r\n        }\r\n\r\n        if (!canRetry) {\r\n          // useFlashBlock and SWF timeout case doesn't count here.\r\n          queue[i].fired = true;\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  initUserOnload = function() {\r\n\r\n    window.setTimeout(function() {\r\n\r\n      if (sm2.useFlashBlock) {\r\n        flashBlockHandler();\r\n      }\r\n\r\n      processOnEvents();\r\n\r\n      // call user-defined \"onload\", scoped to window\r\n\r\n      if (typeof sm2.onload === 'function') {\r\n        _wDS('onload', 1);\r\n        sm2.onload.apply(window);\r\n        _wDS('onloadOK', 1);\r\n      }\r\n\r\n      if (sm2.waitForWindowLoad) {\r\n        event.add(window, 'load', initUserOnload);\r\n      }\r\n\r\n    }, 1);\r\n\r\n  };\r\n\r\n  detectFlash = function() {\r\n\r\n    /**\r\n     * Hat tip: Flash Detect library (BSD, (C) 2007) by Carl \"DocYes\" S. Yestrau\r\n     * http://featureblend.com/javascript-flash-detection-library.html / http://featureblend.com/license.txt\r\n     */\r\n\r\n    // this work has already been done.\r\n    if (hasFlash !== _undefined) return hasFlash;\r\n\r\n    var hasPlugin = false, n = navigator, obj, type, types, AX = window.ActiveXObject;\r\n\r\n    // MS Edge 14 throws an \"Unspecified Error\" because n.plugins is inaccessible due to permissions\r\n    var nP;\r\n\r\n    try {\r\n      nP = n.plugins;\r\n    } catch(e) {\r\n      nP = undefined;\r\n    }\r\n\r\n    if (nP && nP.length) {\r\n\r\n      type = 'application/x-shockwave-flash';\r\n      types = n.mimeTypes;\r\n\r\n      if (types && types[type] && types[type].enabledPlugin && types[type].enabledPlugin.description) {\r\n        hasPlugin = true;\r\n      }\r\n\r\n    } else if (AX !== _undefined && !ua.match(/MSAppHost/i)) {\r\n\r\n      // Windows 8 Store Apps (MSAppHost) are weird (compatibility?) and won't complain here, but will barf if Flash/ActiveX object is appended to the DOM.\r\n      try {\r\n        obj = new AX('ShockwaveFlash.ShockwaveFlash');\r\n      } catch(e) {\r\n        // oh well\r\n        obj = null;\r\n      }\r\n\r\n      hasPlugin = (!!obj);\r\n\r\n      // cleanup, because it is ActiveX after all\r\n      obj = null;\r\n\r\n    }\r\n\r\n    hasFlash = hasPlugin;\r\n\r\n    return hasPlugin;\r\n\r\n  };\r\n\r\n  featureCheck = function() {\r\n\r\n    var flashNeeded,\r\n        item,\r\n        formats = sm2.audioFormats,\r\n        // iPhone <= 3.1 has broken HTML5 audio(), but firmware 3.2 (original iPad) + iOS4 works.\r\n        isSpecial = (is_iDevice && !!(ua.match(/os (1|2|3_0|3_1)\\s/i)));\r\n\r\n    if (isSpecial) {\r\n\r\n      // has Audio(), but is broken; let it load links directly.\r\n      sm2.hasHTML5 = false;\r\n\r\n      // ignore flash case, however\r\n      sm2.html5Only = true;\r\n\r\n      // hide the SWF, if present\r\n      if (sm2.oMC) {\r\n        sm2.oMC.style.display = 'none';\r\n      }\r\n\r\n    } else if (sm2.useHTML5Audio) {\r\n\r\n        if (!sm2.html5 || !sm2.html5.canPlayType) {\r\n          sm2._wD('SoundManager: No HTML5 Audio() support detected.');\r\n          sm2.hasHTML5 = false;\r\n        }\r\n\r\n        // <d>\r\n        if (isBadSafari) {\r\n          sm2._wD(smc + 'Note: Buggy HTML5 Audio in Safari on this OS X release, see https://bugs.webkit.org/show_bug.cgi?id=32159 - ' + (!hasFlash ? ' would use flash fallback for MP3/MP4, but none detected.' : 'will use flash fallback for MP3/MP4, if available'), 1);\r\n        }\r\n        // </d>\r\n\r\n      }\r\n\r\n    if (sm2.useHTML5Audio && sm2.hasHTML5) {\r\n\r\n      // sort out whether flash is optional, required or can be ignored.\r\n\r\n      // innocent until proven guilty.\r\n      canIgnoreFlash = true;\r\n\r\n      for (item in formats) {\r\n\r\n        if (formats.hasOwnProperty(item)) {\r\n\r\n          if (formats[item].required) {\r\n\r\n            if (!sm2.html5.canPlayType(formats[item].type)) {\r\n\r\n              // 100% HTML5 mode is not possible.\r\n              canIgnoreFlash = false;\r\n              flashNeeded = true;\r\n\r\n            } else if (sm2.preferFlash && (sm2.flash[item] || sm2.flash[formats[item].type])) {\r\n\r\n              // flash may be required, or preferred for this format.\r\n              flashNeeded = true;\r\n\r\n            }\r\n\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    // sanity check...\r\n    if (sm2.ignoreFlash) {\r\n      flashNeeded = false;\r\n      canIgnoreFlash = true;\r\n    }\r\n\r\n    sm2.html5Only = (sm2.hasHTML5 && sm2.useHTML5Audio && !flashNeeded);\r\n\r\n    return (!sm2.html5Only);\r\n\r\n  };\r\n\r\n  parseURL = function(url) {\r\n\r\n    /**\r\n     * Internal: Finds and returns the first playable URL (or failing that, the first URL.)\r\n     * @param {string or array} url A single URL string, OR, an array of URL strings or {url:'/path/to/resource', type:'audio/mp3'} objects.\r\n     */\r\n\r\n    var i, j, urlResult = 0, result;\r\n\r\n    if (url instanceof Array) {\r\n\r\n      // find the first good one\r\n      for (i = 0, j = url.length; i < j; i++) {\r\n\r\n        if (url[i] instanceof Object) {\r\n\r\n          // MIME check\r\n          if (sm2.canPlayMIME(url[i].type)) {\r\n            urlResult = i;\r\n            break;\r\n          }\r\n\r\n        } else if (sm2.canPlayURL(url[i])) {\r\n\r\n          // URL string check\r\n          urlResult = i;\r\n          break;\r\n\r\n        }\r\n\r\n      }\r\n\r\n      // normalize to string\r\n      if (url[urlResult].url) {\r\n        url[urlResult] = url[urlResult].url;\r\n      }\r\n\r\n      result = url[urlResult];\r\n\r\n    } else {\r\n\r\n      // single URL case\r\n      result = url;\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n\r\n  startTimer = function(oSound) {\r\n\r\n    /**\r\n     * attach a timer to this sound, and start an interval if needed\r\n     */\r\n\r\n    if (!oSound._hasTimer) {\r\n\r\n      oSound._hasTimer = true;\r\n\r\n      if (!mobileHTML5 && sm2.html5PollingInterval) {\r\n\r\n        if (h5IntervalTimer === null && h5TimerCount === 0) {\r\n\r\n          h5IntervalTimer = setInterval(timerExecute, sm2.html5PollingInterval);\r\n\r\n        }\r\n\r\n        h5TimerCount++;\r\n\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  stopTimer = function(oSound) {\r\n\r\n    /**\r\n     * detach a timer\r\n     */\r\n\r\n    if (oSound._hasTimer) {\r\n\r\n      oSound._hasTimer = false;\r\n\r\n      if (!mobileHTML5 && sm2.html5PollingInterval) {\r\n\r\n        // interval will stop itself at next execution.\r\n\r\n        h5TimerCount--;\r\n\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  timerExecute = function() {\r\n\r\n    /**\r\n     * manual polling for HTML5 progress events, ie., whileplaying()\r\n     * (can achieve greater precision than conservative default HTML5 interval)\r\n     */\r\n\r\n    var i;\r\n\r\n    if (h5IntervalTimer !== null && !h5TimerCount) {\r\n\r\n      // no active timers, stop polling interval.\r\n\r\n      clearInterval(h5IntervalTimer);\r\n\r\n      h5IntervalTimer = null;\r\n\r\n      return;\r\n\r\n    }\r\n\r\n    // check all HTML5 sounds with timers\r\n\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n\r\n      if (sm2.sounds[sm2.soundIDs[i]].isHTML5 && sm2.sounds[sm2.soundIDs[i]]._hasTimer) {\r\n        sm2.sounds[sm2.soundIDs[i]]._onTimer();\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  catchError = function(options) {\r\n\r\n    options = (options !== _undefined ? options : {});\r\n\r\n    if (typeof sm2.onerror === 'function') {\r\n      sm2.onerror.apply(window, [{\r\n        type: (options.type !== _undefined ? options.type : null)\r\n      }]);\r\n    }\r\n\r\n    if (options.fatal !== _undefined && options.fatal) {\r\n      sm2.disable();\r\n    }\r\n\r\n  };\r\n\r\n  badSafariFix = function() {\r\n\r\n    // special case: \"bad\" Safari (OS X 10.3 - 10.7) must fall back to flash for MP3/MP4\r\n    if (!isBadSafari || !detectFlash()) {\r\n      // doesn't apply\r\n      return;\r\n    }\r\n\r\n    var aF = sm2.audioFormats, i, item;\r\n\r\n    for (item in aF) {\r\n\r\n      if (aF.hasOwnProperty(item)) {\r\n\r\n        if (item === 'mp3' || item === 'mp4') {\r\n\r\n          sm2._wD(sm + ': Using flash fallback for ' + item + ' format');\r\n          sm2.html5[item] = false;\r\n\r\n          // assign result to related formats, too\r\n          if (aF[item] && aF[item].related) {\r\n            for (i = aF[item].related.length - 1; i >= 0; i--) {\r\n              sm2.html5[aF[item].related[i]] = false;\r\n            }\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  /**\r\n   * Pseudo-private flash/ExternalInterface methods\r\n   * ----------------------------------------------\r\n   */\r\n\r\n  this._setSandboxType = function(sandboxType) {\r\n\r\n    // <d>\r\n    // Security sandbox according to Flash plugin\r\n    var sb = sm2.sandbox;\r\n\r\n    sb.type = sandboxType;\r\n    sb.description = sb.types[(sb.types[sandboxType] !== _undefined ? sandboxType : 'unknown')];\r\n\r\n    if (sb.type === 'localWithFile') {\r\n\r\n      sb.noRemote = true;\r\n      sb.noLocal = false;\r\n      _wDS('secNote', 2);\r\n\r\n    } else if (sb.type === 'localWithNetwork') {\r\n\r\n      sb.noRemote = false;\r\n      sb.noLocal = true;\r\n\r\n    } else if (sb.type === 'localTrusted') {\r\n\r\n      sb.noRemote = false;\r\n      sb.noLocal = false;\r\n\r\n    }\r\n    // </d>\r\n\r\n  };\r\n\r\n  this._externalInterfaceOK = function(swfVersion) {\r\n\r\n    // flash callback confirming flash loaded, EI working etc.\r\n    // swfVersion: SWF build string\r\n\r\n    if (sm2.swfLoaded) {\r\n      return;\r\n    }\r\n\r\n    var e;\r\n\r\n    debugTS('swf', true);\r\n    debugTS('flashtojs', true);\r\n    sm2.swfLoaded = true;\r\n    tryInitOnFocus = false;\r\n\r\n    if (isBadSafari) {\r\n      badSafariFix();\r\n    }\r\n\r\n    // complain if JS + SWF build/version strings don't match, excluding +DEV builds\r\n    // <d>\r\n    if (!swfVersion || swfVersion.replace(/\\+dev/i, '') !== sm2.versionNumber.replace(/\\+dev/i, '')) {\r\n\r\n      e = sm + ': Fatal: JavaScript file build \"' + sm2.versionNumber + '\" does not match Flash SWF build \"' + swfVersion + '\" at ' + sm2.url + '. Ensure both are up-to-date.';\r\n\r\n      // escape flash -> JS stack so this error fires in window.\r\n      setTimeout(function() {\r\n        throw new Error(e);\r\n      }, 0);\r\n\r\n      // exit, init will fail with timeout\r\n      return;\r\n\r\n    }\r\n    // </d>\r\n\r\n    // IE needs a larger timeout\r\n    setTimeout(init, isIE ? 100 : 1);\r\n\r\n  };\r\n\r\n  /**\r\n   * Private initialization helpers\r\n   * ------------------------------\r\n   */\r\n\r\n  createMovie = function(movieID, movieURL) {\r\n\r\n    // ignore if already connected\r\n    if (didAppend && appendSuccess) return false;\r\n\r\n    function initMsg() {\r\n\r\n      // <d>\r\n\r\n      var options = [],\r\n          title,\r\n          msg = [],\r\n          delimiter = ' + ';\r\n\r\n      title = 'SoundManager ' + sm2.version + (!sm2.html5Only && sm2.useHTML5Audio ? (sm2.hasHTML5 ? ' + HTML5 audio' : ', no HTML5 audio support') : '');\r\n\r\n      if (!sm2.html5Only) {\r\n\r\n        if (sm2.preferFlash) {\r\n          options.push('preferFlash');\r\n        }\r\n\r\n        if (sm2.useHighPerformance) {\r\n          options.push('useHighPerformance');\r\n        }\r\n\r\n        if (sm2.flashPollingInterval) {\r\n          options.push('flashPollingInterval (' + sm2.flashPollingInterval + 'ms)');\r\n        }\r\n\r\n        if (sm2.html5PollingInterval) {\r\n          options.push('html5PollingInterval (' + sm2.html5PollingInterval + 'ms)');\r\n        }\r\n\r\n        if (sm2.wmode) {\r\n          options.push('wmode (' + sm2.wmode + ')');\r\n        }\r\n\r\n        if (sm2.debugFlash) {\r\n          options.push('debugFlash');\r\n        }\r\n\r\n        if (sm2.useFlashBlock) {\r\n          options.push('flashBlock');\r\n        }\r\n\r\n      } else if (sm2.html5PollingInterval) {\r\n          options.push('html5PollingInterval (' + sm2.html5PollingInterval + 'ms)');\r\n        }\r\n\r\n      if (options.length) {\r\n        msg = msg.concat([options.join(delimiter)]);\r\n      }\r\n\r\n      sm2._wD(title + (msg.length ? delimiter + msg.join(', ') : ''), 1);\r\n\r\n      showSupport();\r\n\r\n      // </d>\r\n\r\n    }\r\n\r\n    if (sm2.html5Only) {\r\n\r\n      // 100% HTML5 mode\r\n      setVersionInfo();\r\n\r\n      initMsg();\r\n      sm2.oMC = id(sm2.movieID);\r\n      init();\r\n\r\n      // prevent multiple init attempts\r\n      didAppend = true;\r\n\r\n      appendSuccess = true;\r\n\r\n      return false;\r\n\r\n    }\r\n\r\n    // flash path\r\n    var remoteURL = (movieURL || sm2.url),\r\n    localURL = (sm2.altURL || remoteURL),\r\n    swfTitle = 'JS/Flash audio component (SoundManager 2)',\r\n    oTarget = getDocument(),\r\n    extraClass = getSWFCSS(),\r\n    isRTL = null,\r\n    html = doc.getElementsByTagName('html')[0],\r\n    oEmbed, oMovie, tmp, movieHTML, oEl, s, x, sClass;\r\n\r\n    isRTL = (html && html.dir && html.dir.match(/rtl/i));\r\n    movieID = (movieID === _undefined ? sm2.id : movieID);\r\n\r\n    function param(name, value) {\r\n      return '<param name=\"' + name + '\" value=\"' + value + '\" />';\r\n    }\r\n\r\n    // safety check for legacy (change to Flash 9 URL)\r\n    setVersionInfo();\r\n    sm2.url = normalizeMovieURL(overHTTP ? remoteURL : localURL);\r\n    movieURL = sm2.url;\r\n\r\n    sm2.wmode = (!sm2.wmode && sm2.useHighPerformance ? 'transparent' : sm2.wmode);\r\n\r\n    if (sm2.wmode !== null && (ua.match(/msie 8/i) || (!isIE && !sm2.useHighPerformance)) && navigator.platform.match(/win32|win64/i)) {\r\n      /**\r\n       * extra-special case: movie doesn't load until scrolled into view when using wmode = anything but 'window' here\r\n       * does not apply when using high performance (position:fixed means on-screen), OR infinite flash load timeout\r\n       * wmode breaks IE 8 on Vista + Win7 too in some cases, as of January 2011 (?)\r\n       */\r\n      messages.push(strings.spcWmode);\r\n      sm2.wmode = null;\r\n    }\r\n\r\n    oEmbed = {\r\n      name: movieID,\r\n      id: movieID,\r\n      src: movieURL,\r\n      quality: 'high',\r\n      allowScriptAccess: sm2.allowScriptAccess,\r\n      bgcolor: sm2.bgColor,\r\n      pluginspage: http + 'www.macromedia.com/go/getflashplayer',\r\n      title: swfTitle,\r\n      type: 'application/x-shockwave-flash',\r\n      wmode: sm2.wmode,\r\n      // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html\r\n      hasPriority: 'true'\r\n    };\r\n\r\n    if (sm2.debugFlash) {\r\n      oEmbed.FlashVars = 'debug=1';\r\n    }\r\n\r\n    if (!sm2.wmode) {\r\n      // don't write empty attribute\r\n      delete oEmbed.wmode;\r\n    }\r\n\r\n    if (isIE) {\r\n\r\n      // IE is \"special\".\r\n      oMovie = doc.createElement('div');\r\n      movieHTML = [\r\n        '<object id=\"' + movieID + '\" data=\"' + movieURL + '\" type=\"' + oEmbed.type + '\" title=\"' + oEmbed.title + '\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0\">',\r\n        param('movie', movieURL),\r\n        param('AllowScriptAccess', sm2.allowScriptAccess),\r\n        param('quality', oEmbed.quality),\r\n        (sm2.wmode ? param('wmode', sm2.wmode) : ''),\r\n        param('bgcolor', sm2.bgColor),\r\n        param('hasPriority', 'true'),\r\n        (sm2.debugFlash ? param('FlashVars', oEmbed.FlashVars) : ''),\r\n        '</object>'\r\n      ].join('');\r\n\r\n    } else {\r\n\r\n      oMovie = doc.createElement('embed');\r\n      for (tmp in oEmbed) {\r\n        if (oEmbed.hasOwnProperty(tmp)) {\r\n          oMovie.setAttribute(tmp, oEmbed[tmp]);\r\n        }\r\n      }\r\n\r\n    }\r\n\r\n    initDebug();\r\n    extraClass = getSWFCSS();\r\n    oTarget = getDocument();\r\n\r\n    if (oTarget) {\r\n\r\n      sm2.oMC = (id(sm2.movieID) || doc.createElement('div'));\r\n\r\n      if (!sm2.oMC.id) {\r\n\r\n        sm2.oMC.id = sm2.movieID;\r\n        sm2.oMC.className = swfCSS.swfDefault + ' ' + extraClass;\r\n        s = null;\r\n        oEl = null;\r\n\r\n        if (!sm2.useFlashBlock) {\r\n          if (sm2.useHighPerformance) {\r\n            // on-screen at all times\r\n            s = {\r\n              position: 'fixed',\r\n              width: '8px',\r\n              height: '8px',\r\n              // >= 6px for flash to run fast, >= 8px to start up under Firefox/win32 in some cases. odd? yes.\r\n              bottom: '0px',\r\n              left: '0px',\r\n              overflow: 'hidden'\r\n            };\r\n          } else {\r\n            // hide off-screen, lower priority\r\n            s = {\r\n              position: 'absolute',\r\n              width: '6px',\r\n              height: '6px',\r\n              top: '-9999px',\r\n              left: '-9999px'\r\n            };\r\n            if (isRTL) {\r\n              s.left = Math.abs(parseInt(s.left, 10)) + 'px';\r\n            }\r\n          }\r\n        }\r\n\r\n        if (isWebkit) {\r\n          // soundcloud-reported render/crash fix, safari 5\r\n          sm2.oMC.style.zIndex = 10000;\r\n        }\r\n\r\n        if (!sm2.debugFlash) {\r\n          for (x in s) {\r\n            if (s.hasOwnProperty(x)) {\r\n              sm2.oMC.style[x] = s[x];\r\n            }\r\n          }\r\n        }\r\n\r\n        try {\r\n\r\n          if (!isIE) {\r\n            sm2.oMC.appendChild(oMovie);\r\n          }\r\n\r\n          oTarget.appendChild(sm2.oMC);\r\n\r\n          if (isIE) {\r\n            oEl = sm2.oMC.appendChild(doc.createElement('div'));\r\n            oEl.className = swfCSS.swfBox;\r\n            oEl.innerHTML = movieHTML;\r\n          }\r\n\r\n          appendSuccess = true;\r\n\r\n        } catch(e) {\r\n\r\n          throw new Error(str('domError') + ' \\n' + e.toString());\r\n\r\n        }\r\n\r\n      } else {\r\n\r\n        // SM2 container is already in the document (eg. flashblock use case)\r\n        sClass = sm2.oMC.className;\r\n        sm2.oMC.className = (sClass ? sClass + ' ' : swfCSS.swfDefault) + (extraClass ? ' ' + extraClass : '');\r\n        sm2.oMC.appendChild(oMovie);\r\n\r\n        if (isIE) {\r\n          oEl = sm2.oMC.appendChild(doc.createElement('div'));\r\n          oEl.className = swfCSS.swfBox;\r\n          oEl.innerHTML = movieHTML;\r\n        }\r\n\r\n        appendSuccess = true;\r\n\r\n      }\r\n\r\n    }\r\n\r\n    didAppend = true;\r\n\r\n    initMsg();\r\n\r\n    // sm2._wD(sm + ': Trying to load ' + movieURL + (!overHTTP && sm2.altURL ? ' (alternate URL)' : ''), 1);\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  initMovie = function() {\r\n\r\n    if (sm2.html5Only) {\r\n      createMovie();\r\n      return false;\r\n    }\r\n\r\n    // attempt to get, or create, movie (may already exist)\r\n    if (flash) return false;\r\n\r\n    if (!sm2.url) {\r\n\r\n      /**\r\n       * Something isn't right - we've reached init, but the soundManager url property has not been set.\r\n       * User has not called setup({url: ...}), or has not set soundManager.url (legacy use case) directly before init time.\r\n       * Notify and exit. If user calls setup() with a url: property, init will be restarted as in the deferred loading case.\r\n       */\r\n\r\n       _wDS('noURL');\r\n       return false;\r\n\r\n    }\r\n\r\n    // inline markup case\r\n    flash = sm2.getMovie(sm2.id);\r\n\r\n    if (!flash) {\r\n\r\n      if (!oRemoved) {\r\n\r\n        // try to create\r\n        createMovie(sm2.id, sm2.url);\r\n\r\n      } else {\r\n\r\n        // try to re-append removed movie after reboot()\r\n        if (!isIE) {\r\n          sm2.oMC.appendChild(oRemoved);\r\n        } else {\r\n          sm2.oMC.innerHTML = oRemovedHTML;\r\n        }\r\n\r\n        oRemoved = null;\r\n        didAppend = true;\r\n\r\n      }\r\n\r\n      flash = sm2.getMovie(sm2.id);\r\n\r\n    }\r\n\r\n    if (typeof sm2.oninitmovie === 'function') {\r\n      setTimeout(sm2.oninitmovie, 1);\r\n    }\r\n\r\n    // <d>\r\n    flushMessages();\r\n    // </d>\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  delayWaitForEI = function() {\r\n\r\n    setTimeout(waitForEI, 1000);\r\n\r\n  };\r\n\r\n  rebootIntoHTML5 = function() {\r\n\r\n    // special case: try for a reboot with preferFlash: false, if 100% HTML5 mode is possible and useFlashBlock is not enabled.\r\n\r\n    window.setTimeout(function() {\r\n\r\n      complain(smc + 'useFlashBlock is false, 100% HTML5 mode is possible. Rebooting with preferFlash: false...');\r\n\r\n      sm2.setup({\r\n        preferFlash: false\r\n      }).reboot();\r\n\r\n      // if for some reason you want to detect this case, use an ontimeout() callback and look for html5Only and didFlashBlock == true.\r\n      sm2.didFlashBlock = true;\r\n\r\n      sm2.beginDelayedInit();\r\n\r\n    }, 1);\r\n\r\n  };\r\n\r\n  waitForEI = function() {\r\n\r\n    var p,\r\n        loadIncomplete = false;\r\n\r\n    if (!sm2.url) {\r\n      // No SWF url to load (noURL case) - exit for now. Will be retried when url is set.\r\n      return;\r\n    }\r\n\r\n    if (waitingForEI) {\r\n      return;\r\n    }\r\n\r\n    waitingForEI = true;\r\n    event.remove(window, 'load', delayWaitForEI);\r\n\r\n    if (hasFlash && tryInitOnFocus && !isFocused) {\r\n      // Safari won't load flash in background tabs, only when focused.\r\n      _wDS('waitFocus');\r\n      return;\r\n    }\r\n\r\n    if (!didInit) {\r\n      p = sm2.getMoviePercent();\r\n      if (p > 0 && p < 100) {\r\n        loadIncomplete = true;\r\n      }\r\n    }\r\n\r\n    setTimeout(function() {\r\n\r\n      p = sm2.getMoviePercent();\r\n\r\n      if (loadIncomplete) {\r\n        // special case: if movie *partially* loaded, retry until it's 100% before assuming failure.\r\n        waitingForEI = false;\r\n        sm2._wD(str('waitSWF'));\r\n        window.setTimeout(delayWaitForEI, 1);\r\n        return;\r\n      }\r\n\r\n      // <d>\r\n      if (!didInit) {\r\n\r\n        sm2._wD(sm + ': No Flash response within expected time. Likely causes: ' + (p === 0 ? 'SWF load failed, ' : '') + 'Flash blocked or JS-Flash security error.' + (sm2.debugFlash ? ' ' + str('checkSWF') : ''), 2);\r\n\r\n        if (!overHTTP && p) {\r\n\r\n          _wDS('localFail', 2);\r\n\r\n          if (!sm2.debugFlash) {\r\n            _wDS('tryDebug', 2);\r\n          }\r\n\r\n        }\r\n\r\n        if (p === 0) {\r\n\r\n          // if 0 (not null), probably a 404.\r\n          sm2._wD(str('swf404', sm2.url), 1);\r\n\r\n        }\r\n\r\n        debugTS('flashtojs', false, ': Timed out' + (overHTTP ? ' (Check flash security or flash blockers)' : ' (No plugin/missing SWF?)'));\r\n\r\n      }\r\n      // </d>\r\n\r\n      // give up / time-out, depending\r\n\r\n      if (!didInit && okToDisable) {\r\n\r\n        if (p === null) {\r\n\r\n          // SWF failed to report load progress. Possibly blocked.\r\n\r\n          if (sm2.useFlashBlock || sm2.flashLoadTimeout === 0) {\r\n\r\n            if (sm2.useFlashBlock) {\r\n\r\n              flashBlockHandler();\r\n\r\n            }\r\n\r\n            _wDS('waitForever');\r\n\r\n          } else if (!sm2.useFlashBlock && canIgnoreFlash) {\r\n\r\n            // no custom flash block handling, but SWF has timed out. Will recover if user unblocks / allows SWF load.\r\n            rebootIntoHTML5();\r\n\r\n          } else {\r\n\r\n            _wDS('waitForever');\r\n\r\n            // fire any regular registered ontimeout() listeners.\r\n            processOnEvents({\r\n              type: 'ontimeout',\r\n              ignoreInit: true,\r\n              error: {\r\n                type: 'INIT_FLASHBLOCK'\r\n              }\r\n            });\r\n\r\n          }\r\n\r\n        } else if (sm2.flashLoadTimeout === 0) {\r\n\r\n          // SWF loaded? Shouldn't be a blocking issue, then.\r\n\r\n          _wDS('waitForever');\r\n\r\n        } else if (!sm2.useFlashBlock && canIgnoreFlash) {\r\n\r\n          rebootIntoHTML5();\r\n\r\n        } else {\r\n\r\n          failSafely(true);\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }, sm2.flashLoadTimeout);\r\n\r\n  };\r\n\r\n  handleFocus = function() {\r\n\r\n    function cleanup() {\r\n      event.remove(window, 'focus', handleFocus);\r\n    }\r\n\r\n    if (isFocused || !tryInitOnFocus) {\r\n      // already focused, or not special Safari background tab case\r\n      cleanup();\r\n      return true;\r\n    }\r\n\r\n    okToDisable = true;\r\n    isFocused = true;\r\n    _wDS('gotFocus');\r\n\r\n    // allow init to restart\r\n    waitingForEI = false;\r\n\r\n    // kick off ExternalInterface timeout, now that the SWF has started\r\n    delayWaitForEI();\r\n\r\n    cleanup();\r\n    return true;\r\n\r\n  };\r\n\r\n  flushMessages = function() {\r\n\r\n    // <d>\r\n\r\n    // SM2 pre-init debug messages\r\n    if (messages.length) {\r\n      sm2._wD('SoundManager 2: ' + messages.join(' '), 1);\r\n      messages = [];\r\n    }\r\n\r\n    // </d>\r\n\r\n  };\r\n\r\n  showSupport = function() {\r\n\r\n    // <d>\r\n\r\n    flushMessages();\r\n\r\n    var item, tests = [];\r\n\r\n    if (sm2.useHTML5Audio && sm2.hasHTML5) {\r\n      for (item in sm2.audioFormats) {\r\n        if (sm2.audioFormats.hasOwnProperty(item)) {\r\n          tests.push(item + ' = ' + sm2.html5[item] + (!sm2.html5[item] && needsFlash && sm2.flash[item] ? ' (using flash)' : (sm2.preferFlash && sm2.flash[item] && needsFlash ? ' (preferring flash)' : (!sm2.html5[item] ? ' (' + (sm2.audioFormats[item].required ? 'required, ' : '') + 'and no flash support)' : ''))));\r\n        }\r\n      }\r\n      sm2._wD('SoundManager 2 HTML5 support: ' + tests.join(', '), 1);\r\n    }\r\n\r\n    // </d>\r\n\r\n  };\r\n\r\n  initComplete = function(bNoDisable) {\r\n\r\n    if (didInit) return false;\r\n\r\n    if (sm2.html5Only) {\r\n      // all good.\r\n      _wDS('sm2Loaded', 1);\r\n      didInit = true;\r\n      initUserOnload();\r\n      debugTS('onload', true);\r\n      return true;\r\n    }\r\n\r\n    var wasTimeout = (sm2.useFlashBlock && sm2.flashLoadTimeout && !sm2.getMoviePercent()),\r\n        result = true,\r\n        error;\r\n\r\n    if (!wasTimeout) {\r\n      didInit = true;\r\n    }\r\n\r\n    error = {\r\n      type: (!hasFlash && needsFlash ? 'NO_FLASH' : 'INIT_TIMEOUT')\r\n    };\r\n\r\n    sm2._wD('SoundManager 2 ' + (disabled ? 'failed to load' : 'loaded') + ' (' + (disabled ? 'Flash security/load error' : 'OK') + ') ' + String.fromCharCode(disabled ? 10006 : 10003), disabled ? 2 : 1);\r\n\r\n    if (disabled || bNoDisable) {\r\n\r\n      if (sm2.useFlashBlock && sm2.oMC) {\r\n        sm2.oMC.className = getSWFCSS() + ' ' + (sm2.getMoviePercent() === null ? swfCSS.swfTimedout : swfCSS.swfError);\r\n      }\r\n\r\n      processOnEvents({\r\n        type: 'ontimeout',\r\n        error: error,\r\n        ignoreInit: true\r\n      });\r\n\r\n      debugTS('onload', false);\r\n      catchError(error);\r\n\r\n      result = false;\r\n\r\n    } else {\r\n\r\n      debugTS('onload', true);\r\n\r\n    }\r\n\r\n    if (!disabled) {\r\n\r\n      if (sm2.waitForWindowLoad && !windowLoaded) {\r\n\r\n        _wDS('waitOnload');\r\n        event.add(window, 'load', initUserOnload);\r\n\r\n      } else {\r\n\r\n        // <d>\r\n        if (sm2.waitForWindowLoad && windowLoaded) {\r\n          _wDS('docLoaded');\r\n        }\r\n        // </d>\r\n\r\n        initUserOnload();\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * apply top-level setupOptions object as local properties, eg., this.setupOptions.flashVersion -> this.flashVersion (soundManager.flashVersion)\r\n   * this maintains backward compatibility, and allows properties to be defined separately for use by soundManager.setup().\r\n   */\r\n\r\n  setProperties = function() {\r\n\r\n    var i,\r\n        o = sm2.setupOptions;\r\n\r\n    for (i in o) {\r\n\r\n      if (o.hasOwnProperty(i)) {\r\n\r\n        // assign local property if not already defined\r\n\r\n        if (sm2[i] === _undefined) {\r\n\r\n          sm2[i] = o[i];\r\n\r\n        } else if (sm2[i] !== o[i]) {\r\n\r\n          // legacy support: write manually-assigned property (eg., soundManager.url) back to setupOptions to keep things in sync\r\n          sm2.setupOptions[i] = sm2[i];\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n\r\n  init = function() {\r\n\r\n    // called after onload()\r\n\r\n    if (didInit) {\r\n      _wDS('didInit');\r\n      return false;\r\n    }\r\n\r\n    function cleanup() {\r\n      event.remove(window, 'load', sm2.beginDelayedInit);\r\n    }\r\n\r\n    if (sm2.html5Only) {\r\n\r\n      if (!didInit) {\r\n        // we don't need no steenking flash!\r\n        cleanup();\r\n        sm2.enabled = true;\r\n        initComplete();\r\n      }\r\n\r\n      return true;\r\n\r\n    }\r\n\r\n    // flash path\r\n    initMovie();\r\n\r\n    try {\r\n\r\n      // attempt to talk to Flash\r\n      flash._externalInterfaceTest(false);\r\n\r\n      /**\r\n       * Apply user-specified polling interval, OR, if \"high performance\" set, faster vs. default polling\r\n       * (determines frequency of whileloading/whileplaying callbacks, effectively driving UI framerates)\r\n       */\r\n      setPolling(true, (sm2.flashPollingInterval || (sm2.useHighPerformance ? 10 : 50)));\r\n\r\n      if (!sm2.debugMode) {\r\n        // stop the SWF from making debug output calls to JS\r\n        flash._disableDebug();\r\n      }\r\n\r\n      sm2.enabled = true;\r\n      debugTS('jstoflash', true);\r\n\r\n      if (!sm2.html5Only) {\r\n        // prevent browser from showing cached page state (or rather, restoring \"suspended\" page state) via back button, because flash may be dead\r\n        // http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/\r\n        event.add(window, 'unload', doNothing);\r\n      }\r\n\r\n    } catch(e) {\r\n\r\n      sm2._wD('js/flash exception: ' + e.toString());\r\n\r\n      debugTS('jstoflash', false);\r\n\r\n      catchError({\r\n        type: 'JS_TO_FLASH_EXCEPTION',\r\n        fatal: true\r\n      });\r\n\r\n      // don't disable, for reboot()\r\n      failSafely(true);\r\n\r\n      initComplete();\r\n\r\n      return false;\r\n\r\n    }\r\n\r\n    initComplete();\r\n\r\n    // disconnect events\r\n    cleanup();\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  domContentLoaded = function() {\r\n\r\n    if (didDCLoaded) return false;\r\n\r\n    didDCLoaded = true;\r\n\r\n    // assign top-level soundManager properties eg. soundManager.url\r\n    setProperties();\r\n\r\n    initDebug();\r\n\r\n    if (!hasFlash && sm2.hasHTML5) {\r\n\r\n      sm2._wD('SoundManager 2: No Flash detected' + (!sm2.useHTML5Audio ? ', enabling HTML5.' : '. Trying HTML5-only mode.'), 1);\r\n\r\n      sm2.setup({\r\n        useHTML5Audio: true,\r\n        // make sure we aren't preferring flash, either\r\n        // TODO: preferFlash should not matter if flash is not installed. Currently, stuff breaks without the below tweak.\r\n        preferFlash: false\r\n      });\r\n\r\n    }\r\n\r\n    testHTML5();\r\n\r\n    if (!hasFlash && needsFlash) {\r\n\r\n      messages.push(strings.needFlash);\r\n\r\n      // TODO: Fatal here vs. timeout approach, etc.\r\n      // hack: fail sooner.\r\n      sm2.setup({\r\n        flashLoadTimeout: 1\r\n      });\r\n\r\n    }\r\n\r\n    if (doc.removeEventListener) {\r\n      doc.removeEventListener('DOMContentLoaded', domContentLoaded, false);\r\n    }\r\n\r\n    initMovie();\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  domContentLoadedIE = function() {\r\n\r\n    if (doc.readyState === 'complete') {\r\n      domContentLoaded();\r\n      doc.detachEvent('onreadystatechange', domContentLoadedIE);\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  winOnLoad = function() {\r\n\r\n    // catch edge case of initComplete() firing after window.load()\r\n    windowLoaded = true;\r\n\r\n    // catch case where DOMContentLoaded has been sent, but we're still in doc.readyState = 'interactive'\r\n    domContentLoaded();\r\n\r\n    event.remove(window, 'load', winOnLoad);\r\n\r\n  };\r\n\r\n  // sniff up-front\r\n  detectFlash();\r\n\r\n  // focus and window load, init (primarily flash-driven)\r\n  event.add(window, 'focus', handleFocus);\r\n  event.add(window, 'load', delayWaitForEI);\r\n  event.add(window, 'load', winOnLoad);\r\n\r\n  if (doc.addEventListener) {\r\n\r\n    doc.addEventListener('DOMContentLoaded', domContentLoaded, false);\r\n\r\n  } else if (doc.attachEvent) {\r\n\r\n    doc.attachEvent('onreadystatechange', domContentLoadedIE);\r\n\r\n  } else {\r\n\r\n    // no add/attachevent support - safe to assume no JS -> Flash either\r\n    debugTS('onload', false);\r\n    catchError({\r\n      type: 'NO_DOM2_EVENTS',\r\n      fatal: true\r\n    });\r\n\r\n  }\r\n\r\n} // SoundManager()\r\n\r\n// SM2_DEFER details: http://www.schillmania.com/projects/soundmanager2/doc/getstarted/#lazy-loading\r\n\r\nif (window.SM2_DEFER === _undefined || !SM2_DEFER) {\r\n  soundManager = new SoundManager();\r\n}\r\n\r\n/**\r\n * SoundManager public interfaces\r\n * ------------------------------\r\n */\r\n\r\nif ( true && module && typeof module.exports === 'object') {\r\n\r\n  /**\r\n   * commonJS module\r\n   */\r\n\r\n  module.exports.SoundManager = SoundManager;\r\n  module.exports.soundManager = soundManager;\r\n\r\n} else if (true) {\r\n\r\n  /**\r\n   * AMD - requireJS\r\n   * basic usage:\r\n   * require([\"/path/to/soundmanager2.js\"], function(SoundManager) {\r\n   *   SoundManager.getInstance().setup({\r\n   *     url: '/swf/',\r\n   *     onready: function() { ... }\r\n   *   })\r\n   * });\r\n   *\r\n   * SM2_DEFER usage:\r\n   * window.SM2_DEFER = true;\r\n   * require([\"/path/to/soundmanager2.js\"], function(SoundManager) {\r\n   *   SoundManager.getInstance(function() {\r\n   *     var soundManager = new SoundManager.constructor();\r\n   *     soundManager.setup({\r\n   *       url: '/swf/',\r\n   *       ...\r\n   *     });\r\n   *     ...\r\n   *     soundManager.beginDelayedInit();\r\n   *     return soundManager;\r\n   *   })\r\n   * });\r\n   */\r\n\r\n  !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\r\n    /**\r\n     * Retrieve the global instance of SoundManager.\r\n     * If a global instance does not exist it can be created using a callback.\r\n     *\r\n     * @param {Function} smBuilder Optional: Callback used to create a new SoundManager instance\r\n     * @return {SoundManager} The global SoundManager instance\r\n     */\r\n    function getInstance(smBuilder) {\r\n      if (!window.soundManager && smBuilder instanceof Function) {\r\n        var instance = smBuilder(SoundManager);\r\n        if (instance instanceof SoundManager) {\r\n          window.soundManager = instance;\r\n        }\r\n      }\r\n      return window.soundManager;\r\n    }\r\n    return {\r\n      constructor: SoundManager,\r\n      getInstance: getInstance\r\n    };\r\n  }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\r\n}\r\n\r\n// standard browser case\r\n\r\n// constructor\r\nwindow.SoundManager = SoundManager;\r\n\r\n/**\r\n * note: SM2 requires a window global due to Flash, which makes calls to window.soundManager.\r\n * Flash may not always be needed, but this is not known until async init and SM2 may even \"reboot\" into Flash mode.\r\n */\r\n\r\n// public API, flash callbacks etc.\r\nwindow.soundManager = soundManager;\r\n\r\n}(window));\r\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/soundmanager2/script/soundmanager2.js?");

/***/ }),

/***/ "./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js":
/*!****************************************************************************!*\
  !*** ./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js ***!
  \****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar isProduction = \"development\" === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n    if (condition) {\n        return;\n    }\n    if (isProduction) {\n        throw new Error(prefix);\n    }\n    throw new Error(prefix + \": \" + (message || ''));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (invariant);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js":
/*!************************************************************************!*\
  !*** ./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js ***!
  \************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar isProduction = \"development\" === 'production';\nfunction warning(condition, message) {\n  if (!isProduction) {\n    if (condition) {\n      return;\n    }\n\n    var text = \"Warning: \" + message;\n\n    if (typeof console !== 'undefined') {\n      console.warn(text);\n    }\n\n    try {\n      throw Error(text);\n    } catch (x) {}\n  }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (warning);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js?");

/***/ }),

/***/ "./jaas-client/node_modules/to-array/index.js":
/*!****************************************************!*\
  !*** ./jaas-client/node_modules/to-array/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/to-array/index.js?");

/***/ }),

/***/ "./jaas-client/node_modules/value-equal/esm/value-equal.js":
/*!*****************************************************************!*\
  !*** ./jaas-client/node_modules/value-equal/esm/value-equal.js ***!
  \*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction valueOf(obj) {\n  return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n  // Test for strict equality first.\n  if (a === b) return true;\n\n  // Otherwise, if either of them == null they are not equal.\n  if (a == null || b == null) return false;\n\n  if (Array.isArray(a)) {\n    return (\n      Array.isArray(b) &&\n      a.length === b.length &&\n      a.every(function(item, index) {\n        return valueEqual(item, b[index]);\n      })\n    );\n  }\n\n  if (typeof a === 'object' || typeof b === 'object') {\n    var aValue = valueOf(a);\n    var bValue = valueOf(b);\n\n    if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n    return Object.keys(Object.assign({}, a, b)).every(function(key) {\n      return valueEqual(a[key], b[key]);\n    });\n  }\n\n  return false;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (valueEqual);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/value-equal/esm/value-equal.js?");

/***/ }),

/***/ "./jaas-client/node_modules/yeast/index.js":
/*!*************************************************!*\
  !*** ./jaas-client/node_modules/yeast/index.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n  , length = 64\n  , map = {}\n  , seed = 0\n  , i = 0\n  , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n  var encoded = '';\n\n  do {\n    encoded = alphabet[num % length] + encoded;\n    num = Math.floor(num / length);\n  } while (num > 0);\n\n  return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n  var decoded = 0;\n\n  for (i = 0; i < str.length; i++) {\n    decoded = decoded * length + map[str.charAt(i)];\n  }\n\n  return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n  var now = encode(+new Date());\n\n  if (now !== prev) return seed = 0, prev = now;\n  return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/yeast/index.js?");

/***/ }),

/***/ "./jaas-client/src/App.css":
/*!*********************************!*\
  !*** ./jaas-client/src/App.css ***!
  \*********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!./App.css */ \"./node_modules/css-loader/dist/cjs.js!./jaas-client/src/App.css\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./jaas-client/src/App.css?");

/***/ }),

/***/ "./jaas-client/src/App.js":
/*!********************************!*\
  !*** ./jaas-client/src/App.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _App_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App.css */ \"./jaas-client/src/App.css\");\n/* harmony import */ var _App_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_App_css__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var _pages_index_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pages/index.jsx */ \"./jaas-client/src/pages/index.jsx\");\n/* harmony import */ var _pages_jaas_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pages/jaas.jsx */ \"./jaas-client/src/pages/jaas.jsx\");\n/* harmony import */ var _pages_404_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pages/404.jsx */ \"./jaas-client/src/pages/404.jsx\");\n/*\n  Company: Savoir-faire Linux\n  Author: Larbi Gharib <larbi.gharib@savoirfairelinux.com>\n  UI Project inspired from https://scrimba.com/p/pbNpTv/cbZBmfV\n  License: AGPL-3\n*/\n //import logo from './logo.svg';\n\n\n\n\n\n\n\nclass App extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"BrowserRouter\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Switch\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n      exact: true,\n      path: \"/\",\n      component: _pages_index_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n      to: \"/Jaas\",\n      component: _pages_jaas_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n      exact: true,\n      path: \"/404\",\n      component: _pages_404_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Redirect\"], {\n      to: \"/404\"\n    })));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (App);\n\n//# sourceURL=webpack:///./jaas-client/src/App.js?");

/***/ }),

/***/ "./jaas-client/src/components/ContactList.js":
/*!***************************************************!*\
  !*** ./jaas-client/src/components/ContactList.js ***!
  \***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nclass ContactList extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"rooms-list\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h3\", null, \"Liste de contacts\")));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ContactList);\n\n//# sourceURL=webpack:///./jaas-client/src/components/ContactList.js?");

/***/ }),

/***/ "./jaas-client/src/components/Header.js":
/*!**********************************************!*\
  !*** ./jaas-client/src/components/Header.js ***!
  \**********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Header; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/core/Button */ \"./jaas-client/node_modules/@material-ui/core/esm/Button/index.js\");\n/* harmony import */ var _material_ui_core_Menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/core/Menu */ \"./jaas-client/node_modules/@material-ui/core/esm/Menu/index.js\");\n/* harmony import */ var _material_ui_core_MenuItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material-ui/core/MenuItem */ \"./jaas-client/node_modules/@material-ui/core/esm/MenuItem/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ \"./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js\");\n\n\n\n\n\nfunction Header() {\n  const history = Object(react_router_dom__WEBPACK_IMPORTED_MODULE_4__[\"useHistory\"])();\n  const [anchorEl, setAnchorEl] = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(null);\n\n  const handleClick = event => {\n    setAnchorEl(event.currentTarget);\n  };\n\n  const handleClose = () => {\n    setAnchorEl(null);\n  };\n\n  const disconnect = () => {\n    let path = `/`;\n    history.push(path);\n  };\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n    \"aria-controls\": \"simple-menu\",\n    \"aria-haspopup\": \"true\",\n    onClick: handleClick\n  }, \"Menu\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Menu__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n    id: \"simple-menu\",\n    anchorEl: anchorEl,\n    keepMounted: true,\n    open: Boolean(anchorEl),\n    onClose: handleClose\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_MenuItem__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n    onClick: handleClose\n  }, \"Profile\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_MenuItem__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n    onClick: handleClose\n  }, \"Mon compte\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_MenuItem__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n    onClick: disconnect\n  }, \"D\\xE9connexion\")));\n}\n\n//# sourceURL=webpack:///./jaas-client/src/components/Header.js?");

/***/ }),

/***/ "./jaas-client/src/components/Message.js":
/*!***********************************************!*\
  !*** ./jaas-client/src/components/Message.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction Message(props) {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n    className: \"message\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n    className: \"message-username\"\n  }, props.username), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n    className: \"message-text\"\n  }, props.text));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Message);\n\n//# sourceURL=webpack:///./jaas-client/src/components/Message.js?");

/***/ }),

/***/ "./jaas-client/src/components/MessageList.js":
/*!***************************************************!*\
  !*** ./jaas-client/src/components/MessageList.js ***!
  \***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Message */ \"./jaas-client/src/components/Message.js\");\n\n\n\nclass MessageList extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"message-list\"\n    }, this.props.messages.map((message, index) => {\n      /*DUMMY_DATA.map((message, index) => {*/\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Message__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n        key: index,\n        username: message.senderId,\n        text: message.text\n      });\n    }));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (MessageList);\n\n//# sourceURL=webpack:///./jaas-client/src/components/MessageList.js?");

/***/ }),

/***/ "./jaas-client/src/components/NewContactForm.js":
/*!******************************************************!*\
  !*** ./jaas-client/src/components/NewContactForm.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nclass NewContactForm extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"new-room-form\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", {\n      type: \"text\",\n      placeholder: \"Ajouter un contact\",\n      required: true\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n      id: \"create-room-btn\",\n      type: \"submit\"\n    }, \"+\")));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (NewContactForm);\n\n//# sourceURL=webpack:///./jaas-client/src/components/NewContactForm.js?");

/***/ }),

/***/ "./jaas-client/src/components/SendMessageForm.js":
/*!*******************************************************!*\
  !*** ./jaas-client/src/components/SendMessageForm.js ***!
  \*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_input_emoji__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-input-emoji */ \"./jaas-client/node_modules/react-input-emoji/dist/index.es.js\");\n\n\n\nclass SendMessageForm extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  constructor() {\n    super();\n    this.state = {\n      message: ''\n    };\n    this.handleChange = this.handleChange.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  handleChange(e) {\n    this.setState({\n      message: e\n    });\n  }\n\n  handleSubmit(e) {\n    //e.preventDefault()\n    this.props.sendMessage(this.state.message); //this.props.sendMessage(this.state.message)\n\n    this.setState({\n      message: ''\n    });\n  }\n\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      //onSubmit={this.handleSubmit}\n      className: \"send-message-form\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_input_emoji__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n      disabled: this.props.disabled,\n      onChange: this.handleChange,\n      value: this.state.message,\n      cleanOnEnter: true,\n      onEnter: this.handleSubmit,\n      placeholder: \"\\xC9cris ton message et cliques sur Entrer\",\n      height: \"35\"\n    }));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SendMessageForm);\n\n//# sourceURL=webpack:///./jaas-client/src/components/SendMessageForm.js?");

/***/ }),

/***/ "./jaas-client/src/index.css":
/*!***********************************!*\
  !*** ./jaas-client/src/index.css ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!./index.css */ \"./node_modules/css-loader/dist/cjs.js!./jaas-client/src/index.css\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./jaas-client/src/index.css?");

/***/ }),

/***/ "./jaas-client/src/index.js":
/*!**********************************!*\
  !*** ./jaas-client/src/index.js ***!
  \**********************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.css */ \"./jaas-client/src/index.css\");\n/* harmony import */ var _index_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_index_css__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./App */ \"./jaas-client/src/App.js\");\n/* harmony import */ var _serviceWorker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./serviceWorker */ \"./jaas-client/src/serviceWorker.js\");\n\n\n\n\n\nreact_dom__WEBPACK_IMPORTED_MODULE_1___default.a.render( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.StrictMode, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_App__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null)), document.getElementById('root')); // If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\n\n_serviceWorker__WEBPACK_IMPORTED_MODULE_4__[\"unregister\"]();\n\n//# sourceURL=webpack:///./jaas-client/src/index.js?");

/***/ }),

/***/ "./jaas-client/src/pages/404.jsx":
/*!***************************************!*\
  !*** ./jaas-client/src/pages/404.jsx ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nconst NotFoundPage = () => {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h3\", null, \"404 Page not found\"));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (NotFoundPage);\n\n//# sourceURL=webpack:///./jaas-client/src/pages/404.jsx?");

/***/ }),

/***/ "./jaas-client/src/pages/index.jsx":
/*!*****************************************!*\
  !*** ./jaas-client/src/pages/index.jsx ***!
  \*****************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _material_ui_core_Avatar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/core/Avatar */ \"./jaas-client/node_modules/@material-ui/core/esm/Avatar/index.js\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/core/Button */ \"./jaas-client/node_modules/@material-ui/core/esm/Button/index.js\");\n/* harmony import */ var _material_ui_core_CssBaseline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material-ui/core/CssBaseline */ \"./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/index.js\");\n/* harmony import */ var _material_ui_core_TextField__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/core/TextField */ \"./jaas-client/node_modules/@material-ui/core/esm/TextField/index.js\");\n/* harmony import */ var _material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/FormControlLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/index.js\");\n/* harmony import */ var _material_ui_core_Checkbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/Checkbox */ \"./jaas-client/node_modules/@material-ui/core/esm/Checkbox/index.js\");\n/* harmony import */ var _material_ui_core_Link__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/core/Link */ \"./jaas-client/node_modules/@material-ui/core/esm/Link/index.js\");\n/* harmony import */ var _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Grid */ \"./jaas-client/node_modules/@material-ui/core/esm/Grid/index.js\");\n/* harmony import */ var _material_ui_core_Box__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/Box */ \"./jaas-client/node_modules/@material-ui/core/esm/Box/index.js\");\n/* harmony import */ var _material_ui_icons_LockOutlined__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/icons/LockOutlined */ \"./jaas-client/node_modules/@material-ui/icons/LockOutlined.js\");\n/* harmony import */ var _material_ui_icons_LockOutlined__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_material_ui_icons_LockOutlined__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js\");\n/* harmony import */ var _material_ui_core_Container__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/Container */ \"./jaas-client/node_modules/@material-ui/core/esm/Container/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-router-dom */ \"./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var _material_ui_core_CircularProgress__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @material-ui/core/CircularProgress */ \"./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/index.js\");\n/* harmony import */ var _material_ui_core_DialogTitle__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @material-ui/core/DialogTitle */ \"./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/index.js\");\n/* harmony import */ var _material_ui_core_Dialog__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @material-ui/core/Dialog */ \"./jaas-client/node_modules/@material-ui/core/esm/Dialog/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n //import { makeStyles } from '@material-ui/core/styles';\n\n\n\n\n\n\n\nfunction Copyright() {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n    variant: \"body2\",\n    color: \"textSecondary\",\n    align: \"center\"\n  }, 'Copyright © 2016-', new Date().getFullYear(), ' Savoir-faire Linux Inc. GNU ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Link__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n    color: \"inherit\",\n    href: \"https://jami.net/\"\n  }, \"Jami.net\"), ' ', '.');\n}\n/*const useStyles = makeStyles((theme) => ({\n    paper: {\n        marginTop: theme.spacing(8),\n        display: 'flex',\n        flexDirection: 'column',\n        alignItems: 'center',\n    },\n    avatar: {\n        margin: theme.spacing(1),\n        backgroundColor: theme.palette.secondary.main,\n    },\n    form: {\n        width: '100%', // Fix IE 11 issue.\n        marginTop: theme.spacing(1),\n    },\n    submit: {\n        margin: theme.spacing(3, 0, 2),\n    },\n}));*/\n\n/*function SignIn() {\n    const classes = useStyles();\n\n\n}*/\n\n/* \n    TODO:\n    Use useState to handle username password and redirect states to render this page to \n    comply with material-ui usage of useStyles\n    Src: https://blog.logrocket.com/a-guide-to-usestate-in-react-ecb9952e406c/\n*/\n\n\nclass SignInPage extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  constructor() {\n    super();\n    this.state = {\n      username: '',\n      password: '',\n      redirect: false,\n      session: null,\n      submitted: false,\n      loading: false,\n      error: false,\n      open: false,\n      errorMessage: ''\n    };\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  handleusername(text) {\n    this.setState({\n      username: text.target.value\n    });\n  }\n\n  handlePassword(text) {\n    this.setState({\n      password: text.target.value\n    });\n  }\n\n  handleSubmit(event) {\n    event.preventDefault();\n    let obj = {};\n    obj.username = this.state.username;\n    obj.password = this.state.password;\n    this.setState({\n      submitted: true,\n      loading: true\n    });\n    fetch('/api/login?username=' + obj.username + '&password=' + obj.password, {\n      header: {\n        \"Content-Type\": \"application/json\"\n      },\n      method: \"POST\",\n      credentials: 'same-origin' //body: JSON.stringify({ obj })\n\n    }).then(res => {\n      if (res.status == '200') {\n        this.setState({\n          redirect: true\n        });\n      } else if (res.status == '401') {\n        this.setState({\n          loading: false,\n          error: true,\n          open: true,\n          errorMessage: \"Wrong credentials! Your are not allowed to connect\"\n        });\n      } //this.setState({ session: res });\n\n    }).catch(e => {\n      this.setState({\n        loading: false,\n        error: true,\n        open: true,\n        errorMessage: e.toString()\n      });\n    });\n  }\n\n  render() {\n    if (this.state.redirect) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_13__[\"Redirect\"], {\n        to: \"/jaas\"\n      });\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Container__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n      component: \"main\",\n      maxWidth: \"xs\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_CssBaseline__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"\"\n      /*{classes.paper}*/\n\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n      component: \"h1\",\n      variant: \"h5\"\n    }, \"Se connecter\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"form\", {\n      className: \"\"\n      /*{classes.form}*/\n      ,\n      onSubmit: this.handleSubmit\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TextField__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      variant: \"outlined\",\n      margin: \"normal\",\n      required: true,\n      fullWidth: true,\n      id: \"username\",\n      label: \"LDAP Savoir-faire Linux\",\n      name: \"username\",\n      autoComplete: \"email\",\n      autoFocus: true,\n      onChange: text => {\n        this.handleusername(text);\n      }\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TextField__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      variant: \"outlined\",\n      margin: \"normal\",\n      required: true,\n      fullWidth: true,\n      name: \"password\",\n      label: \"Mot de passe\",\n      type: \"password\",\n      id: \"password\",\n      autoComplete: \"current-password\",\n      onChange: text => {\n        this.handlePassword(text);\n      }\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Checkbox__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n        value: \"remember\",\n        color: \"primary\"\n      }),\n      label: \"Se rapeller de moi\"\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      type: \"submit\",\n      fullWidth: true,\n      variant: \"contained\",\n      color: \"primary\",\n      className: \"\"\n      /*{classes.submit}*/\n      // onClick={() => { this.login() }}\n\n    }, \"Se connecter\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n      container: true\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n      item: true,\n      xs: true\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Link__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n      href: \"#\",\n      variant: \"body2\"\n    }, \"Mot de passe oubli\\xE9 ?\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n      item: true\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Link__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n      href: \"#\",\n      variant: \"body2\"\n    }, \"Tu n'as pas de compte? Inscris-toi\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Box__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n      mt: 8\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Copyright, null)), this.state.submitted && this.state.loading && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_CircularProgress__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n      style: {\n        position: 'relative'\n      },\n      size: 40,\n      top: 10,\n      style: {\n        marginLeft: '50%'\n      }\n    }), this.state.error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Dialog__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n      \"aria-labelledby\": \"simple-dialog-title\",\n      open: this.state.open\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_DialogTitle__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n      id: \"simple-dialog-title\"\n    }, this.state.errorMessage)));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SignInPage);\n\n//# sourceURL=webpack:///./jaas-client/src/pages/index.jsx?");

/***/ }),

/***/ "./jaas-client/src/pages/jaas.jsx":
/*!****************************************!*\
  !*** ./jaas-client/src/pages/jaas.jsx ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Header */ \"./jaas-client/src/components/Header.js\");\n/* harmony import */ var _components_ContactList__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/ContactList */ \"./jaas-client/src/components/ContactList.js\");\n/* harmony import */ var _components_MessageList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/MessageList */ \"./jaas-client/src/components/MessageList.js\");\n/* harmony import */ var _components_SendMessageForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/SendMessageForm */ \"./jaas-client/src/components/SendMessageForm.js\");\n/* harmony import */ var _components_NewContactForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/NewContactForm */ \"./jaas-client/src/components/NewContactForm.js\");\n/* harmony import */ var react_sound__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-sound */ \"./jaas-client/node_modules/react-sound/lib/index.js\");\n/* harmony import */ var react_sound__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_sound__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var socket_io_client__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! socket.io-client */ \"./jaas-client/node_modules/socket.io-client/lib/index.js\");\n/* harmony import */ var socket_io_client__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(socket_io_client__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\nvar socket = socket_io_client__WEBPACK_IMPORTED_MODULE_7___default.a.connect('http://localhost:3000');\n\nclass Jaas extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  constructor() {\n    super();\n    this.state = {\n      messages: [],\n      sound: false\n    };\n    socket.on('connect', () => {\n      console.log(\"Success !\");\n    }); //import io from 'socket.io-client';\n    //this.socket = socketIOClient(ENDPOINT);\n    //this.socket.on(\"FromAPI\", data => {\n    //  this.setState({\n    //    messages: [...this.state.messages, data]\n    //  })\n    //});\n\n    this.sendMessage = this.sendMessage.bind(this);\n  }\n\n  componentDidMount() {\n    socket.on('receivedMessage', data => {\n      var message = {\n        senderId: '65f6674b26e5af6ed0b4e92a13b80ff4bbfdf1e8',\n        text: data\n      };\n      this.setState({\n        messages: [...this.state.messages, message],\n        sound: true\n      });\n    });\n  }\n\n  sendMessage(text) {\n    var data = {\n      senderId: 'Me',\n      destinationId: '65f6674b26e5af6ed0b4e92a13b80ff4bbfdf1e8',\n      text: text\n    };\n    socket.emit(\"SendMessage\", data);\n    console.log(data.text);\n    this.setState({\n      messages: [...this.state.messages, data],\n      sound: false\n    });\n  }\n\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"app\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Header__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_ContactList__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_MessageList__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      messages: this.state.messages\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_SendMessageForm__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      sendMessage: this.sendMessage\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_NewContactForm__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null), this.state.sound && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_sound__WEBPACK_IMPORTED_MODULE_6___default.a, {\n      url: \"stairs.mp3\"\n      /*https://notificationsounds.com/message-tones/stairs-567*/\n      ,\n      playStatus: react_sound__WEBPACK_IMPORTED_MODULE_6___default.a.status.PLAYING,\n      playFromPosition: 0\n      /* in milliseconds */\n      ,\n      onLoading: this.handleSongLoading,\n      onPlaying: this.handleSongPlaying,\n      onFinishedPlaying: this.handleSongFinishedPlaying\n    }));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Jaas);\n\n//# sourceURL=webpack:///./jaas-client/src/pages/jaas.jsx?");

/***/ }),

/***/ "./jaas-client/src/serviceWorker.js":
/*!******************************************!*\
  !*** ./jaas-client/src/serviceWorker.js ***!
  \******************************************/
/*! exports provided: register, unregister */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"register\", function() { return register; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unregister\", function() { return unregister; });\n// This optional code is used to register a service worker.\n// register() is not called by default.\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\nconst isLocalhost = Boolean(window.location.hostname === 'localhost' || // [::1] is the IPv6 localhost address.\nwindow.location.hostname === '[::1]' || // 127.0.0.0/8 are considered localhost for IPv4.\nwindow.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));\nfunction register(config) {\n  if (false) {}\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker.register(swUrl).then(registration => {\n    registration.onupdatefound = () => {\n      const installingWorker = registration.installing;\n\n      if (installingWorker == null) {\n        return;\n      }\n\n      installingWorker.onstatechange = () => {\n        if (installingWorker.state === 'installed') {\n          if (navigator.serviceWorker.controller) {\n            // At this point, the updated precached content has been fetched,\n            // but the previous service worker will still serve the older\n            // content until all client tabs are closed.\n            console.log('New content is available and will be used when all ' + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'); // Execute callback\n\n            if (config && config.onUpdate) {\n              config.onUpdate(registration);\n            }\n          } else {\n            // At this point, everything has been precached.\n            // It's the perfect time to display a\n            // \"Content is cached for offline use.\" message.\n            console.log('Content is cached for offline use.'); // Execute callback\n\n            if (config && config.onSuccess) {\n              config.onSuccess(registration);\n            }\n          }\n        }\n      };\n    };\n  }).catch(error => {\n    console.error('Error during service worker registration:', error);\n  });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: {\n      'Service-Worker': 'script'\n    }\n  }).then(response => {\n    // Ensure service worker exists, and that we really are getting a JS file.\n    const contentType = response.headers.get('content-type');\n\n    if (response.status === 404 || contentType != null && contentType.indexOf('javascript') === -1) {\n      // No service worker found. Probably a different app. Reload the page.\n      navigator.serviceWorker.ready.then(registration => {\n        registration.unregister().then(() => {\n          window.location.reload();\n        });\n      });\n    } else {\n      // Service worker found. Proceed as normal.\n      registerValidSW(swUrl, config);\n    }\n  }).catch(() => {\n    console.log('No internet connection found. App is running in offline mode.');\n  });\n}\n\nfunction unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    }).catch(error => {\n      console.error(error.message);\n    });\n  }\n}\n\n//# sourceURL=webpack:///./jaas-client/src/serviceWorker.js?");

/***/ }),

/***/ "./node_modules/base64-js/index.js":
/*!*****************************************!*\
  !*** ./node_modules/base64-js/index.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n\n\n//# sourceURL=webpack:///./node_modules/base64-js/index.js?");

/***/ }),

/***/ "./node_modules/buffer/index.js":
/*!**************************************!*\
  !*** ./node_modules/buffer/index.js ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/* WEBPACK VAR INJECTION */(function(global) {/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n\n\nvar base64 = __webpack_require__(/*! base64-js */ \"./node_modules/base64-js/index.js\")\nvar ieee754 = __webpack_require__(/*! ieee754 */ \"./node_modules/ieee754/index.js\")\nvar isArray = __webpack_require__(/*! isarray */ \"./node_modules/isarray/index.js\")\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./node_modules/buffer/index.js?");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js!./jaas-client/src/App.css":
/*!***********************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./jaas-client/src/App.css ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \".App {\\n  text-align: center;\\n}\\n\\n.App-logo {\\n  height: 40vmin;\\n  pointer-events: none;\\n}\\n\\n@media (prefers-reduced-motion: no-preference) {\\n  .App-logo {\\n    animation: App-logo-spin infinite 20s linear;\\n  }\\n}\\n\\n.App-header {\\n  background-color: #282c34;\\n  min-height: 100vh;\\n  display: flex;\\n  flex-direction: column;\\n  align-items: center;\\n  justify-content: center;\\n  font-size: calc(10px + 2vmin);\\n  color: white;\\n}\\n\\n.App-link {\\n  color: #61dafb;\\n}\\n\\n@keyframes App-logo-spin {\\n  from {\\n    transform: rotate(0deg);\\n  }\\n  to {\\n    transform: rotate(360deg);\\n  }\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./jaas-client/src/App.css?./node_modules/css-loader/dist/cjs.js");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js!./jaas-client/src/index.css":
/*!*************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./jaas-client/src/index.css ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \":root {\\n  --main-color: #1F1F1F;\\n  --secondary-color: white;\\n  --third-color: #2F2F2F;\\n  --main-text-color: #3e5869;\\n  --secondary-text-color: #b0c7d6;\\n  --send-message-form: #F5F5F5;\\n}\\n\\nhtml, body {\\n  height: 100%;\\n  margin: 0;\\n  padding: 0;\\n  font-family: 'Open Sans', sans-serif;\\n  font-weight: 200;\\n  color: #3e5869; \\n}\\n\\n#root {\\n  height: 100%;\\n}\\n\\n.app {\\n  display: grid;\\n  height: 100%;\\n  grid-template-columns: repeat(6, 1fr);\\n  grid-template-rows: 40px 1fr 1fr 1fr 1fr 1fr 60px;\\n  grid-template-areas: \\n      \\\"h h h h h h\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"n s s s s s\\\";\\n}\\n\\n.login {\\n  background-color: var(--main-color);\\n}\\n\\n.header-section {\\n  grid-area: h;\\n}\\n\\n.new-room-form {\\n  grid-area: n;\\n}\\n\\n.rooms-list {\\n  grid-area: r;\\n}\\n\\n.message-list {\\n  grid-area: m;\\n}\\n\\n.send-message-form {\\n  grid-area: s;\\n}\\n\\n/* REST OF CSS */\\n\\n.header-section {\\n  background-color: var(--main-color);\\n\\n}\\n\\n.simple-menu {\\n  color: var(--send-message-form);\\n}\\n\\n.rooms-list {\\n  box-sizing: border-box;\\n  padding: 10px;\\n  background-color: var(--main-color);\\n  overflow: scroll;\\n  height: 100%;\\n}\\n\\n.rooms-list ul {\\n  list-style-type: none;    \\n  padding: 0;\\n  overflow: scoll;\\n}\\n\\n.rooms-list li {\\n  margin: 10px 0;\\n}\\n\\n.rooms-list h3 {\\n  margin: 5px 0;\\n  color: var(--secondary-color);\\n}\\n\\n.rooms-list .room a {\\n  color: var(--secondary-text-color);\\n  font-weight: 600;\\n  text-decoration: none;\\n  \\n}\\n\\n.rooms-list .room.active a {\\n  color: var(--secondary-color);\\n}\\n\\n.new-room-form {\\n  padding: 0 5px;\\n  background: var(--secondary-color);\\n  color: var(--main-text-color);\\n}\\n\\n.new-room-form form {\\n  height: 100%;\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n}\\n\\n.new-room-form input {\\n  width: 135px;\\n  background: var(--secondary-color);\\n}\\n\\n.new-room-form button {\\n  background: var(--secondary-color);\\n  color: var(--main-text-color);\\n  border: 0;\\n} \\n\\n.new-room-form input::placeholder {\\n  color: var(--main-text-color);\\n  font-weight: 200;\\n}\\n\\n.new-room-form input:focus {\\n  outline-width: 0;\\n}\\n\\n.new-room-form input {\\n  border: 0;\\n}\\n\\n.new-room-form button {\\n  border: 0;\\n}\\n\\n.message {\\n  margin: 15px 0;\\n}\\n\\n.message .message-username {\\n  font-size: 11px;\\n  font-weight: bold;\\n  color: var(--secondary-color);\\n  opacity: 0.9;\\n  margin-bottom: 6px;\\n}\\n.message .message-text {\\n  background: var(--third-color);\\n  color: var(--secondary-color);\\n  display: inline;\\n  padding: 4px 8px;\\n  border-radius: 8px;\\n}\\n\\n.message-list {\\n  box-sizing: border-box;\\n  padding-left: 6px;\\n  width: 100%;\\n  height: 100%;\\n  overflow: scroll;\\n  background: var(--third-color);\\n}\\n\\n.message-list .join-room {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  height: 100%;\\n  font-size: 34px;\\n  font-weight: 300;\\n}\\n\\n.send-message-form {\\n  background: var(--send-message-form);\\n  display: flex;\\n}\\n\\n.send-message-form input {\\n  width: 100%;\\n  padding: 15px 10px;\\n  margin: 0;\\n  border-style: none;\\n  background: var(--send-message-form);\\n  font-weight: 200;\\n\\n}\\n\\n.send-message-form input:focus {\\n  outline-width: 0;\\n}\\n\\n.send-message-form input::placeholder {\\n  color: var(--main-text-color);\\n}\\n\\n.help-text {\\n  position: absolute;\\n  top: 10px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./jaas-client/src/index.css?./node_modules/css-loader/dist/cjs.js");

/***/ }),

/***/ "./node_modules/css-loader/dist/runtime/api.js":
/*!*****************************************************!*\
  !*** ./node_modules/css-loader/dist/runtime/api.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item, useSourceMap);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join('');\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery, dedupe) {\n    if (typeof modules === 'string') {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, '']];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var i = 0; i < this.length; i++) {\n        // eslint-disable-next-line prefer-destructuring\n        var id = this[i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = [].concat(modules[_i]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      if (mediaQuery) {\n        if (!item[2]) {\n          item[2] = mediaQuery;\n        } else {\n          item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n  var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n  var cssMapping = item[3];\n\n  if (!cssMapping) {\n    return content;\n  }\n\n  if (useSourceMap && typeof btoa === 'function') {\n    var sourceMapping = toComment(cssMapping);\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n  }\n\n  return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n  // eslint-disable-next-line no-undef\n  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n  var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n  return \"/*# \".concat(data, \" */\");\n}\n\n//# sourceURL=webpack:///./node_modules/css-loader/dist/runtime/api.js?");

/***/ }),

/***/ "./node_modules/ieee754/index.js":
/*!***************************************!*\
  !*** ./node_modules/ieee754/index.js ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n\n//# sourceURL=webpack:///./node_modules/ieee754/index.js?");

/***/ }),

/***/ "./node_modules/isarray/index.js":
/*!***************************************!*\
  !*** ./node_modules/isarray/index.js ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./node_modules/isarray/index.js?");

/***/ }),

/***/ "./node_modules/process/browser.js":
/*!*****************************************!*\
  !*** ./node_modules/process/browser.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack:///./node_modules/process/browser.js?");

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
/*!****************************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar isOldIE = function isOldIE() {\n  var memo;\n  return function memorize() {\n    if (typeof memo === 'undefined') {\n      // Test for IE <= 9 as proposed by Browserhacks\n      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n      // Tests for existence of standard globals is to allow style-loader\n      // to operate correctly into non-standard environments\n      // @see https://github.com/webpack-contrib/style-loader/issues/177\n      memo = Boolean(window && document && document.all && !window.atob);\n    }\n\n    return memo;\n  };\n}();\n\nvar getTarget = function getTarget() {\n  var memo = {};\n  return function memorize(target) {\n    if (typeof memo[target] === 'undefined') {\n      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n        try {\n          // This will throw an exception if access to iframe is blocked\n          // due to cross-origin restrictions\n          styleTarget = styleTarget.contentDocument.head;\n        } catch (e) {\n          // istanbul ignore next\n          styleTarget = null;\n        }\n      }\n\n      memo[target] = styleTarget;\n    }\n\n    return memo[target];\n  };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n\n  for (var i = 0; i < stylesInDom.length; i++) {\n    if (stylesInDom[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n\n  return result;\n}\n\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var index = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3]\n    };\n\n    if (index !== -1) {\n      stylesInDom[index].references++;\n      stylesInDom[index].updater(obj);\n    } else {\n      stylesInDom.push({\n        identifier: identifier,\n        updater: addStyle(obj, options),\n        references: 1\n      });\n    }\n\n    identifiers.push(identifier);\n  }\n\n  return identifiers;\n}\n\nfunction insertStyleElement(options) {\n  var style = document.createElement('style');\n  var attributes = options.attributes || {};\n\n  if (typeof attributes.nonce === 'undefined') {\n    var nonce =  true ? __webpack_require__.nc : undefined;\n\n    if (nonce) {\n      attributes.nonce = nonce;\n    }\n  }\n\n  Object.keys(attributes).forEach(function (key) {\n    style.setAttribute(key, attributes[key]);\n  });\n\n  if (typeof options.insert === 'function') {\n    options.insert(style);\n  } else {\n    var target = getTarget(options.insert || 'head');\n\n    if (!target) {\n      throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n    }\n\n    target.appendChild(style);\n  }\n\n  return style;\n}\n\nfunction removeStyleElement(style) {\n  // istanbul ignore if\n  if (style.parentNode === null) {\n    return false;\n  }\n\n  style.parentNode.removeChild(style);\n}\n/* istanbul ignore next  */\n\n\nvar replaceText = function replaceText() {\n  var textStore = [];\n  return function replace(index, replacement) {\n    textStore[index] = replacement;\n    return textStore.filter(Boolean).join('\\n');\n  };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n  var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n  /* istanbul ignore if  */\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = replaceText(index, css);\n  } else {\n    var cssNode = document.createTextNode(css);\n    var childNodes = style.childNodes;\n\n    if (childNodes[index]) {\n      style.removeChild(childNodes[index]);\n    }\n\n    if (childNodes.length) {\n      style.insertBefore(cssNode, childNodes[index]);\n    } else {\n      style.appendChild(cssNode);\n    }\n  }\n}\n\nfunction applyToTag(style, options, obj) {\n  var css = obj.css;\n  var media = obj.media;\n  var sourceMap = obj.sourceMap;\n\n  if (media) {\n    style.setAttribute('media', media);\n  } else {\n    style.removeAttribute('media');\n  }\n\n  if (sourceMap && btoa) {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  } // For old IE\n\n  /* istanbul ignore if  */\n\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    while (style.firstChild) {\n      style.removeChild(style.firstChild);\n    }\n\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n  var style;\n  var update;\n  var remove;\n\n  if (options.singleton) {\n    var styleIndex = singletonCounter++;\n    style = singleton || (singleton = insertStyleElement(options));\n    update = applyToSingletonTag.bind(null, style, styleIndex, false);\n    remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n  } else {\n    style = insertStyleElement(options);\n    update = applyToTag.bind(null, style, options);\n\n    remove = function remove() {\n      removeStyleElement(style);\n    };\n  }\n\n  update(obj);\n  return function updateStyle(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n        return;\n      }\n\n      update(obj = newObj);\n    } else {\n      remove();\n    }\n  };\n}\n\nmodule.exports = function (list, options) {\n  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n  // tags it will allow on a page\n\n  if (!options.singleton && typeof options.singleton !== 'boolean') {\n    options.singleton = isOldIE();\n  }\n\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n\n    if (Object.prototype.toString.call(newList) !== '[object Array]') {\n      return;\n    }\n\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDom[index].references--;\n    }\n\n    var newLastIdentifiers = modulesToDom(newList, options);\n\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n\n      var _index = getIndexByIdentifier(_identifier);\n\n      if (stylesInDom[_index].references === 0) {\n        stylesInDom[_index].updater();\n\n        stylesInDom.splice(_index, 1);\n      }\n    }\n\n    lastIdentifiers = newLastIdentifiers;\n  };\n};\n\n//# sourceURL=webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js?");

/***/ }),

/***/ "./node_modules/webpack/buildin/global.js":
/*!***********************************!*\
  !*** (webpack)/buildin/global.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///(webpack)/buildin/global.js?");

/***/ }),

/***/ "./node_modules/webpack/buildin/module.js":
/*!***********************************!*\
  !*** (webpack)/buildin/module.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n//# sourceURL=webpack:///(webpack)/buildin/module.js?");

/***/ }),

/***/ 0:
/*!********************!*\
  !*** ws (ignored) ***!
  \********************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/* (ignored) */\n\n//# sourceURL=webpack:///ws_(ignored)?");

/***/ })

/******/ });