text: /******/ (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 = 0);
  /******/ })
  /************************************************************************/
  /******/ ([
  /* 0 */
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = __webpack_require__(1);
  
  
  /***/ }),
  /* 1 */
  /***/ (function(module, exports, __webpack_require__) {
  
  __webpack_require__(2)
  
  
  /***/ }),
  /* 2 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  const mimicFn = __webpack_require__(3);
  const isPromise = __webpack_require__(4);
  const mapAgeCleaner = __webpack_require__(5);
  
  const cacheStore = new WeakMap();
  
  const defaultCacheKey = (...arguments_) => {
  	if (arguments_.length === 0) {
  		return '__defaultKey';
  	}
  
  	if (arguments_.length === 1) {
  		const [firstArgument] = arguments_;
  		const isObject = typeof firstArgument === 'object' && firstArgument !== null;
  		const isPrimitive = !isObject;
  		if (isPrimitive) {
  			return firstArgument;
  		}
  	}
  
  	return JSON.stringify(arguments_);
  };
  
  const mem = (fn, {
  	cacheKey = defaultCacheKey,
  	cache = new Map(),
  	cachePromiseRejection = true,
  	maxAge
  } = {}) => {
  	if (typeof maxAge === 'number') {
  		mapAgeCleaner(cache);
  	}
  
  	const memoized = function (...arguments_) {
  		const key = cacheKey(...arguments_);
  
  		if (cache.has(key)) {
  			return cache.get(key).data;
  		}
  
  		const cacheItem = fn.apply(this, arguments_);
  
  		cache.set(key, {
  			data: cacheItem,
  			maxAge: maxAge ? Date.now() + maxAge : Infinity
  		});
  
  		if (isPromise(cacheItem) && cachePromiseRejection === false) {
  			cacheItem.catch(() => cache.delete(key));
  		}
  
  		return cacheItem;
  	};
  
  	try {
  		// The below call will throw in some host environments
  		// See https://github.com/sindresorhus/mimic-fn/issues/10
  		mimicFn(memoized, fn);
  	} catch (_) {}
  
  	cacheStore.set(memoized, cache);
  
  	return memoized;
  };
  
  module.exports = mem;
  
  module.exports.clear = fn => {
  	const cache = cacheStore.get(fn);
  
  	if (cache && typeof cache.clear === 'function') {
  		cache.clear();
  	}
  };
  
  
  /***/ }),
  /* 3 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  
  const mimicFn = (to, from) => {
  	for (const prop of Reflect.ownKeys(from)) {
  		Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));
  	}
  
  	return to;
  };
  
  module.exports = mimicFn;
  // TODO: Remove this for the next major release
  module.exports.default = mimicFn;
  
  
  /***/ }),
  /* 4 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  
  const isPromise = input => (
  	input instanceof Promise ||
  	(
  		input !== null &&
  		typeof input === 'object' &&
  		typeof input.then === 'function' &&
  		typeof input.catch === 'function'
  	)
  );
  
  module.exports = isPromise;
  // TODO: Remove this for the next major release
  module.exports.default = isPromise;
  
  
  /***/ }),
  /* 5 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
      return new (P || (P = Promise))(function (resolve, reject) {
          function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
          function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
          function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
          step((generator = generator.apply(thisArg, _arguments || [])).next());
      });
  };
  var __importDefault = (this && this.__importDefault) || function (mod) {
      return (mod && mod.__esModule) ? mod : { "default": mod };
  };
  Object.defineProperty(exports, "__esModule", { value: true });
  const p_defer_1 = __importDefault(__webpack_require__(6));
  function mapAgeCleaner(map, property = 'maxAge') {
      let processingKey;
      let processingTimer;
      let processingDeferred;
      const cleanup = () => __awaiter(this, void 0, void 0, function* () {
          if (processingKey !== undefined) {
              // If we are already processing an item, we can safely exit
              return;
          }
          const setupTimer = (item) => __awaiter(this, void 0, void 0, function* () {
              processingDeferred = p_defer_1.default();
              const delay = item[1][property] - Date.now();
              if (delay <= 0) {
                  // Remove the item immediately if the delay is equal to or below 0
                  map.delete(item[0]);
                  processingDeferred.resolve();
                  return;
              }
              // Keep track of the current processed key
              processingKey = item[0];
              processingTimer = setTimeout(() => {
                  // Remove the item when the timeout fires
                  map.delete(item[0]);
                  if (processingDeferred) {
                      processingDeferred.resolve();
                  }
              }, delay);
              // tslint:disable-next-line:strict-type-predicates
              if (typeof processingTimer.unref === 'function') {
                  // Don't hold up the process from exiting
                  processingTimer.unref();
              }
              return processingDeferred.promise;
          });
          try {
              for (const entry of map) {
                  yield setupTimer(entry);
              }
          }
          catch (_a) {
              // Do nothing if an error occurs, this means the timer was cleaned up and we should stop processing
          }
          processingKey = undefined;
      });
      const reset = () => {
          processingKey = undefined;
          if (processingTimer !== undefined) {
              clearTimeout(processingTimer);
              processingTimer = undefined;
          }
          if (processingDeferred !== undefined) { // tslint:disable-line:early-exit
              processingDeferred.reject(undefined);
              processingDeferred = undefined;
          }
      };
      const originalSet = map.set.bind(map);
      map.set = (key, value) => {
          if (map.has(key)) {
              // If the key already exist, remove it so we can add it back at the end of the map.
              map.delete(key);
          }
          // Call the original `map.set`
          const result = originalSet(key, value);
          // If we are already processing a key and the key added is the current processed key, stop processing it
          if (processingKey && processingKey === key) {
              reset();
          }
          // Always run the cleanup method in case it wasn't started yet
          cleanup(); // tslint:disable-line:no-floating-promises
          return result;
      };
      cleanup(); // tslint:disable-line:no-floating-promises
      return map;
  }
  exports.default = mapAgeCleaner;
  // Add support for CJS
  module.exports = mapAgeCleaner;
  module.exports.default = mapAgeCleaner;
  
  
  /***/ }),
  /* 6 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  module.exports = () => {
  	const ret = {};
  
  	ret.promise = new Promise((resolve, reject) => {
  		ret.resolve = resolve;
  		ret.reject = reject;
  	});
  
  	return ret;
  };
  
  
  /***/ })
  /******/ ]);
  