/******/ (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 = "./webpack/vendors/custom/uppy.js");
/******/ })
/************************************************************************/
/******/ ({

/***/ "./node_modules/@uppy/aws-s3-multipart/lib/MultipartUploader.js":
/*!**********************************************************************!*\
  !*** ./node_modules/@uppy/aws-s3-multipart/lib/MultipartUploader.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar MB = 1024 * 1024;\nvar defaultOptions = {\n  limit: 1,\n  onStart: function onStart() {},\n  onProgress: function onProgress() {},\n  onPartComplete: function onPartComplete() {},\n  onSuccess: function onSuccess() {},\n  onError: function onError(err) {\n    throw err;\n  }\n};\n\nfunction remove(arr, el) {\n  var i = arr.indexOf(el);\n  if (i !== -1) arr.splice(i, 1);\n}\n\nvar MultipartUploader =\n/*#__PURE__*/\nfunction () {\n  function MultipartUploader(file, options) {\n    this.options = _extends({}, defaultOptions, {}, options);\n    this.file = file;\n    this.key = this.options.key || null;\n    this.uploadId = this.options.uploadId || null;\n    this.parts = this.options.parts || []; // Do `this.createdPromise.then(OP)` to execute an operation `OP` _only_ if the\n    // upload was created already. That also ensures that the sequencing is right\n    // (so the `OP` definitely happens if the upload is created).\n    //\n    // This mostly exists to make `_abortUpload` work well: only sending the abort request if\n    // the upload was already created, and if the createMultipartUpload request is still in flight,\n    // aborting it immediately after it finishes.\n\n    this.createdPromise = Promise.reject(); // eslint-disable-line prefer-promise-reject-errors\n\n    this.isPaused = false;\n    this.chunks = null;\n    this.chunkState = null;\n    this.uploading = [];\n\n    this._initChunks();\n\n    this.createdPromise.catch(function () {}); // silence uncaught rejection warning\n  }\n\n  var _proto = MultipartUploader.prototype;\n\n  _proto._initChunks = function _initChunks() {\n    var chunks = [];\n    var chunkSize = Math.max(Math.ceil(this.file.size / 10000), 5 * MB);\n\n    for (var i = 0; i < this.file.size; i += chunkSize) {\n      var end = Math.min(this.file.size, i + chunkSize);\n      chunks.push(this.file.slice(i, end));\n    }\n\n    this.chunks = chunks;\n    this.chunkState = chunks.map(function () {\n      return {\n        uploaded: 0,\n        busy: false,\n        done: false\n      };\n    });\n  };\n\n  _proto._createUpload = function _createUpload() {\n    var _this = this;\n\n    this.createdPromise = Promise.resolve().then(function () {\n      return _this.options.createMultipartUpload();\n    });\n    return this.createdPromise.then(function (result) {\n      var valid = typeof result === 'object' && result && typeof result.uploadId === 'string' && typeof result.key === 'string';\n\n      if (!valid) {\n        throw new TypeError('AwsS3/Multipart: Got incorrect result from `createMultipartUpload()`, expected an object `{ uploadId, key }`.');\n      }\n\n      _this.key = result.key;\n      _this.uploadId = result.uploadId;\n\n      _this.options.onStart(result);\n\n      _this._uploadParts();\n    }).catch(function (err) {\n      _this._onError(err);\n    });\n  };\n\n  _proto._resumeUpload = function _resumeUpload() {\n    var _this2 = this;\n\n    return Promise.resolve().then(function () {\n      return _this2.options.listParts({\n        uploadId: _this2.uploadId,\n        key: _this2.key\n      });\n    }).then(function (parts) {\n      parts.forEach(function (part) {\n        var i = part.PartNumber - 1;\n        _this2.chunkState[i] = {\n          uploaded: part.Size,\n          etag: part.ETag,\n          done: true\n        }; // Only add if we did not yet know about this part.\n\n        if (!_this2.parts.some(function (p) {\n          return p.PartNumber === part.PartNumber;\n        })) {\n          _this2.parts.push({\n            PartNumber: part.PartNumber,\n            ETag: part.ETag\n          });\n        }\n      });\n\n      _this2._uploadParts();\n    }).catch(function (err) {\n      _this2._onError(err);\n    });\n  };\n\n  _proto._uploadParts = function _uploadParts() {\n    var _this3 = this;\n\n    if (this.isPaused) return;\n    var need = this.options.limit - this.uploading.length;\n    if (need === 0) return; // All parts are uploaded.\n\n    if (this.chunkState.every(function (state) {\n      return state.done;\n    })) {\n      this._completeUpload();\n\n      return;\n    }\n\n    var candidates = [];\n\n    for (var i = 0; i < this.chunkState.length; i++) {\n      var state = this.chunkState[i];\n      if (state.done || state.busy) continue;\n      candidates.push(i);\n\n      if (candidates.length >= need) {\n        break;\n      }\n    }\n\n    candidates.forEach(function (index) {\n      _this3._uploadPart(index);\n    });\n  };\n\n  _proto._uploadPart = function _uploadPart(index) {\n    var _this4 = this;\n\n    var body = this.chunks[index];\n    this.chunkState[index].busy = true;\n    return Promise.resolve().then(function () {\n      return _this4.options.prepareUploadPart({\n        key: _this4.key,\n        uploadId: _this4.uploadId,\n        body: body,\n        number: index + 1\n      });\n    }).then(function (result) {\n      var valid = typeof result === 'object' && result && typeof result.url === 'string';\n\n      if (!valid) {\n        throw new TypeError('AwsS3/Multipart: Got incorrect result from `prepareUploadPart()`, expected an object `{ url }`.');\n      }\n\n      return result;\n    }).then(function (_ref) {\n      var url = _ref.url,\n          headers = _ref.headers;\n\n      _this4._uploadPartBytes(index, url, headers);\n    }, function (err) {\n      _this4._onError(err);\n    });\n  };\n\n  _proto._onPartProgress = function _onPartProgress(index, sent, total) {\n    this.chunkState[index].uploaded = sent;\n    var totalUploaded = this.chunkState.reduce(function (n, c) {\n      return n + c.uploaded;\n    }, 0);\n    this.options.onProgress(totalUploaded, this.file.size);\n  };\n\n  _proto._onPartComplete = function _onPartComplete(index, etag) {\n    this.chunkState[index].etag = etag;\n    this.chunkState[index].done = true;\n    var part = {\n      PartNumber: index + 1,\n      ETag: etag\n    };\n    this.parts.push(part);\n    this.options.onPartComplete(part);\n\n    this._uploadParts();\n  };\n\n  _proto._uploadPartBytes = function _uploadPartBytes(index, url, headers) {\n    var _this5 = this;\n\n    var body = this.chunks[index];\n    var xhr = new XMLHttpRequest();\n    xhr.open('PUT', url, true);\n\n    if (headers) {\n      Object.keys(headers).map(function (key) {\n        xhr.setRequestHeader(key, headers[key]);\n      });\n    }\n\n    xhr.responseType = 'text';\n    this.uploading.push(xhr);\n    xhr.upload.addEventListener('progress', function (ev) {\n      if (!ev.lengthComputable) return;\n\n      _this5._onPartProgress(index, ev.loaded, ev.total);\n    });\n    xhr.addEventListener('abort', function (ev) {\n      remove(_this5.uploading, ev.target);\n      _this5.chunkState[index].busy = false;\n    });\n    xhr.addEventListener('load', function (ev) {\n      remove(_this5.uploading, ev.target);\n      _this5.chunkState[index].busy = false;\n\n      if (ev.target.status < 200 || ev.target.status >= 300) {\n        _this5._onError(new Error('Non 2xx'));\n\n        return;\n      }\n\n      _this5._onPartProgress(index, body.size, body.size); // NOTE This must be allowed by CORS.\n\n\n      var etag = ev.target.getResponseHeader('ETag');\n\n      if (etag === null) {\n        _this5._onError(new Error('AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. Seee https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.'));\n\n        return;\n      }\n\n      _this5._onPartComplete(index, etag);\n    });\n    xhr.addEventListener('error', function (ev) {\n      remove(_this5.uploading, ev.target);\n      _this5.chunkState[index].busy = false;\n      var error = new Error('Unknown error');\n      error.source = ev.target;\n\n      _this5._onError(error);\n    });\n    xhr.send(body);\n  };\n\n  _proto._completeUpload = function _completeUpload() {\n    var _this6 = this;\n\n    // Parts may not have completed uploading in sorted order, if limit > 1.\n    this.parts.sort(function (a, b) {\n      return a.PartNumber - b.PartNumber;\n    });\n    return Promise.resolve().then(function () {\n      return _this6.options.completeMultipartUpload({\n        key: _this6.key,\n        uploadId: _this6.uploadId,\n        parts: _this6.parts\n      });\n    }).then(function (result) {\n      _this6.options.onSuccess(result);\n    }, function (err) {\n      _this6._onError(err);\n    });\n  };\n\n  _proto._abortUpload = function _abortUpload() {\n    var _this7 = this;\n\n    this.uploading.slice().forEach(function (xhr) {\n      xhr.abort();\n    });\n    this.createdPromise.then(function () {\n      _this7.options.abortMultipartUpload({\n        key: _this7.key,\n        uploadId: _this7.uploadId\n      });\n    }, function () {// if the creation failed we do not need to abort\n    });\n    this.uploading = [];\n  };\n\n  _proto._onError = function _onError(err) {\n    this.options.onError(err);\n  };\n\n  _proto.start = function start() {\n    this.isPaused = false;\n\n    if (this.uploadId) {\n      this._resumeUpload();\n    } else {\n      this._createUpload();\n    }\n  };\n\n  _proto.pause = function pause() {\n    var inProgress = this.uploading.slice();\n    inProgress.forEach(function (xhr) {\n      xhr.abort();\n    });\n    this.isPaused = true;\n  };\n\n  _proto.abort = function abort(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var really = opts.really || false;\n    if (!really) return this.pause();\n\n    this._abortUpload();\n  };\n\n  return MultipartUploader;\n}();\n\nmodule.exports = MultipartUploader;\n\n//# sourceURL=webpack:///./node_modules/@uppy/aws-s3-multipart/lib/MultipartUploader.js?");

/***/ }),

/***/ "./node_modules/@uppy/aws-s3-multipart/lib/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/@uppy/aws-s3-multipart/lib/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar _require2 = __webpack_require__(/*! @uppy/companion-client */ \"./node_modules/@uppy/companion-client/lib/index.js\"),\n    Socket = _require2.Socket,\n    Provider = _require2.Provider,\n    RequestClient = _require2.RequestClient;\n\nvar EventTracker = __webpack_require__(/*! @uppy/utils/lib/EventTracker */ \"./node_modules/@uppy/utils/lib/EventTracker.js\");\n\nvar emitSocketProgress = __webpack_require__(/*! @uppy/utils/lib/emitSocketProgress */ \"./node_modules/@uppy/utils/lib/emitSocketProgress.js\");\n\nvar getSocketHost = __webpack_require__(/*! @uppy/utils/lib/getSocketHost */ \"./node_modules/@uppy/utils/lib/getSocketHost.js\");\n\nvar RateLimitedQueue = __webpack_require__(/*! @uppy/utils/lib/RateLimitedQueue */ \"./node_modules/@uppy/utils/lib/RateLimitedQueue.js\");\n\nvar Uploader = __webpack_require__(/*! ./MultipartUploader */ \"./node_modules/@uppy/aws-s3-multipart/lib/MultipartUploader.js\");\n\nfunction assertServerError(res) {\n  if (res && res.error) {\n    var error = new Error(res.message);\n\n    _extends(error, res.error);\n\n    throw error;\n  }\n\n  return res;\n}\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(AwsS3Multipart, _Plugin);\n\n  function AwsS3Multipart(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'uploader';\n    _this.id = _this.opts.id || 'AwsS3Multipart';\n    _this.title = 'AWS S3 Multipart';\n    _this.client = new RequestClient(uppy, opts);\n    var defaultOptions = {\n      timeout: 30 * 1000,\n      limit: 0,\n      createMultipartUpload: _this.createMultipartUpload.bind(_assertThisInitialized(_this)),\n      listParts: _this.listParts.bind(_assertThisInitialized(_this)),\n      prepareUploadPart: _this.prepareUploadPart.bind(_assertThisInitialized(_this)),\n      abortMultipartUpload: _this.abortMultipartUpload.bind(_assertThisInitialized(_this)),\n      completeMultipartUpload: _this.completeMultipartUpload.bind(_assertThisInitialized(_this))\n    };\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n    _this.upload = _this.upload.bind(_assertThisInitialized(_this));\n    _this.requests = new RateLimitedQueue(_this.opts.limit);\n    _this.uploaders = Object.create(null);\n    _this.uploaderEvents = Object.create(null);\n    _this.uploaderSockets = Object.create(null);\n    return _this;\n  }\n  /**\n   * Clean up all references for a file's upload: the MultipartUploader instance,\n   * any events related to the file, and the Companion WebSocket connection.\n   *\n   * Set `opts.abort` to tell S3 that the multipart upload is cancelled and must be removed.\n   * This should be done when the user cancels the upload, not when the upload is completed or errored.\n   */\n\n\n  var _proto = AwsS3Multipart.prototype;\n\n  _proto.resetUploaderReferences = function resetUploaderReferences(fileID, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (this.uploaders[fileID]) {\n      this.uploaders[fileID].abort({\n        really: opts.abort || false\n      });\n      this.uploaders[fileID] = null;\n    }\n\n    if (this.uploaderEvents[fileID]) {\n      this.uploaderEvents[fileID].remove();\n      this.uploaderEvents[fileID] = null;\n    }\n\n    if (this.uploaderSockets[fileID]) {\n      this.uploaderSockets[fileID].close();\n      this.uploaderSockets[fileID] = null;\n    }\n  };\n\n  _proto.assertHost = function assertHost() {\n    if (!this.opts.companionUrl) {\n      throw new Error('Expected a `companionUrl` option containing a Companion address.');\n    }\n  };\n\n  _proto.createMultipartUpload = function createMultipartUpload(file) {\n    this.assertHost();\n    var metadata = {};\n    Object.keys(file.meta).map(function (key) {\n      if (file.meta[key] != null) {\n        metadata[key] = file.meta[key].toString();\n      }\n    });\n    return this.client.post('s3/multipart', {\n      filename: file.name,\n      type: file.type,\n      metadata: metadata\n    }).then(assertServerError);\n  };\n\n  _proto.listParts = function listParts(file, _ref) {\n    var key = _ref.key,\n        uploadId = _ref.uploadId;\n    this.assertHost();\n    var filename = encodeURIComponent(key);\n    return this.client.get(\"s3/multipart/\" + uploadId + \"?key=\" + filename).then(assertServerError);\n  };\n\n  _proto.prepareUploadPart = function prepareUploadPart(file, _ref2) {\n    var key = _ref2.key,\n        uploadId = _ref2.uploadId,\n        number = _ref2.number;\n    this.assertHost();\n    var filename = encodeURIComponent(key);\n    return this.client.get(\"s3/multipart/\" + uploadId + \"/\" + number + \"?key=\" + filename).then(assertServerError);\n  };\n\n  _proto.completeMultipartUpload = function completeMultipartUpload(file, _ref3) {\n    var key = _ref3.key,\n        uploadId = _ref3.uploadId,\n        parts = _ref3.parts;\n    this.assertHost();\n    var filename = encodeURIComponent(key);\n    var uploadIdEnc = encodeURIComponent(uploadId);\n    return this.client.post(\"s3/multipart/\" + uploadIdEnc + \"/complete?key=\" + filename, {\n      parts: parts\n    }).then(assertServerError);\n  };\n\n  _proto.abortMultipartUpload = function abortMultipartUpload(file, _ref4) {\n    var key = _ref4.key,\n        uploadId = _ref4.uploadId;\n    this.assertHost();\n    var filename = encodeURIComponent(key);\n    var uploadIdEnc = encodeURIComponent(uploadId);\n    return this.client.delete(\"s3/multipart/\" + uploadIdEnc + \"?key=\" + filename).then(assertServerError);\n  };\n\n  _proto.uploadFile = function uploadFile(file) {\n    var _this2 = this;\n\n    return new Promise(function (resolve, reject) {\n      var onStart = function onStart(data) {\n        var cFile = _this2.uppy.getFile(file.id);\n\n        _this2.uppy.setFileState(file.id, {\n          s3Multipart: _extends({}, cFile.s3Multipart, {\n            key: data.key,\n            uploadId: data.uploadId,\n            parts: []\n          })\n        });\n      };\n\n      var onProgress = function onProgress(bytesUploaded, bytesTotal) {\n        _this2.uppy.emit('upload-progress', file, {\n          uploader: _this2,\n          bytesUploaded: bytesUploaded,\n          bytesTotal: bytesTotal\n        });\n      };\n\n      var onError = function onError(err) {\n        _this2.uppy.log(err);\n\n        _this2.uppy.emit('upload-error', file, err);\n\n        err.message = \"Failed because: \" + err.message;\n        queuedRequest.done();\n\n        _this2.resetUploaderReferences(file.id);\n\n        reject(err);\n      };\n\n      var onSuccess = function onSuccess(result) {\n        var uploadResp = {\n          uploadURL: result.location\n        };\n        queuedRequest.done();\n\n        _this2.resetUploaderReferences(file.id);\n\n        _this2.uppy.emit('upload-success', file, uploadResp);\n\n        if (result.location) {\n          _this2.uppy.log('Download ' + upload.file.name + ' from ' + result.location);\n        }\n\n        resolve(upload);\n      };\n\n      var onPartComplete = function onPartComplete(part) {\n        // Store completed parts in state.\n        var cFile = _this2.uppy.getFile(file.id);\n\n        if (!cFile) {\n          return;\n        }\n\n        _this2.uppy.setFileState(file.id, {\n          s3Multipart: _extends({}, cFile.s3Multipart, {\n            parts: [].concat(cFile.s3Multipart.parts, [part])\n          })\n        });\n\n        _this2.uppy.emit('s3-multipart:part-uploaded', cFile, part);\n      };\n\n      var upload = new Uploader(file.data, _extends({\n        // .bind to pass the file object to each handler.\n        createMultipartUpload: _this2.opts.createMultipartUpload.bind(_this2, file),\n        listParts: _this2.opts.listParts.bind(_this2, file),\n        prepareUploadPart: _this2.opts.prepareUploadPart.bind(_this2, file),\n        completeMultipartUpload: _this2.opts.completeMultipartUpload.bind(_this2, file),\n        abortMultipartUpload: _this2.opts.abortMultipartUpload.bind(_this2, file),\n        onStart: onStart,\n        onProgress: onProgress,\n        onError: onError,\n        onSuccess: onSuccess,\n        onPartComplete: onPartComplete,\n        limit: _this2.opts.limit || 5\n      }, file.s3Multipart));\n      _this2.uploaders[file.id] = upload;\n      _this2.uploaderEvents[file.id] = new EventTracker(_this2.uppy);\n\n      var queuedRequest = _this2.requests.run(function () {\n        if (!file.isPaused) {\n          upload.start();\n        } // Don't do anything here, the caller will take care of cancelling the upload itself\n        // using resetUploaderReferences(). This is because resetUploaderReferences() has to be\n        // called when this request is still in the queue, and has not been started yet, too. At\n        // that point this cancellation function is not going to be called.\n\n\n        return function () {};\n      });\n\n      _this2.onFileRemove(file.id, function (removed) {\n        queuedRequest.abort();\n\n        _this2.resetUploaderReferences(file.id, {\n          abort: true\n        });\n\n        resolve(\"upload \" + removed.id + \" was removed\");\n      });\n\n      _this2.onCancelAll(file.id, function () {\n        queuedRequest.abort();\n\n        _this2.resetUploaderReferences(file.id, {\n          abort: true\n        });\n\n        resolve(\"upload \" + file.id + \" was canceled\");\n      });\n\n      _this2.onFilePause(file.id, function (isPaused) {\n        if (isPaused) {\n          // Remove this file from the queue so another file can start in its place.\n          queuedRequest.abort();\n          upload.pause();\n        } else {\n          // Resuming an upload should be queued, else you could pause and then resume a queued upload to make it skip the queue.\n          queuedRequest.abort();\n          queuedRequest = _this2.requests.run(function () {\n            upload.start();\n            return function () {};\n          });\n        }\n      });\n\n      _this2.onPauseAll(file.id, function () {\n        queuedRequest.abort();\n        upload.pause();\n      });\n\n      _this2.onResumeAll(file.id, function () {\n        queuedRequest.abort();\n\n        if (file.error) {\n          upload.abort();\n        }\n\n        queuedRequest = _this2.requests.run(function () {\n          upload.start();\n          return function () {};\n        });\n      });\n\n      if (!file.isRestored) {\n        _this2.uppy.emit('upload-started', file, upload);\n      }\n    });\n  };\n\n  _proto.uploadRemote = function uploadRemote(file) {\n    var _this3 = this;\n\n    this.resetUploaderReferences(file.id);\n    this.uppy.emit('upload-started', file);\n\n    if (file.serverToken) {\n      return this.connectToServerSocket(file);\n    }\n\n    return new Promise(function (resolve, reject) {\n      var Client = file.remote.providerOptions.provider ? Provider : RequestClient;\n      var client = new Client(_this3.uppy, file.remote.providerOptions);\n      client.post(file.remote.url, _extends({}, file.remote.body, {\n        protocol: 's3-multipart',\n        size: file.data.size,\n        metadata: file.meta\n      })).then(function (res) {\n        _this3.uppy.setFileState(file.id, {\n          serverToken: res.token\n        });\n\n        file = _this3.uppy.getFile(file.id);\n        return file;\n      }).then(function (file) {\n        return _this3.connectToServerSocket(file);\n      }).then(function () {\n        resolve();\n      }).catch(function (err) {\n        reject(new Error(err));\n      });\n    });\n  };\n\n  _proto.connectToServerSocket = function connectToServerSocket(file) {\n    var _this4 = this;\n\n    return new Promise(function (resolve, reject) {\n      var token = file.serverToken;\n      var host = getSocketHost(file.remote.companionUrl);\n      var socket = new Socket({\n        target: host + \"/api/\" + token,\n        autoOpen: false\n      });\n      _this4.uploaderSockets[file.id] = socket;\n      _this4.uploaderEvents[file.id] = new EventTracker(_this4.uppy);\n\n      _this4.onFileRemove(file.id, function (removed) {\n        queuedRequest.abort();\n        socket.send('pause', {});\n\n        _this4.resetUploaderReferences(file.id, {\n          abort: true\n        });\n\n        resolve(\"upload \" + file.id + \" was removed\");\n      });\n\n      _this4.onFilePause(file.id, function (isPaused) {\n        if (isPaused) {\n          // Remove this file from the queue so another file can start in its place.\n          queuedRequest.abort();\n          socket.send('pause', {});\n        } else {\n          // Resuming an upload should be queued, else you could pause and then resume a queued upload to make it skip the queue.\n          queuedRequest.abort();\n          queuedRequest = _this4.requests.run(function () {\n            socket.send('resume', {});\n            return function () {};\n          });\n        }\n      });\n\n      _this4.onPauseAll(file.id, function () {\n        queuedRequest.abort();\n        socket.send('pause', {});\n      });\n\n      _this4.onCancelAll(file.id, function () {\n        queuedRequest.abort();\n        socket.send('pause', {});\n\n        _this4.resetUploaderReferences(file.id);\n\n        resolve(\"upload \" + file.id + \" was canceled\");\n      });\n\n      _this4.onResumeAll(file.id, function () {\n        queuedRequest.abort();\n\n        if (file.error) {\n          socket.send('pause', {});\n        }\n\n        queuedRequest = _this4.requests.run(function () {\n          socket.send('resume', {});\n        });\n      });\n\n      _this4.onRetry(file.id, function () {\n        // Only do the retry if the upload is actually in progress;\n        // else we could try to send these messages when the upload is still queued.\n        // We may need a better check for this since the socket may also be closed\n        // for other reasons, like network failures.\n        if (socket.isOpen) {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        }\n      });\n\n      _this4.onRetryAll(file.id, function () {\n        if (socket.isOpen) {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        }\n      });\n\n      socket.on('progress', function (progressData) {\n        return emitSocketProgress(_this4, progressData, file);\n      });\n      socket.on('error', function (errData) {\n        _this4.uppy.emit('upload-error', file, new Error(errData.error));\n\n        _this4.resetUploaderReferences(file.id);\n\n        queuedRequest.done();\n        reject(new Error(errData.error));\n      });\n      socket.on('success', function (data) {\n        var uploadResp = {\n          uploadURL: data.url\n        };\n\n        _this4.uppy.emit('upload-success', file, uploadResp);\n\n        _this4.resetUploaderReferences(file.id);\n\n        queuedRequest.done();\n        resolve();\n      });\n\n      var queuedRequest = _this4.requests.run(function () {\n        socket.open();\n\n        if (file.isPaused) {\n          socket.send('pause', {});\n        }\n\n        return function () {};\n      });\n    });\n  };\n\n  _proto.upload = function upload(fileIDs) {\n    var _this5 = this;\n\n    if (fileIDs.length === 0) return Promise.resolve();\n    var promises = fileIDs.map(function (id) {\n      var file = _this5.uppy.getFile(id);\n\n      if (file.isRemote) {\n        return _this5.uploadRemote(file);\n      }\n\n      return _this5.uploadFile(file);\n    });\n    return Promise.all(promises);\n  };\n\n  _proto.onFileRemove = function onFileRemove(fileID, cb) {\n    this.uploaderEvents[fileID].on('file-removed', function (file) {\n      if (fileID === file.id) cb(file.id);\n    });\n  };\n\n  _proto.onFilePause = function onFilePause(fileID, cb) {\n    this.uploaderEvents[fileID].on('upload-pause', function (targetFileID, isPaused) {\n      if (fileID === targetFileID) {\n        // const isPaused = this.uppy.pauseResume(fileID)\n        cb(isPaused);\n      }\n    });\n  };\n\n  _proto.onRetry = function onRetry(fileID, cb) {\n    this.uploaderEvents[fileID].on('upload-retry', function (targetFileID) {\n      if (fileID === targetFileID) {\n        cb();\n      }\n    });\n  };\n\n  _proto.onRetryAll = function onRetryAll(fileID, cb) {\n    var _this6 = this;\n\n    this.uploaderEvents[fileID].on('retry-all', function (filesToRetry) {\n      if (!_this6.uppy.getFile(fileID)) return;\n      cb();\n    });\n  };\n\n  _proto.onPauseAll = function onPauseAll(fileID, cb) {\n    var _this7 = this;\n\n    this.uploaderEvents[fileID].on('pause-all', function () {\n      if (!_this7.uppy.getFile(fileID)) return;\n      cb();\n    });\n  };\n\n  _proto.onCancelAll = function onCancelAll(fileID, cb) {\n    var _this8 = this;\n\n    this.uploaderEvents[fileID].on('cancel-all', function () {\n      if (!_this8.uppy.getFile(fileID)) return;\n      cb();\n    });\n  };\n\n  _proto.onResumeAll = function onResumeAll(fileID, cb) {\n    var _this9 = this;\n\n    this.uploaderEvents[fileID].on('resume-all', function () {\n      if (!_this9.uppy.getFile(fileID)) return;\n      cb();\n    });\n  };\n\n  _proto.install = function install() {\n    var _this$uppy$getState = this.uppy.getState(),\n        capabilities = _this$uppy$getState.capabilities;\n\n    this.uppy.setState({\n      capabilities: _extends({}, capabilities, {\n        resumableUploads: true\n      })\n    });\n    this.uppy.addUploader(this.upload);\n  };\n\n  _proto.uninstall = function uninstall() {\n    var _this$uppy$getState2 = this.uppy.getState(),\n        capabilities = _this$uppy$getState2.capabilities;\n\n    this.uppy.setState({\n      capabilities: _extends({}, capabilities, {\n        resumableUploads: false\n      })\n    });\n    this.uppy.removeUploader(this.upload);\n  };\n\n  return AwsS3Multipart;\n}(Plugin), _class.VERSION = \"1.4.0\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/aws-s3-multipart/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/aws-s3/lib/index.js":
/*!************************************************!*\
  !*** ./node_modules/@uppy/aws-s3/lib/index.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n// If global `URL` constructor is available, use it\nvar URL_ = typeof URL === 'function' ? URL : __webpack_require__(/*! url-parse */ \"./node_modules/url-parse/index.js\");\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar RateLimitedQueue = __webpack_require__(/*! @uppy/utils/lib/RateLimitedQueue */ \"./node_modules/@uppy/utils/lib/RateLimitedQueue.js\");\n\nvar _require2 = __webpack_require__(/*! @uppy/companion-client */ \"./node_modules/@uppy/companion-client/lib/index.js\"),\n    RequestClient = _require2.RequestClient;\n\nvar XHRUpload = __webpack_require__(/*! @uppy/xhr-upload */ \"./node_modules/@uppy/xhr-upload/lib/index.js\");\n\nvar qsStringify = __webpack_require__(/*! qs-stringify */ \"./node_modules/qs-stringify/index.js\");\n\nfunction resolveUrl(origin, link) {\n  return new URL_(link, origin).toString();\n}\n\nfunction isXml(content, xhr) {\n  var rawContentType = xhr.headers ? xhr.headers['content-type'] : xhr.getResponseHeader('Content-Type');\n\n  if (rawContentType === null) {\n    return false;\n  } // Get rid of mime parameters like charset=utf-8\n\n\n  var contentType = rawContentType.replace(/;.*$/, '').toLowerCase();\n\n  if (typeof contentType === 'string') {\n    if (contentType === 'application/xml' || contentType === 'text/xml') {\n      return true;\n    } // GCS uses text/html for some reason\n    // https://github.com/transloadit/uppy/issues/896\n\n\n    if (contentType === 'text/html' && /^<\\?xml /.test(content)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getXmlValue(source, key) {\n  var start = source.indexOf(\"<\" + key + \">\");\n  var end = source.indexOf(\"</\" + key + \">\", start);\n  return start !== -1 && end !== -1 ? source.slice(start + key.length + 2, end) : '';\n}\n\nfunction assertServerError(res) {\n  if (res && res.error) {\n    var error = new Error(res.message);\n\n    _extends(error, res.error);\n\n    throw error;\n  }\n\n  return res;\n}\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(AwsS3, _Plugin);\n\n  function AwsS3(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'uploader';\n    _this.id = _this.opts.id || 'AwsS3';\n    _this.title = 'AWS S3';\n    _this.defaultLocale = {\n      strings: {\n        preparingUpload: 'Preparing upload...'\n      }\n    };\n    var defaultOptions = {\n      timeout: 30 * 1000,\n      limit: 0,\n      metaFields: [],\n      // have to opt in\n      getUploadParameters: _this.getUploadParameters.bind(_assertThisInitialized(_this))\n    };\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n\n    _this.i18nInit();\n\n    _this.client = new RequestClient(uppy, opts);\n    _this.prepareUpload = _this.prepareUpload.bind(_assertThisInitialized(_this));\n    _this.requests = new RateLimitedQueue(_this.opts.limit);\n    return _this;\n  }\n\n  var _proto = AwsS3.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  };\n\n  _proto.getUploadParameters = function getUploadParameters(file) {\n    if (!this.opts.companionUrl) {\n      throw new Error('Expected a `companionUrl` option containing a Companion address.');\n    }\n\n    var filename = encodeURIComponent(file.meta.name);\n    var type = encodeURIComponent(file.meta.type);\n    var metadata = {};\n    this.opts.metaFields.forEach(function (key) {\n      if (file.meta[key] != null) {\n        metadata[key] = file.meta[key].toString();\n      }\n    });\n    var query = qsStringify({\n      filename: filename,\n      type: type,\n      metadata: metadata\n    });\n    return this.client.get(\"s3/params?\" + query).then(assertServerError);\n  };\n\n  _proto.validateParameters = function validateParameters(file, params) {\n    var valid = typeof params === 'object' && params && typeof params.url === 'string' && (typeof params.fields === 'object' || params.fields == null) && (params.method == null || /^(put|post)$/i.test(params.method));\n\n    if (!valid) {\n      var err = new TypeError(\"AwsS3: got incorrect result from 'getUploadParameters()' for file '\" + file.name + \"', expected an object '{ url, method, fields, headers }'.\\nSee https://uppy.io/docs/aws-s3/#getUploadParameters-file for more on the expected format.\");\n      console.error(err);\n      throw err;\n    }\n\n    return params;\n  };\n\n  _proto.prepareUpload = function prepareUpload(fileIDs) {\n    var _this2 = this;\n\n    fileIDs.forEach(function (id) {\n      var file = _this2.uppy.getFile(id);\n\n      _this2.uppy.emit('preprocess-progress', file, {\n        mode: 'determinate',\n        message: _this2.i18n('preparingUpload'),\n        value: 0\n      });\n    }); // Wrapping rate-limited opts.getUploadParameters in a Promise takes some boilerplate!\n\n    var getUploadParameters = this.requests.wrapPromiseFunction(function (file) {\n      return _this2.opts.getUploadParameters(file);\n    });\n    return Promise.all(fileIDs.map(function (id) {\n      var file = _this2.uppy.getFile(id);\n\n      return getUploadParameters(file).then(function (params) {\n        return _this2.validateParameters(file, params);\n      }).then(function (params) {\n        _this2.uppy.emit('preprocess-progress', file, {\n          mode: 'determinate',\n          message: _this2.i18n('preparingUpload'),\n          value: 1\n        });\n\n        return params;\n      }).catch(function (error) {\n        _this2.uppy.emit('upload-error', file, error);\n      });\n    })).then(function (responses) {\n      var updatedFiles = {};\n      fileIDs.forEach(function (id, index) {\n        var file = _this2.uppy.getFile(id);\n\n        if (!file || file.error) {\n          return;\n        }\n\n        var _responses$index = responses[index],\n            _responses$index$meth = _responses$index.method,\n            method = _responses$index$meth === void 0 ? 'post' : _responses$index$meth,\n            url = _responses$index.url,\n            fields = _responses$index.fields,\n            headers = _responses$index.headers;\n        var xhrOpts = {\n          method: method,\n          formData: method.toLowerCase() === 'post',\n          endpoint: url,\n          metaFields: fields ? Object.keys(fields) : []\n        };\n\n        if (headers) {\n          xhrOpts.headers = headers;\n        }\n\n        var updatedFile = _extends({}, file, {\n          meta: _extends({}, file.meta, {}, fields),\n          xhrUpload: xhrOpts\n        });\n\n        updatedFiles[id] = updatedFile;\n      });\n\n      var _this2$uppy$getState = _this2.uppy.getState(),\n          files = _this2$uppy$getState.files;\n\n      _this2.uppy.setState({\n        files: _extends({}, files, {}, updatedFiles)\n      });\n\n      fileIDs.forEach(function (id) {\n        var file = _this2.uppy.getFile(id);\n\n        _this2.uppy.emit('preprocess-complete', file);\n      });\n    });\n  };\n\n  _proto.install = function install() {\n    var log = this.uppy.log;\n    this.uppy.addPreProcessor(this.prepareUpload);\n    var warnedSuccessActionStatus = false;\n    var xhrUploadOpts = {\n      fieldName: 'file',\n      responseUrlFieldName: 'location',\n      timeout: this.opts.timeout,\n      __queue: this.requests,\n      responseType: 'text',\n      // Get the response data from a successful XMLHttpRequest instance.\n      // `content` is the S3 response as a string.\n      // `xhr` is the XMLHttpRequest instance.\n      getResponseData: function getResponseData(content, xhr) {\n        var opts = this; // If no response, we've hopefully done a PUT request to the file\n        // in the bucket on its full URL.\n\n        if (!isXml(content, xhr)) {\n          if (opts.method.toUpperCase() === 'POST') {\n            if (!warnedSuccessActionStatus) {\n              log('[AwsS3] No response data found, make sure to set the success_action_status AWS SDK option to 201. See https://uppy.io/docs/aws-s3/#POST-Uploads', 'warning');\n              warnedSuccessActionStatus = true;\n            } // The responseURL won't contain the object key. Give up.\n\n\n            return {\n              location: null\n            };\n          } // responseURL is not available in older browsers.\n\n\n          if (!xhr.responseURL) {\n            return {\n              location: null\n            };\n          } // Trim the query string because it's going to be a bunch of presign\n          // parameters for a PUT request—doing a GET request with those will\n          // always result in an error\n\n\n          return {\n            location: xhr.responseURL.replace(/\\?.*$/, '')\n          };\n        }\n\n        return {\n          // Some S3 alternatives do not reply with an absolute URL.\n          // Eg DigitalOcean Spaces uses /$bucketName/xyz\n          location: resolveUrl(xhr.responseURL, getXmlValue(content, 'Location')),\n          bucket: getXmlValue(content, 'Bucket'),\n          key: getXmlValue(content, 'Key'),\n          etag: getXmlValue(content, 'ETag')\n        };\n      },\n      // Get the error data from a failed XMLHttpRequest instance.\n      // `content` is the S3 response as a string.\n      // `xhr` is the XMLHttpRequest instance.\n      getResponseError: function getResponseError(content, xhr) {\n        // If no response, we don't have a specific error message, use the default.\n        if (!isXml(content, xhr)) {\n          return;\n        }\n\n        var error = getXmlValue(content, 'Message');\n        return new Error(error);\n      }\n    }; // Replace getResponseData() with overwritten version.\n\n    if (this.opts.getResponseData) {\n      xhrUploadOpts.getResponseData = this.opts.getResponseData;\n    }\n\n    this.uppy.use(XHRUpload, xhrUploadOpts);\n  };\n\n  _proto.uninstall = function uninstall() {\n    var uploader = this.uppy.getPlugin('XHRUpload');\n    this.uppy.removePlugin(uploader);\n    this.uppy.removePreProcessor(this.prepareUpload);\n  };\n\n  return AwsS3;\n}(Plugin), _class.VERSION = \"1.4.1\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/aws-s3/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/companion-client/lib/AuthError.js":
/*!**************************************************************!*\
  !*** ./node_modules/@uppy/companion-client/lib/AuthError.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar AuthError =\n/*#__PURE__*/\nfunction (_Error) {\n  _inheritsLoose(AuthError, _Error);\n\n  function AuthError() {\n    var _this;\n\n    _this = _Error.call(this, 'Authorization required') || this;\n    _this.name = 'AuthError';\n    _this.isAuthError = true;\n    return _this;\n  }\n\n  return AuthError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = AuthError;\n\n//# sourceURL=webpack:///./node_modules/@uppy/companion-client/lib/AuthError.js?");

/***/ }),

/***/ "./node_modules/@uppy/companion-client/lib/Provider.js":
/*!*************************************************************!*\
  !*** ./node_modules/@uppy/companion-client/lib/Provider.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar RequestClient = __webpack_require__(/*! ./RequestClient */ \"./node_modules/@uppy/companion-client/lib/RequestClient.js\");\n\nvar tokenStorage = __webpack_require__(/*! ./tokenStorage */ \"./node_modules/@uppy/companion-client/lib/tokenStorage.js\");\n\nvar _getName = function _getName(id) {\n  return id.split('-').map(function (s) {\n    return s.charAt(0).toUpperCase() + s.slice(1);\n  }).join(' ');\n};\n\nmodule.exports =\n/*#__PURE__*/\nfunction (_RequestClient) {\n  _inheritsLoose(Provider, _RequestClient);\n\n  function Provider(uppy, opts) {\n    var _this;\n\n    _this = _RequestClient.call(this, uppy, opts) || this;\n    _this.provider = opts.provider;\n    _this.id = _this.provider;\n    _this.authProvider = opts.authProvider || _this.provider;\n    _this.name = _this.opts.name || _getName(_this.id);\n    _this.pluginId = _this.opts.pluginId;\n    _this.tokenKey = \"companion-\" + _this.pluginId + \"-auth-token\";\n    return _this;\n  }\n\n  var _proto = Provider.prototype;\n\n  _proto.headers = function headers() {\n    var _this2 = this;\n\n    return new Promise(function (resolve, reject) {\n      _RequestClient.prototype.headers.call(_this2).then(function (headers) {\n        _this2.getAuthToken().then(function (token) {\n          resolve(_extends({}, headers, {\n            'uppy-auth-token': token\n          }));\n        });\n      }).catch(reject);\n    });\n  };\n\n  _proto.onReceiveResponse = function onReceiveResponse(response) {\n    response = _RequestClient.prototype.onReceiveResponse.call(this, response);\n    var plugin = this.uppy.getPlugin(this.pluginId);\n    var oldAuthenticated = plugin.getPluginState().authenticated;\n    var authenticated = oldAuthenticated ? response.status !== 401 : response.status < 400;\n    plugin.setPluginState({\n      authenticated: authenticated\n    });\n    return response;\n  } // @todo(i.olarewaju) consider whether or not this method should be exposed\n  ;\n\n  _proto.setAuthToken = function setAuthToken(token) {\n    return this.uppy.getPlugin(this.pluginId).storage.setItem(this.tokenKey, token);\n  };\n\n  _proto.getAuthToken = function getAuthToken() {\n    return this.uppy.getPlugin(this.pluginId).storage.getItem(this.tokenKey);\n  };\n\n  _proto.authUrl = function authUrl() {\n    return this.hostname + \"/\" + this.id + \"/connect\";\n  };\n\n  _proto.fileUrl = function fileUrl(id) {\n    return this.hostname + \"/\" + this.id + \"/get/\" + id;\n  };\n\n  _proto.list = function list(directory) {\n    return this.get(this.id + \"/list/\" + (directory || ''));\n  };\n\n  _proto.logout = function logout() {\n    var _this3 = this;\n\n    return new Promise(function (resolve, reject) {\n      _this3.get(_this3.id + \"/logout\").then(function (res) {\n        _this3.uppy.getPlugin(_this3.pluginId).storage.removeItem(_this3.tokenKey).then(function () {\n          return resolve(res);\n        }).catch(reject);\n      }).catch(reject);\n    });\n  };\n\n  Provider.initPlugin = function initPlugin(plugin, opts, defaultOpts) {\n    plugin.type = 'acquirer';\n    plugin.files = [];\n\n    if (defaultOpts) {\n      plugin.opts = _extends({}, defaultOpts, opts);\n    }\n\n    if (opts.serverUrl || opts.serverPattern) {\n      throw new Error('`serverUrl` and `serverPattern` have been renamed to `companionUrl` and `companionAllowedHosts` respectively in the 0.30.5 release. Please consult the docs (for example, https://uppy.io/docs/instagram/ for the Instagram plugin) and use the updated options.`');\n    }\n\n    if (opts.companionAllowedHosts) {\n      var pattern = opts.companionAllowedHosts; // validate companionAllowedHosts param\n\n      if (typeof pattern !== 'string' && !Array.isArray(pattern) && !(pattern instanceof RegExp)) {\n        throw new TypeError(plugin.id + \": the option \\\"companionAllowedHosts\\\" must be one of string, Array, RegExp\");\n      }\n\n      plugin.opts.companionAllowedHosts = pattern;\n    } else {\n      // does not start with https://\n      if (/^(?!https?:\\/\\/).*$/i.test(opts.companionUrl)) {\n        plugin.opts.companionAllowedHosts = \"https://\" + opts.companionUrl.replace(/^\\/\\//, '');\n      } else {\n        plugin.opts.companionAllowedHosts = opts.companionUrl;\n      }\n    }\n\n    plugin.storage = plugin.opts.storage || tokenStorage;\n  };\n\n  return Provider;\n}(RequestClient);\n\n//# sourceURL=webpack:///./node_modules/@uppy/companion-client/lib/Provider.js?");

/***/ }),

/***/ "./node_modules/@uppy/companion-client/lib/RequestClient.js":
/*!******************************************************************!*\
  !*** ./node_modules/@uppy/companion-client/lib/RequestClient.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar AuthError = __webpack_require__(/*! ./AuthError */ \"./node_modules/@uppy/companion-client/lib/AuthError.js\"); // Remove the trailing slash so we can always safely append /xyz.\n\n\nfunction stripSlash(url) {\n  return url.replace(/\\/$/, '');\n}\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction () {\n  function RequestClient(uppy, opts) {\n    this.uppy = uppy;\n    this.opts = opts;\n    this.onReceiveResponse = this.onReceiveResponse.bind(this);\n    this.allowedHeaders = ['accept', 'content-type', 'uppy-auth-token'];\n    this.preflightDone = false;\n  }\n\n  var _proto = RequestClient.prototype;\n\n  _proto.headers = function headers() {\n    var userHeaders = this.opts.companionHeaders || this.opts.serverHeaders || {};\n    return Promise.resolve(_extends({}, this.defaultHeaders, {}, userHeaders));\n  };\n\n  _proto._getPostResponseFunc = function _getPostResponseFunc(skip) {\n    var _this = this;\n\n    return function (response) {\n      if (!skip) {\n        return _this.onReceiveResponse(response);\n      }\n\n      return response;\n    };\n  };\n\n  _proto.onReceiveResponse = function onReceiveResponse(response) {\n    var state = this.uppy.getState();\n    var companion = state.companion || {};\n    var host = this.opts.companionUrl;\n    var headers = response.headers; // Store the self-identified domain name for the Companion instance we just hit.\n\n    if (headers.has('i-am') && headers.get('i-am') !== companion[host]) {\n      var _extends2;\n\n      this.uppy.setState({\n        companion: _extends({}, companion, (_extends2 = {}, _extends2[host] = headers.get('i-am'), _extends2))\n      });\n    }\n\n    return response;\n  };\n\n  _proto._getUrl = function _getUrl(url) {\n    if (/^(https?:|)\\/\\//.test(url)) {\n      return url;\n    }\n\n    return this.hostname + \"/\" + url;\n  };\n\n  _proto._json = function _json(res) {\n    if (res.status === 401) {\n      throw new AuthError();\n    }\n\n    if (res.status < 200 || res.status > 300) {\n      var errMsg = \"Failed request with status: \" + res.status + \". \" + res.statusText;\n      return res.json().then(function (errData) {\n        errMsg = errData.message ? errMsg + \" message: \" + errData.message : errMsg;\n        errMsg = errData.requestId ? errMsg + \" request-Id: \" + errData.requestId : errMsg;\n        throw new Error(errMsg);\n      }).catch(function () {\n        throw new Error(errMsg);\n      });\n    }\n\n    return res.json();\n  };\n\n  _proto.preflight = function preflight(path) {\n    var _this2 = this;\n\n    return new Promise(function (resolve, reject) {\n      if (_this2.preflightDone) {\n        return resolve(_this2.allowedHeaders.slice());\n      }\n\n      fetch(_this2._getUrl(path), {\n        method: 'OPTIONS'\n      }).then(function (response) {\n        if (response.headers.has('access-control-allow-headers')) {\n          _this2.allowedHeaders = response.headers.get('access-control-allow-headers').split(',').map(function (headerName) {\n            return headerName.trim().toLowerCase();\n          });\n        }\n\n        _this2.preflightDone = true;\n        resolve(_this2.allowedHeaders.slice());\n      }).catch(function (err) {\n        _this2.uppy.log(\"[CompanionClient] unable to make preflight request \" + err, 'warning');\n\n        _this2.preflightDone = true;\n        resolve(_this2.allowedHeaders.slice());\n      });\n    });\n  };\n\n  _proto.preflightAndHeaders = function preflightAndHeaders(path) {\n    var _this3 = this;\n\n    return Promise.all([this.preflight(path), this.headers()]).then(function (_ref) {\n      var allowedHeaders = _ref[0],\n          headers = _ref[1];\n      // filter to keep only allowed Headers\n      Object.keys(headers).forEach(function (header) {\n        if (allowedHeaders.indexOf(header.toLowerCase()) === -1) {\n          _this3.uppy.log(\"[CompanionClient] excluding unallowed header \" + header);\n\n          delete headers[header];\n        }\n      });\n      return headers;\n    });\n  };\n\n  _proto.get = function get(path, skipPostResponse) {\n    var _this4 = this;\n\n    return new Promise(function (resolve, reject) {\n      _this4.preflightAndHeaders(path).then(function (headers) {\n        fetch(_this4._getUrl(path), {\n          method: 'get',\n          headers: headers,\n          credentials: 'same-origin'\n        }).then(_this4._getPostResponseFunc(skipPostResponse)).then(function (res) {\n          return _this4._json(res).then(resolve);\n        }).catch(function (err) {\n          err = err.isAuthError ? err : new Error(\"Could not get \" + _this4._getUrl(path) + \". \" + err);\n          reject(err);\n        });\n      }).catch(reject);\n    });\n  };\n\n  _proto.post = function post(path, data, skipPostResponse) {\n    var _this5 = this;\n\n    return new Promise(function (resolve, reject) {\n      _this5.preflightAndHeaders(path).then(function (headers) {\n        fetch(_this5._getUrl(path), {\n          method: 'post',\n          headers: headers,\n          credentials: 'same-origin',\n          body: JSON.stringify(data)\n        }).then(_this5._getPostResponseFunc(skipPostResponse)).then(function (res) {\n          return _this5._json(res).then(resolve);\n        }).catch(function (err) {\n          err = err.isAuthError ? err : new Error(\"Could not post \" + _this5._getUrl(path) + \". \" + err);\n          reject(err);\n        });\n      }).catch(reject);\n    });\n  };\n\n  _proto.delete = function _delete(path, data, skipPostResponse) {\n    var _this6 = this;\n\n    return new Promise(function (resolve, reject) {\n      _this6.preflightAndHeaders(path).then(function (headers) {\n        fetch(_this6.hostname + \"/\" + path, {\n          method: 'delete',\n          headers: headers,\n          credentials: 'same-origin',\n          body: data ? JSON.stringify(data) : null\n        }).then(_this6._getPostResponseFunc(skipPostResponse)).then(function (res) {\n          return _this6._json(res).then(resolve);\n        }).catch(function (err) {\n          err = err.isAuthError ? err : new Error(\"Could not delete \" + _this6._getUrl(path) + \". \" + err);\n          reject(err);\n        });\n      }).catch(reject);\n    });\n  };\n\n  _createClass(RequestClient, [{\n    key: \"hostname\",\n    get: function get() {\n      var _this$uppy$getState = this.uppy.getState(),\n          companion = _this$uppy$getState.companion;\n\n      var host = this.opts.companionUrl;\n      return stripSlash(companion && companion[host] ? companion[host] : host);\n    }\n  }, {\n    key: \"defaultHeaders\",\n    get: function get() {\n      return {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n        'Uppy-Versions': \"@uppy/companion-client=\" + RequestClient.VERSION\n      };\n    }\n  }]);\n\n  return RequestClient;\n}(), _class.VERSION = \"1.4.1\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/companion-client/lib/RequestClient.js?");

/***/ }),

/***/ "./node_modules/@uppy/companion-client/lib/Socket.js":
/*!***********************************************************!*\
  !*** ./node_modules/@uppy/companion-client/lib/Socket.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var ee = __webpack_require__(/*! namespace-emitter */ \"./node_modules/namespace-emitter/index.js\");\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n  function UppySocket(opts) {\n    this.opts = opts;\n    this._queued = [];\n    this.isOpen = false;\n    this.emitter = ee();\n    this._handleMessage = this._handleMessage.bind(this);\n    this.close = this.close.bind(this);\n    this.emit = this.emit.bind(this);\n    this.on = this.on.bind(this);\n    this.once = this.once.bind(this);\n    this.send = this.send.bind(this);\n\n    if (!opts || opts.autoOpen !== false) {\n      this.open();\n    }\n  }\n\n  var _proto = UppySocket.prototype;\n\n  _proto.open = function open() {\n    var _this = this;\n\n    this.socket = new WebSocket(this.opts.target);\n\n    this.socket.onopen = function (e) {\n      _this.isOpen = true;\n\n      while (_this._queued.length > 0 && _this.isOpen) {\n        var first = _this._queued[0];\n\n        _this.send(first.action, first.payload);\n\n        _this._queued = _this._queued.slice(1);\n      }\n    };\n\n    this.socket.onclose = function (e) {\n      _this.isOpen = false;\n    };\n\n    this.socket.onmessage = this._handleMessage;\n  };\n\n  _proto.close = function close() {\n    if (this.socket) {\n      this.socket.close();\n    }\n  };\n\n  _proto.send = function send(action, payload) {\n    // attach uuid\n    if (!this.isOpen) {\n      this._queued.push({\n        action: action,\n        payload: payload\n      });\n\n      return;\n    }\n\n    this.socket.send(JSON.stringify({\n      action: action,\n      payload: payload\n    }));\n  };\n\n  _proto.on = function on(action, handler) {\n    this.emitter.on(action, handler);\n  };\n\n  _proto.emit = function emit(action, payload) {\n    this.emitter.emit(action, payload);\n  };\n\n  _proto.once = function once(action, handler) {\n    this.emitter.once(action, handler);\n  };\n\n  _proto._handleMessage = function _handleMessage(e) {\n    try {\n      var message = JSON.parse(e.data);\n      this.emit(message.action, message.payload);\n    } catch (err) {\n      console.log(err);\n    }\n  };\n\n  return UppySocket;\n}();\n\n//# sourceURL=webpack:///./node_modules/@uppy/companion-client/lib/Socket.js?");

/***/ }),

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

"use strict";
eval("\n/**\n * Manages communications with Companion\n */\n\nvar RequestClient = __webpack_require__(/*! ./RequestClient */ \"./node_modules/@uppy/companion-client/lib/RequestClient.js\");\n\nvar Provider = __webpack_require__(/*! ./Provider */ \"./node_modules/@uppy/companion-client/lib/Provider.js\");\n\nvar Socket = __webpack_require__(/*! ./Socket */ \"./node_modules/@uppy/companion-client/lib/Socket.js\");\n\nmodule.exports = {\n  RequestClient: RequestClient,\n  Provider: Provider,\n  Socket: Socket\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/companion-client/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/companion-client/lib/tokenStorage.js":
/*!*****************************************************************!*\
  !*** ./node_modules/@uppy/companion-client/lib/tokenStorage.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n/**\n * This module serves as an Async wrapper for LocalStorage\n */\n\nmodule.exports.setItem = function (key, value) {\n  return new Promise(function (resolve) {\n    localStorage.setItem(key, value);\n    resolve();\n  });\n};\n\nmodule.exports.getItem = function (key) {\n  return Promise.resolve(localStorage.getItem(key));\n};\n\nmodule.exports.removeItem = function (key) {\n  return new Promise(function (resolve) {\n    localStorage.removeItem(key);\n    resolve();\n  });\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/companion-client/lib/tokenStorage.js?");

/***/ }),

/***/ "./node_modules/@uppy/core/lib/Plugin.js":
/*!***********************************************!*\
  !*** ./node_modules/@uppy/core/lib/Plugin.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar preact = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\");\n\nvar findDOMElement = __webpack_require__(/*! @uppy/utils/lib/findDOMElement */ \"./node_modules/@uppy/utils/lib/findDOMElement.js\");\n/**\n * Defer a frequent call to the microtask queue.\n */\n\n\nfunction debounce(fn) {\n  var calling = null;\n  var latestArgs = null;\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    latestArgs = args;\n\n    if (!calling) {\n      calling = Promise.resolve().then(function () {\n        calling = null; // At this point `args` may be different from the most\n        // recent state, if multiple calls happened since this task\n        // was queued. So we use the `latestArgs`, which definitely\n        // is the most recent call.\n\n        return fn.apply(void 0, latestArgs);\n      });\n    }\n\n    return calling;\n  };\n}\n/**\n * Boilerplate that all Plugins share - and should not be used\n * directly. It also shows which methods final plugins should implement/override,\n * this deciding on structure.\n *\n * @param {object} main Uppy core object\n * @param {object} object with plugin options\n * @returns {Array|string} files or success/fail message\n */\n\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n  function Plugin(uppy, opts) {\n    this.uppy = uppy;\n    this.opts = opts || {};\n    this.update = this.update.bind(this);\n    this.mount = this.mount.bind(this);\n    this.install = this.install.bind(this);\n    this.uninstall = this.uninstall.bind(this);\n  }\n\n  var _proto = Plugin.prototype;\n\n  _proto.getPluginState = function getPluginState() {\n    var _this$uppy$getState = this.uppy.getState(),\n        plugins = _this$uppy$getState.plugins;\n\n    return plugins[this.id] || {};\n  };\n\n  _proto.setPluginState = function setPluginState(update) {\n    var _extends2;\n\n    var _this$uppy$getState2 = this.uppy.getState(),\n        plugins = _this$uppy$getState2.plugins;\n\n    this.uppy.setState({\n      plugins: _extends({}, plugins, (_extends2 = {}, _extends2[this.id] = _extends({}, plugins[this.id], {}, update), _extends2))\n    });\n  };\n\n  _proto.setOptions = function setOptions(newOpts) {\n    this.opts = _extends({}, this.opts, {}, newOpts);\n    this.setPluginState(); // so that UI re-renders with new options\n  };\n\n  _proto.update = function update(state) {\n    if (typeof this.el === 'undefined') {\n      return;\n    }\n\n    if (this._updateUI) {\n      this._updateUI(state);\n    }\n  } // Called after every state update, after everything's mounted. Debounced.\n  ;\n\n  _proto.afterUpdate = function afterUpdate() {}\n  /**\n   * Called when plugin is mounted, whether in DOM or into another plugin.\n   * Needed because sometimes plugins are mounted separately/after `install`,\n   * so this.el and this.parent might not be available in `install`.\n   * This is the case with @uppy/react plugins, for example.\n   */\n  ;\n\n  _proto.onMount = function onMount() {}\n  /**\n   * Check if supplied `target` is a DOM element or an `object`.\n   * If it’s an object — target is a plugin, and we search `plugins`\n   * for a plugin with same name and return its target.\n   *\n   * @param {string|object} target\n   *\n   */\n  ;\n\n  _proto.mount = function mount(target, plugin) {\n    var _this = this;\n\n    var callerPluginName = plugin.id;\n    var targetElement = findDOMElement(target);\n\n    if (targetElement) {\n      this.isTargetDOMEl = true; // API for plugins that require a synchronous rerender.\n\n      this.rerender = function (state) {\n        // plugin could be removed, but this.rerender is debounced below,\n        // so it could still be called even after uppy.removePlugin or uppy.close\n        // hence the check\n        if (!_this.uppy.getPlugin(_this.id)) return;\n        _this.el = preact.render(_this.render(state), targetElement, _this.el);\n\n        _this.afterUpdate();\n      };\n\n      this._updateUI = debounce(this.rerender);\n      this.uppy.log(\"Installing \" + callerPluginName + \" to a DOM element '\" + target + \"'\"); // clear everything inside the target container\n\n      if (this.opts.replaceTargetContent) {\n        targetElement.innerHTML = '';\n      }\n\n      this.el = preact.render(this.render(this.uppy.getState()), targetElement);\n      this.onMount();\n      return this.el;\n    }\n\n    var targetPlugin;\n\n    if (typeof target === 'object' && target instanceof Plugin) {\n      // Targeting a plugin *instance*\n      targetPlugin = target;\n    } else if (typeof target === 'function') {\n      // Targeting a plugin type\n      var Target = target; // Find the target plugin instance.\n\n      this.uppy.iteratePlugins(function (plugin) {\n        if (plugin instanceof Target) {\n          targetPlugin = plugin;\n          return false;\n        }\n      });\n    }\n\n    if (targetPlugin) {\n      this.uppy.log(\"Installing \" + callerPluginName + \" to \" + targetPlugin.id);\n      this.parent = targetPlugin;\n      this.el = targetPlugin.addTarget(plugin);\n      this.onMount();\n      return this.el;\n    }\n\n    this.uppy.log(\"Not installing \" + callerPluginName);\n    throw new Error(\"Invalid target option given to \" + callerPluginName + \". Please make sure that the element\\n      exists on the page, or that the plugin you are targeting has been installed. Check that the <script> tag initializing Uppy\\n      comes at the bottom of the page, before the closing </body> tag (see https://github.com/transloadit/uppy/issues/1042).\");\n  };\n\n  _proto.render = function render(state) {\n    throw new Error('Extend the render method to add your plugin to a DOM element');\n  };\n\n  _proto.addTarget = function addTarget(plugin) {\n    throw new Error('Extend the addTarget method to add your plugin to another plugin\\'s target');\n  };\n\n  _proto.unmount = function unmount() {\n    if (this.isTargetDOMEl && this.el && this.el.parentNode) {\n      this.el.parentNode.removeChild(this.el);\n    }\n  };\n\n  _proto.install = function install() {};\n\n  _proto.uninstall = function uninstall() {\n    this.unmount();\n  };\n\n  return Plugin;\n}();\n\n//# sourceURL=webpack:///./node_modules/@uppy/core/lib/Plugin.js?");

/***/ }),

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

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar ee = __webpack_require__(/*! namespace-emitter */ \"./node_modules/namespace-emitter/index.js\");\n\nvar cuid = __webpack_require__(/*! cuid */ \"./node_modules/cuid/index.js\");\n\nvar throttle = __webpack_require__(/*! lodash.throttle */ \"./node_modules/lodash.throttle/index.js\");\n\nvar prettyBytes = __webpack_require__(/*! @uppy/utils/lib/prettyBytes */ \"./node_modules/@uppy/utils/lib/prettyBytes.js\");\n\nvar match = __webpack_require__(/*! mime-match */ \"./node_modules/mime-match/index.js\");\n\nvar DefaultStore = __webpack_require__(/*! @uppy/store-default */ \"./node_modules/@uppy/store-default/lib/index.js\");\n\nvar getFileType = __webpack_require__(/*! @uppy/utils/lib/getFileType */ \"./node_modules/@uppy/utils/lib/getFileType.js\");\n\nvar getFileNameAndExtension = __webpack_require__(/*! @uppy/utils/lib/getFileNameAndExtension */ \"./node_modules/@uppy/utils/lib/getFileNameAndExtension.js\");\n\nvar generateFileID = __webpack_require__(/*! @uppy/utils/lib/generateFileID */ \"./node_modules/@uppy/utils/lib/generateFileID.js\");\n\nvar supportsUploadProgress = __webpack_require__(/*! ./supportsUploadProgress */ \"./node_modules/@uppy/core/lib/supportsUploadProgress.js\");\n\nvar _require = __webpack_require__(/*! ./loggers */ \"./node_modules/@uppy/core/lib/loggers.js\"),\n    nullLogger = _require.nullLogger,\n    debugLogger = _require.debugLogger;\n\nvar Plugin = __webpack_require__(/*! ./Plugin */ \"./node_modules/@uppy/core/lib/Plugin.js\"); // Exported from here.\n\n\nvar RestrictionError =\n/*#__PURE__*/\nfunction (_Error) {\n  _inheritsLoose(RestrictionError, _Error);\n\n  function RestrictionError() {\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 = _Error.call.apply(_Error, [this].concat(args)) || this;\n    _this.isRestriction = true;\n    return _this;\n  }\n\n  return RestrictionError;\n}(_wrapNativeSuper(Error));\n/**\n * Uppy Core module.\n * Manages plugins, state updates, acts as an event bus,\n * adds/removes files and metadata.\n */\n\n\nvar Uppy =\n/*#__PURE__*/\nfunction () {\n  /**\n   * Instantiate Uppy\n   *\n   * @param {object} opts — Uppy options\n   */\n  function Uppy(opts) {\n    var _this2 = this;\n\n    this.defaultLocale = {\n      strings: {\n        addBulkFilesFailed: {\n          0: 'Failed to add %{smart_count} file due to an internal error',\n          1: 'Failed to add %{smart_count} files due to internal errors'\n        },\n        youCanOnlyUploadX: {\n          0: 'You can only upload %{smart_count} file',\n          1: 'You can only upload %{smart_count} files',\n          2: 'You can only upload %{smart_count} files'\n        },\n        youHaveToAtLeastSelectX: {\n          0: 'You have to select at least %{smart_count} file',\n          1: 'You have to select at least %{smart_count} files',\n          2: 'You have to select at least %{smart_count} files'\n        },\n        exceedsSize: 'This file exceeds maximum allowed size of',\n        youCanOnlyUploadFileTypes: 'You can only upload: %{types}',\n        companionError: 'Connection with Companion failed',\n        companionAuthError: 'Authorization required',\n        companionUnauthorizeHint: 'To unauthorize to your %{provider} account, please go to %{url}',\n        failedToUpload: 'Failed to upload %{file}',\n        noInternetConnection: 'No Internet connection',\n        connectedToInternet: 'Connected to the Internet',\n        // Strings for remote providers\n        noFilesFound: 'You have no files or folders here',\n        selectX: {\n          0: 'Select %{smart_count}',\n          1: 'Select %{smart_count}',\n          2: 'Select %{smart_count}'\n        },\n        selectAllFilesFromFolderNamed: 'Select all files from folder %{name}',\n        unselectAllFilesFromFolderNamed: 'Unselect all files from folder %{name}',\n        selectFileNamed: 'Select file %{name}',\n        unselectFileNamed: 'Unselect file %{name}',\n        openFolderNamed: 'Open folder %{name}',\n        cancel: 'Cancel',\n        logOut: 'Log out',\n        filter: 'Filter',\n        resetFilter: 'Reset filter',\n        loading: 'Loading...',\n        authenticateWithTitle: 'Please authenticate with %{pluginName} to select files',\n        authenticateWith: 'Connect to %{pluginName}',\n        emptyFolderAdded: 'No files were added from empty folder',\n        folderAdded: {\n          0: 'Added %{smart_count} file from %{folder}',\n          1: 'Added %{smart_count} files from %{folder}',\n          2: 'Added %{smart_count} files from %{folder}'\n        }\n      }\n    };\n    var defaultOptions = {\n      id: 'uppy',\n      autoProceed: false,\n      allowMultipleUploads: true,\n      debug: false,\n      restrictions: {\n        maxFileSize: null,\n        maxNumberOfFiles: null,\n        minNumberOfFiles: null,\n        allowedFileTypes: null\n      },\n      meta: {},\n      onBeforeFileAdded: function onBeforeFileAdded(currentFile, files) {\n        return currentFile;\n      },\n      onBeforeUpload: function onBeforeUpload(files) {\n        return files;\n      },\n      store: DefaultStore(),\n      logger: nullLogger\n    }; // Merge default options with the ones set by user,\n    // making sure to merge restrictions too\n\n    this.opts = _extends({}, defaultOptions, {}, opts, {\n      restrictions: _extends({}, defaultOptions.restrictions, {}, opts && opts.restrictions)\n    }); // Support debug: true for backwards-compatability, unless logger is set in opts\n    // opts instead of this.opts to avoid comparing objects — we set logger: nullLogger in defaultOptions\n\n    if (opts && opts.logger && opts.debug) {\n      this.log('You are using a custom `logger`, but also set `debug: true`, which uses built-in logger to output logs to console. Ignoring `debug: true` and using your custom `logger`.', 'warning');\n    } else if (opts && opts.debug) {\n      this.opts.logger = debugLogger;\n    }\n\n    this.log(\"Using Core v\" + this.constructor.VERSION);\n\n    if (this.opts.restrictions.allowedFileTypes && this.opts.restrictions.allowedFileTypes !== null && !Array.isArray(this.opts.restrictions.allowedFileTypes)) {\n      throw new TypeError('`restrictions.allowedFileTypes` must be an array');\n    }\n\n    this.i18nInit(); // Container for different types of plugins\n\n    this.plugins = {};\n    this.getState = this.getState.bind(this);\n    this.getPlugin = this.getPlugin.bind(this);\n    this.setFileMeta = this.setFileMeta.bind(this);\n    this.setFileState = this.setFileState.bind(this);\n    this.log = this.log.bind(this);\n    this.info = this.info.bind(this);\n    this.hideInfo = this.hideInfo.bind(this);\n    this.addFile = this.addFile.bind(this);\n    this.removeFile = this.removeFile.bind(this);\n    this.pauseResume = this.pauseResume.bind(this); // ___Why throttle at 500ms?\n    //    - We must throttle at >250ms for superfocus in Dashboard to work well (because animation takes 0.25s, and we want to wait for all animations to be over before refocusing).\n    //    [Practical Check]: if thottle is at 100ms, then if you are uploading a file, and click 'ADD MORE FILES', - focus won't activate in Firefox.\n    //    - We must throttle at around >500ms to avoid performance lags.\n    //    [Practical Check] Firefox, try to upload a big file for a prolonged period of time. Laptop will start to heat up.\n\n    this._calculateProgress = throttle(this._calculateProgress.bind(this), 500, {\n      leading: true,\n      trailing: true\n    });\n    this.updateOnlineStatus = this.updateOnlineStatus.bind(this);\n    this.resetProgress = this.resetProgress.bind(this);\n    this.pauseAll = this.pauseAll.bind(this);\n    this.resumeAll = this.resumeAll.bind(this);\n    this.retryAll = this.retryAll.bind(this);\n    this.cancelAll = this.cancelAll.bind(this);\n    this.retryUpload = this.retryUpload.bind(this);\n    this.upload = this.upload.bind(this);\n    this.emitter = ee();\n    this.on = this.on.bind(this);\n    this.off = this.off.bind(this);\n    this.once = this.emitter.once.bind(this.emitter);\n    this.emit = this.emitter.emit.bind(this.emitter);\n    this.preProcessors = [];\n    this.uploaders = [];\n    this.postProcessors = [];\n    this.store = this.opts.store;\n    this.setState({\n      plugins: {},\n      files: {},\n      currentUploads: {},\n      allowNewUpload: true,\n      capabilities: {\n        uploadProgress: supportsUploadProgress(),\n        individualCancellation: true,\n        resumableUploads: false\n      },\n      totalProgress: 0,\n      meta: _extends({}, this.opts.meta),\n      info: {\n        isHidden: true,\n        type: 'info',\n        message: ''\n      }\n    });\n    this._storeUnsubscribe = this.store.subscribe(function (prevState, nextState, patch) {\n      _this2.emit('state-update', prevState, nextState, patch);\n\n      _this2.updateAll(nextState);\n    }); // Exposing uppy object on window for debugging and testing\n\n    if (this.opts.debug && typeof window !== 'undefined') {\n      window[this.opts.id] = this;\n    }\n\n    this._addListeners();\n  }\n\n  var _proto = Uppy.prototype;\n\n  _proto.on = function on(event, callback) {\n    this.emitter.on(event, callback);\n    return this;\n  };\n\n  _proto.off = function off(event, callback) {\n    this.emitter.off(event, callback);\n    return this;\n  }\n  /**\n   * Iterate on all plugins and run `update` on them.\n   * Called each time state changes.\n   *\n   */\n  ;\n\n  _proto.updateAll = function updateAll(state) {\n    this.iteratePlugins(function (plugin) {\n      plugin.update(state);\n    });\n  }\n  /**\n   * Updates state with a patch\n   *\n   * @param {object} patch {foo: 'bar'}\n   */\n  ;\n\n  _proto.setState = function setState(patch) {\n    this.store.setState(patch);\n  }\n  /**\n   * Returns current state.\n   *\n   * @returns {object}\n   */\n  ;\n\n  _proto.getState = function getState() {\n    return this.store.getState();\n  }\n  /**\n   * Back compat for when uppy.state is used instead of uppy.getState().\n   */\n  ;\n\n  /**\n   * Shorthand to set state for a specific file.\n   */\n  _proto.setFileState = function setFileState(fileID, state) {\n    var _extends2;\n\n    if (!this.getState().files[fileID]) {\n      throw new Error(\"Can\\u2019t set state for \" + fileID + \" (the file could have been removed)\");\n    }\n\n    this.setState({\n      files: _extends({}, this.getState().files, (_extends2 = {}, _extends2[fileID] = _extends({}, this.getState().files[fileID], state), _extends2))\n    });\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.opts.locale]);\n    this.locale = this.translator.locale;\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.i18nArray = this.translator.translateArray.bind(this.translator);\n  };\n\n  _proto.setOptions = function setOptions(newOpts) {\n    this.opts = _extends({}, this.opts, {}, newOpts, {\n      restrictions: _extends({}, this.opts.restrictions, {}, newOpts && newOpts.restrictions)\n    });\n\n    if (newOpts.meta) {\n      this.setMeta(newOpts.meta);\n    }\n\n    this.i18nInit();\n\n    if (newOpts.locale) {\n      this.iteratePlugins(function (plugin) {\n        plugin.setOptions();\n      });\n    }\n\n    this.setState(); // so that UI re-renders with new options\n  };\n\n  _proto.resetProgress = function resetProgress() {\n    var defaultProgress = {\n      percentage: 0,\n      bytesUploaded: 0,\n      uploadComplete: false,\n      uploadStarted: null\n    };\n\n    var files = _extends({}, this.getState().files);\n\n    var updatedFiles = {};\n    Object.keys(files).forEach(function (fileID) {\n      var updatedFile = _extends({}, files[fileID]);\n\n      updatedFile.progress = _extends({}, updatedFile.progress, defaultProgress);\n      updatedFiles[fileID] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles,\n      totalProgress: 0\n    });\n    this.emit('reset-progress');\n  };\n\n  _proto.addPreProcessor = function addPreProcessor(fn) {\n    this.preProcessors.push(fn);\n  };\n\n  _proto.removePreProcessor = function removePreProcessor(fn) {\n    var i = this.preProcessors.indexOf(fn);\n\n    if (i !== -1) {\n      this.preProcessors.splice(i, 1);\n    }\n  };\n\n  _proto.addPostProcessor = function addPostProcessor(fn) {\n    this.postProcessors.push(fn);\n  };\n\n  _proto.removePostProcessor = function removePostProcessor(fn) {\n    var i = this.postProcessors.indexOf(fn);\n\n    if (i !== -1) {\n      this.postProcessors.splice(i, 1);\n    }\n  };\n\n  _proto.addUploader = function addUploader(fn) {\n    this.uploaders.push(fn);\n  };\n\n  _proto.removeUploader = function removeUploader(fn) {\n    var i = this.uploaders.indexOf(fn);\n\n    if (i !== -1) {\n      this.uploaders.splice(i, 1);\n    }\n  };\n\n  _proto.setMeta = function setMeta(data) {\n    var updatedMeta = _extends({}, this.getState().meta, data);\n\n    var updatedFiles = _extends({}, this.getState().files);\n\n    Object.keys(updatedFiles).forEach(function (fileID) {\n      updatedFiles[fileID] = _extends({}, updatedFiles[fileID], {\n        meta: _extends({}, updatedFiles[fileID].meta, data)\n      });\n    });\n    this.log('Adding metadata:');\n    this.log(data);\n    this.setState({\n      meta: updatedMeta,\n      files: updatedFiles\n    });\n  };\n\n  _proto.setFileMeta = function setFileMeta(fileID, data) {\n    var updatedFiles = _extends({}, this.getState().files);\n\n    if (!updatedFiles[fileID]) {\n      this.log('Was trying to set metadata for a file that has been removed: ', fileID);\n      return;\n    }\n\n    var newMeta = _extends({}, updatedFiles[fileID].meta, data);\n\n    updatedFiles[fileID] = _extends({}, updatedFiles[fileID], {\n      meta: newMeta\n    });\n    this.setState({\n      files: updatedFiles\n    });\n  }\n  /**\n   * Get a file object.\n   *\n   * @param {string} fileID The ID of the file object to return.\n   */\n  ;\n\n  _proto.getFile = function getFile(fileID) {\n    return this.getState().files[fileID];\n  }\n  /**\n   * Get all files in an array.\n   */\n  ;\n\n  _proto.getFiles = function getFiles() {\n    var _this$getState = this.getState(),\n        files = _this$getState.files;\n\n    return Object.keys(files).map(function (fileID) {\n      return files[fileID];\n    });\n  }\n  /**\n   * Check if minNumberOfFiles restriction is reached before uploading.\n   *\n   * @private\n   */\n  ;\n\n  _proto._checkMinNumberOfFiles = function _checkMinNumberOfFiles(files) {\n    var minNumberOfFiles = this.opts.restrictions.minNumberOfFiles;\n\n    if (Object.keys(files).length < minNumberOfFiles) {\n      throw new RestrictionError(\"\" + this.i18n('youHaveToAtLeastSelectX', {\n        smart_count: minNumberOfFiles\n      }));\n    }\n  }\n  /**\n   * Check if file passes a set of restrictions set in options: maxFileSize,\n   * maxNumberOfFiles and allowedFileTypes.\n   *\n   * @param {object} files Object of IDs → files already added\n   * @param {object} file object to check\n   * @private\n   */\n  ;\n\n  _proto._checkRestrictions = function _checkRestrictions(files, file) {\n    var _this$opts$restrictio = this.opts.restrictions,\n        maxFileSize = _this$opts$restrictio.maxFileSize,\n        maxNumberOfFiles = _this$opts$restrictio.maxNumberOfFiles,\n        allowedFileTypes = _this$opts$restrictio.allowedFileTypes;\n\n    if (maxNumberOfFiles) {\n      if (Object.keys(files).length + 1 > maxNumberOfFiles) {\n        throw new RestrictionError(\"\" + this.i18n('youCanOnlyUploadX', {\n          smart_count: maxNumberOfFiles\n        }));\n      }\n    }\n\n    if (allowedFileTypes) {\n      var isCorrectFileType = allowedFileTypes.some(function (type) {\n        // is this is a mime-type\n        if (type.indexOf('/') > -1) {\n          if (!file.type) return false;\n          return match(file.type, type);\n        } // otherwise this is likely an extension\n\n\n        if (type[0] === '.') {\n          return file.extension.toLowerCase() === type.substr(1).toLowerCase();\n        }\n\n        return false;\n      });\n\n      if (!isCorrectFileType) {\n        var allowedFileTypesString = allowedFileTypes.join(', ');\n        throw new RestrictionError(this.i18n('youCanOnlyUploadFileTypes', {\n          types: allowedFileTypesString\n        }));\n      }\n    } // We can't check maxFileSize if the size is unknown.\n\n\n    if (maxFileSize && file.data.size != null) {\n      if (file.data.size > maxFileSize) {\n        throw new RestrictionError(this.i18n('exceedsSize') + \" \" + prettyBytes(maxFileSize));\n      }\n    }\n  };\n\n  _proto._showOrLogErrorAndThrow = function _showOrLogErrorAndThrow(err, _temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        _ref$showInformer = _ref.showInformer,\n        showInformer = _ref$showInformer === void 0 ? true : _ref$showInformer,\n        _ref$file = _ref.file,\n        file = _ref$file === void 0 ? null : _ref$file;\n\n    var message = typeof err === 'object' ? err.message : err;\n    var details = typeof err === 'object' && err.details ? err.details : ''; // Restriction errors should be logged, but not as errors,\n    // as they are expected and shown in the UI.\n\n    if (err.isRestriction) {\n      this.log(message + \" \" + details);\n      this.emit('restriction-failed', file, err);\n    } else {\n      this.log(message + \" \" + details, 'error');\n    } // Sometimes informer has to be shown manually by the developer,\n    // for example, in `onBeforeFileAdded`.\n\n\n    if (showInformer) {\n      this.info({\n        message: message,\n        details: details\n      }, 'error', 5000);\n    }\n\n    throw typeof err === 'object' ? err : new Error(err);\n  };\n\n  _proto._assertNewUploadAllowed = function _assertNewUploadAllowed(file) {\n    var _this$getState2 = this.getState(),\n        allowNewUpload = _this$getState2.allowNewUpload;\n\n    if (allowNewUpload === false) {\n      this._showOrLogErrorAndThrow(new RestrictionError('Cannot add new files: already uploading.'), {\n        file: file\n      });\n    }\n  }\n  /**\n   * Create a file state object based on user-provided `addFile()` options.\n   *\n   * Note this is extremely side-effectful and should only be done when a file state object will be added to state immediately afterward!\n   *\n   * The `files` value is passed in because it may be updated by the caller without updating the store.\n   */\n  ;\n\n  _proto._checkAndCreateFileStateObject = function _checkAndCreateFileStateObject(files, file) {\n    var fileType = getFileType(file);\n    file.type = fileType;\n    var onBeforeFileAddedResult = this.opts.onBeforeFileAdded(file, files);\n\n    if (onBeforeFileAddedResult === false) {\n      // Don’t show UI info for this error, as it should be done by the developer\n      this._showOrLogErrorAndThrow(new RestrictionError('Cannot add the file because onBeforeFileAdded returned false.'), {\n        showInformer: false,\n        file: file\n      });\n    }\n\n    if (typeof onBeforeFileAddedResult === 'object' && onBeforeFileAddedResult) {\n      file = onBeforeFileAddedResult;\n    }\n\n    var fileName;\n\n    if (file.name) {\n      fileName = file.name;\n    } else if (fileType.split('/')[0] === 'image') {\n      fileName = fileType.split('/')[0] + '.' + fileType.split('/')[1];\n    } else {\n      fileName = 'noname';\n    }\n\n    var fileExtension = getFileNameAndExtension(fileName).extension;\n    var isRemote = file.isRemote || false;\n    var fileID = generateFileID(file);\n\n    if (files[fileID]) {\n      this._showOrLogErrorAndThrow(new RestrictionError(\"Cannot add the duplicate file '\" + fileName + \"', it already exists.\"), {\n        file: file\n      });\n    }\n\n    var meta = file.meta || {};\n    meta.name = fileName;\n    meta.type = fileType; // `null` means the size is unknown.\n\n    var size = isFinite(file.data.size) ? file.data.size : null;\n    var newFile = {\n      source: file.source || '',\n      id: fileID,\n      name: fileName,\n      extension: fileExtension || '',\n      meta: _extends({}, this.getState().meta, {}, meta),\n      type: fileType,\n      data: file.data,\n      progress: {\n        percentage: 0,\n        bytesUploaded: 0,\n        bytesTotal: size,\n        uploadComplete: false,\n        uploadStarted: null\n      },\n      size: size,\n      isRemote: isRemote,\n      remote: file.remote || '',\n      preview: file.preview\n    };\n\n    try {\n      this._checkRestrictions(files, newFile);\n    } catch (err) {\n      this._showOrLogErrorAndThrow(err, {\n        file: newFile\n      });\n    }\n\n    return newFile;\n  } // Schedule an upload if `autoProceed` is enabled.\n  ;\n\n  _proto._startIfAutoProceed = function _startIfAutoProceed() {\n    var _this3 = this;\n\n    if (this.opts.autoProceed && !this.scheduledAutoProceed) {\n      this.scheduledAutoProceed = setTimeout(function () {\n        _this3.scheduledAutoProceed = null;\n\n        _this3.upload().catch(function (err) {\n          if (!err.isRestriction) {\n            _this3.log(err.stack || err.message || err);\n          }\n        });\n      }, 4);\n    }\n  }\n  /**\n   * Add a new file to `state.files`. This will run `onBeforeFileAdded`,\n   * try to guess file type in a clever way, check file against restrictions,\n   * and start an upload if `autoProceed === true`.\n   *\n   * @param {object} file object to add\n   * @returns {string} id for the added file\n   */\n  ;\n\n  _proto.addFile = function addFile(file) {\n    var _extends3;\n\n    this._assertNewUploadAllowed(file);\n\n    var _this$getState3 = this.getState(),\n        files = _this$getState3.files;\n\n    var newFile = this._checkAndCreateFileStateObject(files, file);\n\n    this.setState({\n      files: _extends({}, files, (_extends3 = {}, _extends3[newFile.id] = newFile, _extends3))\n    });\n    this.emit('file-added', newFile);\n    this.log(\"Added file: \" + newFile.name + \", \" + newFile.id + \", mime type: \" + newFile.type);\n\n    this._startIfAutoProceed();\n\n    return newFile.id;\n  }\n  /**\n   * Add multiple files to `state.files`. See the `addFile()` documentation.\n   *\n   * This cuts some corners for performance, so should typically only be used in cases where there may be a lot of files.\n   *\n   * If an error occurs while adding a file, it is logged and the user is notified. This is good for UI plugins, but not for programmatic use. Programmatic users should usually still use `addFile()` on individual files.\n   */\n  ;\n\n  _proto.addFiles = function addFiles(fileDescriptors) {\n    var _this4 = this;\n\n    this._assertNewUploadAllowed(); // create a copy of the files object only once\n\n\n    var files = _extends({}, this.getState().files);\n\n    var newFiles = [];\n    var errors = [];\n\n    for (var i = 0; i < fileDescriptors.length; i++) {\n      try {\n        var newFile = this._checkAndCreateFileStateObject(files, fileDescriptors[i]);\n\n        newFiles.push(newFile);\n        files[newFile.id] = newFile;\n      } catch (err) {\n        if (!err.isRestriction) {\n          errors.push(err);\n        }\n      }\n    }\n\n    this.setState({\n      files: files\n    });\n    newFiles.forEach(function (newFile) {\n      _this4.emit('file-added', newFile);\n    });\n    this.log(\"Added batch of \" + newFiles.length + \" files\");\n\n    this._startIfAutoProceed();\n\n    if (errors.length > 0) {\n      var message = 'Multiple errors occurred while adding files:\\n';\n      errors.forEach(function (subError) {\n        message += \"\\n * \" + subError.message;\n      });\n      this.info({\n        message: this.i18n('addBulkFilesFailed', {\n          smart_count: errors.length\n        }),\n        details: message\n      }, 'error', 5000);\n      var err = new Error(message);\n      err.errors = errors;\n      throw err;\n    }\n  };\n\n  _proto.removeFiles = function removeFiles(fileIDs) {\n    var _this5 = this;\n\n    var _this$getState4 = this.getState(),\n        files = _this$getState4.files,\n        currentUploads = _this$getState4.currentUploads;\n\n    var updatedFiles = _extends({}, files);\n\n    var updatedUploads = _extends({}, currentUploads);\n\n    var removedFiles = Object.create(null);\n    fileIDs.forEach(function (fileID) {\n      if (files[fileID]) {\n        removedFiles[fileID] = files[fileID];\n        delete updatedFiles[fileID];\n      }\n    }); // Remove files from the `fileIDs` list in each upload.\n\n    function fileIsNotRemoved(uploadFileID) {\n      return removedFiles[uploadFileID] === undefined;\n    }\n\n    var uploadsToRemove = [];\n    Object.keys(updatedUploads).forEach(function (uploadID) {\n      var newFileIDs = currentUploads[uploadID].fileIDs.filter(fileIsNotRemoved); // Remove the upload if no files are associated with it anymore.\n\n      if (newFileIDs.length === 0) {\n        uploadsToRemove.push(uploadID);\n        return;\n      }\n\n      updatedUploads[uploadID] = _extends({}, currentUploads[uploadID], {\n        fileIDs: newFileIDs\n      });\n    });\n    uploadsToRemove.forEach(function (uploadID) {\n      delete updatedUploads[uploadID];\n    });\n    var stateUpdate = {\n      currentUploads: updatedUploads,\n      files: updatedFiles\n    }; // If all files were removed - allow new uploads!\n\n    if (Object.keys(updatedFiles).length === 0) {\n      stateUpdate.allowNewUpload = true;\n    }\n\n    this.setState(stateUpdate);\n\n    this._calculateTotalProgress();\n\n    var removedFileIDs = Object.keys(removedFiles);\n    removedFileIDs.forEach(function (fileID) {\n      _this5.emit('file-removed', removedFiles[fileID]);\n    });\n\n    if (removedFileIDs.length > 5) {\n      this.log(\"Removed \" + removedFileIDs.length + \" files\");\n    } else {\n      this.log(\"Removed files: \" + removedFileIDs.join(', '));\n    }\n  };\n\n  _proto.removeFile = function removeFile(fileID) {\n    this.removeFiles([fileID]);\n  };\n\n  _proto.pauseResume = function pauseResume(fileID) {\n    if (!this.getState().capabilities.resumableUploads || this.getFile(fileID).uploadComplete) {\n      return;\n    }\n\n    var wasPaused = this.getFile(fileID).isPaused || false;\n    var isPaused = !wasPaused;\n    this.setFileState(fileID, {\n      isPaused: isPaused\n    });\n    this.emit('upload-pause', fileID, isPaused);\n    return isPaused;\n  };\n\n  _proto.pauseAll = function pauseAll() {\n    var updatedFiles = _extends({}, this.getState().files);\n\n    var inProgressUpdatedFiles = Object.keys(updatedFiles).filter(function (file) {\n      return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;\n    });\n    inProgressUpdatedFiles.forEach(function (file) {\n      var updatedFile = _extends({}, updatedFiles[file], {\n        isPaused: true\n      });\n\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles\n    });\n    this.emit('pause-all');\n  };\n\n  _proto.resumeAll = function resumeAll() {\n    var updatedFiles = _extends({}, this.getState().files);\n\n    var inProgressUpdatedFiles = Object.keys(updatedFiles).filter(function (file) {\n      return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;\n    });\n    inProgressUpdatedFiles.forEach(function (file) {\n      var updatedFile = _extends({}, updatedFiles[file], {\n        isPaused: false,\n        error: null\n      });\n\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles\n    });\n    this.emit('resume-all');\n  };\n\n  _proto.retryAll = function retryAll() {\n    var updatedFiles = _extends({}, this.getState().files);\n\n    var filesToRetry = Object.keys(updatedFiles).filter(function (file) {\n      return updatedFiles[file].error;\n    });\n    filesToRetry.forEach(function (file) {\n      var updatedFile = _extends({}, updatedFiles[file], {\n        isPaused: false,\n        error: null\n      });\n\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles,\n      error: null\n    });\n    this.emit('retry-all', filesToRetry);\n\n    var uploadID = this._createUpload(filesToRetry);\n\n    return this._runUpload(uploadID);\n  };\n\n  _proto.cancelAll = function cancelAll() {\n    this.emit('cancel-all');\n\n    var _this$getState5 = this.getState(),\n        files = _this$getState5.files;\n\n    var fileIDs = Object.keys(files);\n\n    if (fileIDs.length) {\n      this.removeFiles(fileIDs);\n    }\n\n    this.setState({\n      totalProgress: 0,\n      error: null\n    });\n  };\n\n  _proto.retryUpload = function retryUpload(fileID) {\n    this.setFileState(fileID, {\n      error: null,\n      isPaused: false\n    });\n    this.emit('upload-retry', fileID);\n\n    var uploadID = this._createUpload([fileID]);\n\n    return this._runUpload(uploadID);\n  };\n\n  _proto.reset = function reset() {\n    this.cancelAll();\n  };\n\n  _proto._calculateProgress = function _calculateProgress(file, data) {\n    if (!this.getFile(file.id)) {\n      this.log(\"Not setting progress for a file that has been removed: \" + file.id);\n      return;\n    } // bytesTotal may be null or zero; in that case we can't divide by it\n\n\n    var canHavePercentage = isFinite(data.bytesTotal) && data.bytesTotal > 0;\n    this.setFileState(file.id, {\n      progress: _extends({}, this.getFile(file.id).progress, {\n        bytesUploaded: data.bytesUploaded,\n        bytesTotal: data.bytesTotal,\n        percentage: canHavePercentage // TODO(goto-bus-stop) flooring this should probably be the choice of the UI?\n        // we get more accurate calculations if we don't round this at all.\n        ? Math.round(data.bytesUploaded / data.bytesTotal * 100) : 0\n      })\n    });\n\n    this._calculateTotalProgress();\n  };\n\n  _proto._calculateTotalProgress = function _calculateTotalProgress() {\n    // calculate total progress, using the number of files currently uploading,\n    // multiplied by 100 and the summ of individual progress of each file\n    var files = this.getFiles();\n    var inProgress = files.filter(function (file) {\n      return file.progress.uploadStarted;\n    });\n\n    if (inProgress.length === 0) {\n      this.emit('progress', 0);\n      this.setState({\n        totalProgress: 0\n      });\n      return;\n    }\n\n    var sizedFiles = inProgress.filter(function (file) {\n      return file.progress.bytesTotal != null;\n    });\n    var unsizedFiles = inProgress.filter(function (file) {\n      return file.progress.bytesTotal == null;\n    });\n\n    if (sizedFiles.length === 0) {\n      var progressMax = inProgress.length * 100;\n      var currentProgress = unsizedFiles.reduce(function (acc, file) {\n        return acc + file.progress.percentage;\n      }, 0);\n\n      var _totalProgress = Math.round(currentProgress / progressMax * 100);\n\n      this.setState({\n        totalProgress: _totalProgress\n      });\n      return;\n    }\n\n    var totalSize = sizedFiles.reduce(function (acc, file) {\n      return acc + file.progress.bytesTotal;\n    }, 0);\n    var averageSize = totalSize / sizedFiles.length;\n    totalSize += averageSize * unsizedFiles.length;\n    var uploadedSize = 0;\n    sizedFiles.forEach(function (file) {\n      uploadedSize += file.progress.bytesUploaded;\n    });\n    unsizedFiles.forEach(function (file) {\n      uploadedSize += averageSize * (file.progress.percentage || 0) / 100;\n    });\n    var totalProgress = totalSize === 0 ? 0 : Math.round(uploadedSize / totalSize * 100); // hot fix, because:\n    // uploadedSize ended up larger than totalSize, resulting in 1325% total\n\n    if (totalProgress > 100) {\n      totalProgress = 100;\n    }\n\n    this.setState({\n      totalProgress: totalProgress\n    });\n    this.emit('progress', totalProgress);\n  }\n  /**\n   * Registers listeners for all global actions, like:\n   * `error`, `file-removed`, `upload-progress`\n   */\n  ;\n\n  _proto._addListeners = function _addListeners() {\n    var _this6 = this;\n\n    this.on('error', function (error) {\n      _this6.setState({\n        error: error.message || 'Unknown error'\n      });\n    });\n    this.on('upload-error', function (file, error, response) {\n      _this6.setFileState(file.id, {\n        error: error.message || 'Unknown error',\n        response: response\n      });\n\n      _this6.setState({\n        error: error.message\n      });\n\n      var message = _this6.i18n('failedToUpload', {\n        file: file.name\n      });\n\n      if (typeof error === 'object' && error.message) {\n        message = {\n          message: message,\n          details: error.message\n        };\n      }\n\n      _this6.info(message, 'error', 5000);\n    });\n    this.on('upload', function () {\n      _this6.setState({\n        error: null\n      });\n    });\n    this.on('upload-started', function (file, upload) {\n      if (!_this6.getFile(file.id)) {\n        _this6.log(\"Not setting progress for a file that has been removed: \" + file.id);\n\n        return;\n      }\n\n      _this6.setFileState(file.id, {\n        progress: {\n          uploadStarted: Date.now(),\n          uploadComplete: false,\n          percentage: 0,\n          bytesUploaded: 0,\n          bytesTotal: file.size\n        }\n      });\n    });\n    this.on('upload-progress', this._calculateProgress);\n    this.on('upload-success', function (file, uploadResp) {\n      if (!_this6.getFile(file.id)) {\n        _this6.log(\"Not setting progress for a file that has been removed: \" + file.id);\n\n        return;\n      }\n\n      var currentProgress = _this6.getFile(file.id).progress;\n\n      _this6.setFileState(file.id, {\n        progress: _extends({}, currentProgress, {\n          uploadComplete: true,\n          percentage: 100,\n          bytesUploaded: currentProgress.bytesTotal\n        }),\n        response: uploadResp,\n        uploadURL: uploadResp.uploadURL,\n        isPaused: false\n      });\n\n      _this6._calculateTotalProgress();\n    });\n    this.on('preprocess-progress', function (file, progress) {\n      if (!_this6.getFile(file.id)) {\n        _this6.log(\"Not setting progress for a file that has been removed: \" + file.id);\n\n        return;\n      }\n\n      _this6.setFileState(file.id, {\n        progress: _extends({}, _this6.getFile(file.id).progress, {\n          preprocess: progress\n        })\n      });\n    });\n    this.on('preprocess-complete', function (file) {\n      if (!_this6.getFile(file.id)) {\n        _this6.log(\"Not setting progress for a file that has been removed: \" + file.id);\n\n        return;\n      }\n\n      var files = _extends({}, _this6.getState().files);\n\n      files[file.id] = _extends({}, files[file.id], {\n        progress: _extends({}, files[file.id].progress)\n      });\n      delete files[file.id].progress.preprocess;\n\n      _this6.setState({\n        files: files\n      });\n    });\n    this.on('postprocess-progress', function (file, progress) {\n      if (!_this6.getFile(file.id)) {\n        _this6.log(\"Not setting progress for a file that has been removed: \" + file.id);\n\n        return;\n      }\n\n      _this6.setFileState(file.id, {\n        progress: _extends({}, _this6.getState().files[file.id].progress, {\n          postprocess: progress\n        })\n      });\n    });\n    this.on('postprocess-complete', function (file) {\n      if (!_this6.getFile(file.id)) {\n        _this6.log(\"Not setting progress for a file that has been removed: \" + file.id);\n\n        return;\n      }\n\n      var files = _extends({}, _this6.getState().files);\n\n      files[file.id] = _extends({}, files[file.id], {\n        progress: _extends({}, files[file.id].progress)\n      });\n      delete files[file.id].progress.postprocess; // TODO should we set some kind of `fullyComplete` property on the file object\n      // so it's easier to see that the file is upload…fully complete…rather than\n      // what we have to do now (`uploadComplete && !postprocess`)\n\n      _this6.setState({\n        files: files\n      });\n    });\n    this.on('restored', function () {\n      // Files may have changed--ensure progress is still accurate.\n      _this6._calculateTotalProgress();\n    }); // show informer if offline\n\n    if (typeof window !== 'undefined' && window.addEventListener) {\n      window.addEventListener('online', function () {\n        return _this6.updateOnlineStatus();\n      });\n      window.addEventListener('offline', function () {\n        return _this6.updateOnlineStatus();\n      });\n      setTimeout(function () {\n        return _this6.updateOnlineStatus();\n      }, 3000);\n    }\n  };\n\n  _proto.updateOnlineStatus = function updateOnlineStatus() {\n    var online = typeof window.navigator.onLine !== 'undefined' ? window.navigator.onLine : true;\n\n    if (!online) {\n      this.emit('is-offline');\n      this.info(this.i18n('noInternetConnection'), 'error', 0);\n      this.wasOffline = true;\n    } else {\n      this.emit('is-online');\n\n      if (this.wasOffline) {\n        this.emit('back-online');\n        this.info(this.i18n('connectedToInternet'), 'success', 3000);\n        this.wasOffline = false;\n      }\n    }\n  };\n\n  _proto.getID = function getID() {\n    return this.opts.id;\n  }\n  /**\n   * Registers a plugin with Core.\n   *\n   * @param {object} Plugin object\n   * @param {object} [opts] object with options to be passed to Plugin\n   * @returns {object} self for chaining\n   */\n  ;\n\n  _proto.use = function use(Plugin, opts) {\n    if (typeof Plugin !== 'function') {\n      var msg = \"Expected a plugin class, but got \" + (Plugin === null ? 'null' : typeof Plugin) + \".\" + ' Please verify that the plugin was imported and spelled correctly.';\n      throw new TypeError(msg);\n    } // Instantiate\n\n\n    var plugin = new Plugin(this, opts);\n    var pluginId = plugin.id;\n    this.plugins[plugin.type] = this.plugins[plugin.type] || [];\n\n    if (!pluginId) {\n      throw new Error('Your plugin must have an id');\n    }\n\n    if (!plugin.type) {\n      throw new Error('Your plugin must have a type');\n    }\n\n    var existsPluginAlready = this.getPlugin(pluginId);\n\n    if (existsPluginAlready) {\n      var _msg = \"Already found a plugin named '\" + existsPluginAlready.id + \"'. \" + (\"Tried to use: '\" + pluginId + \"'.\\n\") + 'Uppy plugins must have unique `id` options. See https://uppy.io/docs/plugins/#id.';\n\n      throw new Error(_msg);\n    }\n\n    if (Plugin.VERSION) {\n      this.log(\"Using \" + pluginId + \" v\" + Plugin.VERSION);\n    }\n\n    this.plugins[plugin.type].push(plugin);\n    plugin.install();\n    return this;\n  }\n  /**\n   * Find one Plugin by name.\n   *\n   * @param {string} id plugin id\n   * @returns {object|boolean}\n   */\n  ;\n\n  _proto.getPlugin = function getPlugin(id) {\n    var foundPlugin = null;\n    this.iteratePlugins(function (plugin) {\n      if (plugin.id === id) {\n        foundPlugin = plugin;\n        return false;\n      }\n    });\n    return foundPlugin;\n  }\n  /**\n   * Iterate through all `use`d plugins.\n   *\n   * @param {Function} method that will be run on each plugin\n   */\n  ;\n\n  _proto.iteratePlugins = function iteratePlugins(method) {\n    var _this7 = this;\n\n    Object.keys(this.plugins).forEach(function (pluginType) {\n      _this7.plugins[pluginType].forEach(method);\n    });\n  }\n  /**\n   * Uninstall and remove a plugin.\n   *\n   * @param {object} instance The plugin instance to remove.\n   */\n  ;\n\n  _proto.removePlugin = function removePlugin(instance) {\n    this.log(\"Removing plugin \" + instance.id);\n    this.emit('plugin-remove', instance);\n\n    if (instance.uninstall) {\n      instance.uninstall();\n    }\n\n    var list = this.plugins[instance.type].slice();\n    var index = list.indexOf(instance);\n\n    if (index !== -1) {\n      list.splice(index, 1);\n      this.plugins[instance.type] = list;\n    }\n\n    var updatedState = this.getState();\n    delete updatedState.plugins[instance.id];\n    this.setState(updatedState);\n  }\n  /**\n   * Uninstall all plugins and close down this Uppy instance.\n   */\n  ;\n\n  _proto.close = function close() {\n    var _this8 = this;\n\n    this.log(\"Closing Uppy instance \" + this.opts.id + \": removing all files and uninstalling plugins\");\n    this.reset();\n\n    this._storeUnsubscribe();\n\n    this.iteratePlugins(function (plugin) {\n      _this8.removePlugin(plugin);\n    });\n  }\n  /**\n   * Set info message in `state.info`, so that UI plugins like `Informer`\n   * can display the message.\n   *\n   * @param {string | object} message Message to be displayed by the informer\n   * @param {string} [type]\n   * @param {number} [duration]\n   */\n  ;\n\n  _proto.info = function info(message, type, duration) {\n    if (type === void 0) {\n      type = 'info';\n    }\n\n    if (duration === void 0) {\n      duration = 3000;\n    }\n\n    var isComplexMessage = typeof message === 'object';\n    this.setState({\n      info: {\n        isHidden: false,\n        type: type,\n        message: isComplexMessage ? message.message : message,\n        details: isComplexMessage ? message.details : null\n      }\n    });\n    this.emit('info-visible');\n    clearTimeout(this.infoTimeoutID);\n\n    if (duration === 0) {\n      this.infoTimeoutID = undefined;\n      return;\n    } // hide the informer after `duration` milliseconds\n\n\n    this.infoTimeoutID = setTimeout(this.hideInfo, duration);\n  };\n\n  _proto.hideInfo = function hideInfo() {\n    var newInfo = _extends({}, this.getState().info, {\n      isHidden: true\n    });\n\n    this.setState({\n      info: newInfo\n    });\n    this.emit('info-hidden');\n  }\n  /**\n   * Passes messages to a function, provided in `opts.logger`.\n   * If `opts.logger: Uppy.debugLogger` or `opts.debug: true`, logs to the browser console.\n   *\n   * @param {string|object} message to log\n   * @param {string} [type] optional `error` or `warning`\n   */\n  ;\n\n  _proto.log = function log(message, type) {\n    var logger = this.opts.logger;\n\n    switch (type) {\n      case 'error':\n        logger.error(message);\n        break;\n\n      case 'warning':\n        logger.warn(message);\n        break;\n\n      default:\n        logger.debug(message);\n        break;\n    }\n  }\n  /**\n   * Obsolete, event listeners are now added in the constructor.\n   */\n  ;\n\n  _proto.run = function run() {\n    this.log('Calling run() is no longer necessary.', 'warning');\n    return this;\n  }\n  /**\n   * Restore an upload by its ID.\n   */\n  ;\n\n  _proto.restore = function restore(uploadID) {\n    this.log(\"Core: attempting to restore upload \\\"\" + uploadID + \"\\\"\");\n\n    if (!this.getState().currentUploads[uploadID]) {\n      this._removeUpload(uploadID);\n\n      return Promise.reject(new Error('Nonexistent upload'));\n    }\n\n    return this._runUpload(uploadID);\n  }\n  /**\n   * Create an upload for a bunch of files.\n   *\n   * @param {Array<string>} fileIDs File IDs to include in this upload.\n   * @returns {string} ID of this upload.\n   */\n  ;\n\n  _proto._createUpload = function _createUpload(fileIDs) {\n    var _extends4;\n\n    var _this$getState6 = this.getState(),\n        allowNewUpload = _this$getState6.allowNewUpload,\n        currentUploads = _this$getState6.currentUploads;\n\n    if (!allowNewUpload) {\n      throw new Error('Cannot create a new upload: already uploading.');\n    }\n\n    var uploadID = cuid();\n    this.emit('upload', {\n      id: uploadID,\n      fileIDs: fileIDs\n    });\n    this.setState({\n      allowNewUpload: this.opts.allowMultipleUploads !== false,\n      currentUploads: _extends({}, currentUploads, (_extends4 = {}, _extends4[uploadID] = {\n        fileIDs: fileIDs,\n        step: 0,\n        result: {}\n      }, _extends4))\n    });\n    return uploadID;\n  };\n\n  _proto._getUpload = function _getUpload(uploadID) {\n    var _this$getState7 = this.getState(),\n        currentUploads = _this$getState7.currentUploads;\n\n    return currentUploads[uploadID];\n  }\n  /**\n   * Add data to an upload's result object.\n   *\n   * @param {string} uploadID The ID of the upload.\n   * @param {object} data Data properties to add to the result object.\n   */\n  ;\n\n  _proto.addResultData = function addResultData(uploadID, data) {\n    var _extends5;\n\n    if (!this._getUpload(uploadID)) {\n      this.log(\"Not setting result for an upload that has been removed: \" + uploadID);\n      return;\n    }\n\n    var currentUploads = this.getState().currentUploads;\n\n    var currentUpload = _extends({}, currentUploads[uploadID], {\n      result: _extends({}, currentUploads[uploadID].result, data)\n    });\n\n    this.setState({\n      currentUploads: _extends({}, currentUploads, (_extends5 = {}, _extends5[uploadID] = currentUpload, _extends5))\n    });\n  }\n  /**\n   * Remove an upload, eg. if it has been canceled or completed.\n   *\n   * @param {string} uploadID The ID of the upload.\n   */\n  ;\n\n  _proto._removeUpload = function _removeUpload(uploadID) {\n    var currentUploads = _extends({}, this.getState().currentUploads);\n\n    delete currentUploads[uploadID];\n    this.setState({\n      currentUploads: currentUploads\n    });\n  }\n  /**\n   * Run an upload. This picks up where it left off in case the upload is being restored.\n   *\n   * @private\n   */\n  ;\n\n  _proto._runUpload = function _runUpload(uploadID) {\n    var _this9 = this;\n\n    var uploadData = this.getState().currentUploads[uploadID];\n    var restoreStep = uploadData.step;\n    var steps = [].concat(this.preProcessors, this.uploaders, this.postProcessors);\n    var lastStep = Promise.resolve();\n    steps.forEach(function (fn, step) {\n      // Skip this step if we are restoring and have already completed this step before.\n      if (step < restoreStep) {\n        return;\n      }\n\n      lastStep = lastStep.then(function () {\n        var _extends6;\n\n        var _this9$getState = _this9.getState(),\n            currentUploads = _this9$getState.currentUploads;\n\n        var currentUpload = currentUploads[uploadID];\n\n        if (!currentUpload) {\n          return;\n        }\n\n        var updatedUpload = _extends({}, currentUpload, {\n          step: step\n        });\n\n        _this9.setState({\n          currentUploads: _extends({}, currentUploads, (_extends6 = {}, _extends6[uploadID] = updatedUpload, _extends6))\n        }); // TODO give this the `updatedUpload` object as its only parameter maybe?\n        // Otherwise when more metadata may be added to the upload this would keep getting more parameters\n\n\n        return fn(updatedUpload.fileIDs, uploadID);\n      }).then(function (result) {\n        return null;\n      });\n    }); // Not returning the `catch`ed promise, because we still want to return a rejected\n    // promise from this method if the upload failed.\n\n    lastStep.catch(function (err) {\n      _this9.emit('error', err, uploadID);\n\n      _this9._removeUpload(uploadID);\n    });\n    return lastStep.then(function () {\n      // Set result data.\n      var _this9$getState2 = _this9.getState(),\n          currentUploads = _this9$getState2.currentUploads;\n\n      var currentUpload = currentUploads[uploadID];\n\n      if (!currentUpload) {\n        return;\n      }\n\n      var files = currentUpload.fileIDs.map(function (fileID) {\n        return _this9.getFile(fileID);\n      });\n      var successful = files.filter(function (file) {\n        return !file.error;\n      });\n      var failed = files.filter(function (file) {\n        return file.error;\n      });\n\n      _this9.addResultData(uploadID, {\n        successful: successful,\n        failed: failed,\n        uploadID: uploadID\n      });\n    }).then(function () {\n      // Emit completion events.\n      // This is in a separate function so that the `currentUploads` variable\n      // always refers to the latest state. In the handler right above it refers\n      // to an outdated object without the `.result` property.\n      var _this9$getState3 = _this9.getState(),\n          currentUploads = _this9$getState3.currentUploads;\n\n      if (!currentUploads[uploadID]) {\n        return;\n      }\n\n      var currentUpload = currentUploads[uploadID];\n      var result = currentUpload.result;\n\n      _this9.emit('complete', result);\n\n      _this9._removeUpload(uploadID);\n\n      return result;\n    }).then(function (result) {\n      if (result == null) {\n        _this9.log(\"Not setting result for an upload that has been removed: \" + uploadID);\n      }\n\n      return result;\n    });\n  }\n  /**\n   * Start an upload for all the files that are not currently being uploaded.\n   *\n   * @returns {Promise}\n   */\n  ;\n\n  _proto.upload = function upload() {\n    var _this10 = this;\n\n    if (!this.plugins.uploader) {\n      this.log('No uploader type plugins are used', 'warning');\n    }\n\n    var files = this.getState().files;\n    var onBeforeUploadResult = this.opts.onBeforeUpload(files);\n\n    if (onBeforeUploadResult === false) {\n      return Promise.reject(new Error('Not starting the upload because onBeforeUpload returned false'));\n    }\n\n    if (onBeforeUploadResult && typeof onBeforeUploadResult === 'object') {\n      files = onBeforeUploadResult;\n    }\n\n    return Promise.resolve().then(function () {\n      return _this10._checkMinNumberOfFiles(files);\n    }).then(function () {\n      var _this10$getState = _this10.getState(),\n          currentUploads = _this10$getState.currentUploads; // get a list of files that are currently assigned to uploads\n\n\n      var currentlyUploadingFiles = Object.keys(currentUploads).reduce(function (prev, curr) {\n        return prev.concat(currentUploads[curr].fileIDs);\n      }, []);\n      var waitingFileIDs = [];\n      Object.keys(files).forEach(function (fileID) {\n        var file = _this10.getFile(fileID); // if the file hasn't started uploading and hasn't already been assigned to an upload..\n\n\n        if (!file.progress.uploadStarted && currentlyUploadingFiles.indexOf(fileID) === -1) {\n          waitingFileIDs.push(file.id);\n        }\n      });\n\n      var uploadID = _this10._createUpload(waitingFileIDs);\n\n      return _this10._runUpload(uploadID);\n    }).catch(function (err) {\n      _this10._showOrLogErrorAndThrow(err);\n    });\n  };\n\n  _createClass(Uppy, [{\n    key: \"state\",\n    get: function get() {\n      return this.getState();\n    }\n  }]);\n\n  return Uppy;\n}();\n\nUppy.VERSION = \"1.7.1\";\n\nmodule.exports = function (opts) {\n  return new Uppy(opts);\n}; // Expose class constructor.\n\n\nmodule.exports.Uppy = Uppy;\nmodule.exports.Plugin = Plugin;\nmodule.exports.debugLogger = debugLogger;\n\n//# sourceURL=webpack:///./node_modules/@uppy/core/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/core/lib/loggers.js":
/*!************************************************!*\
  !*** ./node_modules/@uppy/core/lib/loggers.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var getTimeStamp = __webpack_require__(/*! @uppy/utils/lib/getTimeStamp */ \"./node_modules/@uppy/utils/lib/getTimeStamp.js\"); // Swallow logs, default if logger is not set or debug: false\n\n\nvar nullLogger = {\n  debug: function debug() {},\n  warn: function warn() {},\n  error: function error() {}\n}; // Print logs to console with namespace + timestamp,\n// set by logger: Uppy.debugLogger or debug: true\n\nvar debugLogger = {\n  debug: function debug() {\n    // IE 10 doesn’t support console.debug\n    var debug = console.debug || console.log;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    debug.call.apply(debug, [console, \"[Uppy] [\" + getTimeStamp() + \"]\"].concat(args));\n  },\n  warn: function warn() {\n    var _console;\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return (_console = console).warn.apply(_console, [\"[Uppy] [\" + getTimeStamp() + \"]\"].concat(args));\n  },\n  error: function error() {\n    var _console2;\n\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n\n    return (_console2 = console).error.apply(_console2, [\"[Uppy] [\" + getTimeStamp() + \"]\"].concat(args));\n  }\n};\nmodule.exports = {\n  nullLogger: nullLogger,\n  debugLogger: debugLogger\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/core/lib/loggers.js?");

/***/ }),

/***/ "./node_modules/@uppy/core/lib/supportsUploadProgress.js":
/*!***************************************************************!*\
  !*** ./node_modules/@uppy/core/lib/supportsUploadProgress.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// Edge 15.x does not fire 'progress' events on uploads.\n// See https://github.com/transloadit/uppy/issues/945\n// And https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12224510/\nmodule.exports = function supportsUploadProgress(userAgent) {\n  // Allow passing in userAgent for tests\n  if (userAgent == null) {\n    userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null;\n  } // Assume it works because basically everything supports progress events.\n\n\n  if (!userAgent) return true;\n  var m = /Edge\\/(\\d+\\.\\d+)/.exec(userAgent);\n  if (!m) return true;\n  var edgeVersion = m[1];\n\n  var _edgeVersion$split = edgeVersion.split('.'),\n      major = _edgeVersion$split[0],\n      minor = _edgeVersion$split[1];\n\n  major = parseInt(major, 10);\n  minor = parseInt(minor, 10); // Worked before:\n  // Edge 40.15063.0.0\n  // Microsoft EdgeHTML 15.15063\n\n  if (major < 15 || major === 15 && minor < 15063) {\n    return true;\n  } // Fixed in:\n  // Microsoft EdgeHTML 18.18218\n\n\n  if (major > 18 || major === 18 && minor >= 18218) {\n    return true;\n  } // other versions don't work.\n\n\n  return false;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/core/lib/supportsUploadProgress.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/AddFiles.js":
/*!*****************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/AddFiles.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! ./icons */ \"./node_modules/@uppy/dashboard/lib/components/icons.js\"),\n    localIcon = _require.localIcon;\n\nvar _require2 = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require2.h,\n    Component = _require2.Component;\n\nvar AddFiles =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(AddFiles, _Component);\n\n  function AddFiles(props) {\n    var _this;\n\n    _this = _Component.call(this, props) || this;\n    _this.triggerFileInputClick = _this.triggerFileInputClick.bind(_assertThisInitialized(_this));\n    _this.onFileInputChange = _this.onFileInputChange.bind(_assertThisInitialized(_this));\n    _this.renderPoweredByUppy = _this.renderPoweredByUppy.bind(_assertThisInitialized(_this));\n    _this.renderHiddenFileInput = _this.renderHiddenFileInput.bind(_assertThisInitialized(_this));\n    _this.renderDropPasteBrowseTagline = _this.renderDropPasteBrowseTagline.bind(_assertThisInitialized(_this));\n    _this.renderMyDeviceAcquirer = _this.renderMyDeviceAcquirer.bind(_assertThisInitialized(_this));\n    _this.renderAcquirer = _this.renderAcquirer.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = AddFiles.prototype;\n\n  _proto.triggerFileInputClick = function triggerFileInputClick() {\n    this.fileInput.click();\n  };\n\n  _proto.onFileInputChange = function onFileInputChange(event) {\n    this.props.handleInputChange(event); // We clear the input after a file is selected, because otherwise\n    // change event is not fired in Chrome and Safari when a file\n    // with the same name is selected.\n    // ___Why not use value=\"\" on <input/> instead?\n    //    Because if we use that method of clearing the input,\n    //    Chrome will not trigger change if we drop the same file twice (Issue #768).\n\n    event.target.value = null;\n  };\n\n  _proto.renderPoweredByUppy = function renderPoweredByUppy() {\n    return h(\"a\", {\n      tabindex: \"-1\",\n      href: \"https://uppy.io\",\n      rel: \"noreferrer noopener\",\n      target: \"_blank\",\n      class: \"uppy-Dashboard-poweredBy\"\n    }, this.props.i18n('poweredBy') + ' ', h(\"svg\", {\n      \"aria-hidden\": \"true\",\n      focusable: \"false\",\n      class: \"UppyIcon uppy-Dashboard-poweredByIcon\",\n      width: \"11\",\n      height: \"11\",\n      viewBox: \"0 0 11 11\"\n    }, h(\"path\", {\n      d: \"M7.365 10.5l-.01-4.045h2.612L5.5.806l-4.467 5.65h2.604l.01 4.044h3.718z\",\n      \"fill-rule\": \"evenodd\"\n    })), h(\"span\", {\n      class: \"uppy-Dashboard-poweredByUppy\"\n    }, \"Uppy\"));\n  };\n\n  _proto.renderHiddenFileInput = function renderHiddenFileInput() {\n    var _this2 = this;\n\n    return h(\"input\", {\n      class: \"uppy-Dashboard-input\",\n      hidden: true,\n      \"aria-hidden\": \"true\",\n      tabindex: -1,\n      type: \"file\",\n      name: \"files[]\",\n      multiple: this.props.maxNumberOfFiles !== 1,\n      onchange: this.onFileInputChange,\n      accept: this.props.allowedFileTypes,\n      ref: function ref(_ref) {\n        _this2.fileInput = _ref;\n      }\n    });\n  };\n\n  _proto.renderDropPasteBrowseTagline = function renderDropPasteBrowseTagline() {\n    var browse = h(\"button\", {\n      type: \"button\",\n      class: \"uppy-u-reset uppy-Dashboard-browse\",\n      onclick: this.triggerFileInputClick\n    }, this.props.i18n('browse'));\n    return h(\"div\", {\n      class: \"uppy-Dashboard-dropFilesTitle\"\n    }, h(\"span\", null, this.props.acquirers.length === 0 ? this.props.i18nArray('dropPaste', {\n      browse: browse\n    }) : this.props.i18nArray('dropPasteImport', {\n      browse: browse\n    })));\n  };\n\n  _proto.renderMyDeviceAcquirer = function renderMyDeviceAcquirer() {\n    return h(\"div\", {\n      class: \"uppy-DashboardTab\",\n      role: \"presentation\"\n    }, h(\"button\", {\n      type: \"button\",\n      class: \"uppy-DashboardTab-btn\",\n      role: \"tab\",\n      tabindex: 0,\n      \"data-uppy-super-focusable\": true,\n      onclick: this.triggerFileInputClick\n    }, localIcon(), h(\"div\", {\n      class: \"uppy-DashboardTab-name\"\n    }, this.props.i18n('myDevice'))));\n  };\n\n  _proto.renderAcquirer = function renderAcquirer(acquirer) {\n    var _this3 = this;\n\n    return h(\"div\", {\n      class: \"uppy-DashboardTab\",\n      role: \"presentation\"\n    }, h(\"button\", {\n      type: \"button\",\n      class: \"uppy-DashboardTab-btn\",\n      role: \"tab\",\n      tabindex: 0,\n      \"aria-controls\": \"uppy-DashboardContent-panel--\" + acquirer.id,\n      \"aria-selected\": this.props.activePickerPanel.id === acquirer.id,\n      \"data-uppy-super-focusable\": true,\n      onclick: function onclick() {\n        return _this3.props.showPanel(acquirer.id);\n      }\n    }, acquirer.icon(), h(\"div\", {\n      class: \"uppy-DashboardTab-name\"\n    }, acquirer.name)));\n  };\n\n  _proto.render = function render() {\n    var _this4 = this;\n\n    return h(\"div\", {\n      class: \"uppy-DashboardAddFiles\"\n    }, this.renderHiddenFileInput(), h(\"div\", {\n      class: \"uppy-DashboardTabs\"\n    }, this.renderDropPasteBrowseTagline(), this.props.acquirers.length > 0 && h(\"div\", {\n      class: \"uppy-DashboardTabs-list\",\n      role: \"tablist\"\n    }, this.renderMyDeviceAcquirer(), this.props.acquirers.map(function (acquirer) {\n      return _this4.renderAcquirer(acquirer);\n    })), h(\"div\", {\n      class: \"uppy-DashboardAddFiles-info\"\n    }, this.props.note && h(\"div\", {\n      class: \"uppy-Dashboard-note\"\n    }, this.props.note), this.props.proudlyDisplayPoweredByUppy && this.renderPoweredByUppy(this.props))));\n  };\n\n  return AddFiles;\n}(Component);\n\nmodule.exports = AddFiles;\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/AddFiles.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/AddFilesPanel.js":
/*!**********************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/AddFilesPanel.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar AddFiles = __webpack_require__(/*! ./AddFiles */ \"./node_modules/@uppy/dashboard/lib/components/AddFiles.js\");\n\nvar AddFilesPanel = function AddFilesPanel(props) {\n  return h(\"div\", {\n    class: \"uppy-Dashboard-AddFilesPanel\",\n    \"data-uppy-panelType\": \"AddFiles\",\n    \"aria-hidden\": props.showAddFilesPanel\n  }, h(\"div\", {\n    class: \"uppy-DashboardContent-bar\"\n  }, h(\"div\", {\n    class: \"uppy-DashboardContent-title\",\n    role: \"heading\",\n    \"aria-level\": \"h1\"\n  }, props.i18n('addingMoreFiles')), h(\"button\", {\n    class: \"uppy-DashboardContent-back\",\n    type: \"button\",\n    onclick: function onclick(ev) {\n      return props.toggleAddFilesPanel(false);\n    }\n  }, props.i18n('back'))), h(AddFiles, props));\n};\n\nmodule.exports = AddFilesPanel;\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/AddFilesPanel.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/Dashboard.js":
/*!******************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/Dashboard.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar FileList = __webpack_require__(/*! ./FileList */ \"./node_modules/@uppy/dashboard/lib/components/FileList.js\");\n\nvar AddFiles = __webpack_require__(/*! ./AddFiles */ \"./node_modules/@uppy/dashboard/lib/components/AddFiles.js\");\n\nvar AddFilesPanel = __webpack_require__(/*! ./AddFilesPanel */ \"./node_modules/@uppy/dashboard/lib/components/AddFilesPanel.js\");\n\nvar PickerPanelContent = __webpack_require__(/*! ./PickerPanelContent */ \"./node_modules/@uppy/dashboard/lib/components/PickerPanelContent.js\");\n\nvar PanelTopBar = __webpack_require__(/*! ./PickerPanelTopBar */ \"./node_modules/@uppy/dashboard/lib/components/PickerPanelTopBar.js\");\n\nvar FileCard = __webpack_require__(/*! ./FileCard */ \"./node_modules/@uppy/dashboard/lib/components/FileCard/index.js\");\n\nvar classNames = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n\nvar isTouchDevice = __webpack_require__(/*! @uppy/utils/lib/isTouchDevice */ \"./node_modules/@uppy/utils/lib/isTouchDevice.js\");\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar PreactCSSTransitionGroup = __webpack_require__(/*! preact-css-transition-group */ \"./node_modules/preact-css-transition-group/dist/preact-css-transition-group.js\"); // http://dev.edenspiekermann.com/2016/02/11/introducing-accessible-modal-dialog\n// https://github.com/ghosh/micromodal\n\n\nfunction TransitionWrapper(props) {\n  return h(PreactCSSTransitionGroup, {\n    transitionName: \"uppy-transition-slideDownUp\",\n    transitionEnterTimeout: 250,\n    transitionLeaveTimeout: 250\n  }, props.children);\n}\n\nvar WIDTH_XL = 900;\nvar WIDTH_LG = 700;\nvar WIDTH_MD = 576;\nvar HEIGHT_MD = 576;\n\nmodule.exports = function Dashboard(props) {\n  var noFiles = props.totalFileCount === 0;\n  var dashboardClassName = classNames({\n    'uppy-Root': props.isTargetDOMEl,\n    'uppy-Dashboard': true,\n    'Uppy--isTouchDevice': isTouchDevice(),\n    'uppy-Dashboard--animateOpenClose': props.animateOpenClose,\n    'uppy-Dashboard--isClosing': props.isClosing,\n    'uppy-Dashboard--isDraggingOver': props.isDraggingOver,\n    'uppy-Dashboard--modal': !props.inline,\n    'uppy-size--md': props.containerWidth > WIDTH_MD,\n    'uppy-size--lg': props.containerWidth > WIDTH_LG,\n    'uppy-size--xl': props.containerWidth > WIDTH_XL,\n    'uppy-size--height-md': props.containerHeight > HEIGHT_MD,\n    'uppy-Dashboard--isAddFilesPanelVisible': props.showAddFilesPanel,\n    'uppy-Dashboard--isInnerWrapVisible': props.areInsidesReadyToBeVisible\n  });\n  var showFileList = props.showSelectedFiles && !noFiles;\n  return h(\"div\", {\n    class: dashboardClassName,\n    \"aria-hidden\": props.inline ? 'false' : props.isHidden,\n    \"aria-label\": !props.inline ? props.i18n('dashboardWindowTitle') : props.i18n('dashboardTitle'),\n    onpaste: props.handlePaste,\n    onDragOver: props.handleDragOver,\n    onDragLeave: props.handleDragLeave,\n    onDrop: props.handleDrop\n  }, h(\"div\", {\n    class: \"uppy-Dashboard-overlay\",\n    tabindex: -1,\n    onclick: props.handleClickOutside\n  }), h(\"div\", {\n    class: \"uppy-Dashboard-inner\",\n    \"aria-modal\": !props.inline && 'true',\n    role: !props.inline && 'dialog',\n    style: {\n      width: props.inline && props.width ? props.width : '',\n      height: props.inline && props.height ? props.height : ''\n    }\n  }, !props.inline ? h(\"button\", {\n    class: \"uppy-u-reset uppy-Dashboard-close\",\n    type: \"button\",\n    \"aria-label\": props.i18n('closeModal'),\n    title: props.i18n('closeModal'),\n    onclick: props.closeModal\n  }, h(\"span\", {\n    \"aria-hidden\": \"true\"\n  }, \"\\xD7\")) : null, h(\"div\", {\n    class: \"uppy-Dashboard-innerWrap\"\n  }, h(\"div\", {\n    class: \"uppy-Dashboard-dropFilesHereHint\"\n  }, props.i18n('dropHint')), showFileList && h(PanelTopBar, props), showFileList ? h(FileList, props) : h(AddFiles, props), h(TransitionWrapper, null, props.showAddFilesPanel ? h(AddFilesPanel, _extends({\n    key: \"AddFilesPanel\"\n  }, props)) : null), h(TransitionWrapper, null, props.fileCardFor ? h(FileCard, _extends({\n    key: \"FileCard\"\n  }, props)) : null), h(TransitionWrapper, null, props.activePickerPanel ? h(PickerPanelContent, _extends({\n    key: \"PickerPanelContent\"\n  }, props)) : null), h(\"div\", {\n    class: \"uppy-Dashboard-progressindicators\"\n  }, props.progressindicators.map(function (target) {\n    return props.getPlugin(target.id).render(props.state);\n  })))));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/Dashboard.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/FileCard/index.js":
/*!***********************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/FileCard/index.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h,\n    Component = _require.Component;\n\nvar getFileTypeIcon = __webpack_require__(/*! ../../utils/getFileTypeIcon */ \"./node_modules/@uppy/dashboard/lib/utils/getFileTypeIcon.js\");\n\nvar ignoreEvent = __webpack_require__(/*! ../../utils/ignoreEvent.js */ \"./node_modules/@uppy/dashboard/lib/utils/ignoreEvent.js\");\n\nvar FilePreview = __webpack_require__(/*! ../FilePreview */ \"./node_modules/@uppy/dashboard/lib/components/FilePreview.js\");\n\nvar FileCard =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(FileCard, _Component);\n\n  function FileCard(props) {\n    var _this;\n\n    _this = _Component.call(this, props) || this;\n\n    _this.saveOnEnter = function (ev) {\n      if (ev.keyCode === 13) {\n        ev.stopPropagation();\n        ev.preventDefault();\n        var file = _this.props.files[_this.props.fileCardFor];\n\n        _this.props.saveFileCard(_this.state.formState, file.id);\n      }\n    };\n\n    _this.tempStoreMeta = function (ev, name) {\n      var _extends2;\n\n      _this.setState({\n        formState: _extends({}, _this.state.formState, (_extends2 = {}, _extends2[name] = ev.target.value, _extends2))\n      });\n    };\n\n    _this.handleSave = function () {\n      var fileID = _this.props.fileCardFor;\n\n      _this.props.saveFileCard(_this.state.formState, fileID);\n    };\n\n    _this.handleCancel = function () {\n      _this.props.toggleFileCard();\n    };\n\n    _this.renderMetaFields = function () {\n      var metaFields = _this.props.metaFields || [];\n      return metaFields.map(function (field) {\n        var id = \"uppy-Dashboard-FileCard-input-\" + field.id;\n        return h(\"fieldset\", {\n          key: field.id,\n          class: \"uppy-Dashboard-FileCard-fieldset\"\n        }, h(\"label\", {\n          class: \"uppy-Dashboard-FileCard-label\",\n          for: id\n        }, field.name), h(\"input\", {\n          class: \"uppy-u-reset uppy-c-textInput uppy-Dashboard-FileCard-input\",\n          id: id,\n          type: \"text\",\n          value: _this.state.formState[field.id],\n          placeholder: field.placeholder,\n          onkeyup: _this.saveOnEnter,\n          onkeydown: _this.saveOnEnter,\n          onkeypress: _this.saveOnEnter,\n          oninput: function oninput(ev) {\n            return _this.tempStoreMeta(ev, field.id);\n          },\n          \"data-uppy-super-focusable\": true\n        }));\n      });\n    };\n\n    var _file = _this.props.files[_this.props.fileCardFor];\n\n    var _metaFields = _this.props.metaFields || [];\n\n    var storedMetaData = {};\n\n    _metaFields.forEach(function (field) {\n      storedMetaData[field.id] = _file.meta[field.id] || '';\n    });\n\n    _this.state = {\n      formState: storedMetaData\n    };\n    return _this;\n  }\n\n  var _proto = FileCard.prototype;\n\n  _proto.render = function render() {\n    var file = this.props.files[this.props.fileCardFor];\n    return h(\"div\", {\n      class: \"uppy-Dashboard-FileCard\",\n      \"data-uppy-panelType\": \"FileCard\",\n      onDragOver: ignoreEvent,\n      onDragLeave: ignoreEvent,\n      onDrop: ignoreEvent,\n      onPaste: ignoreEvent\n    }, h(\"div\", {\n      class: \"uppy-DashboardContent-bar\"\n    }, h(\"div\", {\n      class: \"uppy-DashboardContent-title\",\n      role: \"heading\",\n      \"aria-level\": \"h1\"\n    }, this.props.i18nArray('editing', {\n      file: h(\"span\", {\n        class: \"uppy-DashboardContent-titleFile\"\n      }, file.meta ? file.meta.name : file.name)\n    })), h(\"button\", {\n      class: \"uppy-DashboardContent-back\",\n      type: \"button\",\n      title: this.props.i18n('finishEditingFile'),\n      onclick: this.handleSave\n    }, this.props.i18n('done'))), h(\"div\", {\n      class: \"uppy-Dashboard-FileCard-inner\"\n    }, h(\"div\", {\n      class: \"uppy-Dashboard-FileCard-preview\",\n      style: {\n        backgroundColor: getFileTypeIcon(file.type).color\n      }\n    }, h(FilePreview, {\n      file: file\n    })), h(\"div\", {\n      class: \"uppy-Dashboard-FileCard-info\"\n    }, this.renderMetaFields()), h(\"div\", {\n      class: \"uppy-Dashboard-FileCard-actions\"\n    }, h(\"button\", {\n      class: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Dashboard-FileCard-actionsBtn\",\n      type: \"button\",\n      onclick: this.handleSave\n    }, this.props.i18n('saveChanges')), h(\"button\", {\n      class: \"uppy-u-reset uppy-c-btn uppy-c-btn-link uppy-Dashboard-FileCard-actionsBtn\",\n      type: \"button\",\n      onclick: this.handleCancel\n    }, this.props.i18n('cancel')))));\n  };\n\n  return FileCard;\n}(Component);\n\nmodule.exports = FileCard;\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/FileCard/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/FileItem/Buttons/index.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/FileItem/Buttons/index.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar copyToClipboard = __webpack_require__(/*! ../../../utils/copyToClipboard */ \"./node_modules/@uppy/dashboard/lib/utils/copyToClipboard.js\");\n\nvar _require2 = __webpack_require__(/*! ../../icons */ \"./node_modules/@uppy/dashboard/lib/components/icons.js\"),\n    iconPencil = _require2.iconPencil,\n    iconCross = _require2.iconCross,\n    iconCopyLink = _require2.iconCopyLink;\n\nvar renderEditButton = function renderEditButton(props) {\n  return !props.uploadInProgressOrComplete && props.metaFields && props.metaFields.length > 0 && h(\"button\", {\n    class: \"uppy-u-reset uppy-DashboardItem-action uppy-DashboardItem-action--edit\",\n    type: \"button\",\n    \"aria-label\": props.i18n('editFile') + ' ' + props.file.meta.name,\n    title: props.i18n('editFile'),\n    onclick: function onclick(e) {\n      return props.toggleFileCard(props.file.id);\n    }\n  }, iconPencil());\n};\n\nvar renderRemoveButton = function renderRemoveButton(props) {\n  return props.showRemoveButton && h(\"button\", {\n    class: \"uppy-u-reset uppy-DashboardItem-action uppy-DashboardItem-action--remove\",\n    type: \"button\",\n    \"aria-label\": props.i18n('removeFile'),\n    title: props.i18n('removeFile'),\n    onclick: function onclick() {\n      return props.removeFile(props.file.id);\n    }\n  }, iconCross());\n};\n\nvar copyLinkToClipboard = function copyLinkToClipboard(event, props) {\n  return copyToClipboard(props.file.uploadURL, props.i18n('copyLinkToClipboardFallback')).then(function () {\n    props.log('Link copied to clipboard.');\n    props.info(props.i18n('copyLinkToClipboardSuccess'), 'info', 3000);\n  }).catch(props.log) // avoid losing focus\n  .then(function () {\n    return event.target.focus({\n      preventScroll: true\n    });\n  });\n};\n\nvar renderCopyLinkButton = function renderCopyLinkButton(props) {\n  return props.showLinkToFileUploadResult && props.file.uploadURL && h(\"button\", {\n    class: \"uppy-u-reset uppy-DashboardItem-action uppy-DashboardItem-action--copyLink\",\n    type: \"button\",\n    \"aria-label\": props.i18n('copyLink'),\n    title: props.i18n('copyLink'),\n    onclick: function onclick(event) {\n      return copyLinkToClipboard(event, props);\n    }\n  }, iconCopyLink());\n};\n\nmodule.exports = function Buttons(props) {\n  return h(\"div\", {\n    className: \"uppy-DashboardItem-actionWrapper\"\n  }, renderEditButton(props), renderCopyLinkButton(props), renderRemoveButton(props));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/FileItem/Buttons/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/FileItem/FileInfo/index.js":
/*!********************************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/FileItem/FileInfo/index.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar prettyBytes = __webpack_require__(/*! @uppy/utils/lib/prettyBytes */ \"./node_modules/@uppy/utils/lib/prettyBytes.js\");\n\nvar truncateString = __webpack_require__(/*! ../../../utils/truncateString */ \"./node_modules/@uppy/dashboard/lib/utils/truncateString.js\");\n\nvar renderAcquirerIcon = function renderAcquirerIcon(acquirer, props) {\n  return h(\"span\", {\n    title: props.i18n('fileSource', {\n      name: acquirer.name\n    })\n  }, acquirer.icon());\n};\n\nvar renderFileSource = function renderFileSource(props) {\n  return props.file.source && props.file.source !== props.id && h(\"div\", {\n    class: \"uppy-DashboardItem-sourceIcon\"\n  }, props.acquirers.map(function (acquirer) {\n    if (acquirer.id === props.file.source) {\n      return renderAcquirerIcon(acquirer, props);\n    }\n  }));\n};\n\nvar renderFileName = function renderFileName(props) {\n  // Take up at most 2 lines on any screen\n  var maxNameLength; // For very small mobile screens\n\n  if (props.containerWidth <= 352) {\n    maxNameLength = 35; // For regular mobile screens\n  } else if (props.containerWidth <= 576) {\n    maxNameLength = 60; // For desktops\n  } else {\n    maxNameLength = 30;\n  }\n\n  return h(\"div\", {\n    class: \"uppy-DashboardItem-name\",\n    title: props.file.meta.name\n  }, truncateString(props.file.meta.name, maxNameLength));\n};\n\nvar renderFileSize = function renderFileSize(props) {\n  return props.file.data.size && h(\"div\", {\n    class: \"uppy-DashboardItem-statusSize\"\n  }, prettyBytes(props.file.data.size));\n};\n\nmodule.exports = function FileInfo(props) {\n  return h(\"div\", {\n    class: \"uppy-DashboardItem-fileInfo\",\n    \"data-uppy-file-source\": props.file.source\n  }, renderFileName(props), h(\"div\", {\n    class: \"uppy-DashboardItem-status\"\n  }, renderFileSize(props), renderFileSource(props)));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/FileItem/FileInfo/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/FileItem/FilePreviewAndLink/index.js":
/*!******************************************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/FileItem/FilePreviewAndLink/index.js ***!
  \******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar FilePreview = __webpack_require__(/*! ../../FilePreview */ \"./node_modules/@uppy/dashboard/lib/components/FilePreview.js\");\n\nvar getFileTypeIcon = __webpack_require__(/*! ../../../utils/getFileTypeIcon */ \"./node_modules/@uppy/dashboard/lib/utils/getFileTypeIcon.js\");\n\nmodule.exports = function FilePreviewAndLink(props) {\n  return h(\"div\", {\n    class: \"uppy-DashboardItem-previewInnerWrap\",\n    style: {\n      backgroundColor: getFileTypeIcon(props.file.type).color\n    }\n  }, props.showLinkToFileUploadResult && props.file.uploadURL && h(\"a\", {\n    class: \"uppy-DashboardItem-previewLink\",\n    href: props.file.uploadURL,\n    rel: \"noreferrer noopener\",\n    target: \"_blank\",\n    \"aria-label\": props.file.meta.name\n  }), h(FilePreview, {\n    file: props.file\n  }));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/FileItem/FilePreviewAndLink/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/PauseResumeCancelIcon.js":
/*!****************************************************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/PauseResumeCancelIcon.js ***!
  \****************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h; // http://codepen.io/Harkko/pen/rVxvNM\n// https://css-tricks.com/svg-line-animation-works/\n// https://gist.github.com/eswak/ad4ea57bcd5ff7aa5d42\n// circle length equals 2 * PI * R\n\n\nvar circleLength = 2 * Math.PI * 15; // stroke-dashoffset is a percentage of the progress from circleLength,\n// substracted from circleLength, because its an offset\n\nmodule.exports = function PauseResumeCancelIcon(props) {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    width: \"70\",\n    height: \"70\",\n    viewBox: \"0 0 36 36\",\n    class: \"UppyIcon UppyIcon-progressCircle\"\n  }, h(\"g\", {\n    class: \"progress-group\"\n  }, h(\"circle\", {\n    class: \"bg\",\n    r: \"15\",\n    cx: \"18\",\n    cy: \"18\",\n    \"stroke-width\": \"2\",\n    fill: \"none\"\n  }), h(\"circle\", {\n    class: \"progress\",\n    r: \"15\",\n    cx: \"18\",\n    cy: \"18\",\n    transform: \"rotate(-90, 18, 18)\",\n    \"stroke-width\": \"2\",\n    fill: \"none\",\n    \"stroke-dasharray\": circleLength,\n    \"stroke-dashoffset\": circleLength - circleLength / 100 * props.progress\n  })), !props.hidePauseResumeCancelButtons && h(\"g\", null, h(\"polygon\", {\n    class: \"play\",\n    transform: \"translate(3, 3)\",\n    points: \"12 20 12 10 20 15\"\n  }), h(\"g\", {\n    class: \"pause\",\n    transform: \"translate(14.5, 13)\"\n  }, h(\"rect\", {\n    x: \"0\",\n    y: \"0\",\n    width: \"2\",\n    height: \"10\",\n    rx: \"0\"\n  }), h(\"rect\", {\n    x: \"5\",\n    y: \"0\",\n    width: \"2\",\n    height: \"10\",\n    rx: \"0\"\n  })), h(\"polygon\", {\n    class: \"cancel\",\n    transform: \"translate(2, 2)\",\n    points: \"19.8856516 11.0625 16 14.9481516 12.1019737 11.0625 11.0625 12.1143484 14.9481516 16 11.0625 19.8980263 12.1019737 20.9375 16 17.0518484 19.8856516 20.9375 20.9375 19.8980263 17.0518484 16 20.9375 12\"\n  })), h(\"polygon\", {\n    class: \"check\",\n    transform: \"translate(2, 3)\",\n    points: \"14 22.5 7 15.2457065 8.99985857 13.1732815 14 18.3547104 22.9729883 9 25 11.1005634\"\n  }));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/PauseResumeCancelIcon.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/index.js":
/*!************************************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/index.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar _require2 = __webpack_require__(/*! ../../icons */ \"./node_modules/@uppy/dashboard/lib/components/icons.js\"),\n    iconRetry = _require2.iconRetry;\n\nvar PauseResumeCancelIcon = __webpack_require__(/*! ./PauseResumeCancelIcon */ \"./node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/PauseResumeCancelIcon.js\");\n\nfunction onPauseResumeCancelRetry(props) {\n  if (props.isUploaded) return;\n\n  if (props.error && !props.hideRetryButton) {\n    props.retryUpload(props.file.id);\n    return;\n  }\n\n  if (props.hidePauseResumeCancelButtons) {\n    return;\n  }\n\n  if (props.resumableUploads) {\n    props.pauseUpload(props.file.id);\n  } else if (props.individualCancellation) {\n    props.cancelUpload(props.file.id);\n  }\n}\n\nfunction progressIndicatorTitle(props) {\n  if (props.isUploaded) {\n    return props.i18n('uploadComplete');\n  }\n\n  if (props.error) {\n    return props.i18n('retryUpload');\n  }\n\n  if (props.resumableUploads) {\n    if (props.file.isPaused) {\n      return props.i18n('resumeUpload');\n    }\n\n    return props.i18n('pauseUpload');\n  } else if (props.individualCancellation) {\n    return props.i18n('cancelUpload');\n  }\n\n  return '';\n}\n\nmodule.exports = function FileProgress(props) {\n  if (props.hideRetryButton && props.error) {\n    return h(\"div\", {\n      class: \"uppy-DashboardItem-progress\"\n    });\n  } else if (props.isUploaded || props.hidePauseResumeCancelButtons && !props.error) {\n    return h(\"div\", {\n      class: \"uppy-DashboardItem-progress\"\n    }, h(\"div\", {\n      class: \"uppy-DashboardItem-progressIndicator\"\n    }, h(PauseResumeCancelIcon, {\n      progress: props.file.progress.percentage,\n      hidePauseResumeCancelButtons: props.hidePauseResumeCancelButtons\n    })));\n  } else {\n    return h(\"div\", {\n      class: \"uppy-DashboardItem-progress\"\n    }, h(\"button\", {\n      class: \"uppy-u-reset uppy-DashboardItem-progressIndicator\",\n      type: \"button\",\n      \"aria-label\": progressIndicatorTitle(props),\n      title: progressIndicatorTitle(props),\n      onclick: function onclick() {\n        return onPauseResumeCancelRetry(props);\n      }\n    }, props.error ? props.hideRetryButton ? null : iconRetry() : h(PauseResumeCancelIcon, {\n      progress: props.file.progress.percentage,\n      hidePauseResumeCancelButtons: props.hidePauseResumeCancelButtons\n    })));\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/FileItem/index.js":
/*!***********************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/FileItem/index.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h,\n    Component = _require.Component;\n\nvar classNames = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n\nvar shallowEqual = __webpack_require__(/*! is-shallow-equal */ \"./node_modules/is-shallow-equal/index.js\");\n\nvar FilePreviewAndLink = __webpack_require__(/*! ./FilePreviewAndLink */ \"./node_modules/@uppy/dashboard/lib/components/FileItem/FilePreviewAndLink/index.js\");\n\nvar FileProgress = __webpack_require__(/*! ./FileProgress */ \"./node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/index.js\");\n\nvar FileInfo = __webpack_require__(/*! ./FileInfo */ \"./node_modules/@uppy/dashboard/lib/components/FileItem/FileInfo/index.js\");\n\nvar Buttons = __webpack_require__(/*! ./Buttons */ \"./node_modules/@uppy/dashboard/lib/components/FileItem/Buttons/index.js\");\n\nmodule.exports =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(FileItem, _Component);\n\n  function FileItem() {\n    return _Component.apply(this, arguments) || this;\n  }\n\n  var _proto = FileItem.prototype;\n\n  _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n    return !shallowEqual(this.props, nextProps);\n  };\n\n  _proto.render = function render() {\n    var file = this.props.file;\n    var isProcessing = file.progress.preprocess || file.progress.postprocess;\n    var isUploaded = file.progress.uploadComplete && !isProcessing && !file.error;\n    var uploadInProgressOrComplete = file.progress.uploadStarted || isProcessing;\n    var uploadInProgress = file.progress.uploadStarted && !file.progress.uploadComplete || isProcessing;\n    var isPaused = file.isPaused || false;\n    var error = file.error || false;\n    var showRemoveButton = this.props.individualCancellation ? !isUploaded : !uploadInProgress && !isUploaded;\n    var dashboardItemClass = classNames({\n      'uppy-u-reset': true,\n      'uppy-DashboardItem': true,\n      'is-inprogress': uploadInProgress,\n      'is-processing': isProcessing,\n      'is-complete': isUploaded,\n      'is-paused': isPaused,\n      'is-error': !!error,\n      'is-resumable': this.props.resumableUploads,\n      'is-noIndividualCancellation': !this.props.individualCancellation\n    });\n    return h(\"li\", {\n      class: dashboardItemClass,\n      id: \"uppy_\" + file.id\n    }, h(\"div\", {\n      class: \"uppy-DashboardItem-preview\"\n    }, h(FilePreviewAndLink, {\n      file: file,\n      showLinkToFileUploadResult: this.props.showLinkToFileUploadResult\n    }), h(FileProgress, _extends({}, this.props, {\n      file: file,\n      error: error,\n      isUploaded: isUploaded\n    }))), h(\"div\", {\n      class: \"uppy-DashboardItem-fileInfoAndButtons\"\n    }, h(FileInfo, {\n      file: file,\n      id: this.props.id,\n      acquirers: this.props.acquirers,\n      containerWidth: this.props.containerWidth,\n      i18n: this.props.i18n\n    }), h(Buttons, {\n      file: file,\n      metaFields: this.props.metaFields,\n      showLinkToFileUploadResult: this.props.showLinkToFileUploadResult,\n      showRemoveButton: showRemoveButton,\n      uploadInProgressOrComplete: uploadInProgressOrComplete,\n      removeFile: this.props.removeFile,\n      toggleFileCard: this.props.toggleFileCard,\n      i18n: this.props.i18n,\n      log: this.props.log,\n      info: this.props.info\n    })));\n  };\n\n  return FileItem;\n}(Component);\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/FileItem/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/FileList.js":
/*!*****************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/FileList.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar FileItem = __webpack_require__(/*! ./FileItem/index.js */ \"./node_modules/@uppy/dashboard/lib/components/FileItem/index.js\");\n\nvar classNames = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nmodule.exports = function (props) {\n  var dashboardFilesClass = classNames({\n    'uppy-Dashboard-files': true,\n    'uppy-Dashboard-files--noFiles': props.totalFileCount === 0\n  });\n  var fileProps = {\n    // FIXME This is confusing, it's actually the Dashboard's plugin ID\n    id: props.id,\n    error: props.error,\n    // TODO move this to context\n    i18n: props.i18n,\n    log: props.log,\n    info: props.info,\n    // features\n    acquirers: props.acquirers,\n    resumableUploads: props.resumableUploads,\n    individualCancellation: props.individualCancellation,\n    // visual options\n    hideRetryButton: props.hideRetryButton,\n    hidePauseResumeCancelButtons: props.hidePauseResumeCancelButtons,\n    showLinkToFileUploadResult: props.showLinkToFileUploadResult,\n    isWide: props.isWide,\n    metaFields: props.metaFields,\n    // callbacks\n    retryUpload: props.retryUpload,\n    pauseUpload: props.pauseUpload,\n    cancelUpload: props.cancelUpload,\n    toggleFileCard: props.toggleFileCard,\n    removeFile: props.removeFile,\n    handleRequestThumbnail: props.handleRequestThumbnail\n  };\n\n  function renderItem(fileID) {\n    return h(FileItem, _extends({\n      key: fileID\n    }, fileProps, {\n      file: props.files[fileID]\n    }));\n  }\n\n  return h(\"ul\", {\n    class: dashboardFilesClass\n  }, Object.keys(props.files).map(renderItem));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/FileList.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/FilePreview.js":
/*!********************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/FilePreview.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var getFileTypeIcon = __webpack_require__(/*! ../utils/getFileTypeIcon */ \"./node_modules/@uppy/dashboard/lib/utils/getFileTypeIcon.js\");\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nmodule.exports = function FilePreview(props) {\n  var file = props.file;\n\n  if (file.preview) {\n    return h(\"img\", {\n      class: \"uppy-DashboardItem-previewImg\",\n      alt: file.name,\n      src: file.preview\n    });\n  }\n\n  var _getFileTypeIcon = getFileTypeIcon(file.type),\n      color = _getFileTypeIcon.color,\n      icon = _getFileTypeIcon.icon;\n\n  return h(\"div\", {\n    class: \"uppy-DashboardItem-previewIconWrap\"\n  }, h(\"span\", {\n    class: \"uppy-DashboardItem-previewIcon\",\n    style: {\n      color: color\n    }\n  }, icon), h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"uppy-DashboardItem-previewIconBg\",\n    width: \"58\",\n    height: \"76\",\n    viewBox: \"0 0 58 76\"\n  }, h(\"rect\", {\n    fill: \"#FFF\",\n    width: \"58\",\n    height: \"76\",\n    rx: \"3\",\n    \"fill-rule\": \"evenodd\"\n  })));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/FilePreview.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/PickerPanelContent.js":
/*!***************************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/PickerPanelContent.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar ignoreEvent = __webpack_require__(/*! ../utils/ignoreEvent.js */ \"./node_modules/@uppy/dashboard/lib/utils/ignoreEvent.js\");\n\nfunction PickerPanelContent(props) {\n  return h(\"div\", {\n    class: \"uppy-DashboardContent-panel\",\n    role: \"tabpanel\",\n    \"data-uppy-panelType\": \"PickerPanel\",\n    id: \"uppy-DashboardContent-panel--\" + props.activePickerPanel.id,\n    onDragOver: ignoreEvent,\n    onDragLeave: ignoreEvent,\n    onDrop: ignoreEvent,\n    onPaste: ignoreEvent\n  }, h(\"div\", {\n    class: \"uppy-DashboardContent-bar\"\n  }, h(\"div\", {\n    class: \"uppy-DashboardContent-title\",\n    role: \"heading\",\n    \"aria-level\": \"h1\"\n  }, props.i18n('importFrom', {\n    name: props.activePickerPanel.name\n  })), h(\"button\", {\n    class: \"uppy-DashboardContent-back\",\n    type: \"button\",\n    onclick: props.hideAllPanels\n  }, props.i18n('done'))), h(\"div\", {\n    class: \"uppy-DashboardContent-panelBody\"\n  }, props.getPlugin(props.activePickerPanel.id).render(props.state)));\n}\n\nmodule.exports = PickerPanelContent;\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/PickerPanelContent.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/PickerPanelTopBar.js":
/*!**************************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/PickerPanelTopBar.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar _require2 = __webpack_require__(/*! ./icons */ \"./node_modules/@uppy/dashboard/lib/components/icons.js\"),\n    iconPlus = _require2.iconPlus;\n\nvar uploadStates = {\n  STATE_ERROR: 'error',\n  STATE_WAITING: 'waiting',\n  STATE_PREPROCESSING: 'preprocessing',\n  STATE_UPLOADING: 'uploading',\n  STATE_POSTPROCESSING: 'postprocessing',\n  STATE_COMPLETE: 'complete',\n  STATE_PAUSED: 'paused'\n};\n\nfunction getUploadingState(isAllErrored, isAllComplete, isAllPaused, files) {\n  if (files === void 0) {\n    files = {};\n  }\n\n  if (isAllErrored) {\n    return uploadStates.STATE_ERROR;\n  }\n\n  if (isAllComplete) {\n    return uploadStates.STATE_COMPLETE;\n  }\n\n  if (isAllPaused) {\n    return uploadStates.STATE_PAUSED;\n  }\n\n  var state = uploadStates.STATE_WAITING;\n  var fileIDs = Object.keys(files);\n\n  for (var i = 0; i < fileIDs.length; i++) {\n    var progress = files[fileIDs[i]].progress; // If ANY files are being uploaded right now, show the uploading state.\n\n    if (progress.uploadStarted && !progress.uploadComplete) {\n      return uploadStates.STATE_UPLOADING;\n    } // If files are being preprocessed AND postprocessed at this time, we show the\n    // preprocess state. If any files are being uploaded we show uploading.\n\n\n    if (progress.preprocess && state !== uploadStates.STATE_UPLOADING) {\n      state = uploadStates.STATE_PREPROCESSING;\n    } // If NO files are being preprocessed or uploaded right now, but some files are\n    // being postprocessed, show the postprocess state.\n\n\n    if (progress.postprocess && state !== uploadStates.STATE_UPLOADING && state !== uploadStates.STATE_PREPROCESSING) {\n      state = uploadStates.STATE_POSTPROCESSING;\n    }\n  }\n\n  return state;\n}\n\nfunction UploadStatus(props) {\n  var uploadingState = getUploadingState(props.isAllErrored, props.isAllComplete, props.isAllPaused, props.files);\n\n  switch (uploadingState) {\n    case 'uploading':\n      return props.i18n('uploadingXFiles', {\n        smart_count: props.inProgressNotPausedFiles.length\n      });\n\n    case 'preprocessing':\n    case 'postprocessing':\n      return props.i18n('processingXFiles', {\n        smart_count: props.processingFiles.length\n      });\n\n    case 'paused':\n      return props.i18n('uploadPaused');\n\n    case 'waiting':\n      return props.i18n('xFilesSelected', {\n        smart_count: props.newFiles.length\n      });\n\n    case 'complete':\n      return props.i18n('uploadComplete');\n  }\n}\n\nfunction PanelTopBar(props) {\n  var allowNewUpload = props.allowNewUpload; // TODO maybe this should be done in ../index.js, then just pass that down as `allowNewUpload`\n\n  if (allowNewUpload && props.maxNumberOfFiles) {\n    allowNewUpload = props.totalFileCount < props.maxNumberOfFiles;\n  }\n\n  return h(\"div\", {\n    class: \"uppy-DashboardContent-bar\"\n  }, !props.isAllComplete && !props.hideCancelButton ? h(\"button\", {\n    class: \"uppy-DashboardContent-back\",\n    type: \"button\",\n    onclick: props.cancelAll\n  }, props.i18n('cancel')) : h(\"div\", null), h(\"div\", {\n    class: \"uppy-DashboardContent-title\",\n    role: \"heading\",\n    \"aria-level\": \"h1\"\n  }, h(UploadStatus, props)), allowNewUpload ? h(\"button\", {\n    class: \"uppy-DashboardContent-addMore\",\n    type: \"button\",\n    \"aria-label\": props.i18n('addMoreFiles'),\n    title: props.i18n('addMoreFiles'),\n    onclick: function onclick() {\n      return props.toggleAddFilesPanel(true);\n    }\n  }, iconPlus(), h(\"span\", {\n    class: \"uppy-DashboardContent-addMoreCaption\"\n  }, props.i18n('addMore'))) : h(\"div\", null));\n}\n\nmodule.exports = PanelTopBar;\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/PickerPanelTopBar.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/components/icons.js":
/*!**************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/components/icons.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h; // https://css-tricks.com/creating-svg-icon-system-react/\n\n\nfunction defaultPickerIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    width: \"30\",\n    height: \"30\",\n    viewBox: \"0 0 30 30\"\n  }, h(\"path\", {\n    d: \"M15 30c8.284 0 15-6.716 15-15 0-8.284-6.716-15-15-15C6.716 0 0 6.716 0 15c0 8.284 6.716 15 15 15zm4.258-12.676v6.846h-8.426v-6.846H5.204l9.82-12.364 9.82 12.364H19.26z\"\n  }));\n}\n\nfunction iconCopy() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"51\",\n    height: \"51\",\n    viewBox: \"0 0 51 51\"\n  }, h(\"path\", {\n    d: \"M17.21 45.765a5.394 5.394 0 0 1-7.62 0l-4.12-4.122a5.393 5.393 0 0 1 0-7.618l6.774-6.775-2.404-2.404-6.775 6.776c-3.424 3.427-3.424 9 0 12.426l4.12 4.123a8.766 8.766 0 0 0 6.216 2.57c2.25 0 4.5-.858 6.214-2.57l13.55-13.552a8.72 8.72 0 0 0 2.575-6.213 8.73 8.73 0 0 0-2.575-6.213l-4.123-4.12-2.404 2.404 4.123 4.12a5.352 5.352 0 0 1 1.58 3.81c0 1.438-.562 2.79-1.58 3.808l-13.55 13.55z\"\n  }), h(\"path\", {\n    d: \"M44.256 2.858A8.728 8.728 0 0 0 38.043.283h-.002a8.73 8.73 0 0 0-6.212 2.574l-13.55 13.55a8.725 8.725 0 0 0-2.575 6.214 8.73 8.73 0 0 0 2.574 6.216l4.12 4.12 2.405-2.403-4.12-4.12a5.357 5.357 0 0 1-1.58-3.812c0-1.437.562-2.79 1.58-3.808l13.55-13.55a5.348 5.348 0 0 1 3.81-1.58c1.44 0 2.792.562 3.81 1.58l4.12 4.12c2.1 2.1 2.1 5.518 0 7.617L39.2 23.775l2.404 2.404 6.775-6.777c3.426-3.427 3.426-9 0-12.426l-4.12-4.12z\"\n  }));\n}\n\nfunction iconResume() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 44 44\"\n  }, h(\"polygon\", {\n    class: \"play\",\n    transform: \"translate(6, 5.5)\",\n    points: \"13 21.6666667 13 11 21 16.3333333\"\n  }));\n}\n\nfunction iconPause() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"25px\",\n    height: \"25px\",\n    viewBox: \"0 0 44 44\"\n  }, h(\"g\", {\n    transform: \"translate(18, 17)\",\n    class: \"pause\"\n  }, h(\"rect\", {\n    x: \"0\",\n    y: \"0\",\n    width: \"2\",\n    height: \"10\",\n    rx: \"0\"\n  }), h(\"rect\", {\n    x: \"6\",\n    y: \"0\",\n    width: \"2\",\n    height: \"10\",\n    rx: \"0\"\n  })));\n}\n\nfunction localIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    fill: \"#607d8b\",\n    width: \"27\",\n    height: \"25\",\n    viewBox: \"0 0 27 25\"\n  }, h(\"path\", {\n    d: \"M5.586 9.288a.313.313 0 0 0 .282.176h4.84v3.922c0 1.514 1.25 2.24 2.792 2.24 1.54 0 2.79-.726 2.79-2.24V9.464h4.84c.122 0 .23-.068.284-.176a.304.304 0 0 0-.046-.324L13.735.106a.316.316 0 0 0-.472 0l-7.63 8.857a.302.302 0 0 0-.047.325z\"\n  }), h(\"path\", {\n    d: \"M24.3 5.093c-.218-.76-.54-1.187-1.208-1.187h-4.856l1.018 1.18h3.948l2.043 11.038h-7.193v2.728H9.114v-2.725h-7.36l2.66-11.04h3.33l1.018-1.18H3.907c-.668 0-1.06.46-1.21 1.186L0 16.456v7.062C0 24.338.676 25 1.51 25h23.98c.833 0 1.51-.663 1.51-1.482v-7.062L24.3 5.093z\"\n  }));\n}\n\nfunction iconRetry() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon retry\",\n    width: \"28\",\n    height: \"31\",\n    viewBox: \"0 0 16 19\"\n  }, h(\"path\", {\n    d: \"M16 11a8 8 0 1 1-8-8v2a6 6 0 1 0 6 6h2z\"\n  }), h(\"path\", {\n    d: \"M7.9 3H10v2H7.9z\"\n  }), h(\"path\", {\n    d: \"M8.536.5l3.535 3.536-1.414 1.414L7.12 1.914z\"\n  }), h(\"path\", {\n    d: \"M10.657 2.621l1.414 1.415L8.536 7.57 7.12 6.157z\"\n  }));\n}\n\nfunction checkIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon UppyIcon-check\",\n    width: \"13\",\n    height: \"9\",\n    viewBox: \"0 0 13 9\"\n  }, h(\"polygon\", {\n    points: \"5 7.293 1.354 3.647 0.646 4.354 5 8.707 12.354 1.354 11.646 0.647\"\n  }));\n}\n\nfunction iconAudio() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"path\", {\n    d: \"M9.5 18.64c0 1.14-1.145 2-2.5 2s-2.5-.86-2.5-2c0-1.14 1.145-2 2.5-2 .557 0 1.079.145 1.5.396V7.25a.5.5 0 0 1 .379-.485l9-2.25A.5.5 0 0 1 18.5 5v11.64c0 1.14-1.145 2-2.5 2s-2.5-.86-2.5-2c0-1.14 1.145-2 2.5-2 .557 0 1.079.145 1.5.396V8.67l-8 2v7.97zm8-11v-2l-8 2v2l8-2zM7 19.64c.855 0 1.5-.484 1.5-1s-.645-1-1.5-1-1.5.484-1.5 1 .645 1 1.5 1zm9-2c.855 0 1.5-.484 1.5-1s-.645-1-1.5-1-1.5.484-1.5 1 .645 1 1.5 1z\",\n    fill: \"#049BCF\",\n    \"fill-rule\": \"nonzero\"\n  }));\n}\n\nfunction iconVideo() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"path\", {\n    d: \"M16 11.834l4.486-2.691A1 1 0 0 1 22 10v6a1 1 0 0 1-1.514.857L16 14.167V17a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v2.834zM15 9H5v8h10V9zm1 4l5 3v-6l-5 3z\",\n    fill: \"#19AF67\",\n    \"fill-rule\": \"nonzero\"\n  }));\n}\n\nfunction iconPDF() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"path\", {\n    d: \"M9.766 8.295c-.691-1.843-.539-3.401.747-3.726 1.643-.414 2.505.938 2.39 3.299-.039.79-.194 1.662-.537 3.148.324.49.66.967 1.055 1.51.17.231.382.488.629.757 1.866-.128 3.653.114 4.918.655 1.487.635 2.192 1.685 1.614 2.84-.566 1.133-1.839 1.084-3.416.249-1.141-.604-2.457-1.634-3.51-2.707a13.467 13.467 0 0 0-2.238.426c-1.392 4.051-4.534 6.453-5.707 4.572-.986-1.58 1.38-4.206 4.914-5.375.097-.322.185-.656.264-1.001.08-.353.306-1.31.407-1.737-.678-1.059-1.2-2.031-1.53-2.91zm2.098 4.87c-.033.144-.068.287-.104.427l.033-.01-.012.038a14.065 14.065 0 0 1 1.02-.197l-.032-.033.052-.004a7.902 7.902 0 0 1-.208-.271c-.197-.27-.38-.526-.555-.775l-.006.028-.002-.003c-.076.323-.148.632-.186.8zm5.77 2.978c1.143.605 1.832.632 2.054.187.26-.519-.087-1.034-1.113-1.473-.911-.39-2.175-.608-3.55-.608.845.766 1.787 1.459 2.609 1.894zM6.559 18.789c.14.223.693.16 1.425-.413.827-.648 1.61-1.747 2.208-3.206-2.563 1.064-4.102 2.867-3.633 3.62zm5.345-10.97c.088-1.793-.351-2.48-1.146-2.28-.473.119-.564 1.05-.056 2.405.213.566.52 1.188.908 1.859.18-.858.268-1.453.294-1.984z\",\n    fill: \"#E2514A\",\n    \"fill-rule\": \"nonzero\"\n  }));\n}\n\nfunction iconFile() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"g\", {\n    fill: \"#A7AFB7\",\n    \"fill-rule\": \"nonzero\"\n  }, h(\"path\", {\n    d: \"M5.5 22a.5.5 0 0 1-.5-.5v-18a.5.5 0 0 1 .5-.5h10.719a.5.5 0 0 1 .367.16l3.281 3.556a.5.5 0 0 1 .133.339V21.5a.5.5 0 0 1-.5.5h-14zm.5-1h13V7.25L16 4H6v17z\"\n  }), h(\"path\", {\n    d: \"M15 4v3a1 1 0 0 0 1 1h3V7h-3V4h-1z\"\n  })));\n}\n\nfunction iconText() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"path\", {\n    d: \"M4.5 7h13a.5.5 0 1 1 0 1h-13a.5.5 0 0 1 0-1zm0 3h15a.5.5 0 1 1 0 1h-15a.5.5 0 1 1 0-1zm0 3h15a.5.5 0 1 1 0 1h-15a.5.5 0 1 1 0-1zm0 3h10a.5.5 0 1 1 0 1h-10a.5.5 0 1 1 0-1z\",\n    fill: \"#5A5E69\",\n    \"fill-rule\": \"nonzero\"\n  }));\n}\n\nfunction iconCopyLink() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"14\",\n    height: \"14\",\n    viewBox: \"0 0 14 12\"\n  }, h(\"path\", {\n    d: \"M7.94 7.703a2.613 2.613 0 0 1-.626 2.681l-.852.851a2.597 2.597 0 0 1-1.849.766A2.616 2.616 0 0 1 2.764 7.54l.852-.852a2.596 2.596 0 0 1 2.69-.625L5.267 7.099a1.44 1.44 0 0 0-.833.407l-.852.851a1.458 1.458 0 0 0 1.03 2.486c.39 0 .755-.152 1.03-.426l.852-.852c.231-.231.363-.522.406-.824l1.04-1.038zm4.295-5.937A2.596 2.596 0 0 0 10.387 1c-.698 0-1.355.272-1.849.766l-.852.851a2.614 2.614 0 0 0-.624 2.688l1.036-1.036c.041-.304.173-.6.407-.833l.852-.852c.275-.275.64-.426 1.03-.426a1.458 1.458 0 0 1 1.03 2.486l-.852.851a1.442 1.442 0 0 1-.824.406l-1.04 1.04a2.596 2.596 0 0 0 2.683-.628l.851-.85a2.616 2.616 0 0 0 0-3.697zm-6.88 6.883a.577.577 0 0 0 .82 0l3.474-3.474a.579.579 0 1 0-.819-.82L5.355 7.83a.579.579 0 0 0 0 .819z\"\n  }));\n}\n\nfunction iconPencil() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"14\",\n    height: \"14\",\n    viewBox: \"0 0 14 14\"\n  }, h(\"g\", {\n    \"fill-rule\": \"evenodd\"\n  }, h(\"path\", {\n    d: \"M1.5 10.793h2.793A1 1 0 0 0 5 10.5L11.5 4a1 1 0 0 0 0-1.414L9.707.793a1 1 0 0 0-1.414 0l-6.5 6.5A1 1 0 0 0 1.5 8v2.793zm1-1V8L9 1.5l1.793 1.793-6.5 6.5H2.5z\",\n    \"fill-rule\": \"nonzero\"\n  }), h(\"rect\", {\n    x: \"1\",\n    y: \"12.293\",\n    width: \"11\",\n    height: \"1\",\n    rx: \".5\"\n  }), h(\"path\", {\n    \"fill-rule\": \"nonzero\",\n    d: \"M6.793 2.5L9.5 5.207l.707-.707L7.5 1.793z\"\n  })));\n}\n\nfunction iconCross() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"18\",\n    height: \"18\",\n    viewBox: \"0 0 18 18\"\n  }, h(\"path\", {\n    d: \"M9 0C4.034 0 0 4.034 0 9s4.034 9 9 9 9-4.034 9-9-4.034-9-9-9z\"\n  }), h(\"path\", {\n    fill: \"#FFF\",\n    d: \"M13 12.222l-.778.778L9 9.778 5.778 13 5 12.222 8.222 9 5 5.778 5.778 5 9 8.222 12.222 5l.778.778L9.778 9z\"\n  }));\n}\n\nfunction iconPlus() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"15\",\n    height: \"15\",\n    viewBox: \"0 0 15 15\"\n  }, h(\"path\", {\n    d: \"M8 6.5h6a.5.5 0 0 1 .5.5v.5a.5.5 0 0 1-.5.5H8v6a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V8h-6a.5.5 0 0 1-.5-.5V7a.5.5 0 0 1 .5-.5h6v-6A.5.5 0 0 1 7 0h.5a.5.5 0 0 1 .5.5v6z\"\n  }));\n}\n\nmodule.exports = {\n  defaultPickerIcon: defaultPickerIcon,\n  iconCopy: iconCopy,\n  iconResume: iconResume,\n  iconPause: iconPause,\n  iconRetry: iconRetry,\n  localIcon: localIcon,\n  checkIcon: checkIcon,\n  iconAudio: iconAudio,\n  iconVideo: iconVideo,\n  iconPDF: iconPDF,\n  iconFile: iconFile,\n  iconText: iconText,\n  iconCopyLink: iconCopyLink,\n  iconPencil: iconPencil,\n  iconCross: iconCross,\n  iconPlus: iconPlus\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/components/icons.js?");

/***/ }),

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

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar DashboardUI = __webpack_require__(/*! ./components/Dashboard */ \"./node_modules/@uppy/dashboard/lib/components/Dashboard.js\");\n\nvar StatusBar = __webpack_require__(/*! @uppy/status-bar */ \"./node_modules/@uppy/status-bar/lib/index.js\");\n\nvar Informer = __webpack_require__(/*! @uppy/informer */ \"./node_modules/@uppy/informer/lib/index.js\");\n\nvar ThumbnailGenerator = __webpack_require__(/*! @uppy/thumbnail-generator */ \"./node_modules/@uppy/thumbnail-generator/lib/index.js\");\n\nvar findAllDOMElements = __webpack_require__(/*! @uppy/utils/lib/findAllDOMElements */ \"./node_modules/@uppy/utils/lib/findAllDOMElements.js\");\n\nvar toArray = __webpack_require__(/*! @uppy/utils/lib/toArray */ \"./node_modules/@uppy/utils/lib/toArray.js\");\n\nvar getDroppedFiles = __webpack_require__(/*! @uppy/utils/lib/getDroppedFiles */ \"./node_modules/@uppy/utils/lib/getDroppedFiles/index.js\");\n\nvar trapFocus = __webpack_require__(/*! ./utils/trapFocus */ \"./node_modules/@uppy/dashboard/lib/utils/trapFocus.js\");\n\nvar cuid = __webpack_require__(/*! cuid */ \"./node_modules/cuid/index.js\");\n\nvar ResizeObserver = __webpack_require__(/*! resize-observer-polyfill */ \"./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\").default || __webpack_require__(/*! resize-observer-polyfill */ \"./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\");\n\nvar _require2 = __webpack_require__(/*! ./components/icons */ \"./node_modules/@uppy/dashboard/lib/components/icons.js\"),\n    defaultPickerIcon = _require2.defaultPickerIcon;\n\nvar createSuperFocus = __webpack_require__(/*! ./utils/createSuperFocus */ \"./node_modules/@uppy/dashboard/lib/utils/createSuperFocus.js\");\n\nvar memoize = __webpack_require__(/*! memoize-one */ \"./node_modules/memoize-one/dist/memoize-one.esm.js\").default || __webpack_require__(/*! memoize-one */ \"./node_modules/memoize-one/dist/memoize-one.esm.js\");\n\nvar TAB_KEY = 9;\nvar ESC_KEY = 27;\n\nfunction createPromise() {\n  var o = {};\n  o.promise = new Promise(function (resolve, reject) {\n    o.resolve = resolve;\n    o.reject = reject;\n  });\n  return o;\n}\n/**\n * Dashboard UI with previews, metadata editing, tabs for various services and more\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(Dashboard, _Plugin);\n\n  function Dashboard(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n\n    _this.cancelUpload = function (fileID) {\n      _this.uppy.removeFile(fileID);\n    };\n\n    _this.saveFileCard = function (meta, fileID) {\n      _this.uppy.setFileMeta(fileID, meta);\n\n      _this.toggleFileCard();\n    };\n\n    _this._attachRenderFunctionToTarget = function (target) {\n      var plugin = _this.uppy.getPlugin(target.id);\n\n      return _extends({}, target, {\n        icon: plugin.icon || _this.opts.defaultPickerIcon,\n        render: plugin.render\n      });\n    };\n\n    _this._isTargetSupported = function (target) {\n      var plugin = _this.uppy.getPlugin(target.id); // If the plugin does not provide a `supported` check, assume the plugin works everywhere.\n\n\n      if (typeof plugin.isSupported !== 'function') {\n        return true;\n      }\n\n      return plugin.isSupported();\n    };\n\n    _this._getAcquirers = memoize(function (targets) {\n      return targets.filter(function (target) {\n        return target.type === 'acquirer' && _this._isTargetSupported(target);\n      }).map(_this._attachRenderFunctionToTarget);\n    });\n    _this._getProgressIndicators = memoize(function (targets) {\n      return targets.filter(function (target) {\n        return target.type === 'progressindicator';\n      }).map(_this._attachRenderFunctionToTarget);\n    });\n    _this.id = _this.opts.id || 'Dashboard';\n    _this.title = 'Dashboard';\n    _this.type = 'orchestrator';\n    _this.modalName = \"uppy-Dashboard-\" + cuid();\n    _this.defaultLocale = {\n      strings: {\n        closeModal: 'Close Modal',\n        importFrom: 'Import from %{name}',\n        addingMoreFiles: 'Adding more files',\n        addMoreFiles: 'Add more files',\n        dashboardWindowTitle: 'File Uploader Window (Press escape to close)',\n        dashboardTitle: 'File Uploader',\n        copyLinkToClipboardSuccess: 'Link copied to clipboard',\n        copyLinkToClipboardFallback: 'Copy the URL below',\n        copyLink: 'Copy link',\n        link: 'Link',\n        fileSource: 'File source: %{name}',\n        done: 'Done',\n        back: 'Back',\n        addMore: 'Add more',\n        removeFile: 'Remove file',\n        editFile: 'Edit file',\n        editing: 'Editing %{file}',\n        edit: 'Edit',\n        finishEditingFile: 'Finish editing file',\n        saveChanges: 'Save changes',\n        cancel: 'Cancel',\n        myDevice: 'My Device',\n        dropPasteImport: 'Drop files here, paste, %{browse} or import from',\n        dropPaste: 'Drop files here, paste or %{browse}',\n        dropHint: 'Drop your files here',\n        browse: 'browse',\n        uploadComplete: 'Upload complete',\n        uploadPaused: 'Upload paused',\n        resumeUpload: 'Resume upload',\n        pauseUpload: 'Pause upload',\n        retryUpload: 'Retry upload',\n        cancelUpload: 'Cancel upload',\n        xFilesSelected: {\n          0: '%{smart_count} file selected',\n          1: '%{smart_count} files selected',\n          2: '%{smart_count} files selected'\n        },\n        uploadingXFiles: {\n          0: 'Uploading %{smart_count} file',\n          1: 'Uploading %{smart_count} files',\n          2: 'Uploading %{smart_count} files'\n        },\n        processingXFiles: {\n          0: 'Processing %{smart_count} file',\n          1: 'Processing %{smart_count} files',\n          2: 'Processing %{smart_count} files'\n        },\n        poweredBy: 'Powered by'\n      }\n    }; // set default options\n\n    var defaultOptions = {\n      target: 'body',\n      metaFields: [],\n      trigger: '#uppy-select-files',\n      inline: false,\n      width: 750,\n      height: 550,\n      thumbnailWidth: 280,\n      waitForThumbnailsBeforeUpload: false,\n      defaultPickerIcon: defaultPickerIcon,\n      showLinkToFileUploadResult: true,\n      showProgressDetails: false,\n      hideUploadButton: false,\n      hideRetryButton: false,\n      hidePauseResumeCancelButtons: false,\n      hideProgressAfterFinish: false,\n      note: null,\n      closeModalOnClickOutside: false,\n      closeAfterFinish: false,\n      disableStatusBar: false,\n      disableInformer: false,\n      disableThumbnailGenerator: false,\n      disablePageScrollWhenModalOpen: true,\n      animateOpenClose: true,\n      proudlyDisplayPoweredByUppy: true,\n      onRequestCloseModal: function onRequestCloseModal() {\n        return _this.closeModal();\n      },\n      showSelectedFiles: true,\n      browserBackButtonClose: false\n    }; // merge default options with the ones set by user\n\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n\n    _this.i18nInit();\n\n    _this.openModal = _this.openModal.bind(_assertThisInitialized(_this));\n    _this.closeModal = _this.closeModal.bind(_assertThisInitialized(_this));\n    _this.requestCloseModal = _this.requestCloseModal.bind(_assertThisInitialized(_this));\n    _this.isModalOpen = _this.isModalOpen.bind(_assertThisInitialized(_this));\n    _this.addTarget = _this.addTarget.bind(_assertThisInitialized(_this));\n    _this.removeTarget = _this.removeTarget.bind(_assertThisInitialized(_this));\n    _this.hideAllPanels = _this.hideAllPanels.bind(_assertThisInitialized(_this));\n    _this.showPanel = _this.showPanel.bind(_assertThisInitialized(_this));\n    _this.toggleFileCard = _this.toggleFileCard.bind(_assertThisInitialized(_this));\n    _this.toggleAddFilesPanel = _this.toggleAddFilesPanel.bind(_assertThisInitialized(_this));\n    _this.initEvents = _this.initEvents.bind(_assertThisInitialized(_this));\n    _this.handlePopState = _this.handlePopState.bind(_assertThisInitialized(_this));\n    _this.handleKeyDownInModal = _this.handleKeyDownInModal.bind(_assertThisInitialized(_this));\n    _this.handleKeyDownInInline = _this.handleKeyDownInInline.bind(_assertThisInitialized(_this));\n    _this.handleComplete = _this.handleComplete.bind(_assertThisInitialized(_this));\n    _this.handleClickOutside = _this.handleClickOutside.bind(_assertThisInitialized(_this));\n    _this.handlePaste = _this.handlePaste.bind(_assertThisInitialized(_this));\n    _this.handlePasteOnBody = _this.handlePasteOnBody.bind(_assertThisInitialized(_this));\n    _this.handleInputChange = _this.handleInputChange.bind(_assertThisInitialized(_this));\n    _this.handleDragOver = _this.handleDragOver.bind(_assertThisInitialized(_this));\n    _this.handleDragLeave = _this.handleDragLeave.bind(_assertThisInitialized(_this));\n    _this.handleDrop = _this.handleDrop.bind(_assertThisInitialized(_this));\n    _this.superFocusOnEachUpdate = _this.superFocusOnEachUpdate.bind(_assertThisInitialized(_this));\n    _this.recordIfFocusedOnUppyRecently = _this.recordIfFocusedOnUppyRecently.bind(_assertThisInitialized(_this));\n    _this.render = _this.render.bind(_assertThisInitialized(_this));\n    _this.install = _this.install.bind(_assertThisInitialized(_this));\n    _this.superFocus = createSuperFocus();\n    _this.ifFocusedOnUppyRecently = false; // Timeouts\n\n    _this.makeDashboardInsidesVisibleAnywayTimeout = null;\n    _this.removeDragOverClassTimeout = null;\n    return _this;\n  }\n\n  var _proto = Dashboard.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.i18nArray = this.translator.translateArray.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  };\n\n  _proto.removeTarget = function removeTarget(plugin) {\n    var pluginState = this.getPluginState(); // filter out the one we want to remove\n\n    var newTargets = pluginState.targets.filter(function (target) {\n      return target.id !== plugin.id;\n    });\n    this.setPluginState({\n      targets: newTargets\n    });\n  };\n\n  _proto.addTarget = function addTarget(plugin) {\n    var callerPluginId = plugin.id || plugin.constructor.name;\n    var callerPluginName = plugin.title || callerPluginId;\n    var callerPluginType = plugin.type;\n\n    if (callerPluginType !== 'acquirer' && callerPluginType !== 'progressindicator' && callerPluginType !== 'presenter') {\n      var msg = 'Dashboard: Modal can only be used by plugins of types: acquirer, progressindicator, presenter';\n      this.uppy.log(msg, 'error');\n      return;\n    }\n\n    var target = {\n      id: callerPluginId,\n      name: callerPluginName,\n      type: callerPluginType\n    };\n    var state = this.getPluginState();\n    var newTargets = state.targets.slice();\n    newTargets.push(target);\n    this.setPluginState({\n      targets: newTargets\n    });\n    return this.el;\n  };\n\n  _proto.hideAllPanels = function hideAllPanels() {\n    var update = {\n      activePickerPanel: false,\n      showAddFilesPanel: false,\n      activeOverlayType: null\n    };\n    var current = this.getPluginState();\n\n    if (current.activePickerPanel === update.activePickerPanel && current.showAddFilesPanel === update.showAddFilesPanel && current.activeOverlayType === update.activeOverlayType) {\n      // avoid doing a state update if nothing changed\n      return;\n    }\n\n    this.setPluginState(update);\n  };\n\n  _proto.showPanel = function showPanel(id) {\n    var _this$getPluginState = this.getPluginState(),\n        targets = _this$getPluginState.targets;\n\n    var activePickerPanel = targets.filter(function (target) {\n      return target.type === 'acquirer' && target.id === id;\n    })[0];\n    this.setPluginState({\n      activePickerPanel: activePickerPanel,\n      activeOverlayType: 'PickerPanel'\n    });\n  };\n\n  _proto.openModal = function openModal() {\n    var _this2 = this;\n\n    var _createPromise = createPromise(),\n        promise = _createPromise.promise,\n        resolve = _createPromise.resolve; // save scroll position\n\n\n    this.savedScrollPosition = window.pageYOffset; // save active element, so we can restore focus when modal is closed\n\n    this.savedActiveElement = document.activeElement;\n\n    if (this.opts.disablePageScrollWhenModalOpen) {\n      document.body.classList.add('uppy-Dashboard-isFixed');\n    }\n\n    if (this.opts.animateOpenClose && this.getPluginState().isClosing) {\n      var handler = function handler() {\n        _this2.setPluginState({\n          isHidden: false\n        });\n\n        _this2.el.removeEventListener('animationend', handler, false);\n\n        resolve();\n      };\n\n      this.el.addEventListener('animationend', handler, false);\n    } else {\n      this.setPluginState({\n        isHidden: false\n      });\n      resolve();\n    }\n\n    if (this.opts.browserBackButtonClose) {\n      this.updateBrowserHistory();\n    } // handle ESC and TAB keys in modal dialog\n\n\n    document.addEventListener('keydown', this.handleKeyDownInModal);\n    this.uppy.emit('dashboard:modal-open');\n    return promise;\n  };\n\n  _proto.closeModal = function closeModal(opts) {\n    var _this3 = this;\n\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var _opts = opts,\n        _opts$manualClose = _opts.manualClose,\n        manualClose = _opts$manualClose === void 0 ? true : _opts$manualClose;\n\n    var _this$getPluginState2 = this.getPluginState(),\n        isHidden = _this$getPluginState2.isHidden,\n        isClosing = _this$getPluginState2.isClosing;\n\n    if (isHidden || isClosing) {\n      // short-circuit if animation is ongoing\n      return;\n    }\n\n    var _createPromise2 = createPromise(),\n        promise = _createPromise2.promise,\n        resolve = _createPromise2.resolve;\n\n    if (this.opts.disablePageScrollWhenModalOpen) {\n      document.body.classList.remove('uppy-Dashboard-isFixed');\n    }\n\n    if (this.opts.animateOpenClose) {\n      this.setPluginState({\n        isClosing: true\n      });\n\n      var handler = function handler() {\n        _this3.setPluginState({\n          isHidden: true,\n          isClosing: false\n        });\n\n        _this3.superFocus.cancel();\n\n        _this3.savedActiveElement.focus();\n\n        _this3.el.removeEventListener('animationend', handler, false);\n\n        resolve();\n      };\n\n      this.el.addEventListener('animationend', handler, false);\n    } else {\n      this.setPluginState({\n        isHidden: true\n      });\n      this.superFocus.cancel();\n      this.savedActiveElement.focus();\n      resolve();\n    } // handle ESC and TAB keys in modal dialog\n\n\n    document.removeEventListener('keydown', this.handleKeyDownInModal);\n\n    if (manualClose) {\n      if (this.opts.browserBackButtonClose) {\n        // Make sure that the latest entry in the history state is our modal name\n        if (history.state && history.state[this.modalName]) {\n          // Go back in history to clear out the entry we created (ultimately closing the modal)\n          history.go(-1);\n        }\n      }\n    }\n\n    this.uppy.emit('dashboard:modal-closed');\n    return promise;\n  };\n\n  _proto.isModalOpen = function isModalOpen() {\n    return !this.getPluginState().isHidden || false;\n  };\n\n  _proto.requestCloseModal = function requestCloseModal() {\n    if (this.opts.onRequestCloseModal) {\n      return this.opts.onRequestCloseModal();\n    }\n\n    return this.closeModal();\n  };\n\n  _proto.toggleFileCard = function toggleFileCard(fileId) {\n    if (fileId) {\n      this.uppy.emit('dashboard:file-edit-start');\n    } else {\n      this.uppy.emit('dashboard:file-edit-complete');\n    }\n\n    this.setPluginState({\n      fileCardFor: fileId || null,\n      activeOverlayType: fileId ? 'FileCard' : null\n    });\n  };\n\n  _proto.toggleAddFilesPanel = function toggleAddFilesPanel(show) {\n    this.setPluginState({\n      showAddFilesPanel: show,\n      activeOverlayType: show ? 'AddFiles' : null\n    });\n  };\n\n  _proto.addFiles = function addFiles(files) {\n    var _this4 = this;\n\n    var descriptors = files.map(function (file) {\n      return {\n        source: _this4.id,\n        name: file.name,\n        type: file.type,\n        data: file,\n        meta: {\n          // path of the file relative to the ancestor directory the user selected.\n          // e.g. 'docs/Old Prague/airbnb.pdf'\n          relativePath: file.relativePath || null\n        }\n      };\n    });\n\n    try {\n      this.uppy.addFiles(descriptors);\n    } catch (err) {\n      this.uppy.log(err);\n    }\n  } // ___Why make insides of Dashboard invisible until first ResizeObserver event is emitted?\n  //    ResizeOberserver doesn't emit the first resize event fast enough, users can see the jump from one .uppy-size-- to another (e.g. in Safari)\n  // ___Why not apply visibility property to .uppy-Dashboard-inner?\n  //    Because ideally, acc to specs, ResizeObserver should see invisible elements as of width 0. So even though applying invisibility to .uppy-Dashboard-inner works now, it may not work in the future.\n  ;\n\n  _proto.startListeningToResize = function startListeningToResize() {\n    var _this5 = this;\n\n    // Watch for Dashboard container (`.uppy-Dashboard-inner`) resize\n    // and update containerWidth/containerHeight in plugin state accordingly.\n    // Emits first event on initialization.\n    this.resizeObserver = new ResizeObserver(function (entries, observer) {\n      var uppyDashboardInnerEl = entries[0];\n      var _uppyDashboardInnerEl = uppyDashboardInnerEl.contentRect,\n          width = _uppyDashboardInnerEl.width,\n          height = _uppyDashboardInnerEl.height;\n\n      _this5.uppy.log(\"[Dashboard] resized: \" + width + \" / \" + height, 'debug');\n\n      _this5.setPluginState({\n        containerWidth: width,\n        containerHeight: height,\n        areInsidesReadyToBeVisible: true\n      });\n    });\n    this.resizeObserver.observe(this.el.querySelector('.uppy-Dashboard-inner')); // If ResizeObserver fails to emit an event telling us what size to use - default to the mobile view\n\n    this.makeDashboardInsidesVisibleAnywayTimeout = setTimeout(function () {\n      var pluginState = _this5.getPluginState();\n\n      var isModalAndClosed = !_this5.opts.inline && pluginState.isHidden;\n\n      if ( // if ResizeObserver hasn't yet fired,\n      !pluginState.areInsidesReadyToBeVisible && // and it's not due to the modal being closed\n      !isModalAndClosed) {\n        _this5.uppy.log(\"[Dashboard] resize event didn't fire on time: defaulted to mobile layout\", 'debug');\n\n        _this5.setPluginState({\n          areInsidesReadyToBeVisible: true\n        });\n      }\n    }, 1000);\n  };\n\n  _proto.stopListeningToResize = function stopListeningToResize() {\n    this.resizeObserver.disconnect();\n    clearTimeout(this.makeDashboardInsidesVisibleAnywayTimeout);\n  } // Records whether we have been interacting with uppy right now, which is then used to determine whether state updates should trigger a refocusing.\n  ;\n\n  _proto.recordIfFocusedOnUppyRecently = function recordIfFocusedOnUppyRecently(event) {\n    if (this.el.contains(event.target)) {\n      this.ifFocusedOnUppyRecently = true;\n    } else {\n      this.ifFocusedOnUppyRecently = false; // ___Why run this.superFocus.cancel here when it already runs in superFocusOnEachUpdate?\n      //    Because superFocus is debounced, when we move from Uppy to some other element on the page,\n      //    previously run superFocus sometimes hits and moves focus back to Uppy.\n\n      this.superFocus.cancel();\n    }\n  };\n\n  _proto.updateBrowserHistory = function updateBrowserHistory() {\n    // Ensure history state does not already contain our modal name to avoid double-pushing\n    if (!history.state || !history.state[this.modalName]) {\n      var _extends2;\n\n      // Push to history so that the page is not lost on browser back button press\n      history.pushState(_extends({}, history.state, (_extends2 = {}, _extends2[this.modalName] = true, _extends2)), '');\n    } // Listen for back button presses\n\n\n    window.addEventListener('popstate', this.handlePopState, false);\n  };\n\n  _proto.handlePopState = function handlePopState(event) {\n    // Close the modal if the history state no longer contains our modal name\n    if (this.isModalOpen() && (!event.state || !event.state[this.modalName])) {\n      this.closeModal({\n        manualClose: false\n      });\n    } // When the browser back button is pressed and uppy is now the latest entry in the history but the modal is closed, fix the history by removing the uppy history entry\n    // This occurs when another entry is added into the history state while the modal is open, and then the modal gets manually closed\n    // Solves PR #575 (https://github.com/transloadit/uppy/pull/575)\n\n\n    if (!this.isModalOpen() && event.state && event.state[this.modalName]) {\n      history.go(-1);\n    }\n  };\n\n  _proto.handleKeyDownInModal = function handleKeyDownInModal(event) {\n    // close modal on esc key press\n    if (event.keyCode === ESC_KEY) this.requestCloseModal(event); // trap focus on tab key press\n\n    if (event.keyCode === TAB_KEY) trapFocus.forModal(event, this.getPluginState().activeOverlayType, this.el);\n  };\n\n  _proto.handleClickOutside = function handleClickOutside() {\n    if (this.opts.closeModalOnClickOutside) this.requestCloseModal();\n  };\n\n  _proto.handlePaste = function handlePaste(event) {\n    // 1. Let any acquirer plugin (Url/Webcam/etc.) handle pastes to the root\n    this.uppy.iteratePlugins(function (plugin) {\n      if (plugin.type === 'acquirer') {\n        // Every Plugin with .type acquirer can define handleRootPaste(event)\n        plugin.handleRootPaste && plugin.handleRootPaste(event);\n      }\n    }); // 2. Add all dropped files\n\n    var files = toArray(event.clipboardData.files);\n    this.addFiles(files);\n  };\n\n  _proto.handleInputChange = function handleInputChange(event) {\n    event.preventDefault();\n    var files = toArray(event.target.files);\n    this.addFiles(files);\n  };\n\n  _proto.handleDragOver = function handleDragOver(event) {\n    event.preventDefault();\n    event.stopPropagation(); // 1. Add a small (+) icon on drop\n    // (and prevent browsers from interpreting this as files being _moved_ into the browser, https://github.com/transloadit/uppy/issues/1978)\n\n    event.dataTransfer.dropEffect = 'copy';\n    clearTimeout(this.removeDragOverClassTimeout);\n    this.setPluginState({\n      isDraggingOver: true\n    });\n  };\n\n  _proto.handleDragLeave = function handleDragLeave(event) {\n    var _this6 = this;\n\n    event.preventDefault();\n    event.stopPropagation();\n    clearTimeout(this.removeDragOverClassTimeout); // Timeout against flickering, this solution is taken from drag-drop library. Solution with 'pointer-events: none' didn't work across browsers.\n\n    this.removeDragOverClassTimeout = setTimeout(function () {\n      _this6.setPluginState({\n        isDraggingOver: false\n      });\n    }, 50);\n  };\n\n  _proto.handleDrop = function handleDrop(event, dropCategory) {\n    var _this7 = this;\n\n    event.preventDefault();\n    event.stopPropagation();\n    clearTimeout(this.removeDragOverClassTimeout); // 2. Remove dragover class\n\n    this.setPluginState({\n      isDraggingOver: false\n    }); // 3. Let any acquirer plugin (Url/Webcam/etc.) handle drops to the root\n\n    this.uppy.iteratePlugins(function (plugin) {\n      if (plugin.type === 'acquirer') {\n        // Every Plugin with .type acquirer can define handleRootDrop(event)\n        plugin.handleRootDrop && plugin.handleRootDrop(event);\n      }\n    }); // 4. Add all dropped files\n\n    var executedDropErrorOnce = false;\n\n    var logDropError = function logDropError(error) {\n      _this7.uppy.log(error, 'error'); // In practice all drop errors are most likely the same, so let's just show one to avoid overwhelming the user\n\n\n      if (!executedDropErrorOnce) {\n        _this7.uppy.info(error.message, 'error');\n\n        executedDropErrorOnce = true;\n      }\n    };\n\n    getDroppedFiles(event.dataTransfer, {\n      logDropError: logDropError\n    }).then(function (files) {\n      if (files.length > 0) {\n        _this7.uppy.log('[Dashboard] Files were dropped');\n\n        _this7.addFiles(files);\n      }\n    });\n  };\n\n  _proto.handleKeyDownInInline = function handleKeyDownInInline(event) {\n    // Trap focus on tab key press.\n    if (event.keyCode === TAB_KEY) trapFocus.forInline(event, this.getPluginState().activeOverlayType, this.el);\n  } // ___Why do we listen to the 'paste' event on a document instead of onPaste={props.handlePaste} prop, or this.el.addEventListener('paste')?\n  //    Because (at least) Chrome doesn't handle paste if focus is on some button, e.g. 'My Device'.\n  //    => Therefore, the best option is to listen to all 'paste' events, and only react to them when we are focused on our particular Uppy instance.\n  // ___Why do we still need onPaste={props.handlePaste} for the DashboardUi?\n  //    Because if we click on the 'Drop files here' caption e.g., `document.activeElement` will be 'body'. Which means our standard determination of whether we're pasting into our Uppy instance won't work.\n  //    => Therefore, we need a traditional onPaste={props.handlePaste} handler too.\n  ;\n\n  _proto.handlePasteOnBody = function handlePasteOnBody(event) {\n    var isFocusInOverlay = this.el.contains(document.activeElement);\n\n    if (isFocusInOverlay) {\n      this.handlePaste(event);\n    }\n  };\n\n  _proto.handleComplete = function handleComplete(_ref) {\n    var failed = _ref.failed,\n        uploadID = _ref.uploadID;\n\n    if (this.opts.closeAfterFinish && failed.length === 0) {\n      // All uploads are done\n      this.requestCloseModal();\n    }\n  };\n\n  _proto.initEvents = function initEvents() {\n    var _this8 = this;\n\n    // Modal open button\n    var showModalTrigger = findAllDOMElements(this.opts.trigger);\n\n    if (!this.opts.inline && showModalTrigger) {\n      showModalTrigger.forEach(function (trigger) {\n        return trigger.addEventListener('click', _this8.openModal);\n      });\n    }\n\n    if (!this.opts.inline && !showModalTrigger) {\n      this.uppy.log('Dashboard modal trigger not found. Make sure `trigger` is set in Dashboard options unless you are planning to call openModal() method yourself', 'error');\n    }\n\n    this.startListeningToResize();\n    document.addEventListener('paste', this.handlePasteOnBody);\n    this.uppy.on('plugin-remove', this.removeTarget);\n    this.uppy.on('file-added', this.hideAllPanels);\n    this.uppy.on('dashboard:modal-closed', this.hideAllPanels);\n    this.uppy.on('complete', this.handleComplete); // ___Why fire on capture?\n    //    Because this.ifFocusedOnUppyRecently needs to change before onUpdate() fires.\n\n    document.addEventListener('focus', this.recordIfFocusedOnUppyRecently, true);\n    document.addEventListener('click', this.recordIfFocusedOnUppyRecently, true);\n\n    if (this.opts.inline) {\n      this.el.addEventListener('keydown', this.handleKeyDownInInline);\n    }\n  };\n\n  _proto.removeEvents = function removeEvents() {\n    var _this9 = this;\n\n    var showModalTrigger = findAllDOMElements(this.opts.trigger);\n\n    if (!this.opts.inline && showModalTrigger) {\n      showModalTrigger.forEach(function (trigger) {\n        return trigger.removeEventListener('click', _this9.openModal);\n      });\n    }\n\n    this.stopListeningToResize();\n    document.removeEventListener('paste', this.handlePasteOnBody);\n    window.removeEventListener('popstate', this.handlePopState, false);\n    this.uppy.off('plugin-remove', this.removeTarget);\n    this.uppy.off('file-added', this.hideAllPanels);\n    this.uppy.off('dashboard:modal-closed', this.hideAllPanels);\n    this.uppy.off('complete', this.handleComplete);\n    document.removeEventListener('focus', this.recordIfFocusedOnUppyRecently);\n    document.removeEventListener('click', this.recordIfFocusedOnUppyRecently);\n\n    if (this.opts.inline) {\n      this.el.removeEventListener('keydown', this.handleKeyDownInInline);\n    }\n  };\n\n  _proto.superFocusOnEachUpdate = function superFocusOnEachUpdate() {\n    var isFocusInUppy = this.el.contains(document.activeElement); // When focus is lost on the page (== focus is on body for most browsers, or focus is null for IE11)\n\n    var isFocusNowhere = document.activeElement === document.querySelector('body') || document.activeElement === null;\n    var isInformerHidden = this.uppy.getState().info.isHidden;\n    var isModal = !this.opts.inline;\n\n    if ( // If update is connected to showing the Informer - let the screen reader calmly read it.\n    isInformerHidden && ( // If we are in a modal - always superfocus without concern for other elements on the page (user is unlikely to want to interact with the rest of the page)\n    isModal || // If we are already inside of Uppy, or\n    isFocusInUppy || // If we are not focused on anything BUT we have already, at least once, focused on uppy\n    //   1. We focus when isFocusNowhere, because when the element we were focused on disappears (e.g. an overlay), - focus gets lost. If user is typing something somewhere else on the page, - focus won't be 'nowhere'.\n    //   2. We only focus when focus is nowhere AND this.ifFocusedOnUppyRecently, to avoid focus jumps if we do something else on the page.\n    //   [Practical check] Without '&& this.ifFocusedOnUppyRecently', in Safari, in inline mode, when file is uploading, - navigate via tab to the checkbox, try to press space multiple times. Focus will jump to Uppy.\n    isFocusNowhere && this.ifFocusedOnUppyRecently)) {\n      this.superFocus(this.el, this.getPluginState().activeOverlayType);\n    } else {\n      this.superFocus.cancel();\n    }\n  };\n\n  _proto.afterUpdate = function afterUpdate() {\n    this.superFocusOnEachUpdate();\n  };\n\n  _proto.render = function render(state) {\n    var pluginState = this.getPluginState();\n    var files = state.files,\n        capabilities = state.capabilities,\n        allowNewUpload = state.allowNewUpload; // TODO: move this to Core, to share between Status Bar and Dashboard\n    // (and any other plugin that might need it, too)\n\n    var newFiles = Object.keys(files).filter(function (file) {\n      return !files[file].progress.uploadStarted;\n    });\n    var uploadStartedFiles = Object.keys(files).filter(function (file) {\n      return files[file].progress.uploadStarted;\n    });\n    var pausedFiles = Object.keys(files).filter(function (file) {\n      return files[file].isPaused;\n    });\n    var completeFiles = Object.keys(files).filter(function (file) {\n      return files[file].progress.uploadComplete;\n    });\n    var erroredFiles = Object.keys(files).filter(function (file) {\n      return files[file].error;\n    });\n    var inProgressFiles = Object.keys(files).filter(function (file) {\n      return !files[file].progress.uploadComplete && files[file].progress.uploadStarted;\n    });\n    var inProgressNotPausedFiles = inProgressFiles.filter(function (file) {\n      return !files[file].isPaused;\n    });\n    var processingFiles = Object.keys(files).filter(function (file) {\n      return files[file].progress.preprocess || files[file].progress.postprocess;\n    });\n    var isUploadStarted = uploadStartedFiles.length > 0;\n    var isAllComplete = state.totalProgress === 100 && completeFiles.length === Object.keys(files).length && processingFiles.length === 0;\n    var isAllErrored = isUploadStarted && erroredFiles.length === uploadStartedFiles.length;\n    var isAllPaused = inProgressFiles.length !== 0 && pausedFiles.length === inProgressFiles.length;\n\n    var acquirers = this._getAcquirers(pluginState.targets);\n\n    var progressindicators = this._getProgressIndicators(pluginState.targets);\n\n    return DashboardUI({\n      state: state,\n      isHidden: pluginState.isHidden,\n      files: files,\n      newFiles: newFiles,\n      uploadStartedFiles: uploadStartedFiles,\n      completeFiles: completeFiles,\n      erroredFiles: erroredFiles,\n      inProgressFiles: inProgressFiles,\n      inProgressNotPausedFiles: inProgressNotPausedFiles,\n      processingFiles: processingFiles,\n      isUploadStarted: isUploadStarted,\n      isAllComplete: isAllComplete,\n      isAllErrored: isAllErrored,\n      isAllPaused: isAllPaused,\n      totalFileCount: Object.keys(files).length,\n      totalProgress: state.totalProgress,\n      allowNewUpload: allowNewUpload,\n      acquirers: acquirers,\n      activePickerPanel: pluginState.activePickerPanel,\n      animateOpenClose: this.opts.animateOpenClose,\n      isClosing: pluginState.isClosing,\n      getPlugin: this.uppy.getPlugin,\n      progressindicators: progressindicators,\n      autoProceed: this.uppy.opts.autoProceed,\n      id: this.id,\n      closeModal: this.requestCloseModal,\n      handleClickOutside: this.handleClickOutside,\n      handleInputChange: this.handleInputChange,\n      handlePaste: this.handlePaste,\n      inline: this.opts.inline,\n      showPanel: this.showPanel,\n      hideAllPanels: this.hideAllPanels,\n      log: this.uppy.log,\n      i18n: this.i18n,\n      i18nArray: this.i18nArray,\n      removeFile: this.uppy.removeFile,\n      info: this.uppy.info,\n      note: this.opts.note,\n      metaFields: pluginState.metaFields,\n      resumableUploads: capabilities.resumableUploads || false,\n      individualCancellation: capabilities.individualCancellation,\n      pauseUpload: this.uppy.pauseResume,\n      retryUpload: this.uppy.retryUpload,\n      cancelUpload: this.cancelUpload,\n      cancelAll: this.uppy.cancelAll,\n      fileCardFor: pluginState.fileCardFor,\n      toggleFileCard: this.toggleFileCard,\n      toggleAddFilesPanel: this.toggleAddFilesPanel,\n      showAddFilesPanel: pluginState.showAddFilesPanel,\n      saveFileCard: this.saveFileCard,\n      width: this.opts.width,\n      height: this.opts.height,\n      showLinkToFileUploadResult: this.opts.showLinkToFileUploadResult,\n      proudlyDisplayPoweredByUppy: this.opts.proudlyDisplayPoweredByUppy,\n      hideCancelButton: this.opts.hideCancelButton,\n      containerWidth: pluginState.containerWidth,\n      containerHeight: pluginState.containerHeight,\n      areInsidesReadyToBeVisible: pluginState.areInsidesReadyToBeVisible,\n      isTargetDOMEl: this.isTargetDOMEl,\n      parentElement: this.el,\n      allowedFileTypes: this.uppy.opts.restrictions.allowedFileTypes,\n      maxNumberOfFiles: this.uppy.opts.restrictions.maxNumberOfFiles,\n      showSelectedFiles: this.opts.showSelectedFiles,\n      // drag props\n      isDraggingOver: pluginState.isDraggingOver,\n      handleDragOver: this.handleDragOver,\n      handleDragLeave: this.handleDragLeave,\n      handleDrop: this.handleDrop\n    });\n  };\n\n  _proto.discoverProviderPlugins = function discoverProviderPlugins() {\n    var _this10 = this;\n\n    this.uppy.iteratePlugins(function (plugin) {\n      if (plugin && !plugin.target && plugin.opts && plugin.opts.target === _this10.constructor) {\n        _this10.addTarget(plugin);\n      }\n    });\n  };\n\n  _proto.install = function install() {\n    var _this11 = this;\n\n    // Set default state for Dashboard\n    this.setPluginState({\n      isHidden: true,\n      fileCardFor: null,\n      activeOverlayType: null,\n      showAddFilesPanel: false,\n      activePickerPanel: false,\n      metaFields: this.opts.metaFields,\n      targets: [],\n      // We'll make them visible once .containerWidth is determined\n      areInsidesReadyToBeVisible: false,\n      isDraggingOver: false\n    });\n    var _this$opts = this.opts,\n        inline = _this$opts.inline,\n        closeAfterFinish = _this$opts.closeAfterFinish;\n\n    if (inline && closeAfterFinish) {\n      throw new Error('[Dashboard] `closeAfterFinish: true` cannot be used on an inline Dashboard, because an inline Dashboard cannot be closed at all. Either set `inline: false`, or disable the `closeAfterFinish` option.');\n    }\n\n    var allowMultipleUploads = this.uppy.opts.allowMultipleUploads;\n\n    if (allowMultipleUploads && closeAfterFinish) {\n      this.uppy.log('[Dashboard] When using `closeAfterFinish`, we recommended setting the `allowMultipleUploads` option to `false` in the Uppy constructor. See https://uppy.io/docs/uppy/#allowMultipleUploads-true', 'warning');\n    }\n\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n\n    var plugins = this.opts.plugins || [];\n    plugins.forEach(function (pluginID) {\n      var plugin = _this11.uppy.getPlugin(pluginID);\n\n      if (plugin) {\n        plugin.mount(_this11, plugin);\n      }\n    });\n\n    if (!this.opts.disableStatusBar) {\n      this.uppy.use(StatusBar, {\n        id: this.id + \":StatusBar\",\n        target: this,\n        hideUploadButton: this.opts.hideUploadButton,\n        hideRetryButton: this.opts.hideRetryButton,\n        hidePauseResumeButton: this.opts.hidePauseResumeButton,\n        hideCancelButton: this.opts.hideCancelButton,\n        showProgressDetails: this.opts.showProgressDetails,\n        hideAfterFinish: this.opts.hideProgressAfterFinish,\n        locale: this.opts.locale\n      });\n    }\n\n    if (!this.opts.disableInformer) {\n      this.uppy.use(Informer, {\n        id: this.id + \":Informer\",\n        target: this\n      });\n    }\n\n    if (!this.opts.disableThumbnailGenerator) {\n      this.uppy.use(ThumbnailGenerator, {\n        id: this.id + \":ThumbnailGenerator\",\n        thumbnailWidth: this.opts.thumbnailWidth,\n        waitForThumbnailsBeforeUpload: this.opts.waitForThumbnailsBeforeUpload\n      });\n    }\n\n    this.discoverProviderPlugins();\n    this.initEvents();\n  };\n\n  _proto.uninstall = function uninstall() {\n    var _this12 = this;\n\n    if (!this.opts.disableInformer) {\n      var informer = this.uppy.getPlugin(this.id + \":Informer\"); // Checking if this plugin exists, in case it was removed by uppy-core\n      // before the Dashboard was.\n\n      if (informer) this.uppy.removePlugin(informer);\n    }\n\n    if (!this.opts.disableStatusBar) {\n      var statusBar = this.uppy.getPlugin(this.id + \":StatusBar\");\n      if (statusBar) this.uppy.removePlugin(statusBar);\n    }\n\n    if (!this.opts.disableThumbnailGenerator) {\n      var thumbnail = this.uppy.getPlugin(this.id + \":ThumbnailGenerator\");\n      if (thumbnail) this.uppy.removePlugin(thumbnail);\n    }\n\n    var plugins = this.opts.plugins || [];\n    plugins.forEach(function (pluginID) {\n      var plugin = _this12.uppy.getPlugin(pluginID);\n\n      if (plugin) plugin.unmount();\n    });\n    this.unmount();\n    this.removeEvents();\n  };\n\n  return Dashboard;\n}(Plugin), _class.VERSION = \"1.5.2\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/utils/copyToClipboard.js":
/*!*******************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/utils/copyToClipboard.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Copies text to clipboard by creating an almost invisible textarea,\n * adding text there, then running execCommand('copy').\n * Falls back to prompt() when the easy way fails (hello, Safari!)\n * From http://stackoverflow.com/a/30810322\n *\n * @param {string} textToCopy\n * @param {string} fallbackString\n * @returns {Promise}\n */\nmodule.exports = function copyToClipboard(textToCopy, fallbackString) {\n  fallbackString = fallbackString || 'Copy the URL below';\n  return new Promise(function (resolve) {\n    var textArea = document.createElement('textarea');\n    textArea.setAttribute('style', {\n      position: 'fixed',\n      top: 0,\n      left: 0,\n      width: '2em',\n      height: '2em',\n      padding: 0,\n      border: 'none',\n      outline: 'none',\n      boxShadow: 'none',\n      background: 'transparent'\n    });\n    textArea.value = textToCopy;\n    document.body.appendChild(textArea);\n    textArea.select();\n\n    var magicCopyFailed = function magicCopyFailed() {\n      document.body.removeChild(textArea);\n      window.prompt(fallbackString, textToCopy);\n      resolve();\n    };\n\n    try {\n      var successful = document.execCommand('copy');\n\n      if (!successful) {\n        return magicCopyFailed('copy command unavailable');\n      }\n\n      document.body.removeChild(textArea);\n      return resolve();\n    } catch (err) {\n      document.body.removeChild(textArea);\n      return magicCopyFailed(err);\n    }\n  });\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/utils/copyToClipboard.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/utils/createSuperFocus.js":
/*!********************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/utils/createSuperFocus.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var debounce = __webpack_require__(/*! lodash.debounce */ \"./node_modules/lodash.debounce/index.js\");\n\nvar FOCUSABLE_ELEMENTS = __webpack_require__(/*! @uppy/utils/lib/FOCUSABLE_ELEMENTS */ \"./node_modules/@uppy/utils/lib/FOCUSABLE_ELEMENTS.js\");\n\nvar getActiveOverlayEl = __webpack_require__(/*! ./getActiveOverlayEl */ \"./node_modules/@uppy/dashboard/lib/utils/getActiveOverlayEl.js\");\n/*\n  Focuses on some element in the currently topmost overlay.\n\n  1. If there are some [data-uppy-super-focusable] elements rendered already - focuses on the first superfocusable element, and leaves focus up to the control of a user (until currently focused element disappears from the screen [which can happen when overlay changes, or, e.g., when we click on a folder in googledrive]).\n  2. If there are no [data-uppy-super-focusable] elements yet (or ever) - focuses on the first focusable element, but switches focus if superfocusable elements appear on next render.\n*/\n\n\nmodule.exports = function createSuperFocus() {\n  var lastFocusWasOnSuperFocusableEl = false;\n\n  var superFocus = function superFocus(dashboardEl, activeOverlayType) {\n    var overlayEl = getActiveOverlayEl(dashboardEl, activeOverlayType);\n    var isFocusInOverlay = overlayEl.contains(document.activeElement); // If focus is already in the topmost overlay, AND on last update we focused on the superfocusable element - then leave focus up to the user.\n    // [Practical check] without this line, typing in the search input in googledrive overlay won't work.\n\n    if (isFocusInOverlay && lastFocusWasOnSuperFocusableEl) return;\n    var superFocusableEl = overlayEl.querySelector('[data-uppy-super-focusable]'); // If we are already in the topmost overlay, AND there are no super focusable elements yet, - leave focus up to the user.\n    // [Practical check] without this line, if you are in an empty folder in google drive, and something's uploading in the bg, - focus will be jumping to Done all the time.\n\n    if (isFocusInOverlay && !superFocusableEl) return;\n\n    if (superFocusableEl) {\n      superFocusableEl.focus({\n        preventScroll: true\n      });\n      lastFocusWasOnSuperFocusableEl = true;\n    } else {\n      var firstEl = overlayEl.querySelector(FOCUSABLE_ELEMENTS);\n      firstEl && firstEl.focus({\n        preventScroll: true\n      });\n      lastFocusWasOnSuperFocusableEl = false;\n    }\n  }; // ___Why do we need to debounce?\n  //    1. To deal with animations: overlay changes via animations, which results in the DOM updating AFTER plugin.update() already executed.\n  //    [Practical check] without debounce, if we open the Url overlay, and click 'Done', Dashboard won't get focused again.\n  //    [Practical check] if we delay 250ms instead of 260ms - IE11 won't get focused in same situation.\n  //    2. Performance: there can be many state update()s in a second, and this function is called every time.\n\n\n  return debounce(superFocus, 260);\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/utils/createSuperFocus.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/utils/getActiveOverlayEl.js":
/*!**********************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/utils/getActiveOverlayEl.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * @returns {HTMLElement} - either dashboard element, or the overlay that's most on top\n */\nmodule.exports = function getActiveOverlayEl(dashboardEl, activeOverlayType) {\n  if (activeOverlayType) {\n    var overlayEl = dashboardEl.querySelector(\"[data-uppy-paneltype=\\\"\" + activeOverlayType + \"\\\"]\"); // if an overlay is already mounted\n\n    if (overlayEl) return overlayEl;\n  }\n\n  return dashboardEl;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/utils/getActiveOverlayEl.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/utils/getFileTypeIcon.js":
/*!*******************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/utils/getFileTypeIcon.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! ../components/icons */ \"./node_modules/@uppy/dashboard/lib/components/icons.js\"),\n    iconFile = _require.iconFile,\n    iconText = _require.iconText,\n    iconAudio = _require.iconAudio,\n    iconVideo = _require.iconVideo,\n    iconPDF = _require.iconPDF;\n\nmodule.exports = function getIconByMime(fileType) {\n  var defaultChoice = {\n    color: '#838999',\n    icon: iconFile()\n  };\n  if (!fileType) return defaultChoice;\n  var fileTypeGeneral = fileType.split('/')[0];\n  var fileTypeSpecific = fileType.split('/')[1];\n\n  if (fileTypeGeneral === 'text') {\n    return {\n      color: '#5a5e69',\n      icon: iconText()\n    };\n  }\n\n  if (fileTypeGeneral === 'audio') {\n    return {\n      color: '#068dbb',\n      icon: iconAudio()\n    };\n  }\n\n  if (fileTypeGeneral === 'video') {\n    return {\n      color: '#19af67',\n      icon: iconVideo()\n    };\n  }\n\n  if (fileTypeGeneral === 'application' && fileTypeSpecific === 'pdf') {\n    return {\n      color: '#e25149',\n      icon: iconPDF()\n    };\n  }\n\n  if (fileTypeGeneral === 'image') {\n    return {\n      color: '#f2f2f2',\n      icon: ''\n    };\n  }\n\n  return defaultChoice;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/utils/getFileTypeIcon.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/utils/ignoreEvent.js":
/*!***************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/utils/ignoreEvent.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// ignore drop/paste events if they are not in input or textarea —\n// otherwise when Url plugin adds drop/paste listeners to this.el,\n// draging UI elements or pasting anything into any field triggers those events —\n// Url treats them as URLs that need to be imported\nfunction ignoreEvent(ev) {\n  var tagName = ev.target.tagName;\n\n  if (tagName === 'INPUT' || tagName === 'TEXTAREA') {\n    ev.stopPropagation();\n    return;\n  }\n\n  ev.preventDefault();\n  ev.stopPropagation();\n}\n\nmodule.exports = ignoreEvent;\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/utils/ignoreEvent.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/utils/trapFocus.js":
/*!*************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/utils/trapFocus.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var toArray = __webpack_require__(/*! @uppy/utils/lib/toArray */ \"./node_modules/@uppy/utils/lib/toArray.js\");\n\nvar getActiveOverlayEl = __webpack_require__(/*! ./getActiveOverlayEl */ \"./node_modules/@uppy/dashboard/lib/utils/getActiveOverlayEl.js\");\n\nvar FOCUSABLE_ELEMENTS = __webpack_require__(/*! @uppy/utils/lib//FOCUSABLE_ELEMENTS */ \"./node_modules/@uppy/utils/lib/FOCUSABLE_ELEMENTS.js\");\n\nfunction focusOnFirstNode(event, nodes) {\n  var node = nodes[0];\n\n  if (node) {\n    node.focus();\n    event.preventDefault();\n  }\n}\n\nfunction focusOnLastNode(event, nodes) {\n  var node = nodes[nodes.length - 1];\n\n  if (node) {\n    node.focus();\n    event.preventDefault();\n  }\n} // ___Why not just use (focusedItemIndex === -1)?\n//    Firefox thinks <ul> is focusable, but we don't have <ul>s in our FOCUSABLE_ELEMENTS. Which means that if we tab into the <ul>, code will think that we are not in the active overlay, and we should focusOnFirstNode() of the currently active overlay!\n//    [Practical check] if we use (focusedItemIndex === -1), instagram provider in firefox will never get focus on its pics in the <ul>.\n\n\nfunction isFocusInOverlay(activeOverlayEl) {\n  return activeOverlayEl.contains(document.activeElement);\n}\n\nfunction trapFocus(event, activeOverlayType, dashboardEl) {\n  var activeOverlayEl = getActiveOverlayEl(dashboardEl, activeOverlayType);\n  var focusableNodes = toArray(activeOverlayEl.querySelectorAll(FOCUSABLE_ELEMENTS));\n  var focusedItemIndex = focusableNodes.indexOf(document.activeElement); // If we pressed tab, and focus is not yet within the current overlay - focus on the first element within the current overlay.\n  // This is a safety measure (for when user returns from another tab e.g.), most plugins will try to focus on some important element as it loads.\n\n  if (!isFocusInOverlay(activeOverlayEl)) {\n    focusOnFirstNode(event, focusableNodes); // If we pressed shift + tab, and we're on the first element of a modal\n  } else if (event.shiftKey && focusedItemIndex === 0) {\n    focusOnLastNode(event, focusableNodes); // If we pressed tab, and we're on the last element of the modal\n  } else if (!event.shiftKey && focusedItemIndex === focusableNodes.length - 1) {\n    focusOnFirstNode(event, focusableNodes);\n  }\n}\n\nmodule.exports = {\n  // Traps focus inside of the currently open overlay (e.g. Dashboard, or e.g. Instagram), never lets focus disappear from the modal.\n  forModal: function forModal(event, activeOverlayType, dashboardEl) {\n    trapFocus(event, activeOverlayType, dashboardEl);\n  },\n  // Traps focus inside of the currently open overlay, unless overlay is null - then let the user tab away.\n  forInline: function forInline(event, activeOverlayType, dashboardEl) {\n    // ___When we're in the bare 'Drop files here, paste, browse or import from' screen\n    if (activeOverlayType === null) {// Do nothing and let the browser handle it, user can tab away from Uppy to other elements on the page\n      // ___When there is some overlay with 'Done' button\n    } else {\n      // Trap the focus inside this overlay!\n      // User can close the overlay (click 'Done') if they want to travel away from Uppy.\n      trapFocus(event, activeOverlayType, dashboardEl);\n    }\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/utils/trapFocus.js?");

/***/ }),

/***/ "./node_modules/@uppy/dashboard/lib/utils/truncateString.js":
/*!******************************************************************!*\
  !*** ./node_modules/@uppy/dashboard/lib/utils/truncateString.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Truncates a string to the given number of chars (maxLength) by inserting '...' in the middle of that string.\n * Partially taken from https://stackoverflow.com/a/5723274/3192470.\n *\n * @param {string} string - string to be truncated\n * @param {number} maxLength - maximum size of the resulting string\n * @returns {string}\n */\nmodule.exports = function truncateString(string, maxLength) {\n  var separator = '...'; // Return original string if it's already shorter than maxLength\n\n  if (string.length <= maxLength) {\n    return string; // Return truncated substring without '...' if string can't be meaningfully truncated\n  } else if (maxLength <= separator.length) {\n    return string.substr(0, maxLength); // Return truncated string divided in half by '...'\n  } else {\n    var charsToShow = maxLength - separator.length;\n    var frontChars = Math.ceil(charsToShow / 2);\n    var backChars = Math.floor(charsToShow / 2);\n    return string.substr(0, frontChars) + separator + string.substr(string.length - backChars);\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/dashboard/lib/utils/truncateString.js?");

/***/ }),

/***/ "./node_modules/@uppy/drag-drop/lib/index.js":
/*!***************************************************!*\
  !*** ./node_modules/@uppy/drag-drop/lib/index.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar toArray = __webpack_require__(/*! @uppy/utils/lib/toArray */ \"./node_modules/@uppy/utils/lib/toArray.js\");\n\nvar isDragDropSupported = __webpack_require__(/*! @uppy/utils/lib/isDragDropSupported */ \"./node_modules/@uppy/utils/lib/isDragDropSupported.js\");\n\nvar getDroppedFiles = __webpack_require__(/*! @uppy/utils/lib/getDroppedFiles */ \"./node_modules/@uppy/utils/lib/getDroppedFiles/index.js\");\n\nvar _require2 = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require2.h;\n/**\n * Drag & Drop plugin\n *\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(DragDrop, _Plugin);\n\n  function DragDrop(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'acquirer';\n    _this.id = _this.opts.id || 'DragDrop';\n    _this.title = 'Drag & Drop';\n    _this.defaultLocale = {\n      strings: {\n        dropHereOr: 'Drop files here or %{browse}',\n        browse: 'browse'\n      }\n    }; // Default options\n\n    var defaultOpts = {\n      target: null,\n      inputName: 'files[]',\n      width: '100%',\n      height: '100%',\n      note: null\n    }; // Merge default options with the ones set by user\n\n    _this.opts = _extends({}, defaultOpts, {}, opts); // Check for browser dragDrop support\n\n    _this.isDragDropSupported = isDragDropSupported();\n    _this.removeDragOverClassTimeout = null;\n\n    _this.i18nInit(); // Bind `this` to class methods\n\n\n    _this.onInputChange = _this.onInputChange.bind(_assertThisInitialized(_this));\n    _this.handleDragOver = _this.handleDragOver.bind(_assertThisInitialized(_this));\n    _this.handleDragLeave = _this.handleDragLeave.bind(_assertThisInitialized(_this));\n    _this.handleDrop = _this.handleDrop.bind(_assertThisInitialized(_this));\n    _this.addFiles = _this.addFiles.bind(_assertThisInitialized(_this));\n    _this.render = _this.render.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = DragDrop.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.i18nArray = this.translator.translateArray.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  };\n\n  _proto.addFiles = function addFiles(files) {\n    var _this2 = this;\n\n    var descriptors = files.map(function (file) {\n      return {\n        source: _this2.id,\n        name: file.name,\n        type: file.type,\n        data: file,\n        meta: {\n          // path of the file relative to the ancestor directory the user selected.\n          // e.g. 'docs/Old Prague/airbnb.pdf'\n          relativePath: file.relativePath || null\n        }\n      };\n    });\n\n    try {\n      this.uppy.addFiles(descriptors);\n    } catch (err) {\n      this.uppy.log(err);\n    }\n  };\n\n  _proto.onInputChange = function onInputChange(event) {\n    this.uppy.log('[DragDrop] Files selected through input');\n    var files = toArray(event.target.files);\n    this.addFiles(files); // We clear the input after a file is selected, because otherwise\n    // change event is not fired in Chrome and Safari when a file\n    // with the same name is selected.\n    // ___Why not use value=\"\" on <input/> instead?\n    //    Because if we use that method of clearing the input,\n    //    Chrome will not trigger change if we drop the same file twice (Issue #768).\n\n    event.target.value = null;\n  };\n\n  _proto.handleDrop = function handleDrop(event, dropCategory) {\n    var _this3 = this;\n\n    event.preventDefault();\n    event.stopPropagation();\n    clearTimeout(this.removeDragOverClassTimeout); // 2. Remove dragover class\n\n    this.setPluginState({\n      isDraggingOver: false\n    }); // 3. Add all dropped files\n\n    this.uppy.log('[DragDrop] Files were dropped');\n\n    var logDropError = function logDropError(error) {\n      _this3.uppy.log(error, 'error');\n    };\n\n    getDroppedFiles(event.dataTransfer, {\n      logDropError: logDropError\n    }).then(function (files) {\n      return _this3.addFiles(files);\n    });\n  };\n\n  _proto.handleDragOver = function handleDragOver(event) {\n    event.preventDefault();\n    event.stopPropagation(); // 1. Add a small (+) icon on drop\n    // (and prevent browsers from interpreting this as files being _moved_ into the browser, https://github.com/transloadit/uppy/issues/1978)\n\n    event.dataTransfer.dropEffect = 'copy';\n    clearTimeout(this.removeDragOverClassTimeout);\n    this.setPluginState({\n      isDraggingOver: true\n    });\n  };\n\n  _proto.handleDragLeave = function handleDragLeave(event) {\n    var _this4 = this;\n\n    event.preventDefault();\n    event.stopPropagation();\n    clearTimeout(this.removeDragOverClassTimeout); // Timeout against flickering, this solution is taken from drag-drop library. Solution with 'pointer-events: none' didn't work across browsers.\n\n    this.removeDragOverClassTimeout = setTimeout(function () {\n      _this4.setPluginState({\n        isDraggingOver: false\n      });\n    }, 50);\n  };\n\n  _proto.renderHiddenFileInput = function renderHiddenFileInput() {\n    var _this5 = this;\n\n    var restrictions = this.uppy.opts.restrictions;\n    return h(\"input\", {\n      class: \"uppy-DragDrop-input\",\n      type: \"file\",\n      tabindex: -1,\n      focusable: \"false\",\n      ref: function ref(_ref) {\n        _this5.fileInputRef = _ref;\n      },\n      name: this.opts.inputName,\n      multiple: restrictions.maxNumberOfFiles !== 1,\n      accept: restrictions.allowedFileTypes,\n      onchange: this.onInputChange\n    });\n  };\n\n  _proto.renderArrowSvg = function renderArrowSvg() {\n    return h(\"svg\", {\n      \"aria-hidden\": \"true\",\n      focusable: \"false\",\n      class: \"UppyIcon uppy-DragDrop-arrow\",\n      width: \"16\",\n      height: \"16\",\n      viewBox: \"0 0 16 16\"\n    }, h(\"path\", {\n      d: \"M11 10V0H5v10H2l6 6 6-6h-3zm0 0\",\n      \"fill-rule\": \"evenodd\"\n    }));\n  };\n\n  _proto.renderLabel = function renderLabel() {\n    return h(\"div\", {\n      class: \"uppy-DragDrop-label\"\n    }, this.i18nArray('dropHereOr', {\n      browse: h(\"span\", {\n        class: \"uppy-DragDrop-browse\"\n      }, this.i18n('browse'))\n    }));\n  };\n\n  _proto.renderNote = function renderNote() {\n    return h(\"span\", {\n      class: \"uppy-DragDrop-note\"\n    }, this.opts.note);\n  };\n\n  _proto.render = function render(state) {\n    var _this6 = this;\n\n    var dragDropClass = \"\\n      uppy-Root\\n      uppy-u-reset\\n      uppy-DragDrop-container\\n      \" + (this.isDragDropSupported ? 'uppy-DragDrop--is-dragdrop-supported' : '') + \"\\n      \" + (this.getPluginState().isDraggingOver ? 'uppy-DragDrop--isDraggingOver' : '') + \"\\n    \";\n    var dragDropStyle = {\n      width: this.opts.width,\n      height: this.opts.height\n    };\n    return h(\"button\", {\n      type: \"button\",\n      class: dragDropClass,\n      style: dragDropStyle,\n      onClick: function onClick() {\n        return _this6.fileInputRef.click();\n      },\n      onDragOver: this.handleDragOver,\n      onDragLeave: this.handleDragLeave,\n      onDrop: this.handleDrop\n    }, this.renderHiddenFileInput(), h(\"div\", {\n      class: \"uppy-DragDrop-inner\"\n    }, this.renderArrowSvg(), this.renderLabel(), this.renderNote()));\n  };\n\n  _proto.install = function install() {\n    this.setPluginState({\n      isDraggingOver: false\n    });\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.unmount();\n  };\n\n  return DragDrop;\n}(Plugin), _class.VERSION = \"1.4.2\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/drag-drop/lib/index.js?");

/***/ }),

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

eval("var _class, _temp;\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar _require2 = __webpack_require__(/*! @uppy/companion-client */ \"./node_modules/@uppy/companion-client/lib/index.js\"),\n    Provider = _require2.Provider;\n\nvar ProviderViews = __webpack_require__(/*! @uppy/provider-views */ \"./node_modules/@uppy/provider-views/lib/index.js\");\n\nvar _require3 = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require3.h;\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(Dropbox, _Plugin);\n\n  function Dropbox(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.id = _this.opts.id || 'Dropbox';\n    Provider.initPlugin(_assertThisInitialized(_this), opts);\n    _this.title = _this.opts.title || 'Dropbox';\n\n    _this.icon = function () {\n      return h(\"svg\", {\n        \"aria-hidden\": \"true\",\n        focusable: \"false\",\n        width: \"128\",\n        height: \"128\",\n        viewBox: \"0 0 128 128\"\n      }, h(\"path\", {\n        d: \"M31.997 11L64 31.825 31.997 52.651 0 31.825 31.997 11zM96 11l32 20.825-32 20.826-32-20.826L96 11zM0 73.476l31.997-20.825L64 73.476 31.997 94.302 0 73.476zm96-20.825l32 20.825-32 20.826-32-20.826 32-20.825zm-64.508 48.254l32.003-20.826 31.997 20.826-31.997 20.825-32.003-20.825z\",\n        fill: \"#0260FF\",\n        \"fill-rule\": \"nonzero\"\n      }));\n    };\n\n    _this.provider = new Provider(uppy, {\n      companionUrl: _this.opts.companionUrl,\n      companionHeaders: _this.opts.companionHeaders || _this.opts.serverHeaders,\n      storage: _this.opts.storage,\n      provider: 'dropbox',\n      pluginId: _this.id\n    });\n    _this.onFirstRender = _this.onFirstRender.bind(_assertThisInitialized(_this));\n    _this.render = _this.render.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = Dropbox.prototype;\n\n  _proto.install = function install() {\n    this.view = new ProviderViews(this, {\n      provider: this.provider\n    }); // Set default state for Dropbox\n\n    this.setPluginState({\n      authenticated: false,\n      files: [],\n      folders: [],\n      directories: [],\n      activeRow: -1,\n      filterInput: '',\n      isSearchVisible: false\n    });\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.view.tearDown();\n    this.unmount();\n  };\n\n  _proto.onFirstRender = function onFirstRender() {\n    return this.view.getFolder();\n  };\n\n  _proto.render = function render(state) {\n    return this.view.render(state);\n  };\n\n  return Dropbox;\n}(Plugin), _class.VERSION = \"1.3.5\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/dropbox/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/file-input/lib/index.js":
/*!****************************************************!*\
  !*** ./node_modules/@uppy/file-input/lib/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar toArray = __webpack_require__(/*! @uppy/utils/lib/toArray */ \"./node_modules/@uppy/utils/lib/toArray.js\");\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar _require2 = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require2.h;\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(FileInput, _Plugin);\n\n  function FileInput(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.id = _this.opts.id || 'FileInput';\n    _this.title = 'File Input';\n    _this.type = 'acquirer';\n    _this.defaultLocale = {\n      strings: {\n        // The same key is used for the same purpose by @uppy/robodog's `form()` API, but our\n        // locale pack scripts can't access it in Robodog. If it is updated here, it should\n        // also be updated there!\n        chooseFiles: 'Choose files'\n      }\n    }; // Default options\n\n    var defaultOptions = {\n      target: null,\n      pretty: true,\n      inputName: 'files[]'\n    }; // Merge default options with the ones set by user\n\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n\n    _this.i18nInit();\n\n    _this.render = _this.render.bind(_assertThisInitialized(_this));\n    _this.handleInputChange = _this.handleInputChange.bind(_assertThisInitialized(_this));\n    _this.handleClick = _this.handleClick.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = FileInput.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.i18nArray = this.translator.translateArray.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  };\n\n  _proto.addFiles = function addFiles(files) {\n    var _this2 = this;\n\n    var descriptors = files.map(function (file) {\n      return {\n        source: _this2.id,\n        name: file.name,\n        type: file.type,\n        data: file\n      };\n    });\n\n    try {\n      this.uppy.addFiles(descriptors);\n    } catch (err) {\n      this.uppy.log(err);\n    }\n  };\n\n  _proto.handleInputChange = function handleInputChange(event) {\n    this.uppy.log('[FileInput] Something selected through input...');\n    var files = toArray(event.target.files);\n    this.addFiles(files); // We clear the input after a file is selected, because otherwise\n    // change event is not fired in Chrome and Safari when a file\n    // with the same name is selected.\n    // ___Why not use value=\"\" on <input/> instead?\n    //    Because if we use that method of clearing the input,\n    //    Chrome will not trigger change if we drop the same file twice (Issue #768).\n\n    event.target.value = null;\n  };\n\n  _proto.handleClick = function handleClick(ev) {\n    this.input.click();\n  };\n\n  _proto.render = function render(state) {\n    var _this3 = this;\n\n    /* http://tympanus.net/codrops/2015/09/15/styling-customizing-file-inputs-smart-way/ */\n    var hiddenInputStyle = {\n      width: '0.1px',\n      height: '0.1px',\n      opacity: 0,\n      overflow: 'hidden',\n      position: 'absolute',\n      zIndex: -1\n    };\n    var restrictions = this.uppy.opts.restrictions;\n    var accept = restrictions.allowedFileTypes ? restrictions.allowedFileTypes.join(',') : null;\n    return h(\"div\", {\n      class: \"uppy-Root uppy-FileInput-container\"\n    }, h(\"input\", {\n      class: \"uppy-FileInput-input\",\n      style: this.opts.pretty && hiddenInputStyle,\n      type: \"file\",\n      name: this.opts.inputName,\n      onchange: this.handleInputChange,\n      multiple: restrictions.maxNumberOfFiles !== 1,\n      accept: accept,\n      ref: function ref(input) {\n        _this3.input = input;\n      }\n    }), this.opts.pretty && h(\"button\", {\n      class: \"uppy-FileInput-btn\",\n      type: \"button\",\n      onclick: this.handleClick\n    }, this.i18n('chooseFiles')));\n  };\n\n  _proto.install = function install() {\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.unmount();\n  };\n\n  return FileInput;\n}(Plugin), _class.VERSION = \"1.4.2\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/file-input/lib/index.js?");

/***/ }),

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

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar findDOMElement = __webpack_require__(/*! @uppy/utils/lib/findDOMElement */ \"./node_modules/@uppy/utils/lib/findDOMElement.js\");\n\nvar toArray = __webpack_require__(/*! @uppy/utils/lib/toArray */ \"./node_modules/@uppy/utils/lib/toArray.js\"); // Rollup uses get-form-data's ES modules build, and rollup-plugin-commonjs automatically resolves `.default`.\n// So, if we are being built using rollup, this require() won't have a `.default` property.\n\n\nvar getFormData = __webpack_require__(/*! get-form-data */ \"./node_modules/get-form-data/es/index.js\").default || __webpack_require__(/*! get-form-data */ \"./node_modules/get-form-data/es/index.js\");\n/**\n * Form\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(Form, _Plugin);\n\n  function Form(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'acquirer';\n    _this.id = _this.opts.id || 'Form';\n    _this.title = 'Form'; // set default options\n\n    var defaultOptions = {\n      target: null,\n      resultName: 'uppyResult',\n      getMetaFromForm: true,\n      addResultToForm: true,\n      multipleResults: false,\n      submitOnSuccess: false,\n      triggerUploadOnSubmit: false\n    }; // merge default options with the ones set by user\n\n    _this.opts = _extends({}, defaultOptions, opts);\n    _this.handleFormSubmit = _this.handleFormSubmit.bind(_assertThisInitialized(_this));\n    _this.handleUploadStart = _this.handleUploadStart.bind(_assertThisInitialized(_this));\n    _this.handleSuccess = _this.handleSuccess.bind(_assertThisInitialized(_this));\n    _this.addResultToForm = _this.addResultToForm.bind(_assertThisInitialized(_this));\n    _this.getMetaFromForm = _this.getMetaFromForm.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = Form.prototype;\n\n  _proto.handleUploadStart = function handleUploadStart() {\n    if (this.opts.getMetaFromForm) {\n      this.getMetaFromForm();\n    }\n  };\n\n  _proto.handleSuccess = function handleSuccess(result) {\n    if (this.opts.addResultToForm) {\n      this.addResultToForm(result);\n    }\n\n    if (this.opts.submitOnSuccess) {\n      this.form.submit();\n    }\n  };\n\n  _proto.handleFormSubmit = function handleFormSubmit(ev) {\n    var _this2 = this;\n\n    if (this.opts.triggerUploadOnSubmit) {\n      ev.preventDefault();\n      var elements = toArray(ev.target.elements);\n      var disabledByUppy = [];\n      elements.forEach(function (el) {\n        var isButton = el.tagName === 'BUTTON' || el.tagName === 'INPUT' && el.type === 'submit';\n\n        if (isButton && !el.disabled) {\n          el.disabled = true;\n          disabledByUppy.push(el);\n        }\n      });\n      this.uppy.upload().then(function () {\n        disabledByUppy.forEach(function (button) {\n          button.disabled = false;\n        });\n      }, function (err) {\n        disabledByUppy.forEach(function (button) {\n          button.disabled = false;\n        });\n        return Promise.reject(err);\n      }).catch(function (err) {\n        _this2.uppy.log(err.stack || err.message || err);\n      });\n    }\n  };\n\n  _proto.addResultToForm = function addResultToForm(result) {\n    this.uppy.log('[Form] Adding result to the original form:');\n    this.uppy.log(result);\n    var resultInput = this.form.querySelector(\"[name=\\\"\" + this.opts.resultName + \"\\\"]\");\n\n    if (resultInput) {\n      if (this.opts.multipleResults) {\n        // Append new result to the previous result array.\n        // If the previous result is empty, or not an array,\n        // set it to an empty array.\n        var updatedResult;\n\n        try {\n          updatedResult = JSON.parse(resultInput.value);\n        } catch (err) {// Nothing, since we check for array below anyway\n        }\n\n        if (!Array.isArray(updatedResult)) {\n          updatedResult = [];\n        }\n\n        updatedResult.push(result);\n        resultInput.value = JSON.stringify(updatedResult);\n      } else {\n        // Replace existing result with the newer result on `complete` event.\n        // This behavior is not ideal, since you most likely want to always keep\n        // all results in the input. This is kept for backwards compatability until 2.0.\n        resultInput.value = JSON.stringify(result);\n      }\n\n      return;\n    }\n\n    resultInput = document.createElement('input');\n    resultInput.name = this.opts.resultName;\n    resultInput.type = 'hidden';\n\n    if (this.opts.multipleResults) {\n      // Wrap result in an array so we can have multiple results\n      resultInput.value = JSON.stringify([result]);\n    } else {\n      // Result is an object, kept for backwards compatability until 2.0\n      resultInput.value = JSON.stringify(result);\n    }\n\n    this.form.appendChild(resultInput);\n  };\n\n  _proto.getMetaFromForm = function getMetaFromForm() {\n    var formMeta = getFormData(this.form); // We want to exclude meta the the Form plugin itself has added\n    // See https://github.com/transloadit/uppy/issues/1637\n\n    delete formMeta[this.opts.resultName];\n    this.uppy.setMeta(formMeta);\n  };\n\n  _proto.install = function install() {\n    this.form = findDOMElement(this.opts.target);\n\n    if (!this.form || this.form.nodeName !== 'FORM') {\n      this.uppy.log('Form plugin requires a <form> target element passed in options to operate, none was found', 'error');\n      return;\n    }\n\n    this.form.addEventListener('submit', this.handleFormSubmit);\n    this.uppy.on('upload', this.handleUploadStart);\n    this.uppy.on('complete', this.handleSuccess);\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.form.removeEventListener('submit', this.handleFormSubmit);\n    this.uppy.off('upload', this.handleUploadStart);\n    this.uppy.off('complete', this.handleSuccess);\n  };\n\n  return Form;\n}(Plugin), _class.VERSION = \"1.3.5\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/form/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/golden-retriever/lib/IndexedDBStore.js":
/*!*******************************************************************!*\
  !*** ./node_modules/@uppy/golden-retriever/lib/IndexedDBStore.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar prettyBytes = __webpack_require__(/*! @uppy/utils/lib/prettyBytes */ \"./node_modules/@uppy/utils/lib/prettyBytes.js\");\n\nvar indexedDB = typeof window !== 'undefined' && (window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB);\nvar isSupported = !!indexedDB;\nvar DB_NAME = 'uppy-blobs';\nvar STORE_NAME = 'files'; // maybe have a thumbnail store in the future\n\nvar DEFAULT_EXPIRY = 24 * 60 * 60 * 1000; // 24 hours\n\nvar DB_VERSION = 3; // Set default `expires` dates on existing stored blobs.\n\nfunction migrateExpiration(store) {\n  var request = store.openCursor();\n\n  request.onsuccess = function (event) {\n    var cursor = event.target.result;\n\n    if (!cursor) {\n      return;\n    }\n\n    var entry = cursor.value;\n    entry.expires = Date.now() + DEFAULT_EXPIRY;\n    cursor.update(entry);\n  };\n}\n\nfunction connect(dbName) {\n  var request = indexedDB.open(dbName, DB_VERSION);\n  return new Promise(function (resolve, reject) {\n    request.onupgradeneeded = function (event) {\n      var db = event.target.result;\n      var transaction = event.currentTarget.transaction;\n\n      if (event.oldVersion < 2) {\n        // Added in v2: DB structure changed to a single shared object store\n        var store = db.createObjectStore(STORE_NAME, {\n          keyPath: 'id'\n        });\n        store.createIndex('store', 'store', {\n          unique: false\n        });\n      }\n\n      if (event.oldVersion < 3) {\n        // Added in v3\n        var _store = transaction.objectStore(STORE_NAME);\n\n        _store.createIndex('expires', 'expires', {\n          unique: false\n        });\n\n        migrateExpiration(_store);\n      }\n\n      transaction.oncomplete = function () {\n        resolve(db);\n      };\n    };\n\n    request.onsuccess = function (event) {\n      resolve(event.target.result);\n    };\n\n    request.onerror = reject;\n  });\n}\n\nfunction waitForRequest(request) {\n  return new Promise(function (resolve, reject) {\n    request.onsuccess = function (event) {\n      resolve(event.target.result);\n    };\n\n    request.onerror = reject;\n  });\n}\n\nvar cleanedUp = false;\n\nvar IndexedDBStore =\n/*#__PURE__*/\nfunction () {\n  function IndexedDBStore(opts) {\n    var _this = this;\n\n    this.opts = _extends({\n      dbName: DB_NAME,\n      storeName: 'default',\n      expires: DEFAULT_EXPIRY,\n      // 24 hours\n      maxFileSize: 10 * 1024 * 1024,\n      // 10 MB\n      maxTotalSize: 300 * 1024 * 1024 // 300 MB\n\n    }, opts);\n    this.name = this.opts.storeName;\n\n    var createConnection = function createConnection() {\n      return connect(_this.opts.dbName);\n    };\n\n    if (!cleanedUp) {\n      cleanedUp = true;\n      this.ready = IndexedDBStore.cleanup().then(createConnection, createConnection);\n    } else {\n      this.ready = createConnection();\n    }\n  }\n\n  var _proto = IndexedDBStore.prototype;\n\n  _proto.key = function key(fileID) {\n    return this.name + \"!\" + fileID;\n  }\n  /**\n   * List all file blobs currently in the store.\n   */\n  ;\n\n  _proto.list = function list() {\n    var _this2 = this;\n\n    return this.ready.then(function (db) {\n      var transaction = db.transaction([STORE_NAME], 'readonly');\n      var store = transaction.objectStore(STORE_NAME);\n      var request = store.index('store').getAll(IDBKeyRange.only(_this2.name));\n      return waitForRequest(request);\n    }).then(function (files) {\n      var result = {};\n      files.forEach(function (file) {\n        result[file.fileID] = file.data;\n      });\n      return result;\n    });\n  }\n  /**\n   * Get one file blob from the store.\n   */\n  ;\n\n  _proto.get = function get(fileID) {\n    var _this3 = this;\n\n    return this.ready.then(function (db) {\n      var transaction = db.transaction([STORE_NAME], 'readonly');\n      var request = transaction.objectStore(STORE_NAME).get(_this3.key(fileID));\n      return waitForRequest(request);\n    }).then(function (result) {\n      return {\n        id: result.data.fileID,\n        data: result.data.data\n      };\n    });\n  }\n  /**\n   * Get the total size of all stored files.\n   *\n   * @private\n   */\n  ;\n\n  _proto.getSize = function getSize() {\n    var _this4 = this;\n\n    return this.ready.then(function (db) {\n      var transaction = db.transaction([STORE_NAME], 'readonly');\n      var store = transaction.objectStore(STORE_NAME);\n      var request = store.index('store').openCursor(IDBKeyRange.only(_this4.name));\n      return new Promise(function (resolve, reject) {\n        var size = 0;\n\n        request.onsuccess = function (event) {\n          var cursor = event.target.result;\n\n          if (cursor) {\n            size += cursor.value.data.size;\n            cursor.continue();\n          } else {\n            resolve(size);\n          }\n        };\n\n        request.onerror = function () {\n          reject(new Error('Could not retrieve stored blobs size'));\n        };\n      });\n    });\n  }\n  /**\n   * Save a file in the store.\n   */\n  ;\n\n  _proto.put = function put(file) {\n    var _this5 = this;\n\n    if (file.data.size > this.opts.maxFileSize) {\n      return Promise.reject(new Error('File is too big to store.'));\n    }\n\n    return this.getSize().then(function (size) {\n      if (size > _this5.opts.maxTotalSize) {\n        return Promise.reject(new Error('No space left'));\n      }\n\n      return _this5.ready;\n    }).then(function (db) {\n      var transaction = db.transaction([STORE_NAME], 'readwrite');\n      var request = transaction.objectStore(STORE_NAME).add({\n        id: _this5.key(file.id),\n        fileID: file.id,\n        store: _this5.name,\n        expires: Date.now() + _this5.opts.expires,\n        data: file.data\n      });\n      return waitForRequest(request);\n    });\n  }\n  /**\n   * Delete a file blob from the store.\n   */\n  ;\n\n  _proto.delete = function _delete(fileID) {\n    var _this6 = this;\n\n    return this.ready.then(function (db) {\n      var transaction = db.transaction([STORE_NAME], 'readwrite');\n      var request = transaction.objectStore(STORE_NAME).delete(_this6.key(fileID));\n      return waitForRequest(request);\n    });\n  }\n  /**\n   * Delete all stored blobs that have an expiry date that is before Date.now().\n   * This is a static method because it deletes expired blobs from _all_ Uppy instances.\n   */\n  ;\n\n  IndexedDBStore.cleanup = function cleanup() {\n    return connect(DB_NAME).then(function (db) {\n      var transaction = db.transaction([STORE_NAME], 'readwrite');\n      var store = transaction.objectStore(STORE_NAME);\n      var request = store.index('expires').openCursor(IDBKeyRange.upperBound(Date.now()));\n      return new Promise(function (resolve, reject) {\n        request.onsuccess = function (event) {\n          var cursor = event.target.result;\n\n          if (cursor) {\n            var entry = cursor.value;\n            console.log('[IndexedDBStore] Deleting record', entry.fileID, 'of size', prettyBytes(entry.data.size), '- expired on', new Date(entry.expires));\n            cursor.delete(); // Ignoring return value … it's not terrible if this goes wrong.\n\n            cursor.continue();\n          } else {\n            resolve(db);\n          }\n        };\n\n        request.onerror = reject;\n      });\n    }).then(function (db) {\n      db.close();\n    });\n  };\n\n  return IndexedDBStore;\n}();\n\nIndexedDBStore.isSupported = isSupported;\nmodule.exports = IndexedDBStore;\n\n//# sourceURL=webpack:///./node_modules/@uppy/golden-retriever/lib/IndexedDBStore.js?");

/***/ }),

/***/ "./node_modules/@uppy/golden-retriever/lib/MetaDataStore.js":
/*!******************************************************************!*\
  !*** ./node_modules/@uppy/golden-retriever/lib/MetaDataStore.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n/**\n * Get uppy instance IDs for which state is stored.\n */\nfunction findUppyInstances() {\n  var instances = [];\n\n  for (var i = 0; i < localStorage.length; i++) {\n    var key = localStorage.key(i);\n\n    if (/^uppyState:/.test(key)) {\n      instances.push(key.slice('uppyState:'.length));\n    }\n  }\n\n  return instances;\n}\n/**\n * Try to JSON-parse a string, return null on failure.\n */\n\n\nfunction maybeParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch (err) {\n    return null;\n  }\n}\n\nvar cleanedUp = false;\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n  function MetaDataStore(opts) {\n    this.opts = _extends({\n      expires: 24 * 60 * 60 * 1000 // 24 hours\n\n    }, opts);\n    this.name = \"uppyState:\" + opts.storeName;\n\n    if (!cleanedUp) {\n      cleanedUp = true;\n      MetaDataStore.cleanup();\n    }\n  }\n  /**\n   *\n   */\n\n\n  var _proto = MetaDataStore.prototype;\n\n  _proto.load = function load() {\n    var savedState = localStorage.getItem(this.name);\n    if (!savedState) return null;\n    var data = maybeParse(savedState);\n    if (!data) return null; // Upgrade pre-0.20.0 uppyState: it used to be just a flat object,\n    // without `expires`.\n\n    if (!data.metadata) {\n      this.save(data);\n      return data;\n    }\n\n    return data.metadata;\n  };\n\n  _proto.save = function save(metadata) {\n    var expires = Date.now() + this.opts.expires;\n    var state = JSON.stringify({\n      metadata: metadata,\n      expires: expires\n    });\n    localStorage.setItem(this.name, state);\n  }\n  /**\n   * Remove all expired state.\n   */\n  ;\n\n  MetaDataStore.cleanup = function cleanup() {\n    var instanceIDs = findUppyInstances();\n    var now = Date.now();\n    instanceIDs.forEach(function (id) {\n      var data = localStorage.getItem(\"uppyState:\" + id);\n      if (!data) return null;\n      var obj = maybeParse(data);\n      if (!obj) return null;\n\n      if (obj.expires && obj.expires < now) {\n        localStorage.removeItem(\"uppyState:\" + id);\n      }\n    });\n  };\n\n  return MetaDataStore;\n}();\n\n//# sourceURL=webpack:///./node_modules/@uppy/golden-retriever/lib/MetaDataStore.js?");

/***/ }),

/***/ "./node_modules/@uppy/golden-retriever/lib/ServiceWorkerStore.js":
/*!***********************************************************************!*\
  !*** ./node_modules/@uppy/golden-retriever/lib/ServiceWorkerStore.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/*eslint-disable */\nvar isSupported = typeof navigator !== 'undefined' && 'serviceWorker' in navigator;\n\nfunction waitForServiceWorker() {\n  return new Promise(function (resolve, reject) {\n    if (!isSupported) {\n      reject(new Error('Unsupported'));\n    } else if (navigator.serviceWorker.controller) {\n      // A serviceWorker is already registered and active.\n      resolve();\n    } else {\n      navigator.serviceWorker.addEventListener('controllerchange', function () {\n        resolve();\n      });\n    }\n  });\n}\n\nvar ServiceWorkerStore =\n/*#__PURE__*/\nfunction () {\n  function ServiceWorkerStore(opts) {\n    this.ready = waitForServiceWorker();\n    this.name = opts.storeName;\n  }\n\n  var _proto = ServiceWorkerStore.prototype;\n\n  _proto.list = function list() {\n    var _this = this;\n\n    var defer = {};\n    var promise = new Promise(function (resolve, reject) {\n      defer.resolve = resolve;\n      defer.reject = reject;\n    });\n    console.log('Loading stored blobs from Service Worker');\n\n    var onMessage = function onMessage(event) {\n      if (event.data.store !== _this.name) {\n        return;\n      }\n\n      switch (event.data.type) {\n        case 'uppy/ALL_FILES':\n          defer.resolve(event.data.files);\n          navigator.serviceWorker.removeEventListener('message', onMessage);\n          break;\n      }\n    };\n\n    this.ready.then(function () {\n      navigator.serviceWorker.addEventListener('message', onMessage);\n      navigator.serviceWorker.controller.postMessage({\n        type: 'uppy/GET_FILES',\n        store: _this.name\n      });\n    });\n    return promise;\n  };\n\n  _proto.put = function put(file) {\n    var _this2 = this;\n\n    return this.ready.then(function () {\n      navigator.serviceWorker.controller.postMessage({\n        type: 'uppy/ADD_FILE',\n        store: _this2.name,\n        file: file\n      });\n    });\n  };\n\n  _proto.delete = function _delete(fileID) {\n    var _this3 = this;\n\n    return this.ready.then(function () {\n      navigator.serviceWorker.controller.postMessage({\n        type: 'uppy/REMOVE_FILE',\n        store: _this3.name,\n        fileID: fileID\n      });\n    });\n  };\n\n  return ServiceWorkerStore;\n}();\n\nServiceWorkerStore.isSupported = isSupported;\nmodule.exports = ServiceWorkerStore;\n\n//# sourceURL=webpack:///./node_modules/@uppy/golden-retriever/lib/ServiceWorkerStore.js?");

/***/ }),

/***/ "./node_modules/@uppy/golden-retriever/lib/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/@uppy/golden-retriever/lib/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar ServiceWorkerStore = __webpack_require__(/*! ./ServiceWorkerStore */ \"./node_modules/@uppy/golden-retriever/lib/ServiceWorkerStore.js\");\n\nvar IndexedDBStore = __webpack_require__(/*! ./IndexedDBStore */ \"./node_modules/@uppy/golden-retriever/lib/IndexedDBStore.js\");\n\nvar MetaDataStore = __webpack_require__(/*! ./MetaDataStore */ \"./node_modules/@uppy/golden-retriever/lib/MetaDataStore.js\");\n/**\n * The GoldenRetriever plugin — restores selected files and resumes uploads\n * after a closed tab or a browser crash!\n *\n * Uses localStorage, IndexedDB and ServiceWorker to do its magic, read more:\n * https://uppy.io/blog/2017/07/golden-retriever/\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(GoldenRetriever, _Plugin);\n\n  function GoldenRetriever(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'debugger';\n    _this.id = _this.opts.id || 'GoldenRetriever';\n    _this.title = 'Golden Retriever';\n    var defaultOptions = {\n      expires: 24 * 60 * 60 * 1000,\n      // 24 hours\n      serviceWorker: false\n    };\n    _this.opts = _extends({}, defaultOptions, opts);\n    _this.MetaDataStore = new MetaDataStore({\n      expires: _this.opts.expires,\n      storeName: uppy.getID()\n    });\n    _this.ServiceWorkerStore = null;\n\n    if (_this.opts.serviceWorker) {\n      _this.ServiceWorkerStore = new ServiceWorkerStore({\n        storeName: uppy.getID()\n      });\n    }\n\n    _this.IndexedDBStore = new IndexedDBStore(_extends({\n      expires: _this.opts.expires\n    }, _this.opts.indexedDB || {}, {\n      storeName: uppy.getID()\n    }));\n    _this.saveFilesStateToLocalStorage = _this.saveFilesStateToLocalStorage.bind(_assertThisInitialized(_this));\n    _this.loadFilesStateFromLocalStorage = _this.loadFilesStateFromLocalStorage.bind(_assertThisInitialized(_this));\n    _this.loadFileBlobsFromServiceWorker = _this.loadFileBlobsFromServiceWorker.bind(_assertThisInitialized(_this));\n    _this.loadFileBlobsFromIndexedDB = _this.loadFileBlobsFromIndexedDB.bind(_assertThisInitialized(_this));\n    _this.onBlobsLoaded = _this.onBlobsLoaded.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = GoldenRetriever.prototype;\n\n  _proto.loadFilesStateFromLocalStorage = function loadFilesStateFromLocalStorage() {\n    var savedState = this.MetaDataStore.load();\n\n    if (savedState) {\n      this.uppy.log('[GoldenRetriever] Recovered some state from Local Storage');\n      this.uppy.setState({\n        currentUploads: savedState.currentUploads || {},\n        files: savedState.files || {}\n      });\n      this.savedPluginData = savedState.pluginData;\n    }\n  }\n  /**\n   * Get file objects that are currently waiting: they've been selected,\n   * but aren't yet being uploaded.\n   */\n  ;\n\n  _proto.getWaitingFiles = function getWaitingFiles() {\n    var waitingFiles = {};\n    this.uppy.getFiles().forEach(function (file) {\n      if (!file.progress || !file.progress.uploadStarted) {\n        waitingFiles[file.id] = file;\n      }\n    });\n    return waitingFiles;\n  }\n  /**\n   * Get file objects that are currently being uploaded. If a file has finished\n   * uploading, but the other files in the same batch have not, the finished\n   * file is also returned.\n   */\n  ;\n\n  _proto.getUploadingFiles = function getUploadingFiles() {\n    var _this2 = this;\n\n    var uploadingFiles = {};\n\n    var _this$uppy$getState = this.uppy.getState(),\n        currentUploads = _this$uppy$getState.currentUploads;\n\n    if (currentUploads) {\n      var uploadIDs = Object.keys(currentUploads);\n      uploadIDs.forEach(function (uploadID) {\n        var filesInUpload = currentUploads[uploadID].fileIDs;\n        filesInUpload.forEach(function (fileID) {\n          uploadingFiles[fileID] = _this2.uppy.getFile(fileID);\n        });\n      });\n    }\n\n    return uploadingFiles;\n  };\n\n  _proto.saveFilesStateToLocalStorage = function saveFilesStateToLocalStorage() {\n    var filesToSave = _extends(this.getWaitingFiles(), this.getUploadingFiles());\n\n    var pluginData = {}; // TODO Find a better way to do this?\n    // Other plugins can attach a restore:get-data listener that receives this callback.\n    // Plugins can then use this callback (sync) to provide data to be stored.\n\n    this.uppy.emit('restore:get-data', function (data) {\n      _extends(pluginData, data);\n    });\n\n    var _this$uppy$getState2 = this.uppy.getState(),\n        currentUploads = _this$uppy$getState2.currentUploads;\n\n    this.MetaDataStore.save({\n      currentUploads: currentUploads,\n      files: filesToSave,\n      pluginData: pluginData\n    });\n  };\n\n  _proto.loadFileBlobsFromServiceWorker = function loadFileBlobsFromServiceWorker() {\n    var _this3 = this;\n\n    this.ServiceWorkerStore.list().then(function (blobs) {\n      var numberOfFilesRecovered = Object.keys(blobs).length;\n\n      var numberOfFilesTryingToRecover = _this3.uppy.getFiles().length;\n\n      if (numberOfFilesRecovered === numberOfFilesTryingToRecover) {\n        _this3.uppy.log(\"[GoldenRetriever] Successfully recovered \" + numberOfFilesRecovered + \" blobs from Service Worker!\");\n\n        _this3.uppy.info(\"Successfully recovered \" + numberOfFilesRecovered + \" files\", 'success', 3000);\n\n        return _this3.onBlobsLoaded(blobs);\n      }\n\n      _this3.uppy.log('[GoldenRetriever] No blobs found in Service Worker, trying IndexedDB now...');\n\n      return _this3.loadFileBlobsFromIndexedDB();\n    }).catch(function (err) {\n      _this3.uppy.log('[GoldenRetriever] Failed to recover blobs from Service Worker', 'warning');\n\n      _this3.uppy.log(err);\n    });\n  };\n\n  _proto.loadFileBlobsFromIndexedDB = function loadFileBlobsFromIndexedDB() {\n    var _this4 = this;\n\n    this.IndexedDBStore.list().then(function (blobs) {\n      var numberOfFilesRecovered = Object.keys(blobs).length;\n\n      if (numberOfFilesRecovered > 0) {\n        _this4.uppy.log(\"[GoldenRetriever] Successfully recovered \" + numberOfFilesRecovered + \" blobs from IndexedDB!\");\n\n        _this4.uppy.info(\"Successfully recovered \" + numberOfFilesRecovered + \" files\", 'success', 3000);\n\n        return _this4.onBlobsLoaded(blobs);\n      }\n\n      _this4.uppy.log('[GoldenRetriever] No blobs found in IndexedDB');\n    }).catch(function (err) {\n      _this4.uppy.log('[GoldenRetriever] Failed to recover blobs from IndexedDB', 'warning');\n\n      _this4.uppy.log(err);\n    });\n  };\n\n  _proto.onBlobsLoaded = function onBlobsLoaded(blobs) {\n    var _this5 = this;\n\n    var obsoleteBlobs = [];\n\n    var updatedFiles = _extends({}, this.uppy.getState().files);\n\n    Object.keys(blobs).forEach(function (fileID) {\n      var originalFile = _this5.uppy.getFile(fileID);\n\n      if (!originalFile) {\n        obsoleteBlobs.push(fileID);\n        return;\n      }\n\n      var cachedData = blobs[fileID];\n      var updatedFileData = {\n        data: cachedData,\n        isRestored: true\n      };\n\n      var updatedFile = _extends({}, originalFile, updatedFileData);\n\n      updatedFiles[fileID] = updatedFile;\n    });\n    this.uppy.setState({\n      files: updatedFiles\n    });\n    this.uppy.emit('restored', this.savedPluginData);\n\n    if (obsoleteBlobs.length) {\n      this.deleteBlobs(obsoleteBlobs).then(function () {\n        _this5.uppy.log(\"[GoldenRetriever] Cleaned up \" + obsoleteBlobs.length + \" old files\");\n      }).catch(function (err) {\n        _this5.uppy.log(\"[GoldenRetriever] Could not clean up \" + obsoleteBlobs.length + \" old files\", 'warning');\n\n        _this5.uppy.log(err);\n      });\n    }\n  };\n\n  _proto.deleteBlobs = function deleteBlobs(fileIDs) {\n    var _this6 = this;\n\n    var promises = [];\n    fileIDs.forEach(function (id) {\n      if (_this6.ServiceWorkerStore) {\n        promises.push(_this6.ServiceWorkerStore.delete(id));\n      }\n\n      if (_this6.IndexedDBStore) {\n        promises.push(_this6.IndexedDBStore.delete(id));\n      }\n    });\n    return Promise.all(promises);\n  };\n\n  _proto.install = function install() {\n    var _this7 = this;\n\n    this.loadFilesStateFromLocalStorage();\n\n    if (this.uppy.getFiles().length > 0) {\n      if (this.ServiceWorkerStore) {\n        this.uppy.log('[GoldenRetriever] Attempting to load files from Service Worker...');\n        this.loadFileBlobsFromServiceWorker();\n      } else {\n        this.uppy.log('[GoldenRetriever] Attempting to load files from Indexed DB...');\n        this.loadFileBlobsFromIndexedDB();\n      }\n    } else {\n      this.uppy.log('[GoldenRetriever] No files need to be loaded, only restoring processing state...');\n      this.onBlobsLoaded([]);\n    }\n\n    this.uppy.on('file-added', function (file) {\n      if (file.isRemote) return;\n\n      if (_this7.ServiceWorkerStore) {\n        _this7.ServiceWorkerStore.put(file).catch(function (err) {\n          _this7.uppy.log('[GoldenRetriever] Could not store file', 'warning');\n\n          _this7.uppy.log(err);\n        });\n      }\n\n      _this7.IndexedDBStore.put(file).catch(function (err) {\n        _this7.uppy.log('[GoldenRetriever] Could not store file', 'warning');\n\n        _this7.uppy.log(err);\n      });\n    });\n    this.uppy.on('file-removed', function (file) {\n      if (_this7.ServiceWorkerStore) {\n        _this7.ServiceWorkerStore.delete(file.id).catch(function (err) {\n          _this7.uppy.log('[GoldenRetriever] Failed to remove file', 'warning');\n\n          _this7.uppy.log(err);\n        });\n      }\n\n      _this7.IndexedDBStore.delete(file.id).catch(function (err) {\n        _this7.uppy.log('[GoldenRetriever] Failed to remove file', 'warning');\n\n        _this7.uppy.log(err);\n      });\n    });\n    this.uppy.on('complete', function (_ref) {\n      var successful = _ref.successful;\n      var fileIDs = successful.map(function (file) {\n        return file.id;\n      });\n\n      _this7.deleteBlobs(fileIDs).then(function () {\n        _this7.uppy.log(\"[GoldenRetriever] Removed \" + successful.length + \" files that finished uploading\");\n      }).catch(function (err) {\n        _this7.uppy.log(\"[GoldenRetriever] Could not remove \" + successful.length + \" files that finished uploading\", 'warning');\n\n        _this7.uppy.log(err);\n      });\n    });\n    this.uppy.on('state-update', this.saveFilesStateToLocalStorage);\n    this.uppy.on('restored', function () {\n      // start all uploads again when file blobs are restored\n      var _this7$uppy$getState = _this7.uppy.getState(),\n          currentUploads = _this7$uppy$getState.currentUploads;\n\n      if (currentUploads) {\n        Object.keys(currentUploads).forEach(function (uploadId) {\n          _this7.uppy.restore(uploadId, currentUploads[uploadId]);\n        });\n      }\n    });\n  };\n\n  return GoldenRetriever;\n}(Plugin), _class.VERSION = \"1.3.4\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/golden-retriever/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/google-drive/lib/DriveProviderViews.js":
/*!*******************************************************************!*\
  !*** ./node_modules/@uppy/google-drive/lib/DriveProviderViews.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar ProviderViews = __webpack_require__(/*! @uppy/provider-views */ \"./node_modules/@uppy/provider-views/lib/index.js\");\n\nmodule.exports =\n/*#__PURE__*/\nfunction (_ProviderViews) {\n  _inheritsLoose(DriveProviderViews, _ProviderViews);\n\n  function DriveProviderViews() {\n    return _ProviderViews.apply(this, arguments) || this;\n  }\n\n  var _proto = DriveProviderViews.prototype;\n\n  _proto.toggleCheckbox = function toggleCheckbox(e, file) {\n    e.stopPropagation();\n    e.preventDefault(); // Shared Drives aren't selectable; for all else, defer to the base ProviderView.\n    // @todo isTeamDrive is left for backward compatibility. We should remove it in the next\n    // major release.\n\n    if (!file.custom.isTeamDrive && !file.custom.isSharedDrive) {\n      _ProviderViews.prototype.toggleCheckbox.call(this, e, file);\n    }\n  };\n\n  return DriveProviderViews;\n}(ProviderViews);\n\n//# sourceURL=webpack:///./node_modules/@uppy/google-drive/lib/DriveProviderViews.js?");

/***/ }),

/***/ "./node_modules/@uppy/google-drive/lib/index.js":
/*!******************************************************!*\
  !*** ./node_modules/@uppy/google-drive/lib/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar _require2 = __webpack_require__(/*! @uppy/companion-client */ \"./node_modules/@uppy/companion-client/lib/index.js\"),\n    Provider = _require2.Provider;\n\nvar DriveProviderViews = __webpack_require__(/*! ./DriveProviderViews */ \"./node_modules/@uppy/google-drive/lib/DriveProviderViews.js\");\n\nvar _require3 = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require3.h;\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(GoogleDrive, _Plugin);\n\n  function GoogleDrive(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.id = _this.opts.id || 'GoogleDrive';\n    _this.title = _this.opts.title || 'Google Drive';\n    Provider.initPlugin(_assertThisInitialized(_this), opts);\n    _this.title = _this.opts.title || 'Google Drive';\n\n    _this.icon = function () {\n      return h(\"svg\", {\n        \"aria-hidden\": \"true\",\n        focusable: \"false\",\n        width: \"18px\",\n        height: \"16px\",\n        viewBox: \"0 0 18 16\",\n        version: \"1.1\"\n      }, h(\"g\", {\n        \"fill-rule\": \"evenodd\"\n      }, h(\"polygon\", {\n        fill: \"#3089FC\",\n        points: \"6.32475 10.2 18 10.2 14.999625 15.3 3.324375 15.3\"\n      }), h(\"polygon\", {\n        fill: \"#00A85D\",\n        points: \"3.000375 15.3 0 10.2 5.83875 0.275974026 8.838 5.37597403 5.999625 10.2\"\n      }), h(\"polygon\", {\n        fill: \"#FFD024\",\n        points: \"11.838375 9.92402597 5.999625 0 12.000375 0 17.839125 9.92402597\"\n      })));\n    };\n\n    _this.provider = new Provider(uppy, {\n      companionUrl: _this.opts.companionUrl,\n      companionHeaders: _this.opts.companionHeaders || _this.opts.serverHeaders,\n      storage: _this.opts.storage,\n      provider: 'drive',\n      authProvider: 'google',\n      pluginId: _this.id\n    });\n    _this.onFirstRender = _this.onFirstRender.bind(_assertThisInitialized(_this));\n    _this.render = _this.render.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = GoogleDrive.prototype;\n\n  _proto.install = function install() {\n    this.view = new DriveProviderViews(this, {\n      provider: this.provider\n    }); // Set default state for Google Drive\n\n    this.setPluginState({\n      authenticated: false,\n      files: [],\n      folders: [],\n      directories: [],\n      activeRow: -1,\n      filterInput: '',\n      isSearchVisible: false,\n      hasTeamDrives: false,\n      teamDrives: [],\n      teamDriveId: ''\n    });\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.view.tearDown();\n    this.unmount();\n  };\n\n  _proto.onFirstRender = function onFirstRender() {\n    return this.view.getFolder('root', '/');\n  };\n\n  _proto.render = function render(state) {\n    return this.view.render(state);\n  };\n\n  return GoogleDrive;\n}(Plugin), _class.VERSION = \"1.3.5\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/google-drive/lib/index.js?");

/***/ }),

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

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar _require2 = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require2.h;\n/**\n * Informer\n * Shows rad message bubbles\n * used like this: `uppy.info('hello world', 'info', 5000)`\n * or for errors: `uppy.info('Error uploading img.jpg', 'error', 5000)`\n *\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(Informer, _Plugin);\n\n  function Informer(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'progressindicator';\n    _this.id = _this.opts.id || 'Informer';\n    _this.title = 'Informer'; // set default options\n\n    var defaultOptions = {}; // merge default options with the ones set by user\n\n    _this.opts = _extends({}, defaultOptions, opts);\n    _this.render = _this.render.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = Informer.prototype;\n\n  _proto.render = function render(state) {\n    var _state$info = state.info,\n        isHidden = _state$info.isHidden,\n        message = _state$info.message,\n        details = _state$info.details;\n    return h(\"div\", {\n      class: \"uppy uppy-Informer\",\n      \"aria-hidden\": isHidden\n    }, h(\"p\", {\n      role: \"alert\"\n    }, message, ' ', details && h(\"span\", {\n      \"aria-label\": details,\n      \"data-microtip-position\": \"top-left\",\n      \"data-microtip-size\": \"medium\",\n      role: \"tooltip\"\n    }, \"?\")));\n  };\n\n  _proto.install = function install() {\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  return Informer;\n}(Plugin), _class.VERSION = \"1.3.4\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/informer/lib/index.js?");

/***/ }),

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

eval("var _class, _temp;\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar _require2 = __webpack_require__(/*! @uppy/companion-client */ \"./node_modules/@uppy/companion-client/lib/index.js\"),\n    Provider = _require2.Provider;\n\nvar ProviderViews = __webpack_require__(/*! @uppy/provider-views */ \"./node_modules/@uppy/provider-views/lib/index.js\");\n\nvar _require3 = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require3.h;\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(Instagram, _Plugin);\n\n  function Instagram(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.id = _this.opts.id || 'Instagram';\n    Provider.initPlugin(_assertThisInitialized(_this), opts);\n    _this.title = _this.opts.title || 'Instagram';\n\n    _this.icon = function () {\n      return h(\"svg\", {\n        \"aria-hidden\": \"true\",\n        focusable: \"false\",\n        fill: \"#DE3573\",\n        width: \"28\",\n        height: \"28\",\n        viewBox: \"0 0 512 512\"\n      }, h(\"path\", {\n        d: \"M256,49.471c67.266,0,75.233.257,101.8,1.469,24.562,1.121,37.9,5.224,46.778,8.674a78.052,78.052,0,0,1,28.966,18.845,78.052,78.052,0,0,1,18.845,28.966c3.45,8.877,7.554,22.216,8.674,46.778,1.212,26.565,1.469,34.532,1.469,101.8s-0.257,75.233-1.469,101.8c-1.121,24.562-5.225,37.9-8.674,46.778a83.427,83.427,0,0,1-47.811,47.811c-8.877,3.45-22.216,7.554-46.778,8.674-26.56,1.212-34.527,1.469-101.8,1.469s-75.237-.257-101.8-1.469c-24.562-1.121-37.9-5.225-46.778-8.674a78.051,78.051,0,0,1-28.966-18.845,78.053,78.053,0,0,1-18.845-28.966c-3.45-8.877-7.554-22.216-8.674-46.778-1.212-26.564-1.469-34.532-1.469-101.8s0.257-75.233,1.469-101.8c1.121-24.562,5.224-37.9,8.674-46.778A78.052,78.052,0,0,1,78.458,78.458a78.053,78.053,0,0,1,28.966-18.845c8.877-3.45,22.216-7.554,46.778-8.674,26.565-1.212,34.532-1.469,101.8-1.469m0-45.391c-68.418,0-77,.29-103.866,1.516-26.815,1.224-45.127,5.482-61.151,11.71a123.488,123.488,0,0,0-44.62,29.057A123.488,123.488,0,0,0,17.3,90.982C11.077,107.007,6.819,125.319,5.6,152.134,4.369,179,4.079,187.582,4.079,256S4.369,333,5.6,359.866c1.224,26.815,5.482,45.127,11.71,61.151a123.489,123.489,0,0,0,29.057,44.62,123.486,123.486,0,0,0,44.62,29.057c16.025,6.228,34.337,10.486,61.151,11.71,26.87,1.226,35.449,1.516,103.866,1.516s77-.29,103.866-1.516c26.815-1.224,45.127-5.482,61.151-11.71a128.817,128.817,0,0,0,73.677-73.677c6.228-16.025,10.486-34.337,11.71-61.151,1.226-26.87,1.516-35.449,1.516-103.866s-0.29-77-1.516-103.866c-1.224-26.815-5.482-45.127-11.71-61.151a123.486,123.486,0,0,0-29.057-44.62A123.487,123.487,0,0,0,421.018,17.3C404.993,11.077,386.681,6.819,359.866,5.6,333,4.369,324.418,4.079,256,4.079h0Z\"\n      }), h(\"path\", {\n        d: \"M256,126.635A129.365,129.365,0,1,0,385.365,256,129.365,129.365,0,0,0,256,126.635Zm0,213.338A83.973,83.973,0,1,1,339.974,256,83.974,83.974,0,0,1,256,339.973Z\"\n      }), h(\"circle\", {\n        cx: \"390.476\",\n        cy: \"121.524\",\n        r: \"30.23\"\n      }));\n    };\n\n    _this.provider = new Provider(uppy, {\n      companionUrl: _this.opts.companionUrl,\n      companionHeaders: _this.opts.companionHeaders || _this.opts.serverHeaders,\n      storage: _this.opts.storage,\n      provider: 'instagram',\n      authProvider: 'instagram',\n      pluginId: _this.id\n    });\n    _this.onFirstRender = _this.onFirstRender.bind(_assertThisInitialized(_this));\n    _this.render = _this.render.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = Instagram.prototype;\n\n  _proto.install = function install() {\n    this.view = new ProviderViews(this, {\n      provider: this.provider,\n      viewType: 'grid',\n      showTitles: false,\n      showFilter: false,\n      showBreadcrumbs: false\n    }); // Set default state for Instagram\n\n    this.setPluginState({\n      authenticated: false,\n      files: [],\n      folders: [],\n      directories: [],\n      activeRow: -1,\n      filterInput: '',\n      isSearchVisible: false\n    });\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.view.tearDown();\n    this.unmount();\n  };\n\n  _proto.onFirstRender = function onFirstRender() {\n    this.view.getFolder('recent');\n  };\n\n  _proto.render = function render(state) {\n    return this.view.render(state);\n  };\n\n  return Instagram;\n}(Plugin), _class.VERSION = \"1.3.5\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/instagram/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/progress-bar/lib/index.js":
/*!******************************************************!*\
  !*** ./node_modules/@uppy/progress-bar/lib/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar _require2 = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require2.h;\n/**\n * Progress bar\n *\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(ProgressBar, _Plugin);\n\n  function ProgressBar(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.id = _this.opts.id || 'ProgressBar';\n    _this.title = 'Progress Bar';\n    _this.type = 'progressindicator'; // set default options\n\n    var defaultOptions = {\n      target: 'body',\n      replaceTargetContent: false,\n      fixed: false,\n      hideAfterFinish: true\n    }; // merge default options with the ones set by user\n\n    _this.opts = _extends({}, defaultOptions, opts);\n    _this.render = _this.render.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = ProgressBar.prototype;\n\n  _proto.render = function render(state) {\n    var progress = state.totalProgress || 0;\n    var isHidden = progress === 100 && this.opts.hideAfterFinish;\n    return h(\"div\", {\n      class: \"uppy uppy-ProgressBar\",\n      style: {\n        position: this.opts.fixed ? 'fixed' : 'initial'\n      },\n      \"aria-hidden\": isHidden\n    }, h(\"div\", {\n      class: \"uppy-ProgressBar-inner\",\n      style: {\n        width: progress + '%'\n      }\n    }), h(\"div\", {\n      class: \"uppy-ProgressBar-percentage\"\n    }, progress));\n  };\n\n  _proto.install = function install() {\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.unmount();\n  };\n\n  return ProgressBar;\n}(Plugin), _class.VERSION = \"1.3.4\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/progress-bar/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/AuthView.js":
/*!***********************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/AuthView.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h,\n    Component = _require.Component;\n\nvar AuthView =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(AuthView, _Component);\n\n  function AuthView() {\n    return _Component.apply(this, arguments) || this;\n  }\n\n  var _proto = AuthView.prototype;\n\n  _proto.render = function render() {\n    var pluginNameComponent = h(\"span\", {\n      class: \"uppy-Provider-authTitleName\"\n    }, this.props.pluginName, h(\"br\", null));\n    return h(\"div\", {\n      class: \"uppy-Provider-auth\"\n    }, h(\"div\", {\n      class: \"uppy-Provider-authIcon\"\n    }, this.props.pluginIcon()), h(\"div\", {\n      class: \"uppy-Provider-authTitle\"\n    }, this.props.i18nArray('authenticateWithTitle', {\n      pluginName: pluginNameComponent\n    })), h(\"button\", {\n      type: \"button\",\n      class: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Provider-authBtn\",\n      onclick: this.props.handleAuth,\n      \"data-uppy-super-focusable\": true\n    }, this.props.i18nArray('authenticateWith', {\n      pluginName: this.props.pluginName\n    })));\n  };\n\n  return AuthView;\n}(Component);\n\nmodule.exports = AuthView;\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/AuthView.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/Breadcrumbs.js":
/*!**************************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/Breadcrumbs.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h; // TODO use Fragment when upgrading to preact X\n\n\nvar Breadcrumb = function Breadcrumb(props) {\n  return h(\"span\", null, h(\"button\", {\n    type: \"button\",\n    class: \"uppy-u-reset\",\n    onclick: props.getFolder\n  }, props.title), !props.isLast ? ' / ' : '');\n};\n\nmodule.exports = function (props) {\n  return h(\"div\", {\n    class: \"uppy-Provider-breadcrumbs\"\n  }, h(\"div\", {\n    class: \"uppy-Provider-breadcrumbsIcon\"\n  }, props.breadcrumbsIcon), props.directories.map(function (directory, i) {\n    return h(Breadcrumb, {\n      key: directory.id,\n      getFolder: function getFolder() {\n        return props.getFolder(directory.id);\n      },\n      title: i === 0 ? props.title : directory.title,\n      isLast: i + 1 === props.directories.length\n    });\n  }));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/Breadcrumbs.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/Browser.js":
/*!**********************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/Browser.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar classNames = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n\nvar Breadcrumbs = __webpack_require__(/*! ./Breadcrumbs */ \"./node_modules/@uppy/provider-views/lib/Breadcrumbs.js\");\n\nvar Filter = __webpack_require__(/*! ./Filter */ \"./node_modules/@uppy/provider-views/lib/Filter.js\");\n\nvar ItemList = __webpack_require__(/*! ./ItemList */ \"./node_modules/@uppy/provider-views/lib/ItemList.js\");\n\nvar FooterActions = __webpack_require__(/*! ./FooterActions */ \"./node_modules/@uppy/provider-views/lib/FooterActions.js\");\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar Browser = function Browser(props) {\n  var filteredFolders = props.folders;\n  var filteredFiles = props.files;\n\n  if (props.filterInput !== '') {\n    filteredFolders = props.filterItems(props.folders);\n    filteredFiles = props.filterItems(props.files);\n  }\n\n  var selected = props.currentSelection.length;\n  return h(\"div\", {\n    class: classNames('uppy-ProviderBrowser', \"uppy-ProviderBrowser-viewType--\" + props.viewType)\n  }, h(\"div\", {\n    class: \"uppy-ProviderBrowser-header\"\n  }, h(\"div\", {\n    class: classNames('uppy-ProviderBrowser-headerBar', !props.showBreadcrumbs && 'uppy-ProviderBrowser-headerBar--simple')\n  }, props.showBreadcrumbs && Breadcrumbs({\n    getFolder: props.getFolder,\n    directories: props.directories,\n    breadcrumbsIcon: props.pluginIcon && props.pluginIcon(),\n    title: props.title\n  }), h(\"span\", {\n    class: \"uppy-ProviderBrowser-user\"\n  }, props.username), h(\"button\", {\n    type: \"button\",\n    onclick: props.logout,\n    class: \"uppy-u-reset uppy-ProviderBrowser-userLogout\"\n  }, props.i18n('logOut')))), props.showFilter && h(Filter, props), h(ItemList, {\n    columns: [{\n      name: 'Name',\n      key: 'title'\n    }],\n    folders: filteredFolders,\n    files: filteredFiles,\n    activeRow: props.isActiveRow,\n    sortByTitle: props.sortByTitle,\n    sortByDate: props.sortByDate,\n    isChecked: props.isChecked,\n    handleFolderClick: props.getNextFolder,\n    toggleCheckbox: props.toggleCheckbox,\n    handleScroll: props.handleScroll,\n    title: props.title,\n    showTitles: props.showTitles,\n    i18n: props.i18n,\n    viewType: props.viewType\n  }), selected > 0 && h(FooterActions, _extends({\n    selected: selected\n  }, props)));\n};\n\nmodule.exports = Browser;\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/Browser.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/Filter.js":
/*!*********************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/Filter.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h,\n    Component = _require.Component;\n\nmodule.exports =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(Filter, _Component);\n\n  function Filter(props) {\n    var _this;\n\n    _this = _Component.call(this, props) || this;\n    _this.preventEnterPress = _this.preventEnterPress.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = Filter.prototype;\n\n  _proto.preventEnterPress = function preventEnterPress(ev) {\n    if (ev.keyCode === 13) {\n      ev.stopPropagation();\n      ev.preventDefault();\n    }\n  };\n\n  _proto.render = function render() {\n    var _this2 = this;\n\n    return h(\"div\", {\n      class: \"uppy-ProviderBrowser-search\"\n    }, h(\"input\", {\n      class: \"uppy-u-reset uppy-ProviderBrowser-searchInput\",\n      type: \"text\",\n      placeholder: this.props.i18n('filter'),\n      \"aria-label\": this.props.i18n('filter'),\n      onkeyup: this.preventEnterPress,\n      onkeydown: this.preventEnterPress,\n      onkeypress: this.preventEnterPress,\n      oninput: function oninput(e) {\n        return _this2.props.filterQuery(e);\n      },\n      value: this.props.filterInput\n    }), h(\"svg\", {\n      \"aria-hidden\": \"true\",\n      focusable: \"false\",\n      class: \"UppyIcon uppy-ProviderBrowser-searchIcon\",\n      width: \"12\",\n      height: \"12\",\n      viewBox: \"0 0 12 12\"\n    }, h(\"path\", {\n      d: \"M8.638 7.99l3.172 3.172a.492.492 0 1 1-.697.697L7.91 8.656a4.977 4.977 0 0 1-2.983.983C2.206 9.639 0 7.481 0 4.819 0 2.158 2.206 0 4.927 0c2.721 0 4.927 2.158 4.927 4.82a4.74 4.74 0 0 1-1.216 3.17zm-3.71.685c2.176 0 3.94-1.726 3.94-3.856 0-2.129-1.764-3.855-3.94-3.855C2.75.964.984 2.69.984 4.819c0 2.13 1.765 3.856 3.942 3.856z\"\n    })), this.props.filterInput && h(\"button\", {\n      class: \"uppy-u-reset uppy-ProviderBrowser-searchClose\",\n      type: \"button\",\n      \"aria-label\": this.props.i18n('resetFilter'),\n      title: this.props.i18n('resetFilter'),\n      onclick: this.props.filterQuery\n    }, h(\"svg\", {\n      \"aria-hidden\": \"true\",\n      focusable: \"false\",\n      class: \"UppyIcon\",\n      viewBox: \"0 0 19 19\"\n    }, h(\"path\", {\n      d: \"M17.318 17.232L9.94 9.854 9.586 9.5l-.354.354-7.378 7.378h.707l-.62-.62v.706L9.318 9.94l.354-.354-.354-.354L1.94 1.854v.707l.62-.62h-.706l7.378 7.378.354.354.354-.354 7.378-7.378h-.707l.622.62v-.706L9.854 9.232l-.354.354.354.354 7.378 7.378.708-.707-7.38-7.378v.708l7.38-7.38.353-.353-.353-.353-.622-.622-.353-.353-.354.352-7.378 7.38h.708L2.56 1.23 2.208.88l-.353.353-.622.62-.353.355.352.353 7.38 7.38v-.708l-7.38 7.38-.353.353.352.353.622.622.353.353.354-.353 7.38-7.38h-.708l7.38 7.38z\"\n    }))));\n  };\n\n  return Filter;\n}(Component);\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/Filter.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/FooterActions.js":
/*!****************************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/FooterActions.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nmodule.exports = function (props) {\n  return h(\"div\", {\n    class: \"uppy-ProviderBrowser-footer\"\n  }, h(\"button\", {\n    class: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary\",\n    onclick: props.done\n  }, props.i18n('selectX', {\n    smart_count: props.selected\n  })), h(\"button\", {\n    class: \"uppy-u-reset uppy-c-btn uppy-c-btn-link\",\n    onclick: props.cancel\n  }, props.i18n('cancel')));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/FooterActions.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/Item/components/GridLi.js":
/*!*************************************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/Item/components/GridLi.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h; // it could be a <li><button class=\"fake-checkbox\"/> <button/></li>\n\n\nmodule.exports = function (props) {\n  return h(\"li\", {\n    class: props.className\n  }, h(\"div\", {\n    \"aria-hidden\": true,\n    class: \"uppy-ProviderBrowserItem-fakeCheckbox \" + (props.isChecked ? 'uppy-ProviderBrowserItem-fakeCheckbox--is-checked' : '')\n  }), h(\"button\", {\n    type: \"button\",\n    class: \"uppy-u-reset uppy-ProviderBrowserItem-inner\",\n    onclick: props.toggleCheckbox,\n    role: \"option\",\n    \"aria-label\": props.isChecked ? props.i18n('unselectFileNamed', {\n      name: props.title\n    }) : props.i18n('selectFileNamed', {\n      name: props.title\n    }),\n    \"aria-selected\": props.isChecked,\n    \"aria-disabled\": props.isDisabled,\n    \"data-uppy-super-focusable\": true\n  }, props.itemIconEl, props.showTitles && props.title));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/Item/components/GridLi.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/Item/components/ItemIcon.js":
/*!***************************************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/Item/components/ItemIcon.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nfunction FileIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: 11,\n    height: 14.5,\n    viewBox: \"0 0 44 58\"\n  }, h(\"path\", {\n    d: \"M27.437.517a1 1 0 0 0-.094.03H4.25C2.037.548.217 2.368.217 4.58v48.405c0 2.212 1.82 4.03 4.03 4.03H39.03c2.21 0 4.03-1.818 4.03-4.03V15.61a1 1 0 0 0-.03-.28 1 1 0 0 0 0-.093 1 1 0 0 0-.03-.032 1 1 0 0 0 0-.03 1 1 0 0 0-.032-.063 1 1 0 0 0-.03-.063 1 1 0 0 0-.032 0 1 1 0 0 0-.03-.063 1 1 0 0 0-.032-.03 1 1 0 0 0-.03-.063 1 1 0 0 0-.063-.062l-14.593-14a1 1 0 0 0-.062-.062A1 1 0 0 0 28 .708a1 1 0 0 0-.374-.157 1 1 0 0 0-.156 0 1 1 0 0 0-.03-.03l-.003-.003zM4.25 2.547h22.218v9.97c0 2.21 1.82 4.03 4.03 4.03h10.564v36.438a2.02 2.02 0 0 1-2.032 2.032H4.25c-1.13 0-2.032-.9-2.032-2.032V4.58c0-1.13.902-2.032 2.03-2.032zm24.218 1.345l10.375 9.937.75.718H30.5c-1.13 0-2.032-.9-2.032-2.03V3.89z\"\n  }));\n}\n\nfunction FolderIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    style: {\n      width: 16,\n      marginRight: 3\n    },\n    viewBox: \"0 0 276.157 276.157\"\n  }, h(\"path\", {\n    d: \"M273.08 101.378c-3.3-4.65-8.86-7.32-15.254-7.32h-24.34V67.59c0-10.2-8.3-18.5-18.5-18.5h-85.322c-3.63 0-9.295-2.875-11.436-5.805l-6.386-8.735c-4.982-6.814-15.104-11.954-23.546-11.954H58.73c-9.292 0-18.638 6.608-21.737 15.372l-2.033 5.752c-.958 2.71-4.72 5.37-7.596 5.37H18.5C8.3 49.09 0 57.39 0 67.59v167.07c0 .886.16 1.73.443 2.52.152 3.306 1.18 6.424 3.053 9.064 3.3 4.652 8.86 7.32 15.255 7.32h188.487c11.395 0 23.27-8.425 27.035-19.18l40.677-116.188c2.11-6.035 1.43-12.164-1.87-16.816zM18.5 64.088h8.864c9.295 0 18.64-6.607 21.738-15.37l2.032-5.75c.96-2.712 4.722-5.373 7.597-5.373h29.565c3.63 0 9.295 2.876 11.437 5.806l6.386 8.735c4.982 6.815 15.104 11.954 23.546 11.954h85.322c1.898 0 3.5 1.602 3.5 3.5v26.47H69.34c-11.395 0-23.27 8.423-27.035 19.178L15 191.23V67.59c0-1.898 1.603-3.5 3.5-3.5zm242.29 49.15l-40.676 116.188c-1.674 4.78-7.812 9.135-12.877 9.135H18.75c-1.447 0-2.576-.372-3.02-.997-.442-.625-.422-1.814.057-3.18l40.677-116.19c1.674-4.78 7.812-9.134 12.877-9.134h188.487c1.448 0 2.577.372 3.02.997.443.625.423 1.814-.056 3.18z\"\n  }));\n}\n\nfunction VideoIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    viewBox: \"0 0 58 58\"\n  }, h(\"path\", {\n    d: \"M36.537 28.156l-11-7a1.005 1.005 0 0 0-1.02-.033C24.2 21.3 24 21.635 24 22v14a1 1 0 0 0 1.537.844l11-7a1.002 1.002 0 0 0 0-1.688zM26 34.18V23.82L34.137 29 26 34.18z\"\n  }), h(\"path\", {\n    d: \"M57 6H1a1 1 0 0 0-1 1v44a1 1 0 0 0 1 1h56a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1zM10 28H2v-9h8v9zm-8 2h8v9H2v-9zm10 10V8h34v42H12V40zm44-12h-8v-9h8v9zm-8 2h8v9h-8v-9zm8-22v9h-8V8h8zM2 8h8v9H2V8zm0 42v-9h8v9H2zm54 0h-8v-9h8v9z\"\n  }));\n}\n\nmodule.exports = function (props) {\n  if (props.itemIconString === null) return;\n\n  switch (props.itemIconString) {\n    case 'file':\n      return h(FileIcon, null);\n\n    case 'folder':\n      return h(FolderIcon, null);\n\n    case 'video':\n      return h(VideoIcon, null);\n\n    default:\n      return h(\"img\", {\n        src: props.itemIconString\n      });\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/Item/components/ItemIcon.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/Item/components/ListLi.js":
/*!*************************************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/Item/components/ListLi.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar getAriaLabelOfCheckbox = function getAriaLabelOfCheckbox(props) {\n  if (props.type === 'folder') {\n    if (props.isChecked) {\n      return props.i18n('unselectAllFilesFromFolderNamed', {\n        name: props.title\n      });\n    } else {\n      return props.i18n('selectAllFilesFromFolderNamed', {\n        name: props.title\n      });\n    }\n  } else {\n    if (props.isChecked) {\n      return props.i18n('unselectFileNamed', {\n        name: props.title\n      });\n    } else {\n      return props.i18n('selectFileNamed', {\n        name: props.title\n      });\n    }\n  }\n}; // if folder:\n//   + checkbox (selects all files from folder)\n//   + folder name (opens folder)\n// if file:\n//   + checkbox (selects file)\n//   + file name (selects file)\n\n\nmodule.exports = function (props) {\n  return h(\"li\", {\n    class: props.className\n  }, h(\"button\", {\n    type: \"button\",\n    class: \"uppy-u-reset uppy-ProviderBrowserItem-fakeCheckbox \" + (props.isChecked ? 'uppy-ProviderBrowserItem-fakeCheckbox--is-checked' : ''),\n    onClick: props.toggleCheckbox // for the <label/>\n    ,\n    id: props.id,\n    role: \"option\",\n    \"aria-label\": getAriaLabelOfCheckbox(props),\n    \"aria-selected\": props.isChecked,\n    \"aria-disabled\": props.isDisabled,\n    \"data-uppy-super-focusable\": true\n  }), props.type === 'file' ? // label for a checkbox\n  h(\"label\", {\n    for: props.id,\n    className: \"uppy-u-reset uppy-ProviderBrowserItem-inner\"\n  }, props.itemIconEl, props.showTitles && props.title) : // button to open a folder\n  h(\"button\", {\n    type: \"button\",\n    class: \"uppy-u-reset uppy-ProviderBrowserItem-inner\",\n    onclick: props.handleFolderClick,\n    \"aria-label\": props.i18n('openFolderNamed', {\n      name: props.title\n    })\n  }, props.itemIconEl, props.showTitles && props.title));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/Item/components/ListLi.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/Item/index.js":
/*!*************************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/Item/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar classNames = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n\nvar ItemIcon = __webpack_require__(/*! ./components/ItemIcon */ \"./node_modules/@uppy/provider-views/lib/Item/components/ItemIcon.js\");\n\nvar GridLi = __webpack_require__(/*! ./components/GridLi */ \"./node_modules/@uppy/provider-views/lib/Item/components/GridLi.js\");\n\nvar ListLi = __webpack_require__(/*! ./components/ListLi */ \"./node_modules/@uppy/provider-views/lib/Item/components/ListLi.js\");\n\nmodule.exports = function (props) {\n  var itemIconString = props.getItemIcon();\n  var className = classNames('uppy-ProviderBrowserItem', {\n    'uppy-ProviderBrowserItem--selected': props.isChecked\n  }, {\n    'uppy-ProviderBrowserItem--noPreview': itemIconString === 'video'\n  });\n  var itemIconEl = h(ItemIcon, {\n    itemIconString: itemIconString\n  });\n\n  switch (props.viewType) {\n    case 'grid':\n      return h(GridLi, _extends({}, props, {\n        className: className,\n        itemIconEl: itemIconEl\n      }));\n\n    case 'list':\n      return h(ListLi, _extends({}, props, {\n        className: className,\n        itemIconEl: itemIconEl\n      }));\n\n    default:\n      throw new Error(\"There is no such type \" + props.viewType);\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/Item/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/ItemList.js":
/*!***********************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/ItemList.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar Item = __webpack_require__(/*! ./Item/index */ \"./node_modules/@uppy/provider-views/lib/Item/index.js\");\n\nvar getSharedProps = function getSharedProps(fileOrFolder, props) {\n  return {\n    id: fileOrFolder.id,\n    title: fileOrFolder.name,\n    getItemIcon: function getItemIcon() {\n      return fileOrFolder.icon;\n    },\n    isChecked: props.isChecked(fileOrFolder),\n    toggleCheckbox: function toggleCheckbox(e) {\n      return props.toggleCheckbox(e, fileOrFolder);\n    },\n    columns: props.columns,\n    showTitles: props.showTitles,\n    viewType: props.viewType,\n    i18n: props.i18n\n  };\n};\n\nmodule.exports = function (props) {\n  if (!props.folders.length && !props.files.length) {\n    return h(\"div\", {\n      class: \"uppy-Provider-empty\"\n    }, props.i18n('noFilesFound'));\n  }\n\n  return h(\"div\", {\n    class: \"uppy-ProviderBrowser-body\"\n  }, h(\"ul\", {\n    class: \"uppy-ProviderBrowser-list\",\n    onscroll: props.handleScroll,\n    role: \"listbox\" // making <ul> not focusable for firefox\n    ,\n    tabindex: \"-1\"\n  }, props.folders.map(function (folder) {\n    return Item(_extends({}, getSharedProps(folder, props), {\n      type: 'folder',\n      isDisabled: props.isChecked(folder) ? props.isChecked(folder).loading : false,\n      handleFolderClick: function handleFolderClick() {\n        return props.handleFolderClick(folder);\n      }\n    }));\n  }), props.files.map(function (file) {\n    return Item(_extends({}, getSharedProps(file, props), {\n      type: 'file',\n      isDisabled: false\n    }));\n  })));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/ItemList.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/Loader.js":
/*!*********************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/Loader.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nmodule.exports = function (props) {\n  return h(\"div\", {\n    class: \"uppy-Provider-loading\"\n  }, h(\"span\", null, props.i18n('loading')));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/Loader.js?");

/***/ }),

/***/ "./node_modules/@uppy/provider-views/lib/index.js":
/*!********************************************************!*\
  !*** ./node_modules/@uppy/provider-views/lib/index.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h,\n    Component = _require.Component;\n\nvar AuthView = __webpack_require__(/*! ./AuthView */ \"./node_modules/@uppy/provider-views/lib/AuthView.js\");\n\nvar Browser = __webpack_require__(/*! ./Browser */ \"./node_modules/@uppy/provider-views/lib/Browser.js\");\n\nvar LoaderView = __webpack_require__(/*! ./Loader */ \"./node_modules/@uppy/provider-views/lib/Loader.js\");\n\nvar generateFileID = __webpack_require__(/*! @uppy/utils/lib/generateFileID */ \"./node_modules/@uppy/utils/lib/generateFileID.js\");\n\nvar getFileType = __webpack_require__(/*! @uppy/utils/lib/getFileType */ \"./node_modules/@uppy/utils/lib/getFileType.js\");\n\nvar isPreviewSupported = __webpack_require__(/*! @uppy/utils/lib/isPreviewSupported */ \"./node_modules/@uppy/utils/lib/isPreviewSupported.js\");\n/**\n * Array.prototype.findIndex ponyfill for old browsers.\n */\n\n\nfunction findIndex(array, predicate) {\n  for (var i = 0; i < array.length; i++) {\n    if (predicate(array[i])) return i;\n  }\n\n  return -1;\n} // location.origin does not exist in IE\n\n\nfunction getOrigin() {\n  if ('origin' in location) {\n    return location.origin; // eslint-disable-line compat/compat\n  }\n\n  return location.protocol + \"//\" + location.hostname + (location.port ? \":\" + location.port : '');\n}\n\nvar CloseWrapper =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(CloseWrapper, _Component);\n\n  function CloseWrapper() {\n    return _Component.apply(this, arguments) || this;\n  }\n\n  var _proto = CloseWrapper.prototype;\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.props.onUnmount();\n  };\n\n  _proto.render = function render() {\n    return this.props.children[0];\n  };\n\n  return CloseWrapper;\n}(Component);\n/**\n * Class to easily generate generic views for Provider plugins\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction () {\n  /**\n   * @param {object} plugin instance of the plugin\n   * @param {object} opts\n   */\n  function ProviderView(plugin, opts) {\n    this.plugin = plugin;\n    this.provider = opts.provider; // set default options\n\n    var defaultOptions = {\n      viewType: 'list',\n      showTitles: true,\n      showFilter: true,\n      showBreadcrumbs: true\n    }; // merge default options with the ones set by user\n\n    this.opts = _extends({}, defaultOptions, {}, opts); // Logic\n\n    this.addFile = this.addFile.bind(this);\n    this.filterItems = this.filterItems.bind(this);\n    this.filterQuery = this.filterQuery.bind(this);\n    this.toggleSearch = this.toggleSearch.bind(this);\n    this.getFolder = this.getFolder.bind(this);\n    this.getNextFolder = this.getNextFolder.bind(this);\n    this.logout = this.logout.bind(this);\n    this.preFirstRender = this.preFirstRender.bind(this);\n    this.handleAuth = this.handleAuth.bind(this);\n    this.sortByTitle = this.sortByTitle.bind(this);\n    this.sortByDate = this.sortByDate.bind(this);\n    this.isActiveRow = this.isActiveRow.bind(this);\n    this.isChecked = this.isChecked.bind(this);\n    this.toggleCheckbox = this.toggleCheckbox.bind(this);\n    this.handleError = this.handleError.bind(this);\n    this.handleScroll = this.handleScroll.bind(this);\n    this.listAllFiles = this.listAllFiles.bind(this);\n    this.donePicking = this.donePicking.bind(this);\n    this.cancelPicking = this.cancelPicking.bind(this);\n    this.clearSelection = this.clearSelection.bind(this); // Visual\n\n    this.render = this.render.bind(this);\n    this.clearSelection();\n  }\n\n  var _proto2 = ProviderView.prototype;\n\n  _proto2.tearDown = function tearDown() {// Nothing.\n  };\n\n  _proto2._updateFilesAndFolders = function _updateFilesAndFolders(res, files, folders) {\n    this.nextPagePath = res.nextPagePath;\n    res.items.forEach(function (item) {\n      if (item.isFolder) {\n        folders.push(item);\n      } else {\n        files.push(item);\n      }\n    });\n    this.plugin.setPluginState({\n      folders: folders,\n      files: files\n    });\n  }\n  /**\n   * Called only the first time the provider view is rendered.\n   * Kind of like an init function.\n   */\n  ;\n\n  _proto2.preFirstRender = function preFirstRender() {\n    this.plugin.setPluginState({\n      didFirstRender: true\n    });\n    this.plugin.onFirstRender();\n  }\n  /**\n   * Based on folder ID, fetch a new folder and update it to state\n   *\n   * @param  {string} id Folder id\n   * @returns {Promise}   Folders/files in folder\n   */\n  ;\n\n  _proto2.getFolder = function getFolder(id, name) {\n    var _this = this;\n\n    return this._loaderWrapper(this.provider.list(id), function (res) {\n      var folders = [];\n      var files = [];\n      var updatedDirectories;\n\n      var state = _this.plugin.getPluginState();\n\n      var index = findIndex(state.directories, function (dir) {\n        return id === dir.id;\n      });\n\n      if (index !== -1) {\n        updatedDirectories = state.directories.slice(0, index + 1);\n      } else {\n        updatedDirectories = state.directories.concat([{\n          id: id,\n          title: name\n        }]);\n      }\n\n      _this.username = _this.username ? _this.username : res.username;\n\n      _this._updateFilesAndFolders(res, files, folders);\n\n      _this.plugin.setPluginState({\n        directories: updatedDirectories\n      });\n    }, this.handleError);\n  }\n  /**\n   * Fetches new folder\n   *\n   * @param  {object} Folder\n   * @param  {string} title Folder title\n   */\n  ;\n\n  _proto2.getNextFolder = function getNextFolder(folder) {\n    this.getFolder(folder.requestPath, folder.name);\n    this.lastCheckbox = undefined;\n  };\n\n  _proto2.addFile = function addFile(file) {\n    var tagFile = {\n      id: this.providerFileToId(file),\n      source: this.plugin.id,\n      data: file,\n      name: file.name || file.id,\n      type: file.mimeType,\n      isRemote: true,\n      body: {\n        fileId: file.id\n      },\n      remote: {\n        companionUrl: this.plugin.opts.companionUrl,\n        url: \"\" + this.provider.fileUrl(file.requestPath),\n        body: {\n          fileId: file.id\n        },\n        providerOptions: this.provider.opts\n      }\n    };\n    var fileType = getFileType(tagFile); // TODO Should we just always use the thumbnail URL if it exists?\n\n    if (fileType && isPreviewSupported(fileType)) {\n      tagFile.preview = file.thumbnail;\n    }\n\n    this.plugin.uppy.log('Adding remote file');\n\n    try {\n      this.plugin.uppy.addFile(tagFile);\n    } catch (err) {\n      if (!err.isRestriction) {\n        this.plugin.uppy.log(err);\n      }\n    }\n  };\n\n  _proto2.removeFile = function removeFile(id) {\n    var _this$plugin$getPlugi = this.plugin.getPluginState(),\n        currentSelection = _this$plugin$getPlugi.currentSelection;\n\n    this.plugin.setPluginState({\n      currentSelection: currentSelection.filter(function (file) {\n        return file.id !== id;\n      })\n    });\n  }\n  /**\n   * Removes session token on client side.\n   */\n  ;\n\n  _proto2.logout = function logout() {\n    var _this2 = this;\n\n    this.provider.logout().then(function (res) {\n      if (res.ok) {\n        if (!res.revoked) {\n          var message = _this2.plugin.uppy.i18n('companionUnauthorizeHint', {\n            provider: _this2.plugin.title,\n            url: res.manual_revoke_url\n          });\n\n          _this2.plugin.uppy.info(message, 'info', 7000);\n        }\n\n        var newState = {\n          authenticated: false,\n          files: [],\n          folders: [],\n          directories: []\n        };\n\n        _this2.plugin.setPluginState(newState);\n      }\n    }).catch(this.handleError);\n  };\n\n  _proto2.filterQuery = function filterQuery(e) {\n    var state = this.plugin.getPluginState();\n    this.plugin.setPluginState(_extends({}, state, {\n      filterInput: e ? e.target.value : ''\n    }));\n  };\n\n  _proto2.toggleSearch = function toggleSearch(inputEl) {\n    var state = this.plugin.getPluginState();\n    this.plugin.setPluginState({\n      isSearchVisible: !state.isSearchVisible,\n      filterInput: ''\n    });\n  };\n\n  _proto2.filterItems = function filterItems(items) {\n    var state = this.plugin.getPluginState();\n\n    if (!state.filterInput || state.filterInput === '') {\n      return items;\n    }\n\n    return items.filter(function (folder) {\n      return folder.name.toLowerCase().indexOf(state.filterInput.toLowerCase()) !== -1;\n    });\n  };\n\n  _proto2.sortByTitle = function sortByTitle() {\n    var state = _extends({}, this.plugin.getPluginState());\n\n    var files = state.files,\n        folders = state.folders,\n        sorting = state.sorting;\n    var sortedFiles = files.sort(function (fileA, fileB) {\n      if (sorting === 'titleDescending') {\n        return fileB.name.localeCompare(fileA.name);\n      }\n\n      return fileA.name.localeCompare(fileB.name);\n    });\n    var sortedFolders = folders.sort(function (folderA, folderB) {\n      if (sorting === 'titleDescending') {\n        return folderB.name.localeCompare(folderA.name);\n      }\n\n      return folderA.name.localeCompare(folderB.name);\n    });\n    this.plugin.setPluginState(_extends({}, state, {\n      files: sortedFiles,\n      folders: sortedFolders,\n      sorting: sorting === 'titleDescending' ? 'titleAscending' : 'titleDescending'\n    }));\n  };\n\n  _proto2.sortByDate = function sortByDate() {\n    var state = _extends({}, this.plugin.getPluginState());\n\n    var files = state.files,\n        folders = state.folders,\n        sorting = state.sorting;\n    var sortedFiles = files.sort(function (fileA, fileB) {\n      var a = new Date(fileA.modifiedDate);\n      var b = new Date(fileB.modifiedDate);\n\n      if (sorting === 'dateDescending') {\n        return a > b ? -1 : a < b ? 1 : 0;\n      }\n\n      return a > b ? 1 : a < b ? -1 : 0;\n    });\n    var sortedFolders = folders.sort(function (folderA, folderB) {\n      var a = new Date(folderA.modifiedDate);\n      var b = new Date(folderB.modifiedDate);\n\n      if (sorting === 'dateDescending') {\n        return a > b ? -1 : a < b ? 1 : 0;\n      }\n\n      return a > b ? 1 : a < b ? -1 : 0;\n    });\n    this.plugin.setPluginState(_extends({}, state, {\n      files: sortedFiles,\n      folders: sortedFolders,\n      sorting: sorting === 'dateDescending' ? 'dateAscending' : 'dateDescending'\n    }));\n  };\n\n  _proto2.sortBySize = function sortBySize() {\n    var state = _extends({}, this.plugin.getPluginState());\n\n    var files = state.files,\n        sorting = state.sorting; // check that plugin supports file sizes\n\n    if (!files.length || !this.plugin.getItemData(files[0]).size) {\n      return;\n    }\n\n    var sortedFiles = files.sort(function (fileA, fileB) {\n      var a = fileA.size;\n      var b = fileB.size;\n\n      if (sorting === 'sizeDescending') {\n        return a > b ? -1 : a < b ? 1 : 0;\n      }\n\n      return a > b ? 1 : a < b ? -1 : 0;\n    });\n    this.plugin.setPluginState(_extends({}, state, {\n      files: sortedFiles,\n      sorting: sorting === 'sizeDescending' ? 'sizeAscending' : 'sizeDescending'\n    }));\n  };\n\n  _proto2.isActiveRow = function isActiveRow(file) {\n    return this.plugin.getPluginState().activeRow === this.plugin.getItemId(file);\n  };\n\n  _proto2.isChecked = function isChecked(file) {\n    var _this$plugin$getPlugi2 = this.plugin.getPluginState(),\n        currentSelection = _this$plugin$getPlugi2.currentSelection; // comparing id instead of the file object, because the reference to the object\n    // changes when we switch folders, and the file list is updated\n\n\n    return currentSelection.some(function (item) {\n      return item.id === file.id;\n    });\n  }\n  /**\n   * Adds all files found inside of specified folder.\n   *\n   * Uses separated state while folder contents are being fetched and\n   * mantains list of selected folders, which are separated from files.\n   */\n  ;\n\n  _proto2.addFolder = function addFolder(folder) {\n    var _this3 = this;\n\n    var folderId = this.providerFileToId(folder);\n    var state = this.plugin.getPluginState();\n    var folders = state.selectedFolders || {};\n\n    if (folderId in folders && folders[folderId].loading) {\n      return;\n    }\n\n    folders[folderId] = {\n      loading: true,\n      files: []\n    };\n    this.plugin.setPluginState({\n      selectedFolders: folders\n    });\n    return this.listAllFiles(folder.requestPath).then(function (files) {\n      files.forEach(function (file) {\n        _this3.addFile(file);\n      });\n      var ids = files.map(_this3.providerFileToId);\n      state = _this3.plugin.getPluginState();\n      state.selectedFolders[folderId] = {\n        loading: false,\n        files: ids\n      };\n\n      _this3.plugin.setPluginState({\n        selectedFolders: folders\n      });\n\n      var message;\n\n      if (files.length) {\n        message = _this3.plugin.uppy.i18n('folderAdded', {\n          smart_count: files.length,\n          folder: folder.name\n        });\n      } else {\n        message = _this3.plugin.uppy.i18n('emptyFolderAdded');\n      }\n\n      _this3.plugin.uppy.info(message);\n    }).catch(function (e) {\n      state = _this3.plugin.getPluginState();\n      delete state.selectedFolders[folderId];\n\n      _this3.plugin.setPluginState({\n        selectedFolders: state.selectedFolders\n      });\n\n      _this3.handleError(e);\n    });\n  }\n  /**\n   * Toggles file/folder checkbox to on/off state while updating files list.\n   *\n   * Note that some extra complexity comes from supporting shift+click to\n   * toggle multiple checkboxes at once, which is done by getting all files\n   * in between last checked file and current one.\n   */\n  ;\n\n  _proto2.toggleCheckbox = function toggleCheckbox(e, file) {\n    e.stopPropagation();\n    e.preventDefault();\n    e.currentTarget.focus();\n\n    var _this$plugin$getPlugi3 = this.plugin.getPluginState(),\n        folders = _this$plugin$getPlugi3.folders,\n        files = _this$plugin$getPlugi3.files;\n\n    var items = this.filterItems(folders.concat(files)); // Shift-clicking selects a single consecutive list of items\n    // starting at the previous click and deselects everything else.\n\n    if (this.lastCheckbox && e.shiftKey) {\n      var _currentSelection;\n\n      var prevIndex = items.indexOf(this.lastCheckbox);\n      var currentIndex = items.indexOf(file);\n\n      if (prevIndex < currentIndex) {\n        _currentSelection = items.slice(prevIndex, currentIndex + 1);\n      } else {\n        _currentSelection = items.slice(currentIndex, prevIndex + 1);\n      }\n\n      this.plugin.setPluginState({\n        currentSelection: _currentSelection\n      });\n      return;\n    }\n\n    this.lastCheckbox = file;\n\n    var _this$plugin$getPlugi4 = this.plugin.getPluginState(),\n        currentSelection = _this$plugin$getPlugi4.currentSelection;\n\n    if (this.isChecked(file)) {\n      this.plugin.setPluginState({\n        currentSelection: currentSelection.filter(function (item) {\n          return item.id !== file.id;\n        })\n      });\n    } else {\n      this.plugin.setPluginState({\n        currentSelection: currentSelection.concat([file])\n      });\n    }\n  };\n\n  _proto2.providerFileToId = function providerFileToId(file) {\n    return generateFileID({\n      data: file,\n      name: file.name || file.id,\n      type: file.mimeType\n    });\n  };\n\n  _proto2.handleAuth = function handleAuth() {\n    var _this4 = this;\n\n    var authState = btoa(JSON.stringify({\n      origin: getOrigin()\n    }));\n    var clientVersion = encodeURIComponent(\"@uppy/provider-views=\" + ProviderView.VERSION);\n    var link = this.provider.authUrl() + \"?state=\" + authState + \"&uppyVersions=\" + clientVersion;\n    var authWindow = window.open(link, '_blank');\n\n    var handleToken = function handleToken(e) {\n      if (!_this4._isOriginAllowed(e.origin, _this4.plugin.opts.companionAllowedHosts) || e.source !== authWindow) {\n        _this4.plugin.uppy.log(\"rejecting event from \" + e.origin + \" vs allowed pattern \" + _this4.plugin.opts.companionAllowedHosts);\n\n        return;\n      } // Check if it's a string before doing the JSON.parse to maintain support\n      // for older Companion versions that used object references\n\n\n      var data = typeof e.data === 'string' ? JSON.parse(e.data) : e.data;\n\n      if (!data.token) {\n        _this4.plugin.uppy.log('did not receive token from auth window');\n\n        return;\n      }\n\n      authWindow.close();\n      window.removeEventListener('message', handleToken);\n\n      _this4.provider.setAuthToken(data.token);\n\n      _this4.preFirstRender();\n    };\n\n    window.addEventListener('message', handleToken);\n  };\n\n  _proto2._isOriginAllowed = function _isOriginAllowed(origin, allowedOrigin) {\n    var getRegex = function getRegex(value) {\n      if (typeof value === 'string') {\n        return new RegExp(\"^\" + value + \"$\");\n      } else if (value instanceof RegExp) {\n        return value;\n      }\n    };\n\n    var patterns = Array.isArray(allowedOrigin) ? allowedOrigin.map(getRegex) : [getRegex(allowedOrigin)];\n    return patterns.filter(function (pattern) {\n      return pattern != null;\n    }) // loose comparison to catch undefined\n    .some(function (pattern) {\n      return pattern.test(origin) || pattern.test(origin + \"/\");\n    }); // allowing for trailing '/'\n  };\n\n  _proto2.handleError = function handleError(error) {\n    var uppy = this.plugin.uppy;\n    uppy.log(error.toString());\n\n    if (error.isAuthError) {\n      return;\n    }\n\n    var message = uppy.i18n('companionError');\n    uppy.info({\n      message: message,\n      details: error.toString()\n    }, 'error', 5000);\n  };\n\n  _proto2.handleScroll = function handleScroll(e) {\n    var _this5 = this;\n\n    var scrollPos = e.target.scrollHeight - (e.target.scrollTop + e.target.offsetHeight);\n    var path = this.nextPagePath || null;\n\n    if (scrollPos < 50 && path && !this._isHandlingScroll) {\n      this.provider.list(path).then(function (res) {\n        var _this5$plugin$getPlug = _this5.plugin.getPluginState(),\n            files = _this5$plugin$getPlug.files,\n            folders = _this5$plugin$getPlug.folders;\n\n        _this5._updateFilesAndFolders(res, files, folders);\n      }).catch(this.handleError).then(function () {\n        _this5._isHandlingScroll = false;\n      }); // always called\n\n      this._isHandlingScroll = true;\n    }\n  };\n\n  _proto2.listAllFiles = function listAllFiles(path, files) {\n    var _this6 = this;\n\n    if (files === void 0) {\n      files = null;\n    }\n\n    files = files || [];\n    return new Promise(function (resolve, reject) {\n      _this6.provider.list(path).then(function (res) {\n        res.items.forEach(function (item) {\n          if (!item.isFolder) {\n            files.push(item);\n          }\n        });\n        var moreFiles = res.nextPagePath || null;\n\n        if (moreFiles) {\n          return _this6.listAllFiles(moreFiles, files).then(function (files) {\n            return resolve(files);\n          }).catch(function (e) {\n            return reject(e);\n          });\n        } else {\n          return resolve(files);\n        }\n      }).catch(function (e) {\n        return reject(e);\n      });\n    });\n  };\n\n  _proto2.donePicking = function donePicking() {\n    var _this7 = this;\n\n    var _this$plugin$getPlugi5 = this.plugin.getPluginState(),\n        currentSelection = _this$plugin$getPlugi5.currentSelection;\n\n    var promises = currentSelection.map(function (file) {\n      if (file.isFolder) {\n        return _this7.addFolder(file);\n      } else {\n        return _this7.addFile(file);\n      }\n    });\n\n    this._loaderWrapper(Promise.all(promises), function () {\n      _this7.clearSelection();\n    }, function () {});\n  };\n\n  _proto2.cancelPicking = function cancelPicking() {\n    this.clearSelection();\n    var dashboard = this.plugin.uppy.getPlugin('Dashboard');\n    if (dashboard) dashboard.hideAllPanels();\n  };\n\n  _proto2.clearSelection = function clearSelection() {\n    this.plugin.setPluginState({\n      currentSelection: []\n    });\n  } // displays loader view while asynchronous request is being made.\n  ;\n\n  _proto2._loaderWrapper = function _loaderWrapper(promise, then, catch_) {\n    var _this8 = this;\n\n    promise.then(function (result) {\n      _this8.plugin.setPluginState({\n        loading: false\n      });\n\n      then(result);\n    }).catch(function (err) {\n      _this8.plugin.setPluginState({\n        loading: false\n      });\n\n      catch_(err);\n    });\n    this.plugin.setPluginState({\n      loading: true\n    });\n  };\n\n  _proto2.render = function render(state, viewOptions) {\n    if (viewOptions === void 0) {\n      viewOptions = {};\n    }\n\n    var _this$plugin$getPlugi6 = this.plugin.getPluginState(),\n        authenticated = _this$plugin$getPlugi6.authenticated,\n        didFirstRender = _this$plugin$getPlugi6.didFirstRender;\n\n    if (!didFirstRender) {\n      this.preFirstRender();\n    } // reload pluginState for \"loading\" attribute because it might\n    // have changed above.\n\n\n    if (this.plugin.getPluginState().loading) {\n      return h(CloseWrapper, {\n        onUnmount: this.clearSelection\n      }, h(LoaderView, {\n        i18n: this.plugin.uppy.i18n\n      }));\n    }\n\n    if (!authenticated) {\n      return h(CloseWrapper, {\n        onUnmount: this.clearSelection\n      }, h(AuthView, {\n        pluginName: this.plugin.title,\n        pluginIcon: this.plugin.icon,\n        handleAuth: this.handleAuth,\n        i18n: this.plugin.uppy.i18n,\n        i18nArray: this.plugin.uppy.i18nArray\n      }));\n    }\n\n    var targetViewOptions = _extends({}, this.opts, {}, viewOptions);\n\n    var browserProps = _extends({}, this.plugin.getPluginState(), {\n      username: this.username,\n      getNextFolder: this.getNextFolder,\n      getFolder: this.getFolder,\n      filterItems: this.filterItems,\n      filterQuery: this.filterQuery,\n      toggleSearch: this.toggleSearch,\n      sortByTitle: this.sortByTitle,\n      sortByDate: this.sortByDate,\n      logout: this.logout,\n      isActiveRow: this.isActiveRow,\n      isChecked: this.isChecked,\n      toggleCheckbox: this.toggleCheckbox,\n      handleScroll: this.handleScroll,\n      listAllFiles: this.listAllFiles,\n      done: this.donePicking,\n      cancel: this.cancelPicking,\n      title: this.plugin.title,\n      viewType: targetViewOptions.viewType,\n      showTitles: targetViewOptions.showTitles,\n      showFilter: targetViewOptions.showFilter,\n      showBreadcrumbs: targetViewOptions.showBreadcrumbs,\n      pluginIcon: this.plugin.icon,\n      i18n: this.plugin.uppy.i18n\n    });\n\n    return h(CloseWrapper, {\n      onUnmount: this.clearSelection\n    }, h(Browser, browserProps));\n  };\n\n  return ProviderView;\n}(), _class.VERSION = \"1.5.2\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/provider-views/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/redux-dev-tools/lib/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/@uppy/redux-dev-tools/lib/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n/**\n * Add Redux DevTools support to Uppy\n *\n * See https://medium.com/@zalmoxis/redux-devtools-without-redux-or-how-to-have-a-predictable-state-with-any-architecture-61c5f5a7716f\n * and https://github.com/zalmoxisus/mobx-remotedev/blob/master/src/monitorActions.js\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(ReduxDevTools, _Plugin);\n\n  function ReduxDevTools(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'debugger';\n    _this.id = _this.opts.id || 'ReduxDevTools';\n    _this.title = 'Redux DevTools'; // set default options\n\n    var defaultOptions = {}; // merge default options with the ones set by user\n\n    _this.opts = _extends({}, defaultOptions, opts);\n    _this.handleStateChange = _this.handleStateChange.bind(_assertThisInitialized(_this));\n    _this.initDevTools = _this.initDevTools.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = ReduxDevTools.prototype;\n\n  _proto.handleStateChange = function handleStateChange(prevState, nextState, patch) {\n    this.devTools.send('UPPY_STATE_UPDATE', nextState);\n  };\n\n  _proto.initDevTools = function initDevTools() {\n    var _this2 = this;\n\n    this.devTools = window.devToolsExtension.connect();\n    this.devToolsUnsubscribe = this.devTools.subscribe(function (message) {\n      if (message.type === 'DISPATCH') {\n        console.log(message.payload.type); // Implement monitors actions\n\n        switch (message.payload.type) {\n          case 'RESET':\n            _this2.uppy.reset();\n\n            return;\n\n          case 'IMPORT_STATE':\n            {\n              var computedStates = message.payload.nextLiftedState.computedStates;\n              _this2.uppy.store.state = _extends({}, _this2.uppy.getState(), computedStates[computedStates.length - 1].state);\n\n              _this2.uppy.updateAll(_this2.uppy.getState());\n\n              return;\n            }\n\n          case 'JUMP_TO_STATE':\n          case 'JUMP_TO_ACTION':\n            _this2.uppy.store.state = _extends({}, _this2.uppy.getState(), JSON.parse(message.state));\n\n            _this2.uppy.updateAll(_this2.uppy.getState());\n\n        }\n      }\n    });\n  };\n\n  _proto.install = function install() {\n    this.withDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__;\n\n    if (this.withDevTools) {\n      this.initDevTools();\n      this.uppy.on('state-update', this.handleStateChange);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    if (this.withDevTools) {\n      this.devToolsUnsubscribe();\n      this.uppy.off('state-update', this.handleStateUpdate);\n    }\n  };\n\n  return ReduxDevTools;\n}(Plugin), _class.VERSION = \"1.3.1\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/redux-dev-tools/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/status-bar/lib/StatusBar.js":
/*!********************************************************!*\
  !*** ./node_modules/@uppy/status-bar/lib/StatusBar.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar throttle = __webpack_require__(/*! lodash.throttle */ \"./node_modules/lodash.throttle/index.js\");\n\nvar classNames = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n\nvar statusBarStates = __webpack_require__(/*! ./StatusBarStates */ \"./node_modules/@uppy/status-bar/lib/StatusBarStates.js\");\n\nvar prettyBytes = __webpack_require__(/*! @uppy/utils/lib/prettyBytes */ \"./node_modules/@uppy/utils/lib/prettyBytes.js\");\n\nvar prettyETA = __webpack_require__(/*! @uppy/utils/lib/prettyETA */ \"./node_modules/@uppy/utils/lib/prettyETA.js\");\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nfunction calculateProcessingProgress(files) {\n  // Collect pre or postprocessing progress states.\n  var progresses = [];\n  Object.keys(files).forEach(function (fileID) {\n    var progress = files[fileID].progress;\n\n    if (progress.preprocess) {\n      progresses.push(progress.preprocess);\n    }\n\n    if (progress.postprocess) {\n      progresses.push(progress.postprocess);\n    }\n  }); // In the future we should probably do this differently. For now we'll take the\n  // mode and message from the first file…\n\n  var _progresses$ = progresses[0],\n      mode = _progresses$.mode,\n      message = _progresses$.message;\n  var value = progresses.filter(isDeterminate).reduce(function (total, progress, index, all) {\n    return total + progress.value / all.length;\n  }, 0);\n\n  function isDeterminate(progress) {\n    return progress.mode === 'determinate';\n  }\n\n  return {\n    mode: mode,\n    message: message,\n    value: value\n  };\n}\n\nfunction togglePauseResume(props) {\n  if (props.isAllComplete) return;\n\n  if (!props.resumableUploads) {\n    return props.cancelAll();\n  }\n\n  if (props.isAllPaused) {\n    return props.resumeAll();\n  }\n\n  return props.pauseAll();\n}\n\nmodule.exports = function (props) {\n  props = props || {};\n  var _props = props,\n      newFiles = _props.newFiles,\n      allowNewUpload = _props.allowNewUpload,\n      isUploadInProgress = _props.isUploadInProgress,\n      isAllPaused = _props.isAllPaused,\n      resumableUploads = _props.resumableUploads,\n      error = _props.error,\n      hideUploadButton = _props.hideUploadButton,\n      hidePauseResumeButton = _props.hidePauseResumeButton,\n      hideCancelButton = _props.hideCancelButton,\n      hideRetryButton = _props.hideRetryButton;\n  var uploadState = props.uploadState;\n  var progressValue = props.totalProgress;\n  var progressMode;\n  var progressBarContent;\n\n  if (uploadState === statusBarStates.STATE_PREPROCESSING || uploadState === statusBarStates.STATE_POSTPROCESSING) {\n    var progress = calculateProcessingProgress(props.files);\n    progressMode = progress.mode;\n\n    if (progressMode === 'determinate') {\n      progressValue = progress.value * 100;\n    }\n\n    progressBarContent = ProgressBarProcessing(progress);\n  } else if (uploadState === statusBarStates.STATE_COMPLETE) {\n    progressBarContent = ProgressBarComplete(props);\n  } else if (uploadState === statusBarStates.STATE_UPLOADING) {\n    if (!props.supportsUploadProgress) {\n      progressMode = 'indeterminate';\n      progressValue = null;\n    }\n\n    progressBarContent = ProgressBarUploading(props);\n  } else if (uploadState === statusBarStates.STATE_ERROR) {\n    progressValue = undefined;\n    progressBarContent = ProgressBarError(props);\n  }\n\n  var width = typeof progressValue === 'number' ? progressValue : 100;\n  var isHidden = uploadState === statusBarStates.STATE_WAITING && props.hideUploadButton || uploadState === statusBarStates.STATE_WAITING && !props.newFiles > 0 || uploadState === statusBarStates.STATE_COMPLETE && props.hideAfterFinish;\n  var showUploadBtn = !error && newFiles && !isUploadInProgress && !isAllPaused && allowNewUpload && !hideUploadButton;\n  var showCancelBtn = !hideCancelButton && uploadState !== statusBarStates.STATE_WAITING && uploadState !== statusBarStates.STATE_COMPLETE;\n  var showPauseResumeBtn = resumableUploads && !hidePauseResumeButton && uploadState !== statusBarStates.STATE_WAITING && uploadState !== statusBarStates.STATE_PREPROCESSING && uploadState !== statusBarStates.STATE_POSTPROCESSING && uploadState !== statusBarStates.STATE_COMPLETE;\n  var showRetryBtn = error && !hideRetryButton;\n  var progressClassNames = \"uppy-StatusBar-progress\\n                           \" + (progressMode ? 'is-' + progressMode : '');\n  var statusBarClassNames = classNames({\n    'uppy-Root': props.isTargetDOMEl\n  }, 'uppy-StatusBar', \"is-\" + uploadState);\n  return h(\"div\", {\n    class: statusBarClassNames,\n    \"aria-hidden\": isHidden\n  }, h(\"div\", {\n    class: progressClassNames,\n    style: {\n      width: width + '%'\n    },\n    role: \"progressbar\",\n    \"aria-valuemin\": \"0\",\n    \"aria-valuemax\": \"100\",\n    \"aria-valuenow\": progressValue\n  }), progressBarContent, h(\"div\", {\n    class: \"uppy-StatusBar-actions\"\n  }, showUploadBtn ? h(UploadBtn, _extends({}, props, {\n    uploadState: uploadState\n  })) : null, showRetryBtn ? h(RetryBtn, props) : null, showPauseResumeBtn ? h(PauseResumeButton, props) : null, showCancelBtn ? h(CancelBtn, props) : null));\n};\n\nvar UploadBtn = function UploadBtn(props) {\n  var uploadBtnClassNames = classNames('uppy-u-reset', 'uppy-c-btn', 'uppy-StatusBar-actionBtn', 'uppy-StatusBar-actionBtn--upload', {\n    'uppy-c-btn-primary': props.uploadState === statusBarStates.STATE_WAITING\n  });\n  return h(\"button\", {\n    type: \"button\",\n    class: uploadBtnClassNames,\n    \"aria-label\": props.i18n('uploadXFiles', {\n      smart_count: props.newFiles\n    }),\n    onclick: props.startUpload,\n    \"data-uppy-super-focusable\": true\n  }, props.newFiles && props.isUploadStarted ? props.i18n('uploadXNewFiles', {\n    smart_count: props.newFiles\n  }) : props.i18n('uploadXFiles', {\n    smart_count: props.newFiles\n  }));\n};\n\nvar RetryBtn = function RetryBtn(props) {\n  return h(\"button\", {\n    type: \"button\",\n    class: \"uppy-u-reset uppy-c-btn uppy-StatusBar-actionBtn uppy-StatusBar-actionBtn--retry\",\n    \"aria-label\": props.i18n('retryUpload'),\n    onclick: props.retryAll,\n    \"data-uppy-super-focusable\": true\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"8\",\n    height: \"10\",\n    viewBox: \"0 0 8 10\"\n  }, h(\"path\", {\n    d: \"M4 2.408a2.75 2.75 0 1 0 2.75 2.75.626.626 0 0 1 1.25.018v.023a4 4 0 1 1-4-4.041V.25a.25.25 0 0 1 .389-.208l2.299 1.533a.25.25 0 0 1 0 .416l-2.3 1.533A.25.25 0 0 1 4 3.316v-.908z\"\n  })), props.i18n('retry'));\n};\n\nvar CancelBtn = function CancelBtn(props) {\n  return h(\"button\", {\n    type: \"button\",\n    class: \"uppy-u-reset uppy-StatusBar-actionCircleBtn\",\n    title: props.i18n('cancel'),\n    \"aria-label\": props.i18n('cancel'),\n    onclick: props.cancelAll,\n    \"data-uppy-super-focusable\": true\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"16\",\n    height: \"16\",\n    viewBox: \"0 0 16 16\"\n  }, h(\"g\", {\n    fill: \"none\",\n    \"fill-rule\": \"evenodd\"\n  }, h(\"circle\", {\n    fill: \"#888\",\n    cx: \"8\",\n    cy: \"8\",\n    r: \"8\"\n  }), h(\"path\", {\n    fill: \"#FFF\",\n    d: \"M9.283 8l2.567 2.567-1.283 1.283L8 9.283 5.433 11.85 4.15 10.567 6.717 8 4.15 5.433 5.433 4.15 8 6.717l2.567-2.567 1.283 1.283z\"\n  }))));\n};\n\nvar PauseResumeButton = function PauseResumeButton(props) {\n  var isAllPaused = props.isAllPaused,\n      i18n = props.i18n;\n  var title = isAllPaused ? i18n('resume') : i18n('pause');\n  return h(\"button\", {\n    title: title,\n    \"aria-label\": title,\n    class: \"uppy-u-reset uppy-StatusBar-actionCircleBtn\",\n    type: \"button\",\n    onclick: function onclick() {\n      return togglePauseResume(props);\n    },\n    \"data-uppy-super-focusable\": true\n  }, isAllPaused ? h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"16\",\n    height: \"16\",\n    viewBox: \"0 0 16 16\"\n  }, h(\"g\", {\n    fill: \"none\",\n    \"fill-rule\": \"evenodd\"\n  }, h(\"circle\", {\n    fill: \"#888\",\n    cx: \"8\",\n    cy: \"8\",\n    r: \"8\"\n  }), h(\"path\", {\n    fill: \"#FFF\",\n    d: \"M6 4.25L11.5 8 6 11.75z\"\n  }))) : h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"16\",\n    height: \"16\",\n    viewBox: \"0 0 16 16\"\n  }, h(\"g\", {\n    fill: \"none\",\n    \"fill-rule\": \"evenodd\"\n  }, h(\"circle\", {\n    fill: \"#888\",\n    cx: \"8\",\n    cy: \"8\",\n    r: \"8\"\n  }), h(\"path\", {\n    d: \"M5 4.5h2v7H5v-7zm4 0h2v7H9v-7z\",\n    fill: \"#FFF\"\n  }))));\n};\n\nvar LoadingSpinner = function LoadingSpinner() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"uppy-StatusBar-spinner\",\n    width: \"14\",\n    height: \"14\"\n  }, h(\"path\", {\n    d: \"M13.983 6.547c-.12-2.509-1.64-4.893-3.939-5.936-2.48-1.127-5.488-.656-7.556 1.094C.524 3.367-.398 6.048.162 8.562c.556 2.495 2.46 4.52 4.94 5.183 2.932.784 5.61-.602 7.256-3.015-1.493 1.993-3.745 3.309-6.298 2.868-2.514-.434-4.578-2.349-5.153-4.84a6.226 6.226 0 0 1 2.98-6.778C6.34.586 9.74 1.1 11.373 3.493c.407.596.693 1.282.842 1.988.127.598.073 1.197.161 1.794.078.525.543 1.257 1.15.864.525-.341.49-1.05.456-1.592-.007-.15.02.3 0 0\",\n    \"fill-rule\": \"evenodd\"\n  }));\n};\n\nvar ProgressBarProcessing = function ProgressBarProcessing(props) {\n  var value = Math.round(props.value * 100);\n  return h(\"div\", {\n    class: \"uppy-StatusBar-content\"\n  }, h(LoadingSpinner, null), props.mode === 'determinate' ? value + \"% \\xB7 \" : '', props.message);\n};\n\nvar renderDot = function renderDot() {\n  return \" \\xB7 \";\n};\n\nvar ProgressDetails = function ProgressDetails(props) {\n  var ifShowFilesUploadedOfTotal = props.numUploads > 1;\n  return h(\"div\", {\n    class: \"uppy-StatusBar-statusSecondary\"\n  }, ifShowFilesUploadedOfTotal && props.i18n('filesUploadedOfTotal', {\n    complete: props.complete,\n    smart_count: props.numUploads\n  }), h(\"span\", {\n    class: \"uppy-StatusBar-additionalInfo\"\n  }, ifShowFilesUploadedOfTotal && renderDot(), props.i18n('dataUploadedOfTotal', {\n    complete: prettyBytes(props.totalUploadedSize),\n    total: prettyBytes(props.totalSize)\n  }), renderDot(), props.i18n('xTimeLeft', {\n    time: prettyETA(props.totalETA)\n  })));\n};\n\nvar UnknownProgressDetails = function UnknownProgressDetails(props) {\n  return h(\"div\", {\n    class: \"uppy-StatusBar-statusSecondary\"\n  }, props.i18n('filesUploadedOfTotal', {\n    complete: props.complete,\n    smart_count: props.numUploads\n  }));\n};\n\nvar UploadNewlyAddedFiles = function UploadNewlyAddedFiles(props) {\n  var uploadBtnClassNames = classNames('uppy-u-reset', 'uppy-c-btn', 'uppy-StatusBar-actionBtn', 'uppy-StatusBar-actionBtn--uploadNewlyAdded');\n  return h(\"div\", {\n    class: \"uppy-StatusBar-statusSecondary\"\n  }, h(\"div\", {\n    class: \"uppy-StatusBar-statusSecondaryHint\"\n  }, props.i18n('xMoreFilesAdded', {\n    smart_count: props.newFiles\n  })), h(\"button\", {\n    type: \"button\",\n    class: uploadBtnClassNames,\n    \"aria-label\": props.i18n('uploadXFiles', {\n      smart_count: props.newFiles\n    }),\n    onclick: props.startUpload\n  }, props.i18n('upload')));\n};\n\nvar ThrottledProgressDetails = throttle(ProgressDetails, 500, {\n  leading: true,\n  trailing: true\n});\n\nvar ProgressBarUploading = function ProgressBarUploading(props) {\n  if (!props.isUploadStarted || props.isAllComplete) {\n    return null;\n  }\n\n  var title = props.isAllPaused ? props.i18n('paused') : props.i18n('uploading');\n  var showUploadNewlyAddedFiles = props.newFiles && props.isUploadStarted;\n  return h(\"div\", {\n    class: \"uppy-StatusBar-content\",\n    \"aria-label\": title,\n    title: title\n  }, !props.isAllPaused ? h(LoadingSpinner, null) : null, h(\"div\", {\n    class: \"uppy-StatusBar-status\"\n  }, h(\"div\", {\n    class: \"uppy-StatusBar-statusPrimary\"\n  }, props.supportsUploadProgress ? title + \": \" + props.totalProgress + \"%\" : title), !props.isAllPaused && !showUploadNewlyAddedFiles && props.showProgressDetails ? props.supportsUploadProgress ? h(ThrottledProgressDetails, props) : h(UnknownProgressDetails, props) : null, showUploadNewlyAddedFiles ? h(UploadNewlyAddedFiles, props) : null));\n};\n\nvar ProgressBarComplete = function ProgressBarComplete(_ref) {\n  var totalProgress = _ref.totalProgress,\n      i18n = _ref.i18n;\n  return h(\"div\", {\n    class: \"uppy-StatusBar-content\",\n    role: \"status\",\n    title: i18n('complete')\n  }, h(\"div\", {\n    class: \"uppy-StatusBar-status\"\n  }, h(\"div\", {\n    class: \"uppy-StatusBar-statusPrimary\"\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"uppy-StatusBar-statusIndicator UppyIcon\",\n    width: \"15\",\n    height: \"11\",\n    viewBox: \"0 0 15 11\"\n  }, h(\"path\", {\n    d: \"M.414 5.843L1.627 4.63l3.472 3.472L13.202 0l1.212 1.213L5.1 10.528z\"\n  })), i18n('complete'))));\n};\n\nvar ProgressBarError = function ProgressBarError(_ref2) {\n  var error = _ref2.error,\n      retryAll = _ref2.retryAll,\n      hideRetryButton = _ref2.hideRetryButton,\n      i18n = _ref2.i18n;\n  return h(\"div\", {\n    class: \"uppy-StatusBar-content\",\n    role: \"alert\",\n    title: i18n('uploadFailed')\n  }, h(\"div\", {\n    class: \"uppy-StatusBar-status\"\n  }, h(\"div\", {\n    class: \"uppy-StatusBar-statusPrimary\"\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"uppy-StatusBar-statusIndicator UppyIcon\",\n    width: \"11\",\n    height: \"11\",\n    viewBox: \"0 0 11 11\"\n  }, h(\"path\", {\n    d: \"M4.278 5.5L0 1.222 1.222 0 5.5 4.278 9.778 0 11 1.222 6.722 5.5 11 9.778 9.778 11 5.5 6.722 1.222 11 0 9.778z\"\n  })), i18n('uploadFailed'))), h(\"span\", {\n    class: \"uppy-StatusBar-details\",\n    \"aria-label\": error,\n    \"data-microtip-position\": \"top-right\",\n    \"data-microtip-size\": \"medium\",\n    role: \"tooltip\"\n  }, \"?\"));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/status-bar/lib/StatusBar.js?");

/***/ }),

/***/ "./node_modules/@uppy/status-bar/lib/StatusBarStates.js":
/*!**************************************************************!*\
  !*** ./node_modules/@uppy/status-bar/lib/StatusBarStates.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = {\n  STATE_ERROR: 'error',\n  STATE_WAITING: 'waiting',\n  STATE_PREPROCESSING: 'preprocessing',\n  STATE_UPLOADING: 'uploading',\n  STATE_POSTPROCESSING: 'postprocessing',\n  STATE_COMPLETE: 'complete'\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/status-bar/lib/StatusBarStates.js?");

/***/ }),

/***/ "./node_modules/@uppy/status-bar/lib/index.js":
/*!****************************************************!*\
  !*** ./node_modules/@uppy/status-bar/lib/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar StatusBarUI = __webpack_require__(/*! ./StatusBar */ \"./node_modules/@uppy/status-bar/lib/StatusBar.js\");\n\nvar statusBarStates = __webpack_require__(/*! ./StatusBarStates */ \"./node_modules/@uppy/status-bar/lib/StatusBarStates.js\");\n\nvar getSpeed = __webpack_require__(/*! @uppy/utils/lib/getSpeed */ \"./node_modules/@uppy/utils/lib/getSpeed.js\");\n\nvar getBytesRemaining = __webpack_require__(/*! @uppy/utils/lib/getBytesRemaining */ \"./node_modules/@uppy/utils/lib/getBytesRemaining.js\");\n/**\n * StatusBar: renders a status bar with upload/pause/resume/cancel/retry buttons,\n * progress percentage and time remaining.\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(StatusBar, _Plugin);\n\n  function StatusBar(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n\n    _this.startUpload = function () {\n      return _this.uppy.upload().catch(function (err) {\n        if (!err.isRestriction) {\n          _this.uppy.log(err.stack || err.message || err);\n        }\n      });\n    };\n\n    _this.id = _this.opts.id || 'StatusBar';\n    _this.title = 'StatusBar';\n    _this.type = 'progressindicator';\n    _this.defaultLocale = {\n      strings: {\n        uploading: 'Uploading',\n        upload: 'Upload',\n        complete: 'Complete',\n        uploadFailed: 'Upload failed',\n        paused: 'Paused',\n        retry: 'Retry',\n        cancel: 'Cancel',\n        pause: 'Pause',\n        resume: 'Resume',\n        filesUploadedOfTotal: {\n          0: '%{complete} of %{smart_count} file uploaded',\n          1: '%{complete} of %{smart_count} files uploaded',\n          2: '%{complete} of %{smart_count} files uploaded'\n        },\n        dataUploadedOfTotal: '%{complete} of %{total}',\n        xTimeLeft: '%{time} left',\n        uploadXFiles: {\n          0: 'Upload %{smart_count} file',\n          1: 'Upload %{smart_count} files',\n          2: 'Upload %{smart_count} files'\n        },\n        uploadXNewFiles: {\n          0: 'Upload +%{smart_count} file',\n          1: 'Upload +%{smart_count} files',\n          2: 'Upload +%{smart_count} files'\n        },\n        xMoreFilesAdded: {\n          0: '%{smart_count} more file added',\n          1: '%{smart_count} more files added',\n          2: '%{smart_count} more files added'\n        }\n      }\n    }; // set default options\n\n    var defaultOptions = {\n      target: 'body',\n      hideUploadButton: false,\n      hideRetryButton: false,\n      hidePauseResumeButton: false,\n      hideCancelButton: false,\n      showProgressDetails: false,\n      hideAfterFinish: true\n    };\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n\n    _this.i18nInit();\n\n    _this.render = _this.render.bind(_assertThisInitialized(_this));\n    _this.install = _this.install.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = StatusBar.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  };\n\n  _proto.getTotalSpeed = function getTotalSpeed(files) {\n    var totalSpeed = 0;\n    files.forEach(function (file) {\n      totalSpeed = totalSpeed + getSpeed(file.progress);\n    });\n    return totalSpeed;\n  };\n\n  _proto.getTotalETA = function getTotalETA(files) {\n    var totalSpeed = this.getTotalSpeed(files);\n\n    if (totalSpeed === 0) {\n      return 0;\n    }\n\n    var totalBytesRemaining = files.reduce(function (total, file) {\n      return total + getBytesRemaining(file.progress);\n    }, 0);\n    return Math.round(totalBytesRemaining / totalSpeed * 10) / 10;\n  };\n\n  _proto.getUploadingState = function getUploadingState(isAllErrored, isAllComplete, files) {\n    if (isAllErrored) {\n      return statusBarStates.STATE_ERROR;\n    }\n\n    if (isAllComplete) {\n      return statusBarStates.STATE_COMPLETE;\n    }\n\n    var state = statusBarStates.STATE_WAITING;\n    var fileIDs = Object.keys(files);\n\n    for (var i = 0; i < fileIDs.length; i++) {\n      var progress = files[fileIDs[i]].progress; // If ANY files are being uploaded right now, show the uploading state.\n\n      if (progress.uploadStarted && !progress.uploadComplete) {\n        return statusBarStates.STATE_UPLOADING;\n      } // If files are being preprocessed AND postprocessed at this time, we show the\n      // preprocess state. If any files are being uploaded we show uploading.\n\n\n      if (progress.preprocess && state !== statusBarStates.STATE_UPLOADING) {\n        state = statusBarStates.STATE_PREPROCESSING;\n      } // If NO files are being preprocessed or uploaded right now, but some files are\n      // being postprocessed, show the postprocess state.\n\n\n      if (progress.postprocess && state !== statusBarStates.STATE_UPLOADING && state !== statusBarStates.STATE_PREPROCESSING) {\n        state = statusBarStates.STATE_POSTPROCESSING;\n      }\n    }\n\n    return state;\n  };\n\n  _proto.render = function render(state) {\n    var capabilities = state.capabilities,\n        files = state.files,\n        allowNewUpload = state.allowNewUpload,\n        totalProgress = state.totalProgress,\n        error = state.error; // TODO: move this to Core, to share between Status Bar and Dashboard\n    // (and any other plugin that might need it, too)\n\n    var filesArray = Object.keys(files).map(function (file) {\n      return files[file];\n    });\n    var newFiles = filesArray.filter(function (file) {\n      return !file.progress.uploadStarted && !file.progress.preprocess && !file.progress.postprocess;\n    });\n    var uploadStartedFiles = filesArray.filter(function (file) {\n      return file.progress.uploadStarted;\n    });\n    var pausedFiles = uploadStartedFiles.filter(function (file) {\n      return file.isPaused;\n    });\n    var completeFiles = filesArray.filter(function (file) {\n      return file.progress.uploadComplete;\n    });\n    var erroredFiles = filesArray.filter(function (file) {\n      return file.error;\n    });\n    var inProgressFiles = filesArray.filter(function (file) {\n      return !file.progress.uploadComplete && file.progress.uploadStarted;\n    });\n    var inProgressNotPausedFiles = inProgressFiles.filter(function (file) {\n      return !file.isPaused;\n    });\n    var startedFiles = filesArray.filter(function (file) {\n      return file.progress.uploadStarted || file.progress.preprocess || file.progress.postprocess;\n    });\n    var processingFiles = filesArray.filter(function (file) {\n      return file.progress.preprocess || file.progress.postprocess;\n    });\n    var totalETA = this.getTotalETA(inProgressNotPausedFiles);\n    var totalSize = 0;\n    var totalUploadedSize = 0;\n    uploadStartedFiles.forEach(function (file) {\n      totalSize = totalSize + (file.progress.bytesTotal || 0);\n      totalUploadedSize = totalUploadedSize + (file.progress.bytesUploaded || 0);\n    });\n    var isUploadStarted = uploadStartedFiles.length > 0;\n    var isAllComplete = totalProgress === 100 && completeFiles.length === Object.keys(files).length && processingFiles.length === 0;\n    var isAllErrored = isUploadStarted && erroredFiles.length === uploadStartedFiles.length;\n    var isAllPaused = inProgressFiles.length !== 0 && pausedFiles.length === inProgressFiles.length;\n    var isUploadInProgress = inProgressFiles.length > 0;\n    var resumableUploads = capabilities.resumableUploads || false;\n    var supportsUploadProgress = capabilities.uploadProgress !== false;\n    return StatusBarUI({\n      error: error,\n      uploadState: this.getUploadingState(isAllErrored, isAllComplete, state.files || {}),\n      allowNewUpload: allowNewUpload,\n      totalProgress: totalProgress,\n      totalSize: totalSize,\n      totalUploadedSize: totalUploadedSize,\n      isAllComplete: isAllComplete,\n      isAllPaused: isAllPaused,\n      isAllErrored: isAllErrored,\n      isUploadStarted: isUploadStarted,\n      isUploadInProgress: isUploadInProgress,\n      complete: completeFiles.length,\n      newFiles: newFiles.length,\n      numUploads: startedFiles.length,\n      totalETA: totalETA,\n      files: files,\n      i18n: this.i18n,\n      pauseAll: this.uppy.pauseAll,\n      resumeAll: this.uppy.resumeAll,\n      retryAll: this.uppy.retryAll,\n      cancelAll: this.uppy.cancelAll,\n      startUpload: this.startUpload,\n      resumableUploads: resumableUploads,\n      supportsUploadProgress: supportsUploadProgress,\n      showProgressDetails: this.opts.showProgressDetails,\n      hideUploadButton: this.opts.hideUploadButton,\n      hideRetryButton: this.opts.hideRetryButton,\n      hidePauseResumeButton: this.opts.hidePauseResumeButton,\n      hideCancelButton: this.opts.hideCancelButton,\n      hideAfterFinish: this.opts.hideAfterFinish,\n      isTargetDOMEl: this.isTargetDOMEl\n    });\n  };\n\n  _proto.install = function install() {\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.unmount();\n  };\n\n  return StatusBar;\n}(Plugin), _class.VERSION = \"1.4.2\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/status-bar/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/store-default/lib/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/@uppy/store-default/lib/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n/**\n * Default store that keeps state in a simple object.\n */\nvar DefaultStore =\n/*#__PURE__*/\nfunction () {\n  function DefaultStore() {\n    this.state = {};\n    this.callbacks = [];\n  }\n\n  var _proto = DefaultStore.prototype;\n\n  _proto.getState = function getState() {\n    return this.state;\n  };\n\n  _proto.setState = function setState(patch) {\n    var prevState = _extends({}, this.state);\n\n    var nextState = _extends({}, this.state, patch);\n\n    this.state = nextState;\n\n    this._publish(prevState, nextState, patch);\n  };\n\n  _proto.subscribe = function subscribe(listener) {\n    var _this = this;\n\n    this.callbacks.push(listener);\n    return function () {\n      // Remove the listener.\n      _this.callbacks.splice(_this.callbacks.indexOf(listener), 1);\n    };\n  };\n\n  _proto._publish = function _publish() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    this.callbacks.forEach(function (listener) {\n      listener.apply(void 0, args);\n    });\n  };\n\n  return DefaultStore;\n}();\n\nDefaultStore.VERSION = \"1.2.0\";\n\nmodule.exports = function defaultStore() {\n  return new DefaultStore();\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/store-default/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/store-redux/lib/index.js":
/*!*****************************************************!*\
  !*** ./node_modules/@uppy/store-redux/lib/index.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar cuid = __webpack_require__(/*! cuid */ \"./node_modules/cuid/index.js\"); // Redux action name.\n\n\nvar STATE_UPDATE = 'uppy/STATE_UPDATE'; // Pluck Uppy state from the Redux store in the default location.\n\nvar defaultSelector = function defaultSelector(id) {\n  return function (state) {\n    return state.uppy[id];\n  };\n};\n/**\n * Redux store.\n *\n * @param {object} opts.store - The Redux store to use.\n * @param {string} opts.id - This store instance's ID. Defaults to a random string.\n *    If you need to access Uppy state through Redux, eg. to render custom UI, set this to something constant.\n * @param {Function} opts.selector - Function, `(state) => uppyState`, to pluck state from the Redux store.\n *    Defaults to retrieving `state.uppy[opts.id]`. Override if you placed Uppy state elsewhere in the Redux store.\n */\n\n\nvar ReduxStore =\n/*#__PURE__*/\nfunction () {\n  function ReduxStore(opts) {\n    this._store = opts.store;\n    this._id = opts.id || cuid();\n    this._selector = opts.selector || defaultSelector(this._id); // Initialise the `uppy[id]` state key.\n\n    this.setState({});\n  }\n\n  var _proto = ReduxStore.prototype;\n\n  _proto.setState = function setState(patch) {\n    this._store.dispatch({\n      type: STATE_UPDATE,\n      id: this._id,\n      payload: patch\n    });\n  };\n\n  _proto.getState = function getState() {\n    return this._selector(this._store.getState());\n  };\n\n  _proto.subscribe = function subscribe(cb) {\n    var _this = this;\n\n    var prevState = this.getState();\n    return this._store.subscribe(function () {\n      var nextState = _this.getState();\n\n      if (prevState !== nextState) {\n        var patch = getPatch(prevState, nextState);\n        cb(prevState, nextState, patch);\n        prevState = nextState;\n      }\n    });\n  };\n\n  return ReduxStore;\n}();\n\nReduxStore.VERSION = \"1.2.0\";\n\nfunction getPatch(prev, next) {\n  var nextKeys = Object.keys(next);\n  var patch = {};\n  nextKeys.forEach(function (k) {\n    if (prev[k] !== next[k]) patch[k] = next[k];\n  });\n  return patch;\n}\n\nfunction reducer(state, action) {\n  if (state === void 0) {\n    state = {};\n  }\n\n  if (action.type === STATE_UPDATE) {\n    var _extends2;\n\n    var newState = _extends({}, state[action.id], action.payload);\n\n    return _extends({}, state, (_extends2 = {}, _extends2[action.id] = newState, _extends2));\n  }\n\n  return state;\n}\n\nfunction middleware() {\n  // Do nothing, at the moment.\n  return function () {\n    return function (next) {\n      return function (action) {\n        next(action);\n      };\n    };\n  };\n}\n\nmodule.exports = function createReduxStore(opts) {\n  return new ReduxStore(opts);\n};\n\nmodule.exports.STATE_UPDATE = STATE_UPDATE;\nmodule.exports.reducer = reducer;\nmodule.exports.middleware = middleware;\n\n//# sourceURL=webpack:///./node_modules/@uppy/store-redux/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/thumbnail-generator/lib/exif.js":
/*!************************************************************!*\
  !*** ./node_modules/@uppy/thumbnail-generator/lib/exif.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// Adapted from https://github.com/exif-js/exif-js\n// Removed XMP and IPTC metadata parsing and EXIF thumbnail generation\n// MIT License (c) Jacob Seidelin https://github.com/exif-js/exif-js/blob/master/LICENSE.md\nvar ExifTags = {\n  // version tags\n  0x9000: 'ExifVersion',\n  // EXIF version\n  0xA000: 'FlashpixVersion',\n  // Flashpix format version\n  // colorspace tags\n  0xA001: 'ColorSpace',\n  // Color space information tag\n  // image configuration\n  0xA002: 'PixelXDimension',\n  // Valid width of meaningful image\n  0xA003: 'PixelYDimension',\n  // Valid height of meaningful image\n  0x9101: 'ComponentsConfiguration',\n  // Information about channels\n  0x9102: 'CompressedBitsPerPixel',\n  // Compressed bits per pixel\n  // user information\n  0x927C: 'MakerNote',\n  // Any desired information written by the manufacturer\n  0x9286: 'UserComment',\n  // Comments by user\n  // related file\n  0xA004: 'RelatedSoundFile',\n  // Name of related sound file\n  // date and time\n  0x9003: 'DateTimeOriginal',\n  // Date and time when the original image was generated\n  0x9004: 'DateTimeDigitized',\n  // Date and time when the image was stored digitally\n  0x9290: 'SubsecTime',\n  // Fractions of seconds for DateTime\n  0x9291: 'SubsecTimeOriginal',\n  // Fractions of seconds for DateTimeOriginal\n  0x9292: 'SubsecTimeDigitized',\n  // Fractions of seconds for DateTimeDigitized\n  // picture-taking conditions\n  0x829A: 'ExposureTime',\n  // Exposure time (in seconds)\n  0x829D: 'FNumber',\n  // F number\n  0x8822: 'ExposureProgram',\n  // Exposure program\n  0x8824: 'SpectralSensitivity',\n  // Spectral sensitivity\n  0x8827: 'ISOSpeedRatings',\n  // ISO speed rating\n  0x8828: 'OECF',\n  // Optoelectric conversion factor\n  0x9201: 'ShutterSpeedValue',\n  // Shutter speed\n  0x9202: 'ApertureValue',\n  // Lens aperture\n  0x9203: 'BrightnessValue',\n  // Value of brightness\n  0x9204: 'ExposureBias',\n  // Exposure bias\n  0x9205: 'MaxApertureValue',\n  // Smallest F number of lens\n  0x9206: 'SubjectDistance',\n  // Distance to subject in meters\n  0x9207: 'MeteringMode',\n  // Metering mode\n  0x9208: 'LightSource',\n  // Kind of light source\n  0x9209: 'Flash',\n  // Flash status\n  0x9214: 'SubjectArea',\n  // Location and area of main subject\n  0x920A: 'FocalLength',\n  // Focal length of the lens in mm\n  0xA20B: 'FlashEnergy',\n  // Strobe energy in BCPS\n  0xA20C: 'SpatialFrequencyResponse',\n  //\n  0xA20E: 'FocalPlaneXResolution',\n  // Number of pixels in width direction per FocalPlaneResolutionUnit\n  0xA20F: 'FocalPlaneYResolution',\n  // Number of pixels in height direction per FocalPlaneResolutionUnit\n  0xA210: 'FocalPlaneResolutionUnit',\n  // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution\n  0xA214: 'SubjectLocation',\n  // Location of subject in image\n  0xA215: 'ExposureIndex',\n  // Exposure index selected on camera\n  0xA217: 'SensingMethod',\n  // Image sensor type\n  0xA300: 'FileSource',\n  // Image source (3 === DSC)\n  0xA301: 'SceneType',\n  // Scene type (1 === directly photographed)\n  0xA302: 'CFAPattern',\n  // Color filter array geometric pattern\n  0xA401: 'CustomRendered',\n  // Special processing\n  0xA402: 'ExposureMode',\n  // Exposure mode\n  0xA403: 'WhiteBalance',\n  // 1 = auto white balance, 2 = manual\n  0xA404: 'DigitalZoomRation',\n  // Digital zoom ratio\n  0xA405: 'FocalLengthIn35mmFilm',\n  // Equivalent foacl length assuming 35mm film camera (in mm)\n  0xA406: 'SceneCaptureType',\n  // Type of scene\n  0xA407: 'GainControl',\n  // Degree of overall image gain adjustment\n  0xA408: 'Contrast',\n  // Direction of contrast processing applied by camera\n  0xA409: 'Saturation',\n  // Direction of saturation processing applied by camera\n  0xA40A: 'Sharpness',\n  // Direction of sharpness processing applied by camera\n  0xA40B: 'DeviceSettingDescription',\n  //\n  0xA40C: 'SubjectDistanceRange',\n  // Distance to subject\n  // other tags\n  0xA005: 'InteroperabilityIFDPointer',\n  0xA420: 'ImageUniqueID' // Identifier assigned uniquely to each image\n\n};\nvar TiffTags = {\n  0x0100: 'ImageWidth',\n  0x0101: 'ImageHeight',\n  0x8769: 'ExifIFDPointer',\n  0x8825: 'GPSInfoIFDPointer',\n  0xA005: 'InteroperabilityIFDPointer',\n  0x0102: 'BitsPerSample',\n  0x0103: 'Compression',\n  0x0106: 'PhotometricInterpretation',\n  0x0112: 'Orientation',\n  0x0115: 'SamplesPerPixel',\n  0x011C: 'PlanarConfiguration',\n  0x0212: 'YCbCrSubSampling',\n  0x0213: 'YCbCrPositioning',\n  0x011A: 'XResolution',\n  0x011B: 'YResolution',\n  0x0128: 'ResolutionUnit',\n  0x0111: 'StripOffsets',\n  0x0116: 'RowsPerStrip',\n  0x0117: 'StripByteCounts',\n  0x0201: 'JPEGInterchangeFormat',\n  0x0202: 'JPEGInterchangeFormatLength',\n  0x012D: 'TransferFunction',\n  0x013E: 'WhitePoint',\n  0x013F: 'PrimaryChromaticities',\n  0x0211: 'YCbCrCoefficients',\n  0x0214: 'ReferenceBlackWhite',\n  0x0132: 'DateTime',\n  0x010E: 'ImageDescription',\n  0x010F: 'Make',\n  0x0110: 'Model',\n  0x0131: 'Software',\n  0x013B: 'Artist',\n  0x8298: 'Copyright'\n};\nvar GPSTags = {\n  0x0000: 'GPSVersionID',\n  0x0001: 'GPSLatitudeRef',\n  0x0002: 'GPSLatitude',\n  0x0003: 'GPSLongitudeRef',\n  0x0004: 'GPSLongitude',\n  0x0005: 'GPSAltitudeRef',\n  0x0006: 'GPSAltitude',\n  0x0007: 'GPSTimeStamp',\n  0x0008: 'GPSSatellites',\n  0x0009: 'GPSStatus',\n  0x000A: 'GPSMeasureMode',\n  0x000B: 'GPSDOP',\n  0x000C: 'GPSSpeedRef',\n  0x000D: 'GPSSpeed',\n  0x000E: 'GPSTrackRef',\n  0x000F: 'GPSTrack',\n  0x0010: 'GPSImgDirectionRef',\n  0x0011: 'GPSImgDirection',\n  0x0012: 'GPSMapDatum',\n  0x0013: 'GPSDestLatitudeRef',\n  0x0014: 'GPSDestLatitude',\n  0x0015: 'GPSDestLongitudeRef',\n  0x0016: 'GPSDestLongitude',\n  0x0017: 'GPSDestBearingRef',\n  0x0018: 'GPSDestBearing',\n  0x0019: 'GPSDestDistanceRef',\n  0x001A: 'GPSDestDistance',\n  0x001B: 'GPSProcessingMethod',\n  0x001C: 'GPSAreaInformation',\n  0x001D: 'GPSDateStamp',\n  0x001E: 'GPSDifferential'\n};\nvar StringValues = {\n  ExposureProgram: {\n    0: 'Not defined',\n    1: 'Manual',\n    2: 'Normal program',\n    3: 'Aperture priority',\n    4: 'Shutter priority',\n    5: 'Creative program',\n    6: 'Action program',\n    7: 'Portrait mode',\n    8: 'Landscape mode'\n  },\n  MeteringMode: {\n    0: 'Unknown',\n    1: 'Average',\n    2: 'CenterWeightedAverage',\n    3: 'Spot',\n    4: 'MultiSpot',\n    5: 'Pattern',\n    6: 'Partial',\n    255: 'Other'\n  },\n  LightSource: {\n    0: 'Unknown',\n    1: 'Daylight',\n    2: 'Fluorescent',\n    3: 'Tungsten (incandescent light)',\n    4: 'Flash',\n    9: 'Fine weather',\n    10: 'Cloudy weather',\n    11: 'Shade',\n    12: 'Daylight fluorescent (D 5700 - 7100K)',\n    13: 'Day white fluorescent (N 4600 - 5400K)',\n    14: 'Cool white fluorescent (W 3900 - 4500K)',\n    15: 'White fluorescent (WW 3200 - 3700K)',\n    17: 'Standard light A',\n    18: 'Standard light B',\n    19: 'Standard light C',\n    20: 'D55',\n    21: 'D65',\n    22: 'D75',\n    23: 'D50',\n    24: 'ISO studio tungsten',\n    255: 'Other'\n  },\n  Flash: {\n    0x0000: 'Flash did not fire',\n    0x0001: 'Flash fired',\n    0x0005: 'Strobe return light not detected',\n    0x0007: 'Strobe return light detected',\n    0x0009: 'Flash fired, compulsory flash mode',\n    0x000D: 'Flash fired, compulsory flash mode, return light not detected',\n    0x000F: 'Flash fired, compulsory flash mode, return light detected',\n    0x0010: 'Flash did not fire, compulsory flash mode',\n    0x0018: 'Flash did not fire, auto mode',\n    0x0019: 'Flash fired, auto mode',\n    0x001D: 'Flash fired, auto mode, return light not detected',\n    0x001F: 'Flash fired, auto mode, return light detected',\n    0x0020: 'No flash function',\n    0x0041: 'Flash fired, red-eye reduction mode',\n    0x0045: 'Flash fired, red-eye reduction mode, return light not detected',\n    0x0047: 'Flash fired, red-eye reduction mode, return light detected',\n    0x0049: 'Flash fired, compulsory flash mode, red-eye reduction mode',\n    0x004D: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected',\n    0x004F: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected',\n    0x0059: 'Flash fired, auto mode, red-eye reduction mode',\n    0x005D: 'Flash fired, auto mode, return light not detected, red-eye reduction mode',\n    0x005F: 'Flash fired, auto mode, return light detected, red-eye reduction mode'\n  },\n  SensingMethod: {\n    1: 'Not defined',\n    2: 'One-chip color area sensor',\n    3: 'Two-chip color area sensor',\n    4: 'Three-chip color area sensor',\n    5: 'Color sequential area sensor',\n    7: 'Trilinear sensor',\n    8: 'Color sequential linear sensor'\n  },\n  SceneCaptureType: {\n    0: 'Standard',\n    1: 'Landscape',\n    2: 'Portrait',\n    3: 'Night scene'\n  },\n  SceneType: {\n    1: 'Directly photographed'\n  },\n  CustomRendered: {\n    0: 'Normal process',\n    1: 'Custom process'\n  },\n  WhiteBalance: {\n    0: 'Auto white balance',\n    1: 'Manual white balance'\n  },\n  GainControl: {\n    0: 'None',\n    1: 'Low gain up',\n    2: 'High gain up',\n    3: 'Low gain down',\n    4: 'High gain down'\n  },\n  Contrast: {\n    0: 'Normal',\n    1: 'Soft',\n    2: 'Hard'\n  },\n  Saturation: {\n    0: 'Normal',\n    1: 'Low saturation',\n    2: 'High saturation'\n  },\n  Sharpness: {\n    0: 'Normal',\n    1: 'Soft',\n    2: 'Hard'\n  },\n  SubjectDistanceRange: {\n    0: 'Unknown',\n    1: 'Macro',\n    2: 'Close view',\n    3: 'Distant view'\n  },\n  FileSource: {\n    3: 'DSC'\n  },\n  Components: {\n    0: '',\n    1: 'Y',\n    2: 'Cb',\n    3: 'Cr',\n    4: 'R',\n    5: 'G',\n    6: 'B'\n  }\n};\n\nfunction imageHasData(img) {\n  return !!img.exifdata;\n}\n\nfunction base64ToArrayBuffer(base64, contentType) {\n  contentType = contentType || base64.match(/^data:([^;]+);base64,/mi)[1] || ''; // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg'\n\n  base64 = base64.replace(/^data:([^;]+);base64,/gmi, '');\n  var binary = atob(base64);\n  var len = binary.length;\n  var buffer = new ArrayBuffer(len); // eslint-disable-next-line compat/compat\n\n  var view = new Uint8Array(buffer);\n\n  for (var i = 0; i < len; i++) {\n    view[i] = binary.charCodeAt(i);\n  }\n\n  return buffer;\n}\n\nfunction objectURLToBlob(url, callback) {\n  var http = new XMLHttpRequest();\n  http.open('GET', url, true);\n  http.responseType = 'blob';\n\n  http.onload = function (e) {\n    if (this.status === 200 || this.status === 0) {\n      callback(this.response);\n    }\n  };\n\n  http.send();\n}\n\nfunction getImageData(img, callback) {\n  function handleBinaryFile(binFile) {\n    var data = findEXIFinJPEG(binFile);\n    img.exifdata = data || {};\n\n    if (callback) {\n      callback.call(img);\n    }\n  }\n\n  if (img.src) {\n    if (/^data:/i.test(img.src)) {\n      // Data URI\n      var arrayBuffer = base64ToArrayBuffer(img.src);\n      handleBinaryFile(arrayBuffer);\n    } else if (/^blob:/i.test(img.src)) {\n      // Object URL\n      var fileReader = new FileReader();\n\n      fileReader.onload = function (e) {\n        handleBinaryFile(e.target.result);\n      };\n\n      objectURLToBlob(img.src, function (blob) {\n        fileReader.readAsArrayBuffer(blob);\n      });\n    } else {\n      var http = new XMLHttpRequest();\n\n      http.onload = function () {\n        if (this.status === 200 || this.status === 0) {\n          handleBinaryFile(http.response);\n        } else {\n          throw new Error('Could not load image');\n        }\n\n        http = null;\n      };\n\n      http.open('GET', img.src, true);\n      http.responseType = 'arraybuffer';\n      http.send(null);\n    }\n  } else if (self.FileReader && (img instanceof self.Blob || img instanceof self.File)) {\n    var _fileReader = new FileReader();\n\n    _fileReader.onload = function (e) {\n      handleBinaryFile(e.target.result);\n    };\n\n    _fileReader.readAsArrayBuffer(img);\n  }\n}\n\nfunction findEXIFinJPEG(file) {\n  var dataView = new DataView(file);\n\n  if (dataView.getUint8(0) !== 0xFF || dataView.getUint8(1) !== 0xD8) {\n    return false; // not a valid jpeg\n  }\n\n  var offset = 2;\n  var length = file.byteLength;\n  var marker;\n\n  while (offset < length) {\n    if (dataView.getUint8(offset) !== 0xFF) {\n      return false; // not a valid marker, something is wrong\n    }\n\n    marker = dataView.getUint8(offset + 1); // we could implement handling for other markers here,\n    // but we're only looking for 0xFFE1 for EXIF data\n\n    if (marker === 225) {\n      return readEXIFData(dataView, offset + 4, dataView.getUint16(offset + 2) - 2);\n    } else {\n      offset += 2 + dataView.getUint16(offset + 2);\n    }\n  }\n}\n\nfunction readTags(file, tiffStart, dirStart, strings, bigEnd) {\n  var entries = file.getUint16(dirStart, !bigEnd);\n  var tags = {};\n  var entryOffset;\n  var tag;\n  var i;\n\n  for (i = 0; i < entries; i++) {\n    entryOffset = dirStart + i * 12 + 2;\n    tag = strings[file.getUint16(entryOffset, !bigEnd)];\n    tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);\n  }\n\n  return tags;\n}\n\nfunction readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) {\n  var type = file.getUint16(entryOffset + 2, !bigEnd);\n  var numValues = file.getUint32(entryOffset + 4, !bigEnd);\n  var valueOffset = file.getUint32(entryOffset + 8, !bigEnd) + tiffStart;\n  var offset;\n  var vals;\n  var val;\n  var n;\n  var numerator;\n  var denominator;\n\n  switch (type) {\n    case 1: // byte, 8-bit unsigned int\n\n    case 7:\n      // undefined, 8-bit byte, value depending on field\n      if (numValues === 1) {\n        return file.getUint8(entryOffset + 8, !bigEnd);\n      } else {\n        offset = numValues > 4 ? valueOffset : entryOffset + 8;\n        vals = [];\n\n        for (n = 0; n < numValues; n++) {\n          vals[n] = file.getUint8(offset + n);\n        }\n\n        return vals;\n      }\n\n    case 2:\n      // ascii, 8-bit byte\n      offset = numValues > 4 ? valueOffset : entryOffset + 8;\n      return getStringFromDB(file, offset, numValues - 1);\n\n    case 3:\n      // short, 16 bit int\n      if (numValues === 1) {\n        return file.getUint16(entryOffset + 8, !bigEnd);\n      } else {\n        offset = numValues > 2 ? valueOffset : entryOffset + 8;\n        vals = [];\n\n        for (n = 0; n < numValues; n++) {\n          vals[n] = file.getUint16(offset + 2 * n, !bigEnd);\n        }\n\n        return vals;\n      }\n\n    case 4:\n      // long, 32 bit int\n      if (numValues === 1) {\n        return file.getUint32(entryOffset + 8, !bigEnd);\n      } else {\n        vals = [];\n\n        for (n = 0; n < numValues; n++) {\n          vals[n] = file.getUint32(valueOffset + 4 * n, !bigEnd);\n        }\n\n        return vals;\n      }\n\n    case 5:\n      // rational = two long values, first is numerator, second is denominator\n      if (numValues === 1) {\n        numerator = file.getUint32(valueOffset, !bigEnd);\n        denominator = file.getUint32(valueOffset + 4, !bigEnd);\n        val = +(numerator / denominator);\n        return val;\n      } else {\n        vals = [];\n\n        for (n = 0; n < numValues; n++) {\n          numerator = file.getUint32(valueOffset + 8 * n, !bigEnd);\n          denominator = file.getUint32(valueOffset + 4 + 8 * n, !bigEnd);\n          vals[n] = +(numerator / denominator);\n        }\n\n        return vals;\n      }\n\n    case 9:\n      // slong, 32 bit signed int\n      if (numValues === 1) {\n        return file.getInt32(entryOffset + 8, !bigEnd);\n      } else {\n        vals = [];\n\n        for (n = 0; n < numValues; n++) {\n          vals[n] = file.getInt32(valueOffset + 4 * n, !bigEnd);\n        }\n\n        return vals;\n      }\n\n    case 10:\n      // signed rational, two slongs, first is numerator, second is denominator\n      if (numValues === 1) {\n        return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset + 4, !bigEnd);\n      } else {\n        vals = [];\n\n        for (n = 0; n < numValues; n++) {\n          vals[n] = file.getInt32(valueOffset + 8 * n, !bigEnd) / file.getInt32(valueOffset + 4 + 8 * n, !bigEnd);\n        }\n\n        return vals;\n      }\n\n  }\n}\n\nfunction getStringFromDB(buffer, start, length) {\n  var outstr = '';\n\n  for (var n = start; n < start + length; n++) {\n    outstr += String.fromCharCode(buffer.getUint8(n));\n  }\n\n  return outstr;\n}\n\nfunction readEXIFData(file, start) {\n  if (getStringFromDB(file, start, 4) !== 'Exif') {\n    return false;\n  }\n\n  var bigEnd;\n  var tags;\n  var tag;\n  var exifData;\n  var gpsData;\n  var tiffOffset = start + 6; // test for TIFF validity and endianness\n\n  if (file.getUint16(tiffOffset) === 0x4949) {\n    bigEnd = false;\n  } else if (file.getUint16(tiffOffset) === 0x4D4D) {\n    bigEnd = true;\n  } else {\n    return false;\n  }\n\n  if (file.getUint16(tiffOffset + 2, !bigEnd) !== 0x002A) {\n    return false;\n  }\n\n  var firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd);\n\n  if (firstIFDOffset < 0x00000008) {\n    return false;\n  }\n\n  tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, TiffTags, bigEnd);\n\n  if (tags.ExifIFDPointer) {\n    exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd);\n\n    for (tag in exifData) {\n      switch (tag) {\n        case 'LightSource':\n        case 'Flash':\n        case 'MeteringMode':\n        case 'ExposureProgram':\n        case 'SensingMethod':\n        case 'SceneCaptureType':\n        case 'SceneType':\n        case 'CustomRendered':\n        case 'WhiteBalance':\n        case 'GainControl':\n        case 'Contrast':\n        case 'Saturation':\n        case 'Sharpness':\n        case 'SubjectDistanceRange':\n        case 'FileSource':\n          exifData[tag] = StringValues[tag][exifData[tag]];\n          break;\n\n        case 'ExifVersion':\n        case 'FlashpixVersion':\n          exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], exifData[tag][3]);\n          break;\n\n        case 'ComponentsConfiguration':\n          exifData[tag] = StringValues.Components[exifData[tag][0]] + StringValues.Components[exifData[tag][1]] + StringValues.Components[exifData[tag][2]] + StringValues.Components[exifData[tag][3]];\n          break;\n      }\n\n      tags[tag] = exifData[tag];\n    }\n  }\n\n  if (tags.GPSInfoIFDPointer) {\n    gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd);\n\n    for (tag in gpsData) {\n      switch (tag) {\n        case 'GPSVersionID':\n          gpsData[tag] = gpsData[tag][0] + '.' + gpsData[tag][1] + '.' + gpsData[tag][2] + '.' + gpsData[tag][3];\n          break;\n      }\n\n      tags[tag] = gpsData[tag];\n    }\n  }\n\n  return tags;\n}\n\nfunction getData(img, callback) {\n  if ((self.Image && img instanceof self.Image || self.HTMLImageElement && img instanceof self.HTMLImageElement) && !img.complete) {\n    return false;\n  }\n\n  if (!imageHasData(img)) {\n    getImageData(img, callback);\n  } else {\n    if (callback) {\n      callback.call(img);\n    }\n  }\n\n  return true;\n}\n\nfunction getTag(img, tag) {\n  if (!imageHasData(img)) return;\n  return img.exifdata[tag];\n}\n\nfunction getAllTags(img) {\n  if (!imageHasData(img)) return {};\n  return img.exifdata;\n}\n\nmodule.exports = {\n  getAllTags: getAllTags,\n  getData: getData,\n  getTag: getTag\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/thumbnail-generator/lib/exif.js?");

/***/ }),

/***/ "./node_modules/@uppy/thumbnail-generator/lib/image-orientations.js":
/*!**************************************************************************!*\
  !*** ./node_modules/@uppy/thumbnail-generator/lib/image-orientations.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var ORIENTATIONS = {\n  1: {\n    rotation: 0,\n    xScale: 1,\n    yScale: 1\n  },\n  2: {\n    rotation: 0,\n    xScale: -1,\n    yScale: 1\n  },\n  3: {\n    rotation: 180,\n    xScale: 1,\n    yScale: 1\n  },\n  4: {\n    rotation: 180,\n    xScale: -1,\n    yScale: 1\n  },\n  5: {\n    rotation: 90,\n    xScale: 1,\n    yScale: -1\n  },\n  6: {\n    rotation: 90,\n    xScale: 1,\n    yScale: 1\n  },\n  7: {\n    rotation: 270,\n    xScale: 1,\n    yScale: -1\n  },\n  8: {\n    rotation: 270,\n    xScale: 1,\n    yScale: 1\n  }\n};\nmodule.exports = ORIENTATIONS;\n\n//# sourceURL=webpack:///./node_modules/@uppy/thumbnail-generator/lib/image-orientations.js?");

/***/ }),

/***/ "./node_modules/@uppy/thumbnail-generator/lib/index.js":
/*!*************************************************************!*\
  !*** ./node_modules/@uppy/thumbnail-generator/lib/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar dataURItoBlob = __webpack_require__(/*! @uppy/utils/lib/dataURItoBlob */ \"./node_modules/@uppy/utils/lib/dataURItoBlob.js\");\n\nvar isObjectURL = __webpack_require__(/*! @uppy/utils/lib/isObjectURL */ \"./node_modules/@uppy/utils/lib/isObjectURL.js\");\n\nvar isPreviewSupported = __webpack_require__(/*! @uppy/utils/lib/isPreviewSupported */ \"./node_modules/@uppy/utils/lib/isPreviewSupported.js\");\n\nvar ORIENTATIONS = __webpack_require__(/*! ./image-orientations */ \"./node_modules/@uppy/thumbnail-generator/lib/image-orientations.js\");\n\nvar Exif = __webpack_require__(/*! ./exif */ \"./node_modules/@uppy/thumbnail-generator/lib/exif.js\");\n/**\n * The Thumbnail Generator plugin\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(ThumbnailGenerator, _Plugin);\n\n  function ThumbnailGenerator(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n\n    _this.onFileAdded = function (file) {\n      if (!file.preview && isPreviewSupported(file.type) && !file.isRemote) {\n        _this.addToQueue(file);\n      }\n    };\n\n    _this.onFileRemoved = function (file) {\n      var index = _this.queue.indexOf(file);\n\n      if (index !== -1) {\n        _this.queue.splice(index, 1);\n      } // Clean up object URLs.\n\n\n      if (file.preview && isObjectURL(file.preview)) {\n        URL.revokeObjectURL(file.preview);\n      }\n    };\n\n    _this.onRestored = function () {\n      var _this$uppy$getState = _this.uppy.getState(),\n          files = _this$uppy$getState.files;\n\n      var fileIDs = Object.keys(files);\n      fileIDs.forEach(function (fileID) {\n        var file = _this.uppy.getFile(fileID);\n\n        if (!file.isRestored) return; // Only add blob URLs; they are likely invalid after being restored.\n\n        if (!file.preview || isObjectURL(file.preview)) {\n          _this.addToQueue(file);\n        }\n      });\n    };\n\n    _this.waitUntilAllProcessed = function (fileIDs) {\n      fileIDs.forEach(function (fileID) {\n        var file = _this.uppy.getFile(fileID);\n\n        _this.uppy.emit('preprocess-progress', file, {\n          mode: 'indeterminate',\n          message: _this.i18n('generatingThumbnails')\n        });\n      });\n\n      var emitPreprocessCompleteForAll = function emitPreprocessCompleteForAll() {\n        fileIDs.forEach(function (fileID) {\n          var file = _this.uppy.getFile(fileID);\n\n          _this.uppy.emit('preprocess-complete', file);\n        });\n      };\n\n      return new Promise(function (resolve, reject) {\n        if (_this.queueProcessing) {\n          _this.uppy.once('thumbnail:all-generated', function () {\n            emitPreprocessCompleteForAll();\n            resolve();\n          });\n        } else {\n          emitPreprocessCompleteForAll();\n          resolve();\n        }\n      });\n    };\n\n    _this.type = 'modifier';\n    _this.id = _this.opts.id || 'ThumbnailGenerator';\n    _this.title = 'Thumbnail Generator';\n    _this.queue = [];\n    _this.queueProcessing = false;\n    _this.defaultThumbnailDimension = 200;\n    _this.defaultLocale = {\n      strings: {\n        generatingThumbnails: 'Generating thumbnails...'\n      }\n    };\n    var defaultOptions = {\n      thumbnailWidth: null,\n      thumbnailHeight: null,\n      waitForThumbnailsBeforeUpload: false\n    };\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n\n    _this.i18nInit();\n\n    return _this;\n  }\n\n  var _proto = ThumbnailGenerator.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  }\n  /**\n   * Create a thumbnail for the given Uppy file object.\n   *\n   * @param {{data: Blob}} file\n   * @param {number} targetWidth\n   * @param {number} targetHeight\n   * @returns {Promise}\n   */\n  ;\n\n  _proto.createThumbnail = function createThumbnail(file, targetWidth, targetHeight) {\n    var _this2 = this;\n\n    var originalUrl = URL.createObjectURL(file.data);\n    var onload = new Promise(function (resolve, reject) {\n      var image = new Image();\n      image.src = originalUrl;\n      image.addEventListener('load', function () {\n        URL.revokeObjectURL(originalUrl);\n        resolve(image);\n      });\n      image.addEventListener('error', function (event) {\n        URL.revokeObjectURL(originalUrl);\n        reject(event.error || new Error('Could not create thumbnail'));\n      });\n    });\n    return Promise.all([onload, this.getOrientation(file)]).then(function (values) {\n      var image = values[0];\n      var orientation = values[1];\n\n      var dimensions = _this2.getProportionalDimensions(image, targetWidth, targetHeight, orientation.rotation);\n\n      var rotatedImage = _this2.rotateImage(image, orientation);\n\n      var resizedImage = _this2.resizeImage(rotatedImage, dimensions.width, dimensions.height);\n\n      return _this2.canvasToBlob(resizedImage, 'image/png');\n    }).then(function (blob) {\n      return URL.createObjectURL(blob);\n    });\n  }\n  /**\n   * Get the new calculated dimensions for the given image and a target width\n   * or height. If both width and height are given, only width is taken into\n   * account. If neither width nor height are given, the default dimension\n   * is used.\n   */\n  ;\n\n  _proto.getProportionalDimensions = function getProportionalDimensions(img, width, height, rotation) {\n    var aspect = img.width / img.height;\n\n    if (rotation === 90 || rotation === 270) {\n      aspect = img.height / img.width;\n    }\n\n    if (width != null) {\n      return {\n        width: width,\n        height: Math.round(width / aspect)\n      };\n    }\n\n    if (height != null) {\n      return {\n        width: Math.round(height * aspect),\n        height: height\n      };\n    }\n\n    return {\n      width: this.defaultThumbnailDimension,\n      height: Math.round(this.defaultThumbnailDimension / aspect)\n    };\n  };\n\n  _proto.getOrientation = function getOrientation(file) {\n    var _this3 = this;\n\n    return new Promise(function (resolve) {\n      var uppy = _this3.uppy;\n      Exif.getData(file.data, function exifGetDataCallback() {\n        uppy.setFileMeta(file.id, {\n          exifdata: Exif.getAllTags(this)\n        });\n        var orientation = Exif.getTag(this, 'Orientation') || 1;\n        resolve(ORIENTATIONS[orientation]);\n      });\n    });\n  }\n  /**\n   * Make sure the image doesn’t exceed browser/device canvas limits.\n   * For ios with 256 RAM and ie\n   */\n  ;\n\n  _proto.protect = function protect(image) {\n    // https://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element\n    var ratio = image.width / image.height;\n    var maxSquare = 5000000; // ios max canvas square\n\n    var maxSize = 4096; // ie max canvas dimensions\n\n    var maxW = Math.floor(Math.sqrt(maxSquare * ratio));\n    var maxH = Math.floor(maxSquare / Math.sqrt(maxSquare * ratio));\n\n    if (maxW > maxSize) {\n      maxW = maxSize;\n      maxH = Math.round(maxW / ratio);\n    }\n\n    if (maxH > maxSize) {\n      maxH = maxSize;\n      maxW = Math.round(ratio * maxH);\n    }\n\n    if (image.width > maxW) {\n      var canvas = document.createElement('canvas');\n      canvas.width = maxW;\n      canvas.height = maxH;\n      canvas.getContext('2d').drawImage(image, 0, 0, maxW, maxH);\n      image = canvas;\n    }\n\n    return image;\n  }\n  /**\n   * Resize an image to the target `width` and `height`.\n   *\n   * Returns a Canvas with the resized image on it.\n   */\n  ;\n\n  _proto.resizeImage = function resizeImage(image, targetWidth, targetHeight) {\n    // Resizing in steps refactored to use a solution from\n    // https://blog.uploadcare.com/image-resize-in-browsers-is-broken-e38eed08df01\n    image = this.protect(image); // Use the Polyfill for Math.log2() since IE doesn't support log2\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill\n\n    var steps = Math.ceil(Math.log(image.width / targetWidth) * Math.LOG2E);\n\n    if (steps < 1) {\n      steps = 1;\n    }\n\n    var sW = targetWidth * Math.pow(2, steps - 1);\n    var sH = targetHeight * Math.pow(2, steps - 1);\n    var x = 2;\n\n    while (steps--) {\n      var canvas = document.createElement('canvas');\n      canvas.width = sW;\n      canvas.height = sH;\n      canvas.getContext('2d').drawImage(image, 0, 0, sW, sH);\n      image = canvas;\n      sW = Math.round(sW / x);\n      sH = Math.round(sH / x);\n    }\n\n    return image;\n  };\n\n  _proto.rotateImage = function rotateImage(image, translate) {\n    var w = image.width;\n    var h = image.height;\n\n    if (translate.rotation === 90 || translate.rotation === 270) {\n      w = image.height;\n      h = image.width;\n    }\n\n    var canvas = document.createElement('canvas');\n    canvas.width = w;\n    canvas.height = h;\n    var context = canvas.getContext('2d');\n    context.translate(w / 2, h / 2);\n    context.rotate(translate.rotation * Math.PI / 180);\n    context.scale(translate.xScale, translate.yScale);\n    context.drawImage(image, -image.width / 2, -image.height / 2, image.width, image.height);\n    return canvas;\n  }\n  /**\n   * Save a <canvas> element's content to a Blob object.\n   *\n   * @param {HTMLCanvasElement} canvas\n   * @returns {Promise}\n   */\n  ;\n\n  _proto.canvasToBlob = function canvasToBlob(canvas, type, quality) {\n    try {\n      canvas.getContext('2d').getImageData(0, 0, 1, 1);\n    } catch (err) {\n      if (err.code === 18) {\n        return Promise.reject(new Error('cannot read image, probably an svg with external resources'));\n      }\n    }\n\n    if (canvas.toBlob) {\n      return new Promise(function (resolve) {\n        canvas.toBlob(resolve, type, quality);\n      }).then(function (blob) {\n        if (blob === null) {\n          throw new Error('cannot read image, probably an svg with external resources');\n        }\n\n        return blob;\n      });\n    }\n\n    return Promise.resolve().then(function () {\n      return dataURItoBlob(canvas.toDataURL(type, quality), {});\n    }).then(function (blob) {\n      if (blob === null) {\n        throw new Error('could not extract blob, probably an old browser');\n      }\n\n      return blob;\n    });\n  }\n  /**\n   * Set the preview URL for a file.\n   */\n  ;\n\n  _proto.setPreviewURL = function setPreviewURL(fileID, preview) {\n    this.uppy.setFileState(fileID, {\n      preview: preview\n    });\n  };\n\n  _proto.addToQueue = function addToQueue(item) {\n    this.queue.push(item);\n\n    if (this.queueProcessing === false) {\n      this.processQueue();\n    }\n  };\n\n  _proto.processQueue = function processQueue() {\n    var _this4 = this;\n\n    this.queueProcessing = true;\n\n    if (this.queue.length > 0) {\n      var current = this.queue.shift();\n      return this.requestThumbnail(current).catch(function (err) {}) // eslint-disable-line handle-callback-err\n      .then(function () {\n        return _this4.processQueue();\n      });\n    } else {\n      this.queueProcessing = false;\n      this.uppy.log('[ThumbnailGenerator] Emptied thumbnail queue');\n      this.uppy.emit('thumbnail:all-generated');\n    }\n  };\n\n  _proto.requestThumbnail = function requestThumbnail(file) {\n    var _this5 = this;\n\n    if (isPreviewSupported(file.type) && !file.isRemote) {\n      return this.createThumbnail(file, this.opts.thumbnailWidth, this.opts.thumbnailHeight).then(function (preview) {\n        _this5.setPreviewURL(file.id, preview);\n\n        _this5.uppy.log(\"[ThumbnailGenerator] Generated thumbnail for \" + file.id);\n\n        _this5.uppy.emit('thumbnail:generated', _this5.uppy.getFile(file.id), preview);\n      }).catch(function (err) {\n        _this5.uppy.log(\"[ThumbnailGenerator] Failed thumbnail for \" + file.id + \":\", 'warning');\n\n        _this5.uppy.log(err, 'warning');\n\n        _this5.uppy.emit('thumbnail:error', _this5.uppy.getFile(file.id), err);\n      });\n    }\n\n    return Promise.resolve();\n  };\n\n  _proto.install = function install() {\n    this.uppy.on('file-removed', this.onFileRemoved);\n    this.uppy.on('file-added', this.onFileAdded);\n    this.uppy.on('restored', this.onRestored);\n\n    if (this.opts.waitForThumbnailsBeforeUpload) {\n      this.uppy.addPreProcessor(this.waitUntilAllProcessed);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.uppy.off('file-removed', this.onFileRemoved);\n    this.uppy.off('file-added', this.onFileAdded);\n    this.uppy.off('restored', this.onRestored);\n\n    if (this.opts.waitForThumbnailsBeforeUpload) {\n      this.uppy.removePreProcessor(this.waitUntilAllProcessed);\n    }\n  };\n\n  return ThumbnailGenerator;\n}(Plugin), _class.VERSION = \"1.5.2\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/thumbnail-generator/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/transloadit/lib/Assembly.js":
/*!********************************************************!*\
  !*** ./node_modules/@uppy/transloadit/lib/Assembly.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar io = requireSocketIo;\n\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./node_modules/@uppy/transloadit/node_modules/component-emitter/index.js\");\n\nvar has = __webpack_require__(/*! @uppy/utils/lib/hasProperty */ \"./node_modules/@uppy/utils/lib/hasProperty.js\");\n\nvar parseUrl = __webpack_require__(/*! ./parseUrl */ \"./node_modules/@uppy/transloadit/lib/parseUrl.js\"); // Lazy load socket.io to avoid a console error\n// in IE 10 when the Transloadit plugin is not used.\n// (The console.error call comes from `buffer`. I\n// think we actually don't use that part of socket.io\n// at all…)\n\n\nvar socketIo;\n\nfunction requireSocketIo() {\n  if (!socketIo) {\n    socketIo = __webpack_require__(/*! socket.io-client */ \"./node_modules/socket.io-client/lib/index.js\");\n  }\n\n  return socketIo;\n}\n\nvar ASSEMBLY_UPLOADING = 'ASSEMBLY_UPLOADING';\nvar ASSEMBLY_EXECUTING = 'ASSEMBLY_EXECUTING';\nvar ASSEMBLY_COMPLETED = 'ASSEMBLY_COMPLETED';\nvar statusOrder = [ASSEMBLY_UPLOADING, ASSEMBLY_EXECUTING, ASSEMBLY_COMPLETED];\n/**\n * Check that an assembly status is equal to or larger than some desired status.\n * It checks for things that are larger so that a comparison like this works,\n * when the old assembly status is UPLOADING but the new is FINISHED:\n *\n * !isStatus(oldStatus, ASSEMBLY_EXECUTING) && isStatus(newState, ASSEMBLY_EXECUTING)\n *\n * …so that we can emit the 'executing' event even if the execution step was so\n * fast that we missed it.\n */\n\nfunction isStatus(status, test) {\n  return statusOrder.indexOf(status) >= statusOrder.indexOf(test);\n}\n\nvar TransloaditAssembly =\n/*#__PURE__*/\nfunction (_Emitter) {\n  _inheritsLoose(TransloaditAssembly, _Emitter);\n\n  function TransloaditAssembly(assembly) {\n    var _this;\n\n    _this = _Emitter.call(this) || this; // The current assembly status.\n\n    _this.status = assembly; // The socket.io connection.\n\n    _this.socket = null; // The interval timer for full status updates.\n\n    _this.pollInterval = null; // Whether this assembly has been closed (finished or errored)\n\n    _this.closed = false;\n    return _this;\n  }\n\n  var _proto = TransloaditAssembly.prototype;\n\n  _proto.connect = function connect() {\n    this._connectSocket();\n\n    this._beginPolling();\n  };\n\n  _proto._onFinished = function _onFinished() {\n    this.emit('finished');\n    this.close();\n  };\n\n  _proto._connectSocket = function _connectSocket() {\n    var _this2 = this;\n\n    var parsed = parseUrl(this.status.websocket_url);\n    var socket = io().connect(parsed.origin, {\n      transports: ['websocket'],\n      path: parsed.pathname\n    });\n    socket.on('connect', function () {\n      socket.emit('assembly_connect', {\n        id: _this2.status.assembly_id\n      });\n\n      _this2.emit('connect');\n    });\n    socket.on('error', function () {\n      socket.disconnect();\n      _this2.socket = null;\n    });\n    socket.on('assembly_finished', function () {\n      _this2._onFinished();\n    });\n    socket.on('assembly_upload_finished', function (file) {\n      _this2.emit('upload', file);\n\n      _this2.status.uploads.push(file);\n    });\n    socket.on('assembly_uploading_finished', function () {\n      _this2.emit('executing');\n    });\n    socket.on('assembly_upload_meta_data_extracted', function () {\n      _this2.emit('metadata');\n\n      _this2._fetchStatus({\n        diff: false\n      });\n    });\n    socket.on('assembly_result_finished', function (stepName, result) {\n      _this2.emit('result', stepName, result);\n\n      if (!_this2.status.results[stepName]) {\n        _this2.status.results[stepName] = [];\n      }\n\n      _this2.status.results[stepName].push(result);\n    });\n    socket.on('assembly_error', function (err) {\n      _this2._onError(err); // Refetch for updated status code\n\n\n      _this2._fetchStatus({\n        diff: false\n      });\n    });\n    this.socket = socket;\n  };\n\n  _proto._onError = function _onError(err) {\n    this.emit('error', _extends(new Error(err.message), err));\n  }\n  /**\n   * Begin polling for assembly status changes. This sends a request to the\n   * assembly status endpoint every so often, if the socket is not connected.\n   * If the socket connection fails or takes a long time, we won't miss any\n   * events.\n   */\n  ;\n\n  _proto._beginPolling = function _beginPolling() {\n    var _this3 = this;\n\n    this.pollInterval = setInterval(function () {\n      if (!_this3.socket || !_this3.socket.connected) {\n        _this3._fetchStatus();\n      }\n    }, 2000);\n  }\n  /**\n   * Reload assembly status. Useful if the socket doesn't work.\n   *\n   * Pass `diff: false` to avoid emitting diff events, instead only emitting\n   * 'status'.\n   */\n  ;\n\n  _proto._fetchStatus = function _fetchStatus(_temp) {\n    var _this4 = this;\n\n    var _ref = _temp === void 0 ? {} : _temp,\n        _ref$diff = _ref.diff,\n        diff = _ref$diff === void 0 ? true : _ref$diff;\n\n    return fetch(this.status.assembly_ssl_url).then(function (response) {\n      return response.json();\n    }).then(function (status) {\n      // Avoid updating if we closed during this request's lifetime.\n      if (_this4.closed) return;\n\n      _this4.emit('status', status);\n\n      if (diff) {\n        _this4.updateStatus(status);\n      } else {\n        _this4.status = status;\n      }\n    });\n  };\n\n  _proto.update = function update() {\n    return this._fetchStatus({\n      diff: true\n    });\n  }\n  /**\n   * Update this assembly's status with a full new object. Events will be\n   * emitted for status changes, new files, and new results.\n   *\n   * @param {object} next The new assembly status object.\n   */\n  ;\n\n  _proto.updateStatus = function updateStatus(next) {\n    this._diffStatus(this.status, next);\n\n    this.status = next;\n  }\n  /**\n   * Diff two assembly statuses, and emit the events necessary to go from `prev`\n   * to `next`.\n   *\n   * @param {object} prev The previous assembly status.\n   * @param {object} next The new assembly status.\n   */\n  ;\n\n  _proto._diffStatus = function _diffStatus(prev, next) {\n    var _this5 = this;\n\n    var prevStatus = prev.ok;\n    var nextStatus = next.ok;\n\n    if (next.error && !prev.error) {\n      return this._onError(next);\n    } // Desired emit order:\n    //  - executing\n    //  - (n × upload)\n    //  - metadata\n    //  - (m × result)\n    //  - finished\n    // The below checks run in this order, that way even if we jump from\n    // UPLOADING straight to FINISHED all the events are emitted as expected.\n\n\n    var nowExecuting = isStatus(nextStatus, ASSEMBLY_EXECUTING) && !isStatus(prevStatus, ASSEMBLY_EXECUTING);\n\n    if (nowExecuting) {\n      // Without WebSockets, this is our only way to tell if uploading finished.\n      // Hence, we emit this just before the 'upload's and before the 'metadata'\n      // event for the most intuitive ordering, corresponding to the _usual_\n      // ordering (if not guaranteed) that you'd get on the WebSocket.\n      this.emit('executing');\n    } // Find new uploaded files.\n\n\n    Object.keys(next.uploads).filter(function (upload) {\n      return !has(prev.uploads, upload);\n    }).map(function (upload) {\n      return next.uploads[upload];\n    }).forEach(function (upload) {\n      _this5.emit('upload', upload);\n    });\n\n    if (nowExecuting) {\n      this.emit('metadata');\n    } // Find new results.\n\n\n    Object.keys(next.results).forEach(function (stepName) {\n      var nextResults = next.results[stepName];\n      var prevResults = prev.results[stepName];\n      nextResults.filter(function (n) {\n        return !prevResults || !prevResults.some(function (p) {\n          return p.id === n.id;\n        });\n      }).forEach(function (result) {\n        _this5.emit('result', stepName, result);\n      });\n    });\n\n    if (isStatus(nextStatus, ASSEMBLY_COMPLETED) && !isStatus(prevStatus, ASSEMBLY_COMPLETED)) {\n      this.emit('finished');\n    }\n  }\n  /**\n   * Stop updating this assembly.\n   */\n  ;\n\n  _proto.close = function close() {\n    this.closed = true;\n\n    if (this.socket) {\n      this.socket.disconnect();\n      this.socket = null;\n    }\n\n    clearInterval(this.pollInterval);\n  };\n\n  return TransloaditAssembly;\n}(Emitter);\n\nmodule.exports = TransloaditAssembly;\n\n//# sourceURL=webpack:///./node_modules/@uppy/transloadit/lib/Assembly.js?");

/***/ }),

/***/ "./node_modules/@uppy/transloadit/lib/AssemblyOptions.js":
/*!***************************************************************!*\
  !*** ./node_modules/@uppy/transloadit/lib/AssemblyOptions.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Check that Assembly parameters are present and include all required fields.\n */\nfunction validateParams(params) {\n  if (!params) {\n    throw new Error('Transloadit: The `params` option is required.');\n  }\n\n  if (typeof params === 'string') {\n    try {\n      params = JSON.parse(params);\n    } catch (err) {\n      // Tell the user that this is not an Uppy bug!\n      err.message = 'Transloadit: The `params` option is a malformed JSON string: ' + err.message;\n      throw err;\n    }\n  }\n\n  if (!params.auth || !params.auth.key) {\n    throw new Error('Transloadit: The `params.auth.key` option is required. ' + 'You can find your Transloadit API key at https://transloadit.com/account/api-settings.');\n  }\n}\n/**\n * Turn Transloadit plugin options and a list of files into a list of Assembly\n * options.\n */\n\n\nvar AssemblyOptions =\n/*#__PURE__*/\nfunction () {\n  function AssemblyOptions(files, opts) {\n    this.files = files;\n    this.opts = opts;\n  }\n  /**\n   * Normalize Uppy-specific Assembly option features to a Transloadit-\n   * compatible object.\n   */\n\n\n  var _proto = AssemblyOptions.prototype;\n\n  _proto._normalizeAssemblyOptions = function _normalizeAssemblyOptions(file, assemblyOptions) {\n    if (Array.isArray(assemblyOptions.fields)) {\n      var fieldNames = assemblyOptions.fields;\n      assemblyOptions.fields = {};\n      fieldNames.forEach(function (fieldName) {\n        assemblyOptions.fields[fieldName] = file.meta[fieldName];\n      });\n    }\n\n    if (!assemblyOptions.fields) {\n      assemblyOptions.fields = {};\n    }\n\n    return assemblyOptions;\n  }\n  /**\n   * Get Assembly options for a file.\n   */\n  ;\n\n  _proto._getAssemblyOptions = function _getAssemblyOptions(file) {\n    var _this = this;\n\n    var options = this.opts;\n    return Promise.resolve().then(function () {\n      return options.getAssemblyOptions(file, options);\n    }).then(function (assemblyOptions) {\n      return _this._normalizeAssemblyOptions(file, assemblyOptions);\n    }).then(function (assemblyOptions) {\n      validateParams(assemblyOptions.params);\n      return {\n        fileIDs: [file.id],\n        options: assemblyOptions\n      };\n    });\n  }\n  /**\n   * Combine Assemblies with the same options into a single Assembly for all the\n   * relevant files.\n   */\n  ;\n\n  _proto._dedupe = function _dedupe(list) {\n    var dedupeMap = Object.create(null);\n    list.forEach(function (_ref) {\n      var fileIDs = _ref.fileIDs,\n          options = _ref.options;\n      var id = JSON.stringify(options);\n\n      if (dedupeMap[id]) {\n        var _dedupeMap$id$fileIDs;\n\n        (_dedupeMap$id$fileIDs = dedupeMap[id].fileIDs).push.apply(_dedupeMap$id$fileIDs, fileIDs);\n      } else {\n        dedupeMap[id] = {\n          options: options,\n          fileIDs: [].concat(fileIDs)\n        };\n      }\n    });\n    return Object.keys(dedupeMap).map(function (id) {\n      return dedupeMap[id];\n    });\n  }\n  /**\n   * Generate a set of Assemblies that will handle the upload.\n   * Returns a Promise for an object with keys:\n   *  - fileIDs - an array of file IDs to add to this Assembly\n   *  - options - Assembly options\n   */\n  ;\n\n  _proto.build = function build() {\n    var _this2 = this;\n\n    var options = this.opts;\n\n    if (this.files.length > 0) {\n      return Promise.all(this.files.map(function (file) {\n        return _this2._getAssemblyOptions(file);\n      })).then(function (list) {\n        return _this2._dedupe(list);\n      });\n    }\n\n    if (options.alwaysRunAssembly) {\n      // No files, just generate one Assembly\n      return Promise.resolve(options.getAssemblyOptions(null, options)).then(function (assemblyOptions) {\n        validateParams(assemblyOptions.params);\n        return [{\n          fileIDs: _this2.files.map(function (file) {\n            return file.id;\n          }),\n          options: assemblyOptions\n        }];\n      });\n    } // If there are no files and we do not `alwaysRunAssembly`,\n    // don't do anything.\n\n\n    return Promise.resolve([]);\n  };\n\n  return AssemblyOptions;\n}();\n\nmodule.exports = AssemblyOptions;\nmodule.exports.validateParams = validateParams;\n\n//# sourceURL=webpack:///./node_modules/@uppy/transloadit/lib/AssemblyOptions.js?");

/***/ }),

/***/ "./node_modules/@uppy/transloadit/lib/AssemblyWatcher.js":
/*!***************************************************************!*\
  !*** ./node_modules/@uppy/transloadit/lib/AssemblyWatcher.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./node_modules/@uppy/transloadit/node_modules/component-emitter/index.js\");\n/**\n * Track completion of multiple assemblies.\n *\n * Emits 'assembly-complete' when an assembly completes.\n * Emits 'assembly-error' when an assembly fails.\n * Exposes a `.promise` property that resolves when all assemblies have\n * completed (or failed).\n */\n\n\nvar TransloaditAssemblyWatcher =\n/*#__PURE__*/\nfunction (_Emitter) {\n  _inheritsLoose(TransloaditAssemblyWatcher, _Emitter);\n\n  function TransloaditAssemblyWatcher(uppy, assemblyIDs) {\n    var _this;\n\n    _this = _Emitter.call(this) || this;\n    _this._uppy = uppy;\n    _this._assemblyIDs = assemblyIDs;\n    _this._remaining = assemblyIDs.length;\n    _this.promise = new Promise(function (resolve, reject) {\n      _this._resolve = resolve;\n      _this._reject = reject;\n    });\n    _this._onAssemblyComplete = _this._onAssemblyComplete.bind(_assertThisInitialized(_this));\n    _this._onAssemblyCancel = _this._onAssemblyCancel.bind(_assertThisInitialized(_this));\n    _this._onAssemblyError = _this._onAssemblyError.bind(_assertThisInitialized(_this));\n    _this._onImportError = _this._onImportError.bind(_assertThisInitialized(_this));\n\n    _this._addListeners();\n\n    return _this;\n  }\n  /**\n   * Are we watching this assembly ID?\n   */\n\n\n  var _proto = TransloaditAssemblyWatcher.prototype;\n\n  _proto._watching = function _watching(id) {\n    return this._assemblyIDs.indexOf(id) !== -1;\n  };\n\n  _proto._onAssemblyComplete = function _onAssemblyComplete(assembly) {\n    if (!this._watching(assembly.assembly_id)) {\n      return;\n    }\n\n    this._uppy.log(\"[Transloadit] AssemblyWatcher: Got Assembly finish \" + assembly.assembly_id);\n\n    this.emit('assembly-complete', assembly.assembly_id);\n\n    this._checkAllComplete();\n  };\n\n  _proto._onAssemblyCancel = function _onAssemblyCancel(assembly) {\n    if (!this._watching(assembly.assembly_id)) {\n      return;\n    }\n\n    this._checkAllComplete();\n  };\n\n  _proto._onAssemblyError = function _onAssemblyError(assembly, error) {\n    if (!this._watching(assembly.assembly_id)) {\n      return;\n    }\n\n    this._uppy.log(\"[Transloadit] AssemblyWatcher: Got Assembly error \" + assembly.assembly_id);\n\n    this._uppy.log(error);\n\n    this.emit('assembly-error', assembly.assembly_id, error);\n\n    this._checkAllComplete();\n  };\n\n  _proto._onImportError = function _onImportError(assembly, fileID, error) {\n    if (!this._watching(assembly.assembly_id)) {\n      return;\n    } // Not sure if we should be doing something when it's just one file failing.\n    // ATM, the only options are 1) ignoring or 2) failing the entire upload.\n    // I think failing the upload is better than silently ignoring.\n    // In the future we should maybe have a way to resolve uploads with some failures,\n    // like returning an object with `{ successful, failed }` uploads.\n\n\n    this._onAssemblyError(assembly, error);\n  };\n\n  _proto._checkAllComplete = function _checkAllComplete() {\n    this._remaining -= 1;\n\n    if (this._remaining === 0) {\n      // We're done, these listeners can be removed\n      this._removeListeners();\n\n      this._resolve();\n    }\n  };\n\n  _proto._removeListeners = function _removeListeners() {\n    this._uppy.off('transloadit:complete', this._onAssemblyComplete);\n\n    this._uppy.off('transloadit:assembly-cancel', this._onAssemblyCancel);\n\n    this._uppy.off('transloadit:assembly-error', this._onAssemblyError);\n\n    this._uppy.off('transloadit:import-error', this._onImportError);\n  };\n\n  _proto._addListeners = function _addListeners() {\n    this._uppy.on('transloadit:complete', this._onAssemblyComplete);\n\n    this._uppy.on('transloadit:assembly-cancel', this._onAssemblyCancel);\n\n    this._uppy.on('transloadit:assembly-error', this._onAssemblyError);\n\n    this._uppy.on('transloadit:import-error', this._onImportError);\n  };\n\n  return TransloaditAssemblyWatcher;\n}(Emitter);\n\nmodule.exports = TransloaditAssemblyWatcher;\n\n//# sourceURL=webpack:///./node_modules/@uppy/transloadit/lib/AssemblyWatcher.js?");

/***/ }),

/***/ "./node_modules/@uppy/transloadit/lib/Client.js":
/*!******************************************************!*\
  !*** ./node_modules/@uppy/transloadit/lib/Client.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * A Barebones HTTP API client for Transloadit.\n */\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n  function Client(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    this.opts = opts;\n    this._reportError = this._reportError.bind(this);\n    this._headers = {\n      'Transloadit-Client': this.opts.client\n    };\n  }\n  /**\n   * Create a new assembly.\n   *\n   * @param {object} options\n   */\n\n\n  var _proto = Client.prototype;\n\n  _proto.createAssembly = function createAssembly(_ref) {\n    var _this = this;\n\n    var templateId = _ref.templateId,\n        params = _ref.params,\n        fields = _ref.fields,\n        signature = _ref.signature,\n        expectedFiles = _ref.expectedFiles;\n    var data = new FormData();\n    data.append('params', typeof params === 'string' ? params : JSON.stringify(params));\n\n    if (signature) {\n      data.append('signature', signature);\n    }\n\n    Object.keys(fields).forEach(function (key) {\n      data.append(key, fields[key]);\n    });\n    data.append('num_expected_upload_files', expectedFiles);\n    var url = this.opts.service + \"/assemblies\";\n    return fetch(url, {\n      method: 'post',\n      headers: this._headers,\n      body: data\n    }).then(function (response) {\n      return response.json();\n    }).then(function (assembly) {\n      if (assembly.error) {\n        var error = new Error(assembly.error);\n        error.message = assembly.error;\n        error.details = assembly.reason;\n        throw error;\n      }\n\n      return assembly;\n    }).catch(function (err) {\n      return _this._reportError(err, {\n        url: url,\n        type: 'API_ERROR'\n      });\n    });\n  }\n  /**\n   * Reserve resources for a file in an Assembly. Then addFile can be used later.\n   *\n   * @param {object} assembly\n   * @param {UppyFile} file\n   */\n  ;\n\n  _proto.reserveFile = function reserveFile(assembly, file) {\n    var _this2 = this;\n\n    var size = encodeURIComponent(file.size);\n    var url = assembly.assembly_ssl_url + \"/reserve_file?size=\" + size;\n    return fetch(url, {\n      method: 'post',\n      headers: this._headers\n    }).then(function (response) {\n      return response.json();\n    }).catch(function (err) {\n      return _this2._reportError(err, {\n        assembly: assembly,\n        file: file,\n        url: url,\n        type: 'API_ERROR'\n      });\n    });\n  }\n  /**\n   * Import a remote file to an Assembly.\n   *\n   * @param {object} assembly\n   * @param {UppyFile} file\n   */\n  ;\n\n  _proto.addFile = function addFile(assembly, file) {\n    var _this3 = this;\n\n    if (!file.uploadURL) {\n      return Promise.reject(new Error('File does not have an `uploadURL`.'));\n    }\n\n    var size = encodeURIComponent(file.size);\n    var uploadUrl = encodeURIComponent(file.uploadURL);\n    var filename = encodeURIComponent(file.name);\n    var fieldname = 'file';\n    var qs = \"size=\" + size + \"&filename=\" + filename + \"&fieldname=\" + fieldname + \"&s3Url=\" + uploadUrl;\n    var url = assembly.assembly_ssl_url + \"/add_file?\" + qs;\n    return fetch(url, {\n      method: 'post',\n      headers: this._headers\n    }).then(function (response) {\n      return response.json();\n    }).catch(function (err) {\n      return _this3._reportError(err, {\n        assembly: assembly,\n        file: file,\n        url: url,\n        type: 'API_ERROR'\n      });\n    });\n  }\n  /**\n   * Cancel a running Assembly.\n   *\n   * @param {object} assembly\n   */\n  ;\n\n  _proto.cancelAssembly = function cancelAssembly(assembly) {\n    var _this4 = this;\n\n    var url = assembly.assembly_ssl_url;\n    return fetch(url, {\n      method: 'delete',\n      headers: this._headers\n    }).then(function (response) {\n      return response.json();\n    }).catch(function (err) {\n      return _this4._reportError(err, {\n        url: url,\n        type: 'API_ERROR'\n      });\n    });\n  }\n  /**\n   * Get the current status for an assembly.\n   *\n   * @param {string} url The status endpoint of the assembly.\n   */\n  ;\n\n  _proto.getAssemblyStatus = function getAssemblyStatus(url) {\n    var _this5 = this;\n\n    return fetch(url, {\n      headers: this._headers\n    }).then(function (response) {\n      return response.json();\n    }).catch(function (err) {\n      return _this5._reportError(err, {\n        url: url,\n        type: 'STATUS_ERROR'\n      });\n    });\n  };\n\n  _proto.submitError = function submitError(err, _ref2) {\n    var endpoint = _ref2.endpoint,\n        instance = _ref2.instance,\n        assembly = _ref2.assembly;\n    var message = err.details ? err.message + \" (\" + err.details + \")\" : err.message;\n    return fetch('https://status.transloadit.com/client_error', {\n      method: 'post',\n      body: JSON.stringify({\n        endpoint: endpoint,\n        instance: instance,\n        assembly_id: assembly,\n        agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n        client: this.opts.client,\n        error: message\n      })\n    }).then(function (response) {\n      return response.json();\n    });\n  };\n\n  _proto._reportError = function _reportError(err, params) {\n    if (this.opts.errorReporting === false) {\n      throw err;\n    }\n\n    var opts = {\n      type: params.type\n    };\n\n    if (params.assembly) {\n      opts.assembly = params.assembly.assembly_id;\n      opts.instance = params.assembly.instance;\n    }\n\n    if (params.url) {\n      opts.endpoint = params.url;\n    }\n\n    this.submitError(err, opts).catch(function (_) {// not much we can do then is there\n    });\n    throw err;\n  };\n\n  return Client;\n}();\n\n//# sourceURL=webpack:///./node_modules/@uppy/transloadit/lib/Client.js?");

/***/ }),

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

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar Tus = __webpack_require__(/*! @uppy/tus */ \"./node_modules/@uppy/tus/lib/index.js\");\n\nvar Assembly = __webpack_require__(/*! ./Assembly */ \"./node_modules/@uppy/transloadit/lib/Assembly.js\");\n\nvar Client = __webpack_require__(/*! ./Client */ \"./node_modules/@uppy/transloadit/lib/Client.js\");\n\nvar AssemblyOptions = __webpack_require__(/*! ./AssemblyOptions */ \"./node_modules/@uppy/transloadit/lib/AssemblyOptions.js\");\n\nvar AssemblyWatcher = __webpack_require__(/*! ./AssemblyWatcher */ \"./node_modules/@uppy/transloadit/lib/AssemblyWatcher.js\");\n\nfunction defaultGetAssemblyOptions(file, options) {\n  return {\n    params: options.params,\n    signature: options.signature,\n    fields: options.fields\n  };\n}\n\nvar COMPANION = 'https://api2.transloadit.com/companion'; // Regex matching acceptable postMessage() origins for authentication feedback from companion.\n\nvar ALLOWED_COMPANION_PATTERN = /\\.transloadit\\.com$/; // Regex used to check if a Companion address is run by Transloadit.\n\nvar TL_COMPANION = /https?:\\/\\/api2(?:-\\w+)?\\.transloadit\\.com\\/companion/;\nvar TL_UPPY_SERVER = /https?:\\/\\/api2(?:-\\w+)?\\.transloadit\\.com\\/uppy-server/;\n/**\n * Upload files to Transloadit using Tus.\n */\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(Transloadit, _Plugin);\n\n  function Transloadit(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'uploader';\n    _this.id = _this.opts.id || 'Transloadit';\n    _this.title = 'Transloadit';\n    _this.defaultLocale = {\n      strings: {\n        creatingAssembly: 'Preparing upload...',\n        creatingAssemblyFailed: 'Transloadit: Could not create Assembly',\n        encoding: 'Encoding...'\n      }\n    };\n    var defaultOptions = {\n      service: 'https://api2.transloadit.com',\n      errorReporting: true,\n      waitForEncoding: false,\n      waitForMetadata: false,\n      alwaysRunAssembly: false,\n      importFromUploadURLs: false,\n      signature: null,\n      params: null,\n      fields: {},\n      getAssemblyOptions: defaultGetAssemblyOptions,\n      limit: 0\n    };\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n\n    _this.i18nInit();\n\n    _this._prepareUpload = _this._prepareUpload.bind(_assertThisInitialized(_this));\n    _this._afterUpload = _this._afterUpload.bind(_assertThisInitialized(_this));\n    _this._onError = _this._onError.bind(_assertThisInitialized(_this));\n    _this._onTusError = _this._onTusError.bind(_assertThisInitialized(_this));\n    _this._onCancelAll = _this._onCancelAll.bind(_assertThisInitialized(_this));\n    _this._onFileUploadURLAvailable = _this._onFileUploadURLAvailable.bind(_assertThisInitialized(_this));\n    _this._onRestored = _this._onRestored.bind(_assertThisInitialized(_this));\n    _this._getPersistentData = _this._getPersistentData.bind(_assertThisInitialized(_this));\n    var hasCustomAssemblyOptions = _this.opts.getAssemblyOptions !== defaultOptions.getAssemblyOptions;\n\n    if (_this.opts.params) {\n      AssemblyOptions.validateParams(_this.opts.params);\n    } else if (!hasCustomAssemblyOptions) {\n      // Throw the same error that we'd throw if the `params` returned from a\n      // `getAssemblyOptions()` function is null.\n      AssemblyOptions.validateParams(null);\n    }\n\n    _this.client = new Client({\n      service: _this.opts.service,\n      client: _this._getClientVersion(),\n      errorReporting: _this.opts.errorReporting\n    }); // Contains Assembly instances for in-progress Assemblies.\n\n    _this.activeAssemblies = {};\n    return _this;\n  }\n\n  var _proto = Transloadit.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.i18nArray = this.translator.translateArray.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  };\n\n  _proto._getClientVersion = function _getClientVersion() {\n    var _this2 = this;\n\n    var list = [\"uppy-core:\" + this.uppy.constructor.VERSION, \"uppy-transloadit:\" + this.constructor.VERSION, \"uppy-tus:\" + Tus.VERSION];\n\n    var addPluginVersion = function addPluginVersion(pluginName, versionName) {\n      var plugin = _this2.uppy.getPlugin(pluginName);\n\n      if (plugin) {\n        list.push(versionName + \":\" + plugin.constructor.VERSION);\n      }\n    };\n\n    if (this.opts.importFromUploadURLs) {\n      addPluginVersion('XHRUpload', 'uppy-xhr-upload');\n      addPluginVersion('AwsS3', 'uppy-aws-s3');\n      addPluginVersion('AwsS3Multipart', 'uppy-aws-s3-multipart');\n    }\n\n    addPluginVersion('Dropbox', 'uppy-dropbox');\n    addPluginVersion('Facebook', 'uppy-facebook');\n    addPluginVersion('GoogleDrive', 'uppy-google-drive');\n    addPluginVersion('Instagram', 'uppy-instagram');\n    addPluginVersion('OneDrive', 'uppy-onedrive');\n    addPluginVersion('Url', 'uppy-url');\n    return list.join(',');\n  }\n  /**\n   * Attach metadata to files to configure the Tus plugin to upload to Transloadit.\n   * Also use Transloadit's Companion\n   *\n   * See: https://github.com/tus/tusd/wiki/Uploading-to-Transloadit-using-tus#uploading-using-tus\n   *\n   * @param {object} file\n   * @param {object} status\n   */\n  ;\n\n  _proto._attachAssemblyMetadata = function _attachAssemblyMetadata(file, status) {\n    // Add the metadata parameters Transloadit needs.\n    var meta = _extends({}, file.meta, {\n      assembly_url: status.assembly_url,\n      filename: file.name,\n      fieldname: 'file'\n    }); // Add Assembly-specific Tus endpoint.\n\n\n    var tus = _extends({}, file.tus, {\n      endpoint: status.tus_url\n    }); // Set Companion location. We only add this, if 'file' has the attribute\n    // remote, because this is the criteria to identify remote files.\n    // We only replace the hostname for Transloadit's companions, so that\n    // people can also self-host them while still using Transloadit for encoding.\n\n\n    var remote = file.remote;\n\n    if (file.remote && TL_UPPY_SERVER.test(file.remote.companionUrl)) {\n      var err = new Error('The https://api2.transloadit.com/uppy-server endpoint was renamed to ' + 'https://api2.transloadit.com/companion, please update your `companionUrl` ' + 'options accordingly.'); // Explicitly log this error here because it is caught by the `createAssembly`\n      // Promise further along.\n      // That's fine, but createAssembly only shows the informer, we need something a\n      // little more noisy.\n\n      this.uppy.log(err);\n      throw err;\n    }\n\n    if (file.remote && TL_COMPANION.test(file.remote.companionUrl)) {\n      var newHost = status.companion_url.replace(/\\/$/, '');\n      var path = file.remote.url.replace(file.remote.companionUrl, '').replace(/^\\//, '');\n      remote = _extends({}, file.remote, {\n        companionUrl: newHost,\n        url: newHost + \"/\" + path\n      });\n    } // Store the Assembly ID this file is in on the file under the `transloadit` key.\n\n\n    var newFile = _extends({}, file, {\n      transloadit: {\n        assembly: status.assembly_id\n      }\n    }); // Only configure the Tus plugin if we are uploading straight to Transloadit (the default).\n\n\n    if (!this.opts.importFromUploadURLs) {\n      _extends(newFile, {\n        meta: meta,\n        tus: tus,\n        remote: remote\n      });\n    }\n\n    return newFile;\n  };\n\n  _proto._createAssembly = function _createAssembly(fileIDs, uploadID, options) {\n    var _this3 = this;\n\n    this.uppy.log('[Transloadit] create Assembly');\n    return this.client.createAssembly({\n      params: options.params,\n      fields: options.fields,\n      expectedFiles: fileIDs.length,\n      signature: options.signature\n    }).then(function (newAssembly) {\n      var _extends2, _extends3;\n\n      var assembly = new Assembly(newAssembly);\n      var status = assembly.status;\n\n      var _this3$getPluginState = _this3.getPluginState(),\n          assemblies = _this3$getPluginState.assemblies,\n          uploadsAssemblies = _this3$getPluginState.uploadsAssemblies;\n\n      _this3.setPluginState({\n        // Store the Assembly status.\n        assemblies: _extends({}, assemblies, (_extends2 = {}, _extends2[status.assembly_id] = status, _extends2)),\n        // Store the list of Assemblies related to this upload.\n        uploadsAssemblies: _extends({}, uploadsAssemblies, (_extends3 = {}, _extends3[uploadID] = [].concat(uploadsAssemblies[uploadID], [status.assembly_id]), _extends3))\n      });\n\n      var _this3$uppy$getState = _this3.uppy.getState(),\n          files = _this3$uppy$getState.files;\n\n      var updatedFiles = {};\n      fileIDs.forEach(function (id) {\n        updatedFiles[id] = _this3._attachAssemblyMetadata(_this3.uppy.getFile(id), status);\n      });\n\n      _this3.uppy.setState({\n        files: _extends({}, files, {}, updatedFiles)\n      });\n\n      _this3.uppy.emit('transloadit:assembly-created', status, fileIDs);\n\n      _this3._connectAssembly(assembly);\n\n      _this3.uppy.log(\"[Transloadit] Created Assembly \" + status.assembly_id);\n\n      return assembly;\n    }).catch(function (err) {\n      err.message = _this3.i18n('creatingAssemblyFailed') + \": \" + err.message; // Reject the promise.\n\n      throw err;\n    });\n  };\n\n  _proto._shouldWaitAfterUpload = function _shouldWaitAfterUpload() {\n    return this.opts.waitForEncoding || this.opts.waitForMetadata;\n  }\n  /**\n   * Used when `importFromUploadURLs` is enabled: reserves all files in\n   * the Assembly.\n   */\n  ;\n\n  _proto._reserveFiles = function _reserveFiles(assembly, fileIDs) {\n    var _this4 = this;\n\n    return Promise.all(fileIDs.map(function (fileID) {\n      var file = _this4.uppy.getFile(fileID);\n\n      return _this4.client.reserveFile(assembly, file);\n    }));\n  }\n  /**\n   * Used when `importFromUploadURLs` is enabled: adds files to the Assembly\n   * once they have been fully uploaded.\n   */\n  ;\n\n  _proto._onFileUploadURLAvailable = function _onFileUploadURLAvailable(file) {\n    var _this5 = this;\n\n    if (!file || !file.transloadit || !file.transloadit.assembly) {\n      return;\n    }\n\n    var _this$getPluginState = this.getPluginState(),\n        assemblies = _this$getPluginState.assemblies;\n\n    var assembly = assemblies[file.transloadit.assembly];\n    this.client.addFile(assembly, file).catch(function (err) {\n      _this5.uppy.log(err);\n\n      _this5.uppy.emit('transloadit:import-error', assembly, file.id, err);\n    });\n  };\n\n  _proto._findFile = function _findFile(uploadedFile) {\n    var files = this.uppy.getFiles();\n\n    for (var i = 0; i < files.length; i++) {\n      var file = files[i]; // Completed file upload.\n\n      if (file.uploadURL === uploadedFile.tus_upload_url) {\n        return file;\n      } // In-progress file upload.\n\n\n      if (file.tus && file.tus.uploadUrl === uploadedFile.tus_upload_url) {\n        return file;\n      }\n\n      if (!uploadedFile.is_tus_file) {\n        // Fingers-crossed check for non-tus uploads, eg imported from S3.\n        if (file.name === uploadedFile.name && file.size === uploadedFile.size) {\n          return file;\n        }\n      }\n    }\n  };\n\n  _proto._onFileUploadComplete = function _onFileUploadComplete(assemblyId, uploadedFile) {\n    var _extends4;\n\n    var state = this.getPluginState();\n\n    var file = this._findFile(uploadedFile);\n\n    if (!file) {\n      this.uppy.log('[Transloadit] Couldn’t file the file, it was likely removed in the process');\n      return;\n    }\n\n    this.setPluginState({\n      files: _extends({}, state.files, (_extends4 = {}, _extends4[uploadedFile.id] = {\n        assembly: assemblyId,\n        id: file.id,\n        uploadedFile: uploadedFile\n      }, _extends4))\n    });\n    this.uppy.emit('transloadit:upload', uploadedFile, this.getAssembly(assemblyId));\n  }\n  /**\n   * Callback when a new Assembly result comes in.\n   *\n   * @param {string} assemblyId\n   * @param {string} stepName\n   * @param {object} result\n   */\n  ;\n\n  _proto._onResult = function _onResult(assemblyId, stepName, result) {\n    var state = this.getPluginState();\n    var file = state.files[result.original_id]; // The `file` may not exist if an import robot was used instead of a file upload.\n\n    result.localId = file ? file.id : null;\n    var entry = {\n      result: result,\n      stepName: stepName,\n      id: result.id,\n      assembly: assemblyId\n    };\n    this.setPluginState({\n      results: [].concat(state.results, [entry])\n    });\n    this.uppy.emit('transloadit:result', stepName, result, this.getAssembly(assemblyId));\n  }\n  /**\n   * When an Assembly has finished processing, get the final state\n   * and emit it.\n   *\n   * @param {object} status\n   */\n  ;\n\n  _proto._onAssemblyFinished = function _onAssemblyFinished(status) {\n    var _this6 = this;\n\n    var url = status.assembly_ssl_url;\n    this.client.getAssemblyStatus(url).then(function (finalStatus) {\n      var _extends5;\n\n      var state = _this6.getPluginState();\n\n      _this6.setPluginState({\n        assemblies: _extends({}, state.assemblies, (_extends5 = {}, _extends5[finalStatus.assembly_id] = finalStatus, _extends5))\n      });\n\n      _this6.uppy.emit('transloadit:complete', finalStatus);\n    });\n  };\n\n  _proto._cancelAssembly = function _cancelAssembly(assembly) {\n    var _this7 = this;\n\n    return this.client.cancelAssembly(assembly).then(function () {\n      // TODO bubble this through AssemblyWatcher so its event handlers can clean up correctly\n      _this7.uppy.emit('transloadit:assembly-cancelled', assembly);\n    });\n  }\n  /**\n   * When all files are removed, cancel in-progress Assemblies.\n   */\n  ;\n\n  _proto._onCancelAll = function _onCancelAll() {\n    var _this8 = this;\n\n    var _this$getPluginState2 = this.getPluginState(),\n        assemblies = _this$getPluginState2.assemblies;\n\n    var cancelPromises = Object.keys(assemblies).map(function (assemblyID) {\n      var assembly = _this8.getAssembly(assemblyID);\n\n      return _this8._cancelAssembly(assembly);\n    });\n    Promise.all(cancelPromises).catch(function (err) {\n      _this8.uppy.log(err);\n    });\n  }\n  /**\n   * Custom state serialization for the Golden Retriever plugin.\n   * It will pass this back to the `_onRestored` function.\n   *\n   * @param {Function} setData\n   */\n  ;\n\n  _proto._getPersistentData = function _getPersistentData(setData) {\n    var _setData;\n\n    var state = this.getPluginState();\n    var assemblies = state.assemblies;\n    var uploadsAssemblies = state.uploadsAssemblies;\n    setData((_setData = {}, _setData[this.id] = {\n      assemblies: assemblies,\n      uploadsAssemblies: uploadsAssemblies\n    }, _setData));\n  };\n\n  _proto._onRestored = function _onRestored(pluginData) {\n    var _this9 = this;\n\n    var savedState = pluginData && pluginData[this.id] ? pluginData[this.id] : {};\n    var previousAssemblies = savedState.assemblies || {};\n    var uploadsAssemblies = savedState.uploadsAssemblies || {};\n\n    if (Object.keys(uploadsAssemblies).length === 0) {\n      // Nothing to restore.\n      return;\n    } // Convert loaded Assembly statuses to a Transloadit plugin state object.\n\n\n    var restoreState = function restoreState(assemblies) {\n      var files = {};\n      var results = [];\n      Object.keys(assemblies).forEach(function (id) {\n        var status = assemblies[id];\n        status.uploads.forEach(function (uploadedFile) {\n          var file = _this9._findFile(uploadedFile);\n\n          files[uploadedFile.id] = {\n            id: file.id,\n            assembly: id,\n            uploadedFile: uploadedFile\n          };\n        });\n\n        var state = _this9.getPluginState();\n\n        Object.keys(status.results).forEach(function (stepName) {\n          status.results[stepName].forEach(function (result) {\n            var file = state.files[result.original_id];\n            result.localId = file ? file.id : null;\n            results.push({\n              id: result.id,\n              result: result,\n              stepName: stepName,\n              assembly: id\n            });\n          });\n        });\n      });\n\n      _this9.setPluginState({\n        assemblies: assemblies,\n        files: files,\n        results: results,\n        uploadsAssemblies: uploadsAssemblies\n      });\n    }; // Set up the Assembly instances for existing Assemblies.\n\n\n    var restoreAssemblies = function restoreAssemblies() {\n      var _this9$getPluginState = _this9.getPluginState(),\n          assemblies = _this9$getPluginState.assemblies;\n\n      Object.keys(assemblies).forEach(function (id) {\n        var assembly = new Assembly(assemblies[id]);\n\n        _this9._connectAssembly(assembly);\n      });\n    }; // Force-update all Assemblies to check for missed events.\n\n\n    var updateAssemblies = function updateAssemblies() {\n      var _this9$getPluginState2 = _this9.getPluginState(),\n          assemblies = _this9$getPluginState2.assemblies;\n\n      return Promise.all(Object.keys(assemblies).map(function (id) {\n        return _this9.activeAssemblies[id].update();\n      }));\n    }; // Restore all Assembly state.\n\n\n    this.restored = Promise.resolve().then(function () {\n      restoreState(previousAssemblies);\n      restoreAssemblies();\n      return updateAssemblies();\n    });\n    this.restored.then(function () {\n      _this9.restored = null;\n    });\n  };\n\n  _proto._connectAssembly = function _connectAssembly(assembly) {\n    var _this10 = this;\n\n    var status = assembly.status;\n    var id = status.assembly_id;\n    this.activeAssemblies[id] = assembly; // Sync local `assemblies` state\n\n    assembly.on('status', function (newStatus) {\n      var _extends6;\n\n      var _this10$getPluginStat = _this10.getPluginState(),\n          assemblies = _this10$getPluginStat.assemblies;\n\n      _this10.setPluginState({\n        assemblies: _extends({}, assemblies, (_extends6 = {}, _extends6[id] = newStatus, _extends6))\n      });\n    });\n    assembly.on('upload', function (file) {\n      _this10._onFileUploadComplete(id, file);\n    });\n    assembly.on('error', function (error) {\n      error.assembly = assembly.status;\n\n      _this10.uppy.emit('transloadit:assembly-error', assembly.status, error);\n    });\n    assembly.on('executing', function () {\n      _this10.uppy.emit('transloadit:assembly-executing', assembly.status);\n    });\n\n    if (this.opts.waitForEncoding) {\n      assembly.on('result', function (stepName, result) {\n        _this10._onResult(id, stepName, result);\n      });\n    }\n\n    if (this.opts.waitForEncoding) {\n      assembly.on('finished', function () {\n        _this10._onAssemblyFinished(assembly.status);\n      });\n    } else if (this.opts.waitForMetadata) {\n      assembly.on('metadata', function () {\n        _this10._onAssemblyFinished(assembly.status);\n      });\n    } // No need to connect to the socket if the Assembly has completed by now.\n\n\n    if (assembly.ok === 'ASSEMBLY_COMPLETE') {\n      return assembly;\n    } // TODO Do we still need this for anything…?\n    // eslint-disable-next-line no-unused-vars\n\n\n    var connected = new Promise(function (resolve, reject) {\n      assembly.once('connect', resolve);\n      assembly.once('status', resolve);\n      assembly.once('error', reject);\n    }).then(function () {\n      _this10.uppy.log('[Transloadit] Socket is ready');\n    });\n    assembly.connect();\n    return assembly;\n  };\n\n  _proto._prepareUpload = function _prepareUpload(fileIDs, uploadID) {\n    var _this11 = this,\n        _extends7;\n\n    // Only use files without errors\n    fileIDs = fileIDs.filter(function (file) {\n      return !file.error;\n    });\n    fileIDs.forEach(function (fileID) {\n      var file = _this11.uppy.getFile(fileID);\n\n      _this11.uppy.emit('preprocess-progress', file, {\n        mode: 'indeterminate',\n        message: _this11.i18n('creatingAssembly')\n      });\n    });\n\n    var createAssembly = function createAssembly(_ref) {\n      var fileIDs = _ref.fileIDs,\n          options = _ref.options;\n      return _this11._createAssembly(fileIDs, uploadID, options).then(function (assembly) {\n        if (_this11.opts.importFromUploadURLs) {\n          return _this11._reserveFiles(assembly, fileIDs);\n        }\n      }).then(function () {\n        fileIDs.forEach(function (fileID) {\n          var file = _this11.uppy.getFile(fileID);\n\n          _this11.uppy.emit('preprocess-complete', file);\n        });\n      }).catch(function (err) {\n        fileIDs.forEach(function (fileID) {\n          var file = _this11.uppy.getFile(fileID); // Clear preprocessing state when the Assembly could not be created,\n          // otherwise the UI gets confused about the lingering progress keys\n\n\n          _this11.uppy.emit('preprocess-complete', file);\n\n          _this11.uppy.emit('upload-error', file, err);\n        });\n        throw err;\n      });\n    };\n\n    var _this$getPluginState3 = this.getPluginState(),\n        uploadsAssemblies = _this$getPluginState3.uploadsAssemblies;\n\n    this.setPluginState({\n      uploadsAssemblies: _extends({}, uploadsAssemblies, (_extends7 = {}, _extends7[uploadID] = [], _extends7))\n    });\n    var files = fileIDs.map(function (id) {\n      return _this11.uppy.getFile(id);\n    });\n    var assemblyOptions = new AssemblyOptions(files, this.opts);\n    return assemblyOptions.build().then(function (assemblies) {\n      return Promise.all(assemblies.map(createAssembly));\n    }, // If something went wrong before any Assemblies could be created,\n    // clear all processing state.\n    function (err) {\n      fileIDs.forEach(function (fileID) {\n        var file = _this11.uppy.getFile(fileID);\n\n        _this11.uppy.emit('preprocess-complete', file);\n\n        _this11.uppy.emit('upload-error', file, err);\n      });\n      throw err;\n    });\n  };\n\n  _proto._afterUpload = function _afterUpload(fileIDs, uploadID) {\n    var _this12 = this;\n\n    // Only use files without errors\n    fileIDs = fileIDs.filter(function (file) {\n      return !file.error;\n    });\n    var state = this.getPluginState(); // If we're still restoring state, wait for that to be done.\n\n    if (this.restored) {\n      return this.restored.then(function () {\n        return _this12._afterUpload(fileIDs, uploadID);\n      });\n    }\n\n    var assemblyIDs = state.uploadsAssemblies[uploadID]; // If we don't have to wait for encoding metadata or results, we can close\n    // the socket immediately and finish the upload.\n\n    if (!this._shouldWaitAfterUpload()) {\n      assemblyIDs.forEach(function (assemblyID) {\n        var assembly = _this12.activeAssemblies[assemblyID];\n        assembly.close();\n        delete _this12.activeAssemblies[assemblyID];\n      });\n      var assemblies = assemblyIDs.map(function (id) {\n        return _this12.getAssembly(id);\n      });\n      this.uppy.addResultData(uploadID, {\n        transloadit: assemblies\n      });\n      return Promise.resolve();\n    } // If no Assemblies were created for this upload, we also do not have to wait.\n    // There's also no sockets or anything to close, so just return immediately.\n\n\n    if (assemblyIDs.length === 0) {\n      this.uppy.addResultData(uploadID, {\n        transloadit: []\n      });\n      return Promise.resolve();\n    } // AssemblyWatcher tracks completion states of all Assemblies in this upload.\n\n\n    var watcher = new AssemblyWatcher(this.uppy, assemblyIDs);\n    fileIDs.forEach(function (fileID) {\n      var file = _this12.uppy.getFile(fileID);\n\n      _this12.uppy.emit('postprocess-progress', file, {\n        mode: 'indeterminate',\n        message: _this12.i18n('encoding')\n      });\n    });\n    watcher.on('assembly-complete', function (id) {\n      var files = _this12.getAssemblyFiles(id);\n\n      files.forEach(function (file) {\n        _this12.uppy.emit('postprocess-complete', file);\n      });\n    });\n    watcher.on('assembly-error', function (id, error) {\n      // Clear postprocessing state for all our files.\n      var files = _this12.getAssemblyFiles(id);\n\n      files.forEach(function (file) {\n        // TODO Maybe make a postprocess-error event here?\n        _this12.uppy.emit('upload-error', file, error);\n\n        _this12.uppy.emit('postprocess-complete', file);\n      });\n    });\n    return watcher.promise.then(function () {\n      var assemblies = assemblyIDs.map(function (id) {\n        return _this12.getAssembly(id);\n      }); // Remove the Assembly ID list for this upload,\n      // it's no longer going to be used anywhere.\n\n      var state = _this12.getPluginState();\n\n      var uploadsAssemblies = _extends({}, state.uploadsAssemblies);\n\n      delete uploadsAssemblies[uploadID];\n\n      _this12.setPluginState({\n        uploadsAssemblies: uploadsAssemblies\n      });\n\n      _this12.uppy.addResultData(uploadID, {\n        transloadit: assemblies\n      });\n    });\n  };\n\n  _proto._onError = function _onError(err, uploadID) {\n    var _this13 = this;\n\n    this.uppy.log(\"[Transloadit] _onError in upload \" + uploadID);\n    this.uppy.log(err);\n    var state = this.getPluginState();\n    var assemblyIDs = state.uploadsAssemblies[uploadID];\n    assemblyIDs.forEach(function (assemblyID) {\n      if (_this13.activeAssemblies[assemblyID]) {\n        _this13.activeAssemblies[assemblyID].close();\n      }\n    });\n  };\n\n  _proto._onTusError = function _onTusError(err) {\n    if (err && /^tus: /.test(err.message)) {\n      var url = err.originalRequest && err.originalRequest.responseURL ? err.originalRequest.responseURL : null;\n      this.client.submitError(err, {\n        url: url,\n        type: 'TUS_ERROR'\n      }).then(function (_) {// if we can't report the error that sucks\n      });\n    }\n  };\n\n  _proto.install = function install() {\n    this.uppy.addPreProcessor(this._prepareUpload);\n    this.uppy.addPostProcessor(this._afterUpload); // We may need to close socket.io connections on error.\n\n    this.uppy.on('error', this._onError); // Handle cancellation.\n\n    this.uppy.on('cancel-all', this._onCancelAll); // For error reporting.\n\n    this.uppy.on('upload-error', this._onTusError);\n\n    if (this.opts.importFromUploadURLs) {\n      // No uploader needed when importing; instead we take the upload URL from an existing uploader.\n      this.uppy.on('upload-success', this._onFileUploadURLAvailable);\n    } else {\n      this.uppy.use(Tus, {\n        // Disable tus-js-client fingerprinting, otherwise uploading the same file at different times\n        // will upload to an outdated Assembly, and we won't get socket events for it.\n        //\n        // To resume a Transloadit upload, we need to reconnect to the websocket, and the state that's\n        // required to do that is not saved by tus-js-client's fingerprinting. We need the tus URL,\n        // the Assembly URL, and the WebSocket URL, at least. We also need to know _all_ the files that\n        // were added to the Assembly, so we can properly complete it. All that state is handled by\n        // Golden Retriever. So, Golden Retriever is required to do resumability with the Transloadit plugin,\n        // and we disable Tus's default resume implementation to prevent bad behaviours.\n        resume: false,\n        // Disable Companion's retry optimisation; we need to change the endpoint on retry\n        // so it can't just reuse the same tus.Upload instance server-side.\n        useFastRemoteRetry: false,\n        // Only send Assembly metadata to the tus endpoint.\n        metaFields: ['assembly_url', 'filename', 'fieldname'],\n        // Pass the limit option to @uppy/tus\n        limit: this.opts.limit\n      });\n    }\n\n    this.uppy.on('restore:get-data', this._getPersistentData);\n    this.uppy.on('restored', this._onRestored);\n    this.setPluginState({\n      // Contains Assembly status objects, indexed by their ID.\n      assemblies: {},\n      // Contains arrays of Assembly IDs, indexed by the upload ID that they belong to.\n      uploadsAssemblies: {},\n      // Contains file data from Transloadit, indexed by their Transloadit-assigned ID.\n      files: {},\n      // Contains result data from Transloadit.\n      results: []\n    }); // We cannot cancel individual files because Assemblies tend to contain many files.\n\n    var _this$uppy$getState = this.uppy.getState(),\n        capabilities = _this$uppy$getState.capabilities;\n\n    this.uppy.setState({\n      capabilities: _extends({}, capabilities, {\n        individualCancellation: false\n      })\n    });\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.uppy.removePreProcessor(this._prepareUpload);\n    this.uppy.removePostProcessor(this._afterUpload);\n    this.uppy.off('error', this._onError);\n\n    if (this.opts.importFromUploadURLs) {\n      this.uppy.off('upload-success', this._onFileUploadURLAvailable);\n    }\n\n    var _this$uppy$getState2 = this.uppy.getState(),\n        capabilities = _this$uppy$getState2.capabilities;\n\n    this.uppy.setState({\n      capabilities: _extends({}, capabilities, {\n        individualCancellation: true\n      })\n    });\n  };\n\n  _proto.getAssembly = function getAssembly(id) {\n    var _this$getPluginState4 = this.getPluginState(),\n        assemblies = _this$getPluginState4.assemblies;\n\n    return assemblies[id];\n  };\n\n  _proto.getAssemblyFiles = function getAssemblyFiles(assemblyID) {\n    return this.uppy.getFiles().filter(function (file) {\n      return file && file.transloadit && file.transloadit.assembly === assemblyID;\n    });\n  };\n\n  return Transloadit;\n}(Plugin), _class.VERSION = \"1.4.2\", _temp);\nmodule.exports.COMPANION = COMPANION;\nmodule.exports.UPPY_SERVER = COMPANION;\nmodule.exports.COMPANION_PATTERN = ALLOWED_COMPANION_PATTERN;\n\n//# sourceURL=webpack:///./node_modules/@uppy/transloadit/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/transloadit/lib/parseUrl.js":
/*!********************************************************!*\
  !*** ./node_modules/@uppy/transloadit/lib/parseUrl.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function parseUrl(url) {\n  var scheme = /^\\w+:\\/\\//.exec(url);\n  var i = 0;\n\n  if (scheme) {\n    i = scheme[0].length + 1;\n  }\n\n  var slashIndex = url.indexOf('/', i);\n\n  if (slashIndex === -1) {\n    return {\n      origin: url,\n      pathname: '/'\n    };\n  }\n\n  return {\n    origin: url.slice(0, slashIndex),\n    pathname: url.slice(slashIndex)\n  };\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/transloadit/lib/parseUrl.js?");

/***/ }),

/***/ "./node_modules/@uppy/transloadit/node_modules/component-emitter/index.js":
/*!********************************************************************************!*\
  !*** ./node_modules/@uppy/transloadit/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:///./node_modules/@uppy/transloadit/node_modules/component-emitter/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/tus/lib/getFingerprint.js":
/*!******************************************************!*\
  !*** ./node_modules/@uppy/tus/lib/getFingerprint.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var tus = __webpack_require__(/*! tus-js-client */ \"./node_modules/tus-js-client/lib.es5/index.js\");\n\nfunction isCordova() {\n  return typeof window !== 'undefined' && (typeof window.PhoneGap !== 'undefined' || typeof window.Cordova !== 'undefined' || typeof window.cordova !== 'undefined');\n}\n\nfunction isReactNative() {\n  return typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative';\n} // We override tus fingerprint to uppy’s `file.id`, since the `file.id`\n// now also includes `relativePath` for files added from folders.\n// This means you can add 2 identical files, if one is in folder a,\n// the other in folder b — `a/file.jpg` and `b/file.jpg`, when added\n// together with a folder, will be treated as 2 separate files.\n//\n// For React Native and Cordova, we let tus-js-client’s default\n// fingerprint handling take charge.\n\n\nmodule.exports = function getFingerprint(uppyFileObj) {\n  return function (file, options, callback) {\n    if (isCordova() || isReactNative()) {\n      return tus.Upload.defaultOptions.fingerprint(file, options, callback);\n    }\n\n    var uppyFingerprint = ['tus', uppyFileObj.id, options.endpoint].join('-');\n    return callback(null, uppyFingerprint);\n  };\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/tus/lib/getFingerprint.js?");

/***/ }),

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

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar tus = __webpack_require__(/*! tus-js-client */ \"./node_modules/tus-js-client/lib.es5/index.js\");\n\nvar _require2 = __webpack_require__(/*! @uppy/companion-client */ \"./node_modules/@uppy/companion-client/lib/index.js\"),\n    Provider = _require2.Provider,\n    RequestClient = _require2.RequestClient,\n    Socket = _require2.Socket;\n\nvar emitSocketProgress = __webpack_require__(/*! @uppy/utils/lib/emitSocketProgress */ \"./node_modules/@uppy/utils/lib/emitSocketProgress.js\");\n\nvar getSocketHost = __webpack_require__(/*! @uppy/utils/lib/getSocketHost */ \"./node_modules/@uppy/utils/lib/getSocketHost.js\");\n\nvar settle = __webpack_require__(/*! @uppy/utils/lib/settle */ \"./node_modules/@uppy/utils/lib/settle.js\");\n\nvar EventTracker = __webpack_require__(/*! @uppy/utils/lib/EventTracker */ \"./node_modules/@uppy/utils/lib/EventTracker.js\");\n\nvar RateLimitedQueue = __webpack_require__(/*! @uppy/utils/lib/RateLimitedQueue */ \"./node_modules/@uppy/utils/lib/RateLimitedQueue.js\");\n\nvar getFingerprint = __webpack_require__(/*! ./getFingerprint */ \"./node_modules/@uppy/tus/lib/getFingerprint.js\");\n/** @typedef {import('..').TusOptions} TusOptions */\n\n/** @typedef {import('@uppy/core').Uppy} Uppy */\n\n/** @typedef {import('@uppy/core').UppyFile} UppyFile */\n\n/** @typedef {import('@uppy/core').FailedUppyFile<{}>} FailedUppyFile */\n\n/**\n * Extracted from https://github.com/tus/tus-js-client/blob/master/lib/upload.js#L13\n * excepted we removed 'fingerprint' key to avoid adding more dependencies\n *\n * @type {TusOptions}\n */\n\n\nvar tusDefaultOptions = {\n  endpoint: '',\n  resume: true,\n  onProgress: null,\n  onChunkComplete: null,\n  onSuccess: null,\n  onError: null,\n  headers: {},\n  chunkSize: Infinity,\n  withCredentials: false,\n  uploadUrl: null,\n  uploadSize: null,\n  overridePatchMethod: false,\n  retryDelays: null\n};\n/**\n * Tus resumable file uploader\n */\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(Tus, _Plugin);\n\n  /**\n   * @param {Uppy} uppy\n   * @param {TusOptions} opts\n   */\n  function Tus(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'uploader';\n    _this.id = _this.opts.id || 'Tus';\n    _this.title = 'Tus'; // set default options\n\n    var defaultOptions = {\n      resume: true,\n      autoRetry: true,\n      useFastRemoteRetry: true,\n      limit: 0,\n      retryDelays: [0, 1000, 3000, 5000]\n    }; // merge default options with the ones set by user\n\n    /** @type {import(\"..\").TusOptions} */\n\n    _this.opts = _extends({}, defaultOptions, opts);\n    /**\n     * Simultaneous upload limiting is shared across all uploads with this plugin.\n     *\n     * @type {RateLimitedQueue}\n     */\n\n    _this.requests = new RateLimitedQueue(_this.opts.limit);\n    _this.uploaders = Object.create(null);\n    _this.uploaderEvents = Object.create(null);\n    _this.uploaderSockets = Object.create(null);\n    _this.handleResetProgress = _this.handleResetProgress.bind(_assertThisInitialized(_this));\n    _this.handleUpload = _this.handleUpload.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = Tus.prototype;\n\n  _proto.handleResetProgress = function handleResetProgress() {\n    var files = _extends({}, this.uppy.getState().files);\n\n    Object.keys(files).forEach(function (fileID) {\n      // Only clone the file object if it has a Tus `uploadUrl` attached.\n      if (files[fileID].tus && files[fileID].tus.uploadUrl) {\n        var tusState = _extends({}, files[fileID].tus);\n\n        delete tusState.uploadUrl;\n        files[fileID] = _extends({}, files[fileID], {\n          tus: tusState\n        });\n      }\n    });\n    this.uppy.setState({\n      files: files\n    });\n  }\n  /**\n   * Clean up all references for a file's upload: the tus.Upload instance,\n   * any events related to the file, and the Companion WebSocket connection.\n   *\n   * @param {string} fileID\n   */\n  ;\n\n  _proto.resetUploaderReferences = function resetUploaderReferences(fileID, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (this.uploaders[fileID]) {\n      var uploader = this.uploaders[fileID];\n      uploader.abort();\n\n      if (opts.abort) {\n        // to avoid 423 error from tus server, we wait\n        // to be sure the previous request has been aborted before terminating the upload\n        // @todo remove the timeout when this \"wait\" is handled in tus-js-client internally\n        setTimeout(function () {\n          return uploader.abort(true);\n        }, 1000);\n      }\n\n      this.uploaders[fileID] = null;\n    }\n\n    if (this.uploaderEvents[fileID]) {\n      this.uploaderEvents[fileID].remove();\n      this.uploaderEvents[fileID] = null;\n    }\n\n    if (this.uploaderSockets[fileID]) {\n      this.uploaderSockets[fileID].close();\n      this.uploaderSockets[fileID] = null;\n    }\n  }\n  /**\n   * Create a new Tus upload.\n   *\n   * A lot can happen during an upload, so this is quite hard to follow!\n   * - First, the upload is started. If the file was already paused by the time the upload starts, nothing should happen.\n   *   If the `limit` option is used, the upload must be queued onto the `this.requests` queue.\n   *   When an upload starts, we store the tus.Upload instance, and an EventTracker instance that manages the event listeners\n   *   for pausing, cancellation, removal, etc.\n   * - While the upload is in progress, it may be paused or cancelled.\n   *   Pausing aborts the underlying tus.Upload, and removes the upload from the `this.requests` queue. All other state is\n   *   maintained.\n   *   Cancelling removes the upload from the `this.requests` queue, and completely aborts the upload--the tus.Upload instance\n   *   is aborted and discarded, the EventTracker instance is destroyed (removing all listeners).\n   *   Resuming the upload uses the `this.requests` queue as well, to prevent selectively pausing and resuming uploads from\n   *   bypassing the limit.\n   * - After completing an upload, the tus.Upload and EventTracker instances are cleaned up, and the upload is marked as done\n   *   in the `this.requests` queue.\n   * - When an upload completed with an error, the same happens as on successful completion, but the `upload()` promise is rejected.\n   *\n   * When working on this function, keep in mind:\n   *  - When an upload is completed or cancelled for any reason, the tus.Upload and EventTracker instances need to be cleaned up using this.resetUploaderReferences().\n   *  - When an upload is cancelled or paused, for any reason, it needs to be removed from the `this.requests` queue using `queuedRequest.abort()`.\n   *  - When an upload is completed for any reason, including errors, it needs to be marked as such using `queuedRequest.done()`.\n   *  - When an upload is started or resumed, it needs to go through the `this.requests` queue. The `queuedRequest` variable must be updated so the other uses of it are valid.\n   *  - Before replacing the `queuedRequest` variable, the previous `queuedRequest` must be aborted, else it will keep taking up a spot in the queue.\n   *\n   * @param {UppyFile} file for use with upload\n   * @param {number} current file in a queue\n   * @param {number} total number of files in a queue\n   * @returns {Promise<void>}\n   */\n  ;\n\n  _proto.upload = function upload(file, current, total) {\n    var _this2 = this;\n\n    this.resetUploaderReferences(file.id); // Create a new tus upload\n\n    return new Promise(function (resolve, reject) {\n      _this2.uppy.emit('upload-started', file);\n\n      var optsTus = _extends({}, tusDefaultOptions, _this2.opts, // Install file-specific upload overrides.\n      file.tus || {}); // We override tus fingerprint to uppy’s `file.id`, since the `file.id`\n      // now also includes `relativePath` for files added from folders.\n      // This means you can add 2 identical files, if one is in folder a,\n      // the other in folder b.\n\n\n      optsTus.fingerprint = getFingerprint(file);\n\n      optsTus.onError = function (err) {\n        _this2.uppy.log(err);\n\n        _this2.uppy.emit('upload-error', file, err);\n\n        err.message = \"Failed because: \" + err.message;\n\n        _this2.resetUploaderReferences(file.id);\n\n        queuedRequest.done();\n        reject(err);\n      };\n\n      optsTus.onProgress = function (bytesUploaded, bytesTotal) {\n        _this2.onReceiveUploadUrl(file, upload.url);\n\n        _this2.uppy.emit('upload-progress', file, {\n          uploader: _this2,\n          bytesUploaded: bytesUploaded,\n          bytesTotal: bytesTotal\n        });\n      };\n\n      optsTus.onSuccess = function () {\n        var uploadResp = {\n          uploadURL: upload.url\n        };\n\n        _this2.uppy.emit('upload-success', file, uploadResp);\n\n        if (upload.url) {\n          _this2.uppy.log('Download ' + upload.file.name + ' from ' + upload.url);\n        }\n\n        _this2.resetUploaderReferences(file.id);\n\n        queuedRequest.done();\n        resolve(upload);\n      };\n\n      var copyProp = function copyProp(obj, srcProp, destProp) {\n        if (Object.prototype.hasOwnProperty.call(obj, srcProp) && !Object.prototype.hasOwnProperty.call(obj, destProp)) {\n          obj[destProp] = obj[srcProp];\n        }\n      };\n\n      var meta = {};\n      var metaFields = Array.isArray(optsTus.metaFields) ? optsTus.metaFields // Send along all fields by default.\n      : Object.keys(file.meta);\n      metaFields.forEach(function (item) {\n        meta[item] = file.meta[item];\n      }); // tusd uses metadata fields 'filetype' and 'filename'\n\n      copyProp(meta, 'type', 'filetype');\n      copyProp(meta, 'name', 'filename');\n      optsTus.metadata = meta;\n      var upload = new tus.Upload(file.data, optsTus);\n      _this2.uploaders[file.id] = upload;\n      _this2.uploaderEvents[file.id] = new EventTracker(_this2.uppy);\n\n      var queuedRequest = _this2.requests.run(function () {\n        if (!file.isPaused) {\n          upload.start();\n        } // Don't do anything here, the caller will take care of cancelling the upload itself\n        // using resetUploaderReferences(). This is because resetUploaderReferences() has to be\n        // called when this request is still in the queue, and has not been started yet, too. At\n        // that point this cancellation function is not going to be called.\n        // Also, we need to remove the request from the queue _without_ destroying everything\n        // related to this upload to handle pauses.\n\n\n        return function () {};\n      });\n\n      _this2.onFileRemove(file.id, function (targetFileID) {\n        queuedRequest.abort();\n\n        _this2.resetUploaderReferences(file.id, {\n          abort: !!upload.url\n        });\n\n        resolve(\"upload \" + targetFileID + \" was removed\");\n      });\n\n      _this2.onPause(file.id, function (isPaused) {\n        if (isPaused) {\n          // Remove this file from the queue so another file can start in its place.\n          queuedRequest.abort();\n          upload.abort();\n        } else {\n          // Resuming an upload should be queued, else you could pause and then resume a queued upload to make it skip the queue.\n          queuedRequest.abort();\n          queuedRequest = _this2.requests.run(function () {\n            upload.start();\n            return function () {};\n          });\n        }\n      });\n\n      _this2.onPauseAll(file.id, function () {\n        queuedRequest.abort();\n        upload.abort();\n      });\n\n      _this2.onCancelAll(file.id, function () {\n        queuedRequest.abort();\n\n        _this2.resetUploaderReferences(file.id, {\n          abort: !!upload.url\n        });\n\n        resolve(\"upload \" + file.id + \" was canceled\");\n      });\n\n      _this2.onResumeAll(file.id, function () {\n        queuedRequest.abort();\n\n        if (file.error) {\n          upload.abort();\n        }\n\n        queuedRequest = _this2.requests.run(function () {\n          upload.start();\n          return function () {};\n        });\n      });\n    }).catch(function (err) {\n      _this2.uppy.emit('upload-error', file, err);\n\n      throw err;\n    });\n  }\n  /**\n   * @param {UppyFile} file for use with upload\n   * @param {number} current file in a queue\n   * @param {number} total number of files in a queue\n   * @returns {Promise<void>}\n   */\n  ;\n\n  _proto.uploadRemote = function uploadRemote(file, current, total) {\n    var _this3 = this;\n\n    this.resetUploaderReferences(file.id);\n\n    var opts = _extends({}, this.opts);\n\n    if (file.tus) {\n      // Install file-specific upload overrides.\n      _extends(opts, file.tus);\n    }\n\n    this.uppy.emit('upload-started', file);\n    this.uppy.log(file.remote.url);\n\n    if (file.serverToken) {\n      return this.connectToServerSocket(file);\n    }\n\n    return new Promise(function (resolve, reject) {\n      var Client = file.remote.providerOptions.provider ? Provider : RequestClient;\n      var client = new Client(_this3.uppy, file.remote.providerOptions); // !! cancellation is NOT supported at this stage yet\n\n      client.post(file.remote.url, _extends({}, file.remote.body, {\n        endpoint: opts.endpoint,\n        uploadUrl: opts.uploadUrl,\n        protocol: 'tus',\n        size: file.data.size,\n        metadata: file.meta\n      })).then(function (res) {\n        _this3.uppy.setFileState(file.id, {\n          serverToken: res.token\n        });\n\n        file = _this3.uppy.getFile(file.id);\n        return _this3.connectToServerSocket(file);\n      }).then(function () {\n        resolve();\n      }).catch(function (err) {\n        reject(new Error(err));\n      });\n    });\n  }\n  /**\n   * See the comment on the upload() method.\n   *\n   * Additionally, when an upload is removed, completed, or cancelled, we need to close the WebSocket connection. This is handled by the resetUploaderReferences() function, so the same guidelines apply as in upload().\n   *\n   * @param {UppyFile} file\n   */\n  ;\n\n  _proto.connectToServerSocket = function connectToServerSocket(file) {\n    var _this4 = this;\n\n    return new Promise(function (resolve, reject) {\n      var token = file.serverToken;\n      var host = getSocketHost(file.remote.companionUrl);\n      var socket = new Socket({\n        target: host + \"/api/\" + token,\n        autoOpen: false\n      });\n      _this4.uploaderSockets[file.id] = socket;\n      _this4.uploaderEvents[file.id] = new EventTracker(_this4.uppy);\n\n      _this4.onFileRemove(file.id, function () {\n        queuedRequest.abort(); // still send pause event in case we are dealing with older version of companion\n        // @todo don't send pause event in the next major release.\n\n        socket.send('pause', {});\n        socket.send('cancel', {});\n\n        _this4.resetUploaderReferences(file.id);\n\n        resolve(\"upload \" + file.id + \" was removed\");\n      });\n\n      _this4.onPause(file.id, function (isPaused) {\n        if (isPaused) {\n          // Remove this file from the queue so another file can start in its place.\n          queuedRequest.abort();\n          socket.send('pause', {});\n        } else {\n          // Resuming an upload should be queued, else you could pause and then resume a queued upload to make it skip the queue.\n          queuedRequest.abort();\n          queuedRequest = _this4.requests.run(function () {\n            socket.send('resume', {});\n            return function () {};\n          });\n        }\n      });\n\n      _this4.onPauseAll(file.id, function () {\n        queuedRequest.abort();\n        socket.send('pause', {});\n      });\n\n      _this4.onCancelAll(file.id, function () {\n        queuedRequest.abort(); // still send pause event in case we are dealing with older version of companion\n        // @todo don't send pause event in the next major release.\n\n        socket.send('pause', {});\n        socket.send('cancel', {});\n\n        _this4.resetUploaderReferences(file.id);\n\n        resolve(\"upload \" + file.id + \" was canceled\");\n      });\n\n      _this4.onResumeAll(file.id, function () {\n        queuedRequest.abort();\n\n        if (file.error) {\n          socket.send('pause', {});\n        }\n\n        queuedRequest = _this4.requests.run(function () {\n          socket.send('resume', {});\n          return function () {};\n        });\n      });\n\n      _this4.onRetry(file.id, function () {\n        // Only do the retry if the upload is actually in progress;\n        // else we could try to send these messages when the upload is still queued.\n        // We may need a better check for this since the socket may also be closed\n        // for other reasons, like network failures.\n        if (socket.isOpen) {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        }\n      });\n\n      _this4.onRetryAll(file.id, function () {\n        // See the comment in the onRetry() call\n        if (socket.isOpen) {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        }\n      });\n\n      socket.on('progress', function (progressData) {\n        return emitSocketProgress(_this4, progressData, file);\n      });\n      socket.on('error', function (errData) {\n        var message = errData.error.message;\n\n        var error = _extends(new Error(message), {\n          cause: errData.error\n        }); // If the remote retry optimisation should not be used,\n        // close the socket—this will tell companion to clear state and delete the file.\n\n\n        if (!_this4.opts.useFastRemoteRetry) {\n          _this4.resetUploaderReferences(file.id); // Remove the serverToken so that a new one will be created for the retry.\n\n\n          _this4.uppy.setFileState(file.id, {\n            serverToken: null\n          });\n        } else {\n          socket.close();\n        }\n\n        _this4.uppy.emit('upload-error', file, error);\n\n        queuedRequest.done();\n        reject(error);\n      });\n      socket.on('success', function (data) {\n        var uploadResp = {\n          uploadURL: data.url\n        };\n\n        _this4.uppy.emit('upload-success', file, uploadResp);\n\n        _this4.resetUploaderReferences(file.id);\n\n        queuedRequest.done();\n        resolve();\n      });\n\n      var queuedRequest = _this4.requests.run(function () {\n        socket.open();\n\n        if (file.isPaused) {\n          socket.send('pause', {});\n        } // Don't do anything here, the caller will take care of cancelling the upload itself\n        // using resetUploaderReferences(). This is because resetUploaderReferences() has to be\n        // called when this request is still in the queue, and has not been started yet, too. At\n        // that point this cancellation function is not going to be called.\n        // Also, we need to remove the request from the queue _without_ destroying everything\n        // related to this upload to handle pauses.\n\n\n        return function () {};\n      });\n    });\n  }\n  /**\n   * Store the uploadUrl on the file options, so that when Golden Retriever\n   * restores state, we will continue uploading to the correct URL.\n   *\n   * @param {UppyFile} file\n   * @param {string} uploadURL\n   */\n  ;\n\n  _proto.onReceiveUploadUrl = function onReceiveUploadUrl(file, uploadURL) {\n    var currentFile = this.uppy.getFile(file.id);\n    if (!currentFile) return; // Only do the update if we didn't have an upload URL yet.\n\n    if (!currentFile.tus || currentFile.tus.uploadUrl !== uploadURL) {\n      this.uppy.log('[Tus] Storing upload url');\n      this.uppy.setFileState(currentFile.id, {\n        tus: _extends({}, currentFile.tus, {\n          uploadUrl: uploadURL\n        })\n      });\n    }\n  }\n  /**\n   * @param {string} fileID\n   * @param {function(string): void} cb\n   */\n  ;\n\n  _proto.onFileRemove = function onFileRemove(fileID, cb) {\n    this.uploaderEvents[fileID].on('file-removed', function (file) {\n      if (fileID === file.id) cb(file.id);\n    });\n  }\n  /**\n   * @param {string} fileID\n   * @param {function(boolean): void} cb\n   */\n  ;\n\n  _proto.onPause = function onPause(fileID, cb) {\n    this.uploaderEvents[fileID].on('upload-pause', function (targetFileID, isPaused) {\n      if (fileID === targetFileID) {\n        // const isPaused = this.uppy.pauseResume(fileID)\n        cb(isPaused);\n      }\n    });\n  }\n  /**\n   * @param {string} fileID\n   * @param {function(): void} cb\n   */\n  ;\n\n  _proto.onRetry = function onRetry(fileID, cb) {\n    this.uploaderEvents[fileID].on('upload-retry', function (targetFileID) {\n      if (fileID === targetFileID) {\n        cb();\n      }\n    });\n  }\n  /**\n   * @param {string} fileID\n   * @param {function(): void} cb\n   */\n  ;\n\n  _proto.onRetryAll = function onRetryAll(fileID, cb) {\n    var _this5 = this;\n\n    this.uploaderEvents[fileID].on('retry-all', function (filesToRetry) {\n      if (!_this5.uppy.getFile(fileID)) return;\n      cb();\n    });\n  }\n  /**\n   * @param {string} fileID\n   * @param {function(): void} cb\n   */\n  ;\n\n  _proto.onPauseAll = function onPauseAll(fileID, cb) {\n    var _this6 = this;\n\n    this.uploaderEvents[fileID].on('pause-all', function () {\n      if (!_this6.uppy.getFile(fileID)) return;\n      cb();\n    });\n  }\n  /**\n   * @param {string} fileID\n   * @param {function(): void} cb\n   */\n  ;\n\n  _proto.onCancelAll = function onCancelAll(fileID, cb) {\n    var _this7 = this;\n\n    this.uploaderEvents[fileID].on('cancel-all', function () {\n      if (!_this7.uppy.getFile(fileID)) return;\n      cb();\n    });\n  }\n  /**\n   * @param {string} fileID\n   * @param {function(): void} cb\n   */\n  ;\n\n  _proto.onResumeAll = function onResumeAll(fileID, cb) {\n    var _this8 = this;\n\n    this.uploaderEvents[fileID].on('resume-all', function () {\n      if (!_this8.uppy.getFile(fileID)) return;\n      cb();\n    });\n  }\n  /**\n   * @param {(UppyFile | FailedUppyFile)[]} files\n   */\n  ;\n\n  _proto.uploadFiles = function uploadFiles(files) {\n    var _this9 = this;\n\n    var promises = files.map(function (file, i) {\n      var current = i + 1;\n      var total = files.length;\n\n      if ('error' in file && file.error) {\n        return Promise.reject(new Error(file.error));\n      } else if (file.isRemote) {\n        return _this9.uploadRemote(file, current, total);\n      } else {\n        return _this9.upload(file, current, total);\n      }\n    });\n    return settle(promises);\n  }\n  /**\n   * @param {string[]} fileIDs\n   */\n  ;\n\n  _proto.handleUpload = function handleUpload(fileIDs) {\n    var _this10 = this;\n\n    if (fileIDs.length === 0) {\n      this.uppy.log('[Tus] No files to upload');\n      return Promise.resolve();\n    }\n\n    if (this.opts.limit === 0) {\n      this.uppy.log('[Tus] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/tus/#limit-0', 'warning');\n    }\n\n    this.uppy.log('[Tus] Uploading...');\n    var filesToUpload = fileIDs.map(function (fileID) {\n      return _this10.uppy.getFile(fileID);\n    });\n    return this.uploadFiles(filesToUpload).then(function () {\n      return null;\n    });\n  };\n\n  _proto.install = function install() {\n    this.uppy.setState({\n      capabilities: _extends({}, this.uppy.getState().capabilities, {\n        resumableUploads: true\n      })\n    });\n    this.uppy.addUploader(this.handleUpload);\n    this.uppy.on('reset-progress', this.handleResetProgress);\n\n    if (this.opts.autoRetry) {\n      this.uppy.on('back-online', this.uppy.retryAll);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.uppy.setState({\n      capabilities: _extends({}, this.uppy.getState().capabilities, {\n        resumableUploads: false\n      })\n    });\n    this.uppy.removeUploader(this.handleUpload);\n\n    if (this.opts.autoRetry) {\n      this.uppy.off('back-online', this.uppy.retryAll);\n    }\n  };\n\n  return Tus;\n}(Plugin), _class.VERSION = \"1.5.2\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/tus/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/url/lib/UrlUI.js":
/*!*********************************************!*\
  !*** ./node_modules/@uppy/url/lib/UrlUI.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h,\n    Component = _require.Component;\n\nvar UrlUI =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(UrlUI, _Component);\n\n  function UrlUI(props) {\n    var _this;\n\n    _this = _Component.call(this, props) || this;\n    _this.handleKeyPress = _this.handleKeyPress.bind(_assertThisInitialized(_this));\n    _this.handleClick = _this.handleClick.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = UrlUI.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.input.value = '';\n  };\n\n  _proto.handleKeyPress = function handleKeyPress(ev) {\n    if (ev.keyCode === 13) {\n      this.props.addFile(this.input.value);\n    }\n  };\n\n  _proto.handleClick = function handleClick() {\n    this.props.addFile(this.input.value);\n  };\n\n  _proto.render = function render() {\n    var _this2 = this;\n\n    return h(\"div\", {\n      class: \"uppy-Url\"\n    }, h(\"input\", {\n      class: \"uppy-u-reset uppy-c-textInput uppy-Url-input\",\n      type: \"text\",\n      \"aria-label\": this.props.i18n('enterUrlToImport'),\n      placeholder: this.props.i18n('enterUrlToImport'),\n      onkeyup: this.handleKeyPress,\n      ref: function ref(input) {\n        _this2.input = input;\n      },\n      \"data-uppy-super-focusable\": true\n    }), h(\"button\", {\n      class: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Url-importButton\",\n      type: \"button\",\n      onclick: this.handleClick\n    }, this.props.i18n('import')));\n  };\n\n  return UrlUI;\n}(Component);\n\nmodule.exports = UrlUI;\n\n//# sourceURL=webpack:///./node_modules/@uppy/url/lib/UrlUI.js?");

/***/ }),

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

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar _require2 = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require2.h;\n\nvar _require3 = __webpack_require__(/*! @uppy/companion-client */ \"./node_modules/@uppy/companion-client/lib/index.js\"),\n    RequestClient = _require3.RequestClient;\n\nvar UrlUI = __webpack_require__(/*! ./UrlUI.js */ \"./node_modules/@uppy/url/lib/UrlUI.js\");\n\nvar forEachDroppedOrPastedUrl = __webpack_require__(/*! ./utils/forEachDroppedOrPastedUrl */ \"./node_modules/@uppy/url/lib/utils/forEachDroppedOrPastedUrl.js\");\n\nfunction UrlIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    width: \"23\",\n    height: \"23\",\n    viewBox: \"0 0 23 23\"\n  }, h(\"path\", {\n    d: \"M20.485 11.236l-2.748 2.737c-.184.182-.367.365-.642.547-1.007.73-2.107 1.095-3.298 1.095-1.65 0-3.298-.73-4.398-2.19-.275-.365-.183-1.003.183-1.277.367-.273 1.008-.182 1.283.183 1.191 1.642 3.482 1.915 5.13.73a.714.714 0 0 0 .367-.365l2.75-2.737c1.373-1.46 1.373-3.74-.093-5.108a3.72 3.72 0 0 0-5.13 0L12.33 6.4a.888.888 0 0 1-1.283 0 .88.88 0 0 1 0-1.277l1.558-1.55a5.38 5.38 0 0 1 7.605 0c2.29 2.006 2.382 5.564.274 7.662zm-8.979 6.294L9.95 19.081a3.72 3.72 0 0 1-5.13 0c-1.467-1.368-1.467-3.74-.093-5.108l2.75-2.737.366-.365c.824-.547 1.74-.82 2.748-.73 1.008.183 1.833.639 2.382 1.46.275.365.917.456 1.283.182.367-.273.458-.912.183-1.277-.916-1.186-2.199-1.915-3.573-2.098-1.374-.273-2.84.091-4.031 1.004l-.55.547-2.749 2.737c-2.107 2.189-2.015 5.655.092 7.753C4.727 21.453 6.101 22 7.475 22c1.374 0 2.749-.547 3.848-1.55l1.558-1.551a.88.88 0 0 0 0-1.278c-.367-.364-1.008-.456-1.375-.09z\",\n    fill: \"#FF814F\",\n    \"fill-rule\": \"nonzero\"\n  }));\n}\n/**\n * Url\n *\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(Url, _Plugin);\n\n  function Url(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.id = _this.opts.id || 'Url';\n    _this.title = _this.opts.title || 'Link';\n    _this.type = 'acquirer';\n\n    _this.icon = function () {\n      return h(UrlIcon, null);\n    }; // Set default options and locale\n\n\n    _this.defaultLocale = {\n      strings: {\n        import: 'Import',\n        enterUrlToImport: 'Enter URL to import a file',\n        failedToFetch: 'Companion failed to fetch this URL, please make sure it’s correct',\n        enterCorrectUrl: 'Incorrect URL: Please make sure you are entering a direct link to a file'\n      }\n    };\n    var defaultOptions = {};\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n\n    _this.i18nInit();\n\n    _this.hostname = _this.opts.companionUrl;\n\n    if (!_this.hostname) {\n      throw new Error('Companion hostname is required, please consult https://uppy.io/docs/companion');\n    } // Bind all event handlers for referencability\n\n\n    _this.getMeta = _this.getMeta.bind(_assertThisInitialized(_this));\n    _this.addFile = _this.addFile.bind(_assertThisInitialized(_this));\n    _this.handleRootDrop = _this.handleRootDrop.bind(_assertThisInitialized(_this));\n    _this.handleRootPaste = _this.handleRootPaste.bind(_assertThisInitialized(_this));\n    _this.client = new RequestClient(uppy, {\n      companionUrl: _this.opts.companionUrl,\n      companionHeaders: _this.opts.companionHeaders || _this.opts.serverHeaders\n    });\n    return _this;\n  }\n\n  var _proto = Url.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.i18nArray = this.translator.translateArray.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  };\n\n  _proto.getFileNameFromUrl = function getFileNameFromUrl(url) {\n    return url.substring(url.lastIndexOf('/') + 1);\n  };\n\n  _proto.checkIfCorrectURL = function checkIfCorrectURL(url) {\n    if (!url) return false;\n    var protocol = url.match(/^([a-z0-9]+):\\/\\//)[1];\n\n    if (protocol !== 'http' && protocol !== 'https') {\n      return false;\n    }\n\n    return true;\n  };\n\n  _proto.addProtocolToURL = function addProtocolToURL(url) {\n    var protocolRegex = /^[a-z0-9]+:\\/\\//;\n    var defaultProtocol = 'http://';\n\n    if (protocolRegex.test(url)) {\n      return url;\n    }\n\n    return defaultProtocol + url;\n  };\n\n  _proto.getMeta = function getMeta(url) {\n    var _this2 = this;\n\n    return this.client.post('url/meta', {\n      url: url\n    }).then(function (res) {\n      if (res.error) {\n        _this2.uppy.log('[URL] Error:');\n\n        _this2.uppy.log(res.error);\n\n        throw new Error('Failed to fetch the file');\n      }\n\n      return res;\n    });\n  };\n\n  _proto.addFile = function addFile(url) {\n    var _this3 = this;\n\n    url = this.addProtocolToURL(url);\n\n    if (!this.checkIfCorrectURL(url)) {\n      this.uppy.log(\"[URL] Incorrect URL entered: \" + url);\n      this.uppy.info(this.i18n('enterCorrectUrl'), 'error', 4000);\n      return;\n    }\n\n    return this.getMeta(url).then(function (meta) {\n      var tagFile = {\n        source: _this3.id,\n        name: _this3.getFileNameFromUrl(url),\n        type: meta.type,\n        data: {\n          size: meta.size\n        },\n        isRemote: true,\n        body: {\n          url: url\n        },\n        remote: {\n          companionUrl: _this3.opts.companionUrl,\n          url: _this3.hostname + \"/url/get\",\n          body: {\n            fileId: url,\n            url: url\n          },\n          providerOptions: _this3.client.opts\n        }\n      };\n      return tagFile;\n    }).then(function (tagFile) {\n      _this3.uppy.log('[Url] Adding remote file');\n\n      try {\n        _this3.uppy.addFile(tagFile);\n      } catch (err) {\n        if (!err.isRestriction) {\n          _this3.uppy.log(err);\n        }\n      }\n    }).catch(function (err) {\n      _this3.uppy.log(err);\n\n      _this3.uppy.info({\n        message: _this3.i18n('failedToFetch'),\n        details: err\n      }, 'error', 4000);\n    });\n  };\n\n  _proto.handleRootDrop = function handleRootDrop(e) {\n    var _this4 = this;\n\n    forEachDroppedOrPastedUrl(e.dataTransfer, 'drop', function (url) {\n      _this4.uppy.log(\"[URL] Adding file from dropped url: \" + url);\n\n      _this4.addFile(url);\n    });\n  };\n\n  _proto.handleRootPaste = function handleRootPaste(e) {\n    var _this5 = this;\n\n    forEachDroppedOrPastedUrl(e.clipboardData, 'paste', function (url) {\n      _this5.uppy.log(\"[URL] Adding file from pasted url: \" + url);\n\n      _this5.addFile(url);\n    });\n  };\n\n  _proto.render = function render(state) {\n    return h(UrlUI, {\n      i18n: this.i18n,\n      addFile: this.addFile\n    });\n  };\n\n  _proto.install = function install() {\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    this.unmount();\n  };\n\n  return Url;\n}(Plugin), _class.VERSION = \"1.4.2\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/url/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/url/lib/utils/forEachDroppedOrPastedUrl.js":
/*!***********************************************************************!*\
  !*** ./node_modules/@uppy/url/lib/utils/forEachDroppedOrPastedUrl.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var toArray = __webpack_require__(/*! @uppy/utils/lib/toArray */ \"./node_modules/@uppy/utils/lib/toArray.js\");\n/*\n  SITUATION\n\n    1. Cross-browser dataTransfer.items\n\n      paste in chrome [Copy Image]:\n      0: {kind: \"file\", type: \"image/png\"}\n      1: {kind: \"string\", type: \"text/html\"}\n      paste in safari [Copy Image]:\n      0: {kind: \"file\", type: \"image/png\"}\n      1: {kind: \"string\", type: \"text/html\"}\n      2: {kind: \"string\", type: \"text/plain\"}\n      3: {kind: \"string\", type: \"text/uri-list\"}\n      paste in firefox [Copy Image]:\n      0: {kind: \"file\", type: \"image/png\"}\n      1: {kind: \"string\", type: \"text/html\"}\n\n      paste in chrome [Copy Image Address]:\n      0: {kind: \"string\", type: \"text/plain\"}\n      paste in safari [Copy Image Address]:\n      0: {kind: \"string\", type: \"text/plain\"}\n      1: {kind: \"string\", type: \"text/uri-list\"}\n      paste in firefox [Copy Image Address]:\n      0: {kind: \"string\", type: \"text/plain\"}\n\n      drop in chrome [from browser]:\n      0: {kind: \"string\", type: \"text/uri-list\"}\n      1: {kind: \"string\", type: \"text/html\"}\n      drop in safari [from browser]:\n      0: {kind: \"string\", type: \"text/uri-list\"}\n      1: {kind: \"string\", type: \"text/html\"}\n      2: {kind: \"file\", type: \"image/png\"}\n      drop in firefox [from browser]:\n      0: {kind: \"string\", type: \"text/uri-list\"}\n      1: {kind: \"string\", type: \"text/x-moz-url\"}\n      2: {kind: \"string\", type: \"text/plain\"}\n\n    2. We can determine if it's a 'copypaste' or a 'drop', but we can't discern between [Copy Image] and [Copy Image Address].\n\n  CONCLUSION\n\n    1. 'paste' ([Copy Image] or [Copy Image Address], we can't discern between these two)\n      Don't do anything if there is 'file' item. .handlePaste in the DashboardPlugin will deal with all 'file' items.\n      If there are no 'file' items - handle 'text/plain' items.\n\n    2. 'drop'\n      Take 'text/uri-list' items. Safari has an additional item of .kind === 'file', and you may worry about the item being duplicated (first by DashboardPlugin, and then by UrlPlugin, now), but don't. Directory handling code won't pay attention to this particular item of kind 'file'.\n*/\n\n/**\n * Finds all links dropped/pasted from one browser window to another.\n *\n * @param {object} dataTransfer - DataTransfer instance, e.g. e.clipboardData, or e.dataTransfer\n * @param {string} isDropOrPaste - either 'drop' or 'paste'\n * @param {Function} callback - (urlString) => {}\n */\n\n\nmodule.exports = function forEachDroppedOrPastedUrl(dataTransfer, isDropOrPaste, callback) {\n  var items = toArray(dataTransfer.items);\n  var urlItems;\n\n  switch (isDropOrPaste) {\n    case 'paste':\n      {\n        var atLeastOneFileIsDragged = items.some(function (item) {\n          return item.kind === 'file';\n        });\n\n        if (atLeastOneFileIsDragged) {\n          return;\n        } else {\n          urlItems = items.filter(function (item) {\n            return item.kind === 'string' && item.type === 'text/plain';\n          });\n        }\n\n        break;\n      }\n\n    case 'drop':\n      {\n        urlItems = items.filter(function (item) {\n          return item.kind === 'string' && item.type === 'text/uri-list';\n        });\n        break;\n      }\n\n    default:\n      {\n        throw new Error(\"isDropOrPaste must be either 'drop' or 'paste', but it's \" + isDropOrPaste);\n      }\n  }\n\n  urlItems.forEach(function (item) {\n    item.getAsString(function (urlString) {\n      return callback(urlString);\n    });\n  });\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/url/lib/utils/forEachDroppedOrPastedUrl.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/EventTracker.js":
/*!******************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/EventTracker.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Create a wrapper around an event emitter with a `remove` method to remove\n * all events that were added using the wrapped emitter.\n */\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n  function EventTracker(emitter) {\n    this._events = [];\n    this._emitter = emitter;\n  }\n\n  var _proto = EventTracker.prototype;\n\n  _proto.on = function on(event, fn) {\n    this._events.push([event, fn]);\n\n    return this._emitter.on(event, fn);\n  };\n\n  _proto.remove = function remove() {\n    var _this = this;\n\n    this._events.forEach(function (_ref) {\n      var event = _ref[0],\n          fn = _ref[1];\n\n      _this._emitter.off(event, fn);\n    });\n  };\n\n  return EventTracker;\n}();\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/EventTracker.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/FOCUSABLE_ELEMENTS.js":
/*!************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/FOCUSABLE_ELEMENTS.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = ['a[href]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', 'area[href]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', 'input:not([disabled]):not([inert]):not([aria-hidden])', 'select:not([disabled]):not([inert]):not([aria-hidden])', 'textarea:not([disabled]):not([inert]):not([aria-hidden])', 'button:not([disabled]):not([inert]):not([aria-hidden])', 'iframe:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', 'object:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', 'embed:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', '[contenteditable]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', '[tabindex]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])'];\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/FOCUSABLE_ELEMENTS.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/ProgressTimeout.js":
/*!*********************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/ProgressTimeout.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Helper to abort upload requests if there has not been any progress for `timeout` ms.\n * Create an instance using `timer = new ProgressTimeout(10000, onTimeout)`\n * Call `timer.progress()` to signal that there has been progress of any kind.\n * Call `timer.done()` when the upload has completed.\n */\nvar ProgressTimeout =\n/*#__PURE__*/\nfunction () {\n  function ProgressTimeout(timeout, timeoutHandler) {\n    this._timeout = timeout;\n    this._onTimedOut = timeoutHandler;\n    this._isDone = false;\n    this._aliveTimer = null;\n    this._onTimedOut = this._onTimedOut.bind(this);\n  }\n\n  var _proto = ProgressTimeout.prototype;\n\n  _proto.progress = function progress() {\n    // Some browsers fire another progress event when the upload is\n    // cancelled, so we have to ignore progress after the timer was\n    // told to stop.\n    if (this._isDone) return;\n\n    if (this._timeout > 0) {\n      if (this._aliveTimer) clearTimeout(this._aliveTimer);\n      this._aliveTimer = setTimeout(this._onTimedOut, this._timeout);\n    }\n  };\n\n  _proto.done = function done() {\n    if (this._aliveTimer) {\n      clearTimeout(this._aliveTimer);\n      this._aliveTimer = null;\n    }\n\n    this._isDone = true;\n  };\n\n  return ProgressTimeout;\n}();\n\nmodule.exports = ProgressTimeout;\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/ProgressTimeout.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/RateLimitedQueue.js":
/*!**********************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/RateLimitedQueue.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports =\n/*#__PURE__*/\nfunction () {\n  function RateLimitedQueue(limit) {\n    if (typeof limit !== 'number' || limit === 0) {\n      this.limit = Infinity;\n    } else {\n      this.limit = limit;\n    }\n\n    this.activeRequests = 0;\n    this.queuedHandlers = [];\n  }\n\n  var _proto = RateLimitedQueue.prototype;\n\n  _proto._call = function _call(fn) {\n    var _this = this;\n\n    this.activeRequests += 1;\n    var _done = false;\n    var cancelActive;\n\n    try {\n      cancelActive = fn();\n    } catch (err) {\n      this.activeRequests -= 1;\n      throw err;\n    }\n\n    return {\n      abort: function abort() {\n        if (_done) return;\n        _done = true;\n        _this.activeRequests -= 1;\n        cancelActive();\n\n        _this._queueNext();\n      },\n      done: function done() {\n        if (_done) return;\n        _done = true;\n        _this.activeRequests -= 1;\n\n        _this._queueNext();\n      }\n    };\n  };\n\n  _proto._queueNext = function _queueNext() {\n    var _this2 = this;\n\n    // Do it soon but not immediately, this allows clearing out the entire queue synchronously\n    // one by one without continuously _advancing_ it (and starting new tasks before immediately\n    // aborting them)\n    Promise.resolve().then(function () {\n      _this2._next();\n    });\n  };\n\n  _proto._next = function _next() {\n    if (this.activeRequests >= this.limit) {\n      return;\n    }\n\n    if (this.queuedHandlers.length === 0) {\n      return;\n    } // Dispatch the next request, and update the abort/done handlers\n    // so that cancelling it does the Right Thing (and doesn't just try\n    // to dequeue an already-running request).\n\n\n    var next = this.queuedHandlers.shift();\n\n    var handler = this._call(next.fn);\n\n    next.abort = handler.abort;\n    next.done = handler.done;\n  };\n\n  _proto._queue = function _queue(fn) {\n    var _this3 = this;\n\n    var handler = {\n      fn: fn,\n      abort: function abort() {\n        _this3._dequeue(handler);\n      },\n      done: function done() {\n        throw new Error('Cannot mark a queued request as done: this indicates a bug');\n      }\n    };\n    this.queuedHandlers.push(handler);\n    return handler;\n  };\n\n  _proto._dequeue = function _dequeue(handler) {\n    var index = this.queuedHandlers.indexOf(handler);\n\n    if (index !== -1) {\n      this.queuedHandlers.splice(index, 1);\n    }\n  };\n\n  _proto.run = function run(fn) {\n    if (this.activeRequests < this.limit) {\n      return this._call(fn);\n    }\n\n    return this._queue(fn);\n  };\n\n  _proto.wrapPromiseFunction = function wrapPromiseFunction(fn) {\n    var _this4 = this;\n\n    return function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return new Promise(function (resolve, reject) {\n        var queuedRequest = _this4.run(function () {\n          var cancelError;\n          var promise;\n\n          try {\n            promise = Promise.resolve(fn.apply(void 0, args));\n          } catch (err) {\n            promise = Promise.reject(err);\n          }\n\n          promise.then(function (result) {\n            if (cancelError) {\n              reject(cancelError);\n            } else {\n              queuedRequest.done();\n              resolve(result);\n            }\n          }, function (err) {\n            if (cancelError) {\n              reject(cancelError);\n            } else {\n              queuedRequest.done();\n              reject(err);\n            }\n          });\n          return function () {\n            cancelError = new Error('Cancelled');\n          };\n        });\n      });\n    };\n  };\n\n  return RateLimitedQueue;\n}();\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/RateLimitedQueue.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/Translator.js":
/*!****************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/Translator.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar has = __webpack_require__(/*! ./hasProperty */ \"./node_modules/@uppy/utils/lib/hasProperty.js\");\n/**\n * Translates strings with interpolation & pluralization support.\n * Extensible with custom dictionaries and pluralization functions.\n *\n * Borrows heavily from and inspired by Polyglot https://github.com/airbnb/polyglot.js,\n * basically a stripped-down version of it. Differences: pluralization functions are not hardcoded\n * and can be easily added among with dictionaries, nested objects are used for pluralization\n * as opposed to `||||` delimeter\n *\n * Usage example: `translator.translate('files_chosen', {smart_count: 3})`\n */\n\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n  /**\n   * @param {object|Array<object>} locales - locale or list of locales.\n   */\n  function Translator(locales) {\n    var _this = this;\n\n    this.locale = {\n      strings: {},\n      pluralize: function pluralize(n) {\n        if (n === 1) {\n          return 0;\n        }\n\n        return 1;\n      }\n    };\n\n    if (Array.isArray(locales)) {\n      locales.forEach(function (locale) {\n        return _this._apply(locale);\n      });\n    } else {\n      this._apply(locales);\n    }\n  }\n\n  var _proto = Translator.prototype;\n\n  _proto._apply = function _apply(locale) {\n    if (!locale || !locale.strings) {\n      return;\n    }\n\n    var prevLocale = this.locale;\n    this.locale = _extends({}, prevLocale, {\n      strings: _extends({}, prevLocale.strings, locale.strings)\n    });\n    this.locale.pluralize = locale.pluralize || prevLocale.pluralize;\n  }\n  /**\n   * Takes a string with placeholder variables like `%{smart_count} file selected`\n   * and replaces it with values from options `{smart_count: 5}`\n   *\n   * @license https://github.com/airbnb/polyglot.js/blob/master/LICENSE\n   * taken from https://github.com/airbnb/polyglot.js/blob/master/lib/polyglot.js#L299\n   *\n   * @param {string} phrase that needs interpolation, with placeholders\n   * @param {object} options with values that will be used to replace placeholders\n   * @returns {string} interpolated\n   */\n  ;\n\n  _proto.interpolate = function interpolate(phrase, options) {\n    var _String$prototype = String.prototype,\n        split = _String$prototype.split,\n        replace = _String$prototype.replace;\n    var dollarRegex = /\\$/g;\n    var dollarBillsYall = '$$$$';\n    var interpolated = [phrase];\n\n    for (var arg in options) {\n      if (arg !== '_' && has(options, arg)) {\n        // Ensure replacement value is escaped to prevent special $-prefixed\n        // regex replace tokens. the \"$$$$\" is needed because each \"$\" needs to\n        // be escaped with \"$\" itself, and we need two in the resulting output.\n        var replacement = options[arg];\n\n        if (typeof replacement === 'string') {\n          replacement = replace.call(options[arg], dollarRegex, dollarBillsYall);\n        } // We create a new `RegExp` each time instead of using a more-efficient\n        // string replace so that the same argument can be replaced multiple times\n        // in the same phrase.\n\n\n        interpolated = insertReplacement(interpolated, new RegExp('%\\\\{' + arg + '\\\\}', 'g'), replacement);\n      }\n    }\n\n    return interpolated;\n\n    function insertReplacement(source, rx, replacement) {\n      var newParts = [];\n      source.forEach(function (chunk) {\n        split.call(chunk, rx).forEach(function (raw, i, list) {\n          if (raw !== '') {\n            newParts.push(raw);\n          } // Interlace with the `replacement` value\n\n\n          if (i < list.length - 1) {\n            newParts.push(replacement);\n          }\n        });\n      });\n      return newParts;\n    }\n  }\n  /**\n   * Public translate method\n   *\n   * @param {string} key\n   * @param {object} options with values that will be used later to replace placeholders in string\n   * @returns {string} translated (and interpolated)\n   */\n  ;\n\n  _proto.translate = function translate(key, options) {\n    return this.translateArray(key, options).join('');\n  }\n  /**\n   * Get a translation and return the translated and interpolated parts as an array.\n   *\n   * @param {string} key\n   * @param {object} options with values that will be used to replace placeholders\n   * @returns {Array} The translated and interpolated parts, in order.\n   */\n  ;\n\n  _proto.translateArray = function translateArray(key, options) {\n    if (options && typeof options.smart_count !== 'undefined') {\n      var plural = this.locale.pluralize(options.smart_count);\n      return this.interpolate(this.locale.strings[key][plural], options);\n    }\n\n    return this.interpolate(this.locale.strings[key], options);\n  };\n\n  return Translator;\n}();\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/Translator.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/canvasToBlob.js":
/*!******************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/canvasToBlob.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var dataURItoBlob = __webpack_require__(/*! ./dataURItoBlob */ \"./node_modules/@uppy/utils/lib/dataURItoBlob.js\");\n/**\n * Save a <canvas> element's content to a Blob object.\n *\n * @param {HTMLCanvasElement} canvas\n * @returns {Promise}\n */\n\n\nmodule.exports = function canvasToBlob(canvas, type, quality) {\n  if (canvas.toBlob) {\n    return new Promise(function (resolve) {\n      canvas.toBlob(resolve, type, quality);\n    });\n  }\n\n  return Promise.resolve().then(function () {\n    return dataURItoBlob(canvas.toDataURL(type, quality), {});\n  });\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/canvasToBlob.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/dataURItoBlob.js":
/*!*******************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/dataURItoBlob.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function dataURItoBlob(dataURI, opts, toFile) {\n  // get the base64 data\n  var data = dataURI.split(',')[1]; // user may provide mime type, if not get it from data URI\n\n  var mimeType = opts.mimeType || dataURI.split(',')[0].split(':')[1].split(';')[0]; // default to plain/text if data URI has no mimeType\n\n  if (mimeType == null) {\n    mimeType = 'plain/text';\n  }\n\n  var binary = atob(data);\n  var array = [];\n\n  for (var i = 0; i < binary.length; i++) {\n    array.push(binary.charCodeAt(i));\n  }\n\n  var bytes;\n\n  try {\n    bytes = new Uint8Array(array); // eslint-disable-line compat/compat\n  } catch (err) {\n    return null;\n  } // Convert to a File?\n\n\n  if (toFile) {\n    return new File([bytes], opts.name || '', {\n      type: mimeType\n    });\n  }\n\n  return new Blob([bytes], {\n    type: mimeType\n  });\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/dataURItoBlob.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/emitSocketProgress.js":
/*!************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/emitSocketProgress.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var throttle = __webpack_require__(/*! lodash.throttle */ \"./node_modules/lodash.throttle/index.js\");\n\nfunction _emitSocketProgress(uploader, progressData, file) {\n  var progress = progressData.progress,\n      bytesUploaded = progressData.bytesUploaded,\n      bytesTotal = progressData.bytesTotal;\n\n  if (progress) {\n    uploader.uppy.log(\"Upload progress: \" + progress);\n    uploader.uppy.emit('upload-progress', file, {\n      uploader: uploader,\n      bytesUploaded: bytesUploaded,\n      bytesTotal: bytesTotal\n    });\n  }\n}\n\nmodule.exports = throttle(_emitSocketProgress, 300, {\n  leading: true,\n  trailing: true\n});\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/emitSocketProgress.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/findAllDOMElements.js":
/*!************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/findAllDOMElements.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var isDOMElement = __webpack_require__(/*! ./isDOMElement */ \"./node_modules/@uppy/utils/lib/isDOMElement.js\");\n/**\n * Find one or more DOM elements.\n *\n * @param {string} element\n * @returns {Array|null}\n */\n\n\nmodule.exports = function findAllDOMElements(element) {\n  if (typeof element === 'string') {\n    var elements = [].slice.call(document.querySelectorAll(element));\n    return elements.length > 0 ? elements : null;\n  }\n\n  if (typeof element === 'object' && isDOMElement(element)) {\n    return [element];\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/findAllDOMElements.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/findDOMElement.js":
/*!********************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/findDOMElement.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var isDOMElement = __webpack_require__(/*! ./isDOMElement */ \"./node_modules/@uppy/utils/lib/isDOMElement.js\");\n/**\n * Find a DOM element.\n *\n * @param {Node|string} element\n * @returns {Node|null}\n */\n\n\nmodule.exports = function findDOMElement(element, context) {\n  if (context === void 0) {\n    context = document;\n  }\n\n  if (typeof element === 'string') {\n    return context.querySelector(element);\n  }\n\n  if (typeof element === 'object' && isDOMElement(element)) {\n    return element;\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/findDOMElement.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/generateFileID.js":
/*!********************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/generateFileID.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Takes a file object and turns it into fileID, by converting file.name to lowercase,\n * removing extra characters and adding type, size and lastModified\n *\n * @param {object} file\n * @returns {string} the fileID\n */\nmodule.exports = function generateFileID(file) {\n  // It's tempting to do `[items].filter(Boolean).join('-')` here, but that\n  // is slower! simple string concatenation is fast\n  var id = 'uppy';\n\n  if (typeof file.name === 'string') {\n    id += '-' + encodeFilename(file.name.toLowerCase());\n  }\n\n  if (file.type !== undefined) {\n    id += '-' + file.type;\n  }\n\n  if (file.meta && typeof file.meta.relativePath === 'string') {\n    id += '-' + encodeFilename(file.meta.relativePath.toLowerCase());\n  }\n\n  if (file.data.size !== undefined) {\n    id += '-' + file.data.size;\n  }\n\n  if (file.data.lastModified !== undefined) {\n    id += '-' + file.data.lastModified;\n  }\n\n  return id;\n};\n\nfunction encodeFilename(name) {\n  var suffix = '';\n  return name.replace(/[^A-Z0-9]/ig, function (character) {\n    suffix += '-' + encodeCharacter(character);\n    return '/';\n  }) + suffix;\n}\n\nfunction encodeCharacter(character) {\n  return character.charCodeAt(0).toString(32);\n}\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/generateFileID.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getBytesRemaining.js":
/*!***********************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getBytesRemaining.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function getBytesRemaining(fileProgress) {\n  return fileProgress.bytesTotal - fileProgress.bytesUploaded;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getBytesRemaining.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getDroppedFiles/index.js":
/*!***************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getDroppedFiles/index.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var webkitGetAsEntryApi = __webpack_require__(/*! ./utils/webkitGetAsEntryApi/index */ \"./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js\");\n\nvar fallbackApi = __webpack_require__(/*! ./utils/fallbackApi */ \"./node_modules/@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js\");\n/**\n * Returns a promise that resolves to the array of dropped files (if a folder is dropped, and browser supports folder parsing - promise resolves to the flat array of all files in all directories).\n * Each file has .relativePath prop appended to it (e.g. \"/docs/Prague/ticket_from_prague_to_ufa.pdf\") if browser supports it. Otherwise it's undefined.\n *\n * @param {DataTransfer} dataTransfer\n * @param {Function} logDropError - a function that's called every time some folder or some file error out (e.g. because of the folder name being too long on Windows). Notice that resulting promise will always be resolved anyway.\n *\n * @returns {Promise} - Array<File>\n */\n\n\nmodule.exports = function getDroppedFiles(dataTransfer, _temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$logDropError = _ref.logDropError,\n      logDropError = _ref$logDropError === void 0 ? function () {} : _ref$logDropError;\n\n  // Get all files from all subdirs. Works (at least) in Chrome, Mozilla, and Safari\n  if (dataTransfer.items && dataTransfer.items[0] && 'webkitGetAsEntry' in dataTransfer.items[0]) {\n    return webkitGetAsEntryApi(dataTransfer, logDropError); // Otherwise just return all first-order files\n  } else {\n    return fallbackApi(dataTransfer);\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getDroppedFiles/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js":
/*!***************************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var toArray = __webpack_require__(/*! ../../toArray */ \"./node_modules/@uppy/utils/lib/toArray.js\"); // .files fallback, should be implemented in any browser\n\n\nmodule.exports = function fallbackApi(dataTransfer) {\n  var files = toArray(dataTransfer.files);\n  return Promise.resolve(files);\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js":
/*!***********************************************************************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js ***!
  \***********************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Recursive function, calls the original callback() when the directory is entirely parsed.\n *\n * @param {FileSystemDirectoryReader} directoryReader\n * @param {Array} oldEntries\n * @param {Function} logDropError\n * @param {Function} callback - called with ([ all files and directories in that directoryReader ])\n */\nmodule.exports = function getFilesAndDirectoriesFromDirectory(directoryReader, oldEntries, logDropError, _ref) {\n  var onSuccess = _ref.onSuccess;\n  directoryReader.readEntries(function (entries) {\n    var newEntries = [].concat(oldEntries, entries); // According to the FileSystem API spec, getFilesAndDirectoriesFromDirectory() must be called until it calls the onSuccess with an empty array.\n\n    if (entries.length) {\n      setTimeout(function () {\n        getFilesAndDirectoriesFromDirectory(directoryReader, newEntries, logDropError, {\n          onSuccess: onSuccess\n        });\n      }, 0); // Done iterating this particular directory\n    } else {\n      onSuccess(newEntries);\n    }\n  }, // Make sure we resolve on error anyway, it's fine if only one directory couldn't be parsed!\n  function (error) {\n    logDropError(error);\n    onSuccess(oldEntries);\n  });\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getRelativePath.js":
/*!***************************************************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getRelativePath.js ***!
  \***************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Get the relative path from the FileEntry#fullPath, because File#webkitRelativePath is always '', at least onDrop.\n *\n * @param {FileEntry} fileEntry\n *\n * @returns {string|null} - if file is not in a folder - return null (this is to be consistent with .relativePath-s of files selected from My Device). If file is in a folder - return its fullPath, e.g. '/simpsons/hi.jpeg'.\n */\nmodule.exports = function getRelativePath(fileEntry) {\n  // fileEntry.fullPath - \"/simpsons/hi.jpeg\" or undefined (for browsers that don't support it)\n  // fileEntry.name - \"hi.jpeg\"\n  if (!fileEntry.fullPath || fileEntry.fullPath === '/' + fileEntry.name) {\n    return null;\n  } else {\n    return fileEntry.fullPath;\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getRelativePath.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js ***!
  \*****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var toArray = __webpack_require__(/*! ../../../toArray */ \"./node_modules/@uppy/utils/lib/toArray.js\");\n\nvar getRelativePath = __webpack_require__(/*! ./getRelativePath */ \"./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getRelativePath.js\");\n\nvar getFilesAndDirectoriesFromDirectory = __webpack_require__(/*! ./getFilesAndDirectoriesFromDirectory */ \"./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js\");\n\nmodule.exports = function webkitGetAsEntryApi(dataTransfer, logDropError) {\n  var files = [];\n  var rootPromises = [];\n  /**\n   * Returns a resolved promise, when :files array is enhanced\n   *\n   * @param {(FileSystemFileEntry|FileSystemDirectoryEntry)} entry\n   * @returns {Promise} - empty promise that resolves when :files is enhanced with a file\n   */\n\n  var createPromiseToAddFileOrParseDirectory = function createPromiseToAddFileOrParseDirectory(entry) {\n    return new Promise(function (resolve) {\n      // This is a base call\n      if (entry.isFile) {\n        // Creates a new File object which can be used to read the file.\n        entry.file(function (file) {\n          file.relativePath = getRelativePath(entry);\n          files.push(file);\n          resolve();\n        }, // Make sure we resolve on error anyway, it's fine if only one file couldn't be read!\n        function (error) {\n          logDropError(error);\n          resolve();\n        }); // This is a recursive call\n      } else if (entry.isDirectory) {\n        var directoryReader = entry.createReader();\n        getFilesAndDirectoriesFromDirectory(directoryReader, [], logDropError, {\n          onSuccess: function onSuccess(entries) {\n            var promises = entries.map(function (entry) {\n              return createPromiseToAddFileOrParseDirectory(entry);\n            });\n            Promise.all(promises).then(function () {\n              return resolve();\n            });\n          }\n        });\n      }\n    });\n  }; // For each dropped item, - make sure it's a file/directory, and start deepening in!\n\n\n  toArray(dataTransfer.items).forEach(function (item) {\n    var entry = item.webkitGetAsEntry(); // :entry can be null when we drop the url e.g.\n\n    if (entry) {\n      rootPromises.push(createPromiseToAddFileOrParseDirectory(entry));\n    }\n  });\n  return Promise.all(rootPromises).then(function () {\n    return files;\n  });\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getFileNameAndExtension.js":
/*!*****************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getFileNameAndExtension.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Takes a full filename string and returns an object {name, extension}\n *\n * @param {string} fullFileName\n * @returns {object} {name, extension}\n */\nmodule.exports = function getFileNameAndExtension(fullFileName) {\n  var lastDot = fullFileName.lastIndexOf('.'); // these count as no extension: \"no-dot\", \"trailing-dot.\"\n\n  if (lastDot === -1 || lastDot === fullFileName.length - 1) {\n    return {\n      name: fullFileName,\n      extension: undefined\n    };\n  } else {\n    return {\n      name: fullFileName.slice(0, lastDot),\n      extension: fullFileName.slice(lastDot + 1)\n    };\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getFileNameAndExtension.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getFileType.js":
/*!*****************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getFileType.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var getFileNameAndExtension = __webpack_require__(/*! ./getFileNameAndExtension */ \"./node_modules/@uppy/utils/lib/getFileNameAndExtension.js\");\n\nvar mimeTypes = __webpack_require__(/*! ./mimeTypes */ \"./node_modules/@uppy/utils/lib/mimeTypes.js\");\n\nmodule.exports = function getFileType(file) {\n  var fileExtension = file.name ? getFileNameAndExtension(file.name).extension : null;\n  fileExtension = fileExtension ? fileExtension.toLowerCase() : null;\n\n  if (file.type) {\n    // if mime type is set in the file object already, use that\n    return file.type;\n  } else if (fileExtension && mimeTypes[fileExtension]) {\n    // else, see if we can map extension to a mime type\n    return mimeTypes[fileExtension];\n  } else {\n    // if all fails, fall back to a generic byte stream type\n    return 'application/octet-stream';\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getFileType.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getFileTypeExtension.js":
/*!**************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getFileTypeExtension.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// TODO Check which types are actually supported in browsers. Chrome likes webm\n// from my testing, but we may need more.\n// We could use a library but they tend to contain dozens of KBs of mappings,\n// most of which will go unused, so not sure if that's worth it.\nvar mimeToExtensions = {\n  'video/ogg': 'ogv',\n  'audio/ogg': 'ogg',\n  'video/webm': 'webm',\n  'audio/webm': 'webm',\n  'video/x-matroska': 'mkv',\n  'video/mp4': 'mp4',\n  'audio/mp3': 'mp3'\n};\n\nmodule.exports = function getFileTypeExtension(mimeType) {\n  // Remove the ; bit in 'video/x-matroska;codecs=avc1'\n  mimeType = mimeType.replace(/;.*$/, '');\n  return mimeToExtensions[mimeType] || null;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getFileTypeExtension.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getSocketHost.js":
/*!*******************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getSocketHost.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function getSocketHost(url) {\n  // get the host domain\n  var regex = /^(?:https?:\\/\\/|\\/\\/)?(?:[^@\\n]+@)?(?:www\\.)?([^\\n]+)/i;\n  var host = regex.exec(url)[1];\n  var socketProtocol = /^http:\\/\\//i.test(url) ? 'ws' : 'wss';\n  return socketProtocol + \"://\" + host;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getSocketHost.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getSpeed.js":
/*!**************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getSpeed.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function getSpeed(fileProgress) {\n  if (!fileProgress.bytesUploaded) return 0;\n  var timeElapsed = new Date() - fileProgress.uploadStarted;\n  var uploadSpeed = fileProgress.bytesUploaded / (timeElapsed / 1000);\n  return uploadSpeed;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getSpeed.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/getTimeStamp.js":
/*!******************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/getTimeStamp.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Returns a timestamp in the format of `hours:minutes:seconds`\n */\nmodule.exports = function getTimeStamp() {\n  var date = new Date();\n  var hours = pad(date.getHours().toString());\n  var minutes = pad(date.getMinutes().toString());\n  var seconds = pad(date.getSeconds().toString());\n  return hours + ':' + minutes + ':' + seconds;\n};\n/**\n * Adds zero to strings shorter than two characters\n */\n\n\nfunction pad(str) {\n  return str.length !== 2 ? 0 + str : str;\n}\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/getTimeStamp.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/hasProperty.js":
/*!*****************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/hasProperty.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function has(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/hasProperty.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/isDOMElement.js":
/*!******************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/isDOMElement.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Check if an object is a DOM element. Duck-typing based on `nodeType`.\n *\n * @param {*} obj\n */\nmodule.exports = function isDOMElement(obj) {\n  return obj && typeof obj === 'object' && obj.nodeType === Node.ELEMENT_NODE;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/isDOMElement.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/isDragDropSupported.js":
/*!*************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/isDragDropSupported.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).\n *\n * @returns {boolean}\n */\nmodule.exports = function isDragDropSupported() {\n  var div = document.createElement('div');\n\n  if (!('draggable' in div) || !('ondragstart' in div && 'ondrop' in div)) {\n    return false;\n  }\n\n  if (!('FormData' in window)) {\n    return false;\n  }\n\n  if (!('FileReader' in window)) {\n    return false;\n  }\n\n  return true;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/isDragDropSupported.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/isObjectURL.js":
/*!*****************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/isObjectURL.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Check if a URL string is an object URL from `URL.createObjectURL`.\n *\n * @param {string} url\n * @returns {boolean}\n */\nmodule.exports = function isObjectURL(url) {\n  return url.indexOf('blob:') === 0;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/isObjectURL.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/isPreviewSupported.js":
/*!************************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/isPreviewSupported.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function isPreviewSupported(fileType) {\n  if (!fileType) return false;\n  var fileTypeSpecific = fileType.split('/')[1]; // list of images that browsers can preview\n\n  if (/^(jpe?g|gif|png|svg|svg\\+xml|bmp|webp)$/.test(fileTypeSpecific)) {\n    return true;\n  }\n\n  return false;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/isPreviewSupported.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/isTouchDevice.js":
/*!*******************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/isTouchDevice.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function isTouchDevice() {\n  // works on most browsers\n  if ('ontouchstart' in window) {\n    return true;\n  } // works on IE10/11 and Surface\n  // eslint-disable-next-line compat/compat\n\n\n  return !!navigator.maxTouchPoints;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/isTouchDevice.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/mimeTypes.js":
/*!***************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/mimeTypes.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// ___Why not add the mime-types package?\n//    It's 19.7kB gzipped, and we only need mime types for well-known extensions (for file previews).\n// ___Where to take new extensions from?\n//    https://github.com/jshttp/mime-db/blob/master/db.json\nmodule.exports = {\n  md: 'text/markdown',\n  markdown: 'text/markdown',\n  mp4: 'video/mp4',\n  mp3: 'audio/mp3',\n  svg: 'image/svg+xml',\n  jpg: 'image/jpeg',\n  png: 'image/png',\n  gif: 'image/gif',\n  heic: 'image/heic',\n  heif: 'image/heif',\n  yaml: 'text/yaml',\n  yml: 'text/yaml',\n  csv: 'text/csv',\n  avi: 'video/x-msvideo',\n  mks: 'video/x-matroska',\n  mkv: 'video/x-matroska',\n  mov: 'video/quicktime',\n  doc: 'application/msword',\n  docm: 'application/vnd.ms-word.document.macroenabled.12',\n  docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n  dot: 'application/msword',\n  dotm: 'application/vnd.ms-word.template.macroenabled.12',\n  dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n  xla: 'application/vnd.ms-excel',\n  xlam: 'application/vnd.ms-excel.addin.macroenabled.12',\n  xlc: 'application/vnd.ms-excel',\n  xlf: 'application/x-xliff+xml',\n  xlm: 'application/vnd.ms-excel',\n  xls: 'application/vnd.ms-excel',\n  xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n  xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',\n  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  xlt: 'application/vnd.ms-excel',\n  xltm: 'application/vnd.ms-excel.template.macroenabled.12',\n  xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n  xlw: 'application/vnd.ms-excel',\n  txt: 'text/plain',\n  text: 'text/plain',\n  conf: 'text/plain',\n  log: 'text/plain',\n  pdf: 'application/pdf'\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/mimeTypes.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/prettyBytes.js":
/*!*****************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/prettyBytes.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// Adapted from https://github.com/Flet/prettier-bytes/\n// Changing 1000 bytes to 1024, so we can keep uppercase KB vs kB\n// ISC License (c) Dan Flettre https://github.com/Flet/prettier-bytes/blob/master/LICENSE\nmodule.exports = prettierBytes;\n\nfunction prettierBytes(num) {\n  if (typeof num !== 'number' || isNaN(num)) {\n    throw new TypeError('Expected a number, got ' + typeof num);\n  }\n\n  var neg = num < 0;\n  var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n  if (neg) {\n    num = -num;\n  }\n\n  if (num < 1) {\n    return (neg ? '-' : '') + num + ' B';\n  }\n\n  var exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1);\n  num = Number(num / Math.pow(1024, exponent));\n  var unit = units[exponent];\n\n  if (num >= 10 || num % 1 === 0) {\n    // Do not show decimals when the number is two-digit, or if the number has no\n    // decimal component.\n    return (neg ? '-' : '') + num.toFixed(0) + ' ' + unit;\n  } else {\n    return (neg ? '-' : '') + num.toFixed(1) + ' ' + unit;\n  }\n}\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/prettyBytes.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/prettyETA.js":
/*!***************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/prettyETA.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var secondsToTime = __webpack_require__(/*! ./secondsToTime */ \"./node_modules/@uppy/utils/lib/secondsToTime.js\");\n\nmodule.exports = function prettyETA(seconds) {\n  var time = secondsToTime(seconds); // Only display hours and minutes if they are greater than 0 but always\n  // display minutes if hours is being displayed\n  // Display a leading zero if the there is a preceding unit: 1m 05s, but 5s\n\n  var hoursStr = time.hours ? time.hours + 'h ' : '';\n  var minutesVal = time.hours ? ('0' + time.minutes).substr(-2) : time.minutes;\n  var minutesStr = minutesVal ? minutesVal + 'm' : '';\n  var secondsVal = minutesVal ? ('0' + time.seconds).substr(-2) : time.seconds;\n  var secondsStr = time.hours ? '' : minutesVal ? ' ' + secondsVal + 's' : secondsVal + 's';\n  return \"\" + hoursStr + minutesStr + secondsStr;\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/prettyETA.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/secondsToTime.js":
/*!*******************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/secondsToTime.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function secondsToTime(rawSeconds) {\n  var hours = Math.floor(rawSeconds / 3600) % 24;\n  var minutes = Math.floor(rawSeconds / 60) % 60;\n  var seconds = Math.floor(rawSeconds % 60);\n  return {\n    hours: hours,\n    minutes: minutes,\n    seconds: seconds\n  };\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/secondsToTime.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/settle.js":
/*!************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/settle.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function settle(promises) {\n  var resolutions = [];\n  var rejections = [];\n\n  function resolved(value) {\n    resolutions.push(value);\n  }\n\n  function rejected(error) {\n    rejections.push(error);\n  }\n\n  var wait = Promise.all(promises.map(function (promise) {\n    return promise.then(resolved, rejected);\n  }));\n  return wait.then(function () {\n    return {\n      successful: resolutions,\n      failed: rejections\n    };\n  });\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/settle.js?");

/***/ }),

/***/ "./node_modules/@uppy/utils/lib/toArray.js":
/*!*************************************************!*\
  !*** ./node_modules/@uppy/utils/lib/toArray.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Converts list into array\n */\nmodule.exports = function toArray(list) {\n  return Array.prototype.slice.call(list || [], 0);\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/utils/lib/toArray.js?");

/***/ }),

/***/ "./node_modules/@uppy/webcam/lib/CameraIcon.js":
/*!*****************************************************!*\
  !*** ./node_modules/@uppy/webcam/lib/CameraIcon.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nmodule.exports = function (props) {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    fill: \"#0097DC\",\n    width: \"66\",\n    height: \"55\",\n    viewBox: \"0 0 66 55\"\n  }, h(\"path\", {\n    d: \"M57.3 8.433c4.59 0 8.1 3.51 8.1 8.1v29.7c0 4.59-3.51 8.1-8.1 8.1H8.7c-4.59 0-8.1-3.51-8.1-8.1v-29.7c0-4.59 3.51-8.1 8.1-8.1h9.45l4.59-7.02c.54-.54 1.35-1.08 2.16-1.08h16.2c.81 0 1.62.54 2.16 1.08l4.59 7.02h9.45zM33 14.64c-8.62 0-15.393 6.773-15.393 15.393 0 8.62 6.773 15.393 15.393 15.393 8.62 0 15.393-6.773 15.393-15.393 0-8.62-6.773-15.393-15.393-15.393zM33 40c-5.648 0-9.966-4.319-9.966-9.967 0-5.647 4.318-9.966 9.966-9.966s9.966 4.319 9.966 9.966C42.966 35.681 38.648 40 33 40z\",\n    \"fill-rule\": \"evenodd\"\n  }));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/webcam/lib/CameraIcon.js?");

/***/ }),

/***/ "./node_modules/@uppy/webcam/lib/CameraScreen.js":
/*!*******************************************************!*\
  !*** ./node_modules/@uppy/webcam/lib/CameraScreen.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h,\n    Component = _require.Component;\n\nvar SnapshotButton = __webpack_require__(/*! ./SnapshotButton */ \"./node_modules/@uppy/webcam/lib/SnapshotButton.js\");\n\nvar RecordButton = __webpack_require__(/*! ./RecordButton */ \"./node_modules/@uppy/webcam/lib/RecordButton.js\");\n\nvar RecordingLength = __webpack_require__(/*! ./RecordingLength */ \"./node_modules/@uppy/webcam/lib/RecordingLength.js\");\n\nfunction isModeAvailable(modes, mode) {\n  return modes.indexOf(mode) !== -1;\n}\n\nvar CameraScreen =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(CameraScreen, _Component);\n\n  function CameraScreen() {\n    return _Component.apply(this, arguments) || this;\n  }\n\n  var _proto = CameraScreen.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.props.onFocus();\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.props.onStop();\n  };\n\n  _proto.render = function render() {\n    var shouldShowRecordButton = this.props.supportsRecording && (isModeAvailable(this.props.modes, 'video-only') || isModeAvailable(this.props.modes, 'audio-only') || isModeAvailable(this.props.modes, 'video-audio'));\n    var shouldShowSnapshotButton = isModeAvailable(this.props.modes, 'picture');\n    var shouldShowRecordingLength = this.props.supportsRecording && this.props.showRecordingLength;\n    return h(\"div\", {\n      class: \"uppy uppy-Webcam-container\"\n    }, h(\"div\", {\n      class: \"uppy-Webcam-videoContainer\"\n    }, h(\"video\", {\n      class: \"uppy-Webcam-video  \" + (this.props.mirror ? 'uppy-Webcam-video--mirrored' : ''),\n      autoplay: true,\n      muted: true,\n      playsinline: true,\n      srcObject: this.props.src || ''\n    })), h(\"div\", {\n      class: \"uppy-Webcam-buttonContainer\"\n    }, shouldShowRecordingLength ? RecordingLength(this.props) : null, ' ', shouldShowSnapshotButton ? SnapshotButton(this.props) : null, ' ', shouldShowRecordButton ? RecordButton(this.props) : null));\n  };\n\n  return CameraScreen;\n}(Component);\n\nmodule.exports = CameraScreen;\n\n//# sourceURL=webpack:///./node_modules/@uppy/webcam/lib/CameraScreen.js?");

/***/ }),

/***/ "./node_modules/@uppy/webcam/lib/PermissionsScreen.js":
/*!************************************************************!*\
  !*** ./node_modules/@uppy/webcam/lib/PermissionsScreen.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nmodule.exports = function (props) {\n  return h(\"div\", {\n    class: \"uppy-Webcam-permissons\"\n  }, h(\"div\", {\n    class: \"uppy-Webcam-permissonsIcon\"\n  }, props.icon()), h(\"h1\", {\n    class: \"uppy-Webcam-title\"\n  }, props.i18n('allowAccessTitle')), h(\"p\", null, props.i18n('allowAccessDescription')));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/webcam/lib/PermissionsScreen.js?");

/***/ }),

/***/ "./node_modules/@uppy/webcam/lib/RecordButton.js":
/*!*******************************************************!*\
  !*** ./node_modules/@uppy/webcam/lib/RecordButton.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nmodule.exports = function RecordButton(_ref) {\n  var recording = _ref.recording,\n      onStartRecording = _ref.onStartRecording,\n      onStopRecording = _ref.onStopRecording,\n      i18n = _ref.i18n;\n\n  if (recording) {\n    return h(\"button\", {\n      class: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--video\",\n      type: \"button\",\n      title: i18n('stopRecording'),\n      \"aria-label\": i18n('stopRecording'),\n      onclick: onStopRecording,\n      \"data-uppy-super-focusable\": true\n    }, h(\"svg\", {\n      \"aria-hidden\": \"true\",\n      focusable: \"false\",\n      class: \"UppyIcon\",\n      width: \"100\",\n      height: \"100\",\n      viewBox: \"0 0 100 100\"\n    }, h(\"rect\", {\n      x: \"15\",\n      y: \"15\",\n      width: \"70\",\n      height: \"70\"\n    })));\n  }\n\n  return h(\"button\", {\n    class: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--video\",\n    type: \"button\",\n    title: i18n('startRecording'),\n    \"aria-label\": i18n('startRecording'),\n    onclick: onStartRecording,\n    \"data-uppy-super-focusable\": true\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    class: \"UppyIcon\",\n    width: \"100\",\n    height: \"100\",\n    viewBox: \"0 0 100 100\"\n  }, h(\"circle\", {\n    cx: \"50\",\n    cy: \"50\",\n    r: \"40\"\n  })));\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/webcam/lib/RecordButton.js?");

/***/ }),

/***/ "./node_modules/@uppy/webcam/lib/RecordingLength.js":
/*!**********************************************************!*\
  !*** ./node_modules/@uppy/webcam/lib/RecordingLength.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar formatSeconds = __webpack_require__(/*! ./formatSeconds */ \"./node_modules/@uppy/webcam/lib/formatSeconds.js\");\n\nmodule.exports = function RecordingLength(_ref) {\n  var recordingLengthSeconds = _ref.recordingLengthSeconds,\n      i18n = _ref.i18n;\n  var formattedRecordingLengthSeconds = formatSeconds(recordingLengthSeconds);\n  return h(\"div\", {\n    class: \"uppy-Webcam-recordingLength\",\n    \"aria-label\": i18n('recordingLength', {\n      recording_length: formattedRecordingLengthSeconds\n    })\n  }, formattedRecordingLengthSeconds);\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/webcam/lib/RecordingLength.js?");

/***/ }),

/***/ "./node_modules/@uppy/webcam/lib/SnapshotButton.js":
/*!*********************************************************!*\
  !*** ./node_modules/@uppy/webcam/lib/SnapshotButton.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar CameraIcon = __webpack_require__(/*! ./CameraIcon */ \"./node_modules/@uppy/webcam/lib/CameraIcon.js\");\n\nmodule.exports = function (_ref) {\n  var onSnapshot = _ref.onSnapshot,\n      i18n = _ref.i18n;\n  return h(\"button\", {\n    class: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--picture\",\n    type: \"button\",\n    title: i18n('takePicture'),\n    \"aria-label\": i18n('takePicture'),\n    onclick: onSnapshot,\n    \"data-uppy-super-focusable\": true\n  }, CameraIcon());\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/webcam/lib/SnapshotButton.js?");

/***/ }),

/***/ "./node_modules/@uppy/webcam/lib/formatSeconds.js":
/*!********************************************************!*\
  !*** ./node_modules/@uppy/webcam/lib/formatSeconds.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Takes an Integer value of seconds (e.g. 83) and converts it into a human-readable formatted string (e.g. '1:23').\n *\n * @param {Integer} seconds\n * @returns {string} the formatted seconds (e.g. '1:23' for 1 minute and 23 seconds)\n *\n */\nmodule.exports = function formatSeconds(seconds) {\n  return Math.floor(seconds / 60) + \":\" + String(seconds % 60).padStart(2, 0);\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/webcam/lib/formatSeconds.js?");

/***/ }),

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

eval("var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\"),\n    h = _require.h;\n\nvar _require2 = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require2.Plugin;\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar getFileTypeExtension = __webpack_require__(/*! @uppy/utils/lib/getFileTypeExtension */ \"./node_modules/@uppy/utils/lib/getFileTypeExtension.js\");\n\nvar canvasToBlob = __webpack_require__(/*! @uppy/utils/lib/canvasToBlob */ \"./node_modules/@uppy/utils/lib/canvasToBlob.js\");\n\nvar supportsMediaRecorder = __webpack_require__(/*! ./supportsMediaRecorder */ \"./node_modules/@uppy/webcam/lib/supportsMediaRecorder.js\");\n\nvar CameraIcon = __webpack_require__(/*! ./CameraIcon */ \"./node_modules/@uppy/webcam/lib/CameraIcon.js\");\n\nvar CameraScreen = __webpack_require__(/*! ./CameraScreen */ \"./node_modules/@uppy/webcam/lib/CameraScreen.js\");\n\nvar PermissionsScreen = __webpack_require__(/*! ./PermissionsScreen */ \"./node_modules/@uppy/webcam/lib/PermissionsScreen.js\"); // Setup getUserMedia, with polyfill for older browsers\n// Adapted from: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n\n\nfunction getMediaDevices() {\n  // eslint-disable-next-line compat/compat\n  if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n    // eslint-disable-next-line compat/compat\n    return navigator.mediaDevices;\n  }\n\n  var _getUserMedia = navigator.mozGetUserMedia || navigator.webkitGetUserMedia;\n\n  if (!_getUserMedia) {\n    return null;\n  }\n\n  return {\n    getUserMedia: function getUserMedia(opts) {\n      return new Promise(function (resolve, reject) {\n        _getUserMedia.call(navigator, opts, resolve, reject);\n      });\n    }\n  };\n}\n/**\n * Webcam\n */\n\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(Webcam, _Plugin);\n\n  function Webcam(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.mediaDevices = getMediaDevices();\n    _this.supportsUserMedia = !!_this.mediaDevices;\n    _this.protocol = location.protocol.match(/https/i) ? 'https' : 'http';\n    _this.id = _this.opts.id || 'Webcam';\n    _this.title = _this.opts.title || 'Camera';\n    _this.type = 'acquirer';\n    _this.icon = CameraIcon;\n    _this.defaultLocale = {\n      strings: {\n        smile: 'Smile!',\n        takePicture: 'Take a picture',\n        startRecording: 'Begin video recording',\n        stopRecording: 'Stop video recording',\n        allowAccessTitle: 'Please allow access to your camera',\n        allowAccessDescription: 'In order to take pictures or record video with your camera, please allow camera access for this site.',\n        recordingLength: 'Recording length %{recording_length}'\n      }\n    }; // set default options\n\n    var defaultOptions = {\n      onBeforeSnapshot: function onBeforeSnapshot() {\n        return Promise.resolve();\n      },\n      countdown: false,\n      modes: ['video-audio', 'video-only', 'audio-only', 'picture'],\n      mirror: true,\n      facingMode: 'user',\n      preferredVideoMimeType: null,\n      showRecordingLength: false\n    };\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n\n    _this.i18nInit();\n\n    _this.install = _this.install.bind(_assertThisInitialized(_this));\n    _this.setPluginState = _this.setPluginState.bind(_assertThisInitialized(_this));\n    _this.render = _this.render.bind(_assertThisInitialized(_this)); // Camera controls\n\n    _this.start = _this.start.bind(_assertThisInitialized(_this));\n    _this.stop = _this.stop.bind(_assertThisInitialized(_this));\n    _this.takeSnapshot = _this.takeSnapshot.bind(_assertThisInitialized(_this));\n    _this.startRecording = _this.startRecording.bind(_assertThisInitialized(_this));\n    _this.stopRecording = _this.stopRecording.bind(_assertThisInitialized(_this));\n    _this.oneTwoThreeSmile = _this.oneTwoThreeSmile.bind(_assertThisInitialized(_this));\n    _this.focus = _this.focus.bind(_assertThisInitialized(_this));\n    _this.webcamActive = false;\n\n    if (_this.opts.countdown) {\n      _this.opts.onBeforeSnapshot = _this.oneTwoThreeSmile;\n    }\n\n    return _this;\n  }\n\n  var _proto = Webcam.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.i18nArray = this.translator.translateArray.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  };\n\n  _proto.isSupported = function isSupported() {\n    return !!this.mediaDevices;\n  };\n\n  _proto.getConstraints = function getConstraints() {\n    var acceptsAudio = this.opts.modes.indexOf('video-audio') !== -1 || this.opts.modes.indexOf('audio-only') !== -1;\n    var acceptsVideo = this.opts.modes.indexOf('video-audio') !== -1 || this.opts.modes.indexOf('video-only') !== -1 || this.opts.modes.indexOf('picture') !== -1;\n    return {\n      audio: acceptsAudio,\n      video: acceptsVideo ? {\n        facingMode: this.opts.facingMode\n      } : false\n    };\n  };\n\n  _proto.start = function start() {\n    var _this2 = this;\n\n    if (!this.isSupported()) {\n      return Promise.reject(new Error('Webcam access not supported'));\n    }\n\n    this.webcamActive = true;\n    var constraints = this.getConstraints(); // ask user for access to their camera\n\n    return this.mediaDevices.getUserMedia(constraints).then(function (stream) {\n      _this2.stream = stream; // this.streamSrc = URL.createObjectURL(this.stream)\n\n      _this2.setPluginState({\n        cameraReady: true\n      });\n    }).catch(function (err) {\n      _this2.setPluginState({\n        cameraError: err\n      });\n    });\n  };\n\n  _proto.startRecording = function startRecording() {\n    var _this3 = this;\n\n    var options = {};\n    var preferredVideoMimeType = this.opts.preferredVideoMimeType; // Attempt to use the passed preferredVideoMimeType (if any) during recording.\n    // If the browser doesn't support it, we'll fall back to the browser default instead\n\n    if (preferredVideoMimeType && MediaRecorder.isTypeSupported(preferredVideoMimeType) && getFileTypeExtension(preferredVideoMimeType)) {\n      options.mimeType = preferredVideoMimeType;\n    }\n\n    this.recorder = new MediaRecorder(this.stream, options);\n    this.recordingChunks = [];\n    this.recorder.addEventListener('dataavailable', function (event) {\n      _this3.recordingChunks.push(event.data);\n    });\n    this.recorder.start();\n\n    if (this.opts.showRecordingLength) {\n      // Start the recordingLengthTimer if we are showing the recording length.\n      this.recordingLengthTimer = setInterval(function () {\n        var currentRecordingLength = _this3.getPluginState().recordingLengthSeconds;\n\n        _this3.setPluginState({\n          recordingLengthSeconds: currentRecordingLength + 1\n        });\n      }, 1000);\n    }\n\n    this.setPluginState({\n      isRecording: true\n    });\n  };\n\n  _proto.stopRecording = function stopRecording() {\n    var _this4 = this;\n\n    var stopped = new Promise(function (resolve, reject) {\n      _this4.recorder.addEventListener('stop', function () {\n        resolve();\n      });\n\n      _this4.recorder.stop();\n\n      if (_this4.opts.showRecordingLength) {\n        // Stop the recordingLengthTimer if we are showing the recording length.\n        clearInterval(_this4.recordingLengthTimer);\n\n        _this4.setPluginState({\n          recordingLengthSeconds: 0\n        });\n      }\n    });\n    return stopped.then(function () {\n      _this4.setPluginState({\n        isRecording: false\n      });\n\n      return _this4.getVideo();\n    }).then(function (file) {\n      try {\n        _this4.uppy.addFile(file);\n      } catch (err) {\n        // Logging the error, exept restrictions, which is handled in Core\n        if (!err.isRestriction) {\n          _this4.uppy.log(err);\n        }\n      }\n    }).then(function () {\n      _this4.recordingChunks = null;\n      _this4.recorder = null; // Close the Dashboard panel if plugin is installed\n      // into Dashboard (could be other parent UI plugin)\n      // if (this.parent && this.parent.hideAllPanels) {\n      //   this.parent.hideAllPanels()\n      // }\n    }, function (error) {\n      _this4.recordingChunks = null;\n      _this4.recorder = null;\n      throw error;\n    });\n  };\n\n  _proto.stop = function stop() {\n    this.stream.getAudioTracks().forEach(function (track) {\n      track.stop();\n    });\n    this.stream.getVideoTracks().forEach(function (track) {\n      track.stop();\n    });\n    this.webcamActive = false;\n    this.stream = null;\n  };\n\n  _proto.getVideoElement = function getVideoElement() {\n    return this.el.querySelector('.uppy-Webcam-video');\n  };\n\n  _proto.oneTwoThreeSmile = function oneTwoThreeSmile() {\n    var _this5 = this;\n\n    return new Promise(function (resolve, reject) {\n      var count = _this5.opts.countdown;\n      var countDown = setInterval(function () {\n        if (!_this5.webcamActive) {\n          clearInterval(countDown);\n          _this5.captureInProgress = false;\n          return reject(new Error('Webcam is not active'));\n        }\n\n        if (count > 0) {\n          _this5.uppy.info(count + \"...\", 'warning', 800);\n\n          count--;\n        } else {\n          clearInterval(countDown);\n\n          _this5.uppy.info(_this5.i18n('smile'), 'success', 1500);\n\n          setTimeout(function () {\n            return resolve();\n          }, 1500);\n        }\n      }, 1000);\n    });\n  };\n\n  _proto.takeSnapshot = function takeSnapshot() {\n    var _this6 = this;\n\n    if (this.captureInProgress) return;\n    this.captureInProgress = true;\n    this.opts.onBeforeSnapshot().catch(function (err) {\n      var message = typeof err === 'object' ? err.message : err;\n\n      _this6.uppy.info(message, 'error', 5000);\n\n      return Promise.reject(new Error(\"onBeforeSnapshot: \" + message));\n    }).then(function () {\n      return _this6.getImage();\n    }).then(function (tagFile) {\n      _this6.captureInProgress = false; // Close the Dashboard panel if plugin is installed\n      // into Dashboard (could be other parent UI plugin)\n      // if (this.parent && this.parent.hideAllPanels) {\n      //   this.parent.hideAllPanels()\n      // }\n\n      try {\n        _this6.uppy.addFile(tagFile);\n      } catch (err) {\n        // Logging the error, exept restrictions, which is handled in Core\n        if (!err.isRestriction) {\n          _this6.uppy.log(err);\n        }\n      }\n    }, function (error) {\n      _this6.captureInProgress = false;\n      throw error;\n    });\n  };\n\n  _proto.getImage = function getImage() {\n    var _this7 = this;\n\n    var video = this.getVideoElement();\n\n    if (!video) {\n      return Promise.reject(new Error('No video element found, likely due to the Webcam tab being closed.'));\n    }\n\n    var name = \"cam-\" + Date.now() + \".jpg\";\n    var mimeType = 'image/jpeg';\n    var width = video.videoWidth;\n    var height = video.videoHeight; // const scaleH = this.opts.mirror ? -1 : 1 // Set horizontal scale to -1 if flip horizontal\n    // const scaleV = 1\n    // const posX = this.opts.mirror ? width * -1 : 0 // Set x position to -100% if flip horizontal\n    // const posY = 0\n\n    var canvas = document.createElement('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    var ctx = canvas.getContext('2d');\n    ctx.drawImage(video, 0, 0); // ctx.save() // Save the current state\n    // ctx.scale(scaleH, scaleV) // Set scale to flip the image\n    // ctx.drawImage(video, posX, posY, width, height) // draw the image\n    // ctx.restore() // Restore the last saved state\n\n    return canvasToBlob(canvas, mimeType).then(function (blob) {\n      return {\n        source: _this7.id,\n        name: name,\n        data: new Blob([blob], {\n          type: mimeType\n        }),\n        type: mimeType\n      };\n    });\n  };\n\n  _proto.getVideo = function getVideo() {\n    var mimeType = this.recordingChunks[0].type;\n    var fileExtension = getFileTypeExtension(mimeType);\n\n    if (!fileExtension) {\n      return Promise.reject(new Error(\"Could not retrieve recording: Unsupported media type \\\"\" + mimeType + \"\\\"\"));\n    }\n\n    var name = \"webcam-\" + Date.now() + \".\" + fileExtension;\n    var blob = new Blob(this.recordingChunks, {\n      type: mimeType\n    });\n    var file = {\n      source: this.id,\n      name: name,\n      data: new Blob([blob], {\n        type: mimeType\n      }),\n      type: mimeType\n    };\n    return Promise.resolve(file);\n  };\n\n  _proto.focus = function focus() {\n    var _this8 = this;\n\n    if (!this.opts.countdown) return;\n    setTimeout(function () {\n      _this8.uppy.info(_this8.i18n('smile'), 'success', 1500);\n    }, 1000);\n  };\n\n  _proto.render = function render(state) {\n    if (!this.webcamActive) {\n      this.start();\n    }\n\n    var webcamState = this.getPluginState();\n\n    if (!webcamState.cameraReady) {\n      return h(PermissionsScreen, {\n        icon: CameraIcon,\n        i18n: this.i18n\n      });\n    }\n\n    return h(CameraScreen, _extends({}, webcamState, {\n      onSnapshot: this.takeSnapshot,\n      onStartRecording: this.startRecording,\n      onStopRecording: this.stopRecording,\n      onFocus: this.focus,\n      onStop: this.stop,\n      i18n: this.i18n,\n      modes: this.opts.modes,\n      showRecordingLength: this.opts.showRecordingLength,\n      supportsRecording: supportsMediaRecorder(),\n      recording: webcamState.isRecording,\n      mirror: this.opts.mirror,\n      src: this.stream\n    }));\n  };\n\n  _proto.install = function install() {\n    this.setPluginState({\n      cameraReady: false,\n      recordingLengthSeconds: 0\n    });\n    var target = this.opts.target;\n\n    if (target) {\n      this.mount(target, this);\n    }\n  };\n\n  _proto.uninstall = function uninstall() {\n    if (this.stream) {\n      this.stop();\n    }\n\n    this.unmount();\n  };\n\n  return Webcam;\n}(Plugin), _class.VERSION = \"1.5.1\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/webcam/lib/index.js?");

/***/ }),

/***/ "./node_modules/@uppy/webcam/lib/supportsMediaRecorder.js":
/*!****************************************************************!*\
  !*** ./node_modules/@uppy/webcam/lib/supportsMediaRecorder.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function supportsMediaRecorder() {\n  return typeof MediaRecorder === 'function' && !!MediaRecorder.prototype && typeof MediaRecorder.prototype.start === 'function';\n};\n\n//# sourceURL=webpack:///./node_modules/@uppy/webcam/lib/supportsMediaRecorder.js?");

/***/ }),

/***/ "./node_modules/@uppy/xhr-upload/lib/index.js":
/*!****************************************************!*\
  !*** ./node_modules/@uppy/xhr-upload/lib/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var _class, _temp;\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar _require = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\"),\n    Plugin = _require.Plugin;\n\nvar cuid = __webpack_require__(/*! cuid */ \"./node_modules/cuid/index.js\");\n\nvar Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ \"./node_modules/@uppy/utils/lib/Translator.js\");\n\nvar _require2 = __webpack_require__(/*! @uppy/companion-client */ \"./node_modules/@uppy/companion-client/lib/index.js\"),\n    Provider = _require2.Provider,\n    RequestClient = _require2.RequestClient,\n    Socket = _require2.Socket;\n\nvar emitSocketProgress = __webpack_require__(/*! @uppy/utils/lib/emitSocketProgress */ \"./node_modules/@uppy/utils/lib/emitSocketProgress.js\");\n\nvar getSocketHost = __webpack_require__(/*! @uppy/utils/lib/getSocketHost */ \"./node_modules/@uppy/utils/lib/getSocketHost.js\");\n\nvar settle = __webpack_require__(/*! @uppy/utils/lib/settle */ \"./node_modules/@uppy/utils/lib/settle.js\");\n\nvar EventTracker = __webpack_require__(/*! @uppy/utils/lib/EventTracker */ \"./node_modules/@uppy/utils/lib/EventTracker.js\");\n\nvar ProgressTimeout = __webpack_require__(/*! @uppy/utils/lib/ProgressTimeout */ \"./node_modules/@uppy/utils/lib/ProgressTimeout.js\");\n\nvar RateLimitedQueue = __webpack_require__(/*! @uppy/utils/lib/RateLimitedQueue */ \"./node_modules/@uppy/utils/lib/RateLimitedQueue.js\");\n\nfunction buildResponseError(xhr, error) {\n  // No error message\n  if (!error) error = new Error('Upload error'); // Got an error message string\n\n  if (typeof error === 'string') error = new Error(error); // Got something else\n\n  if (!(error instanceof Error)) {\n    error = _extends(new Error('Upload error'), {\n      data: error\n    });\n  }\n\n  error.request = xhr;\n  return error;\n}\n/**\n * Set `data.type` in the blob to `file.meta.type`,\n * because we might have detected a more accurate file type in Uppy\n * https://stackoverflow.com/a/50875615\n *\n * @param {object} file File object with `data`, `size` and `meta` properties\n * @returns {object} blob updated with the new `type` set from `file.meta.type`\n */\n\n\nfunction setTypeInBlob(file) {\n  var dataWithUpdatedType = file.data.slice(0, file.data.size, file.meta.type);\n  return dataWithUpdatedType;\n}\n\nmodule.exports = (_temp = _class =\n/*#__PURE__*/\nfunction (_Plugin) {\n  _inheritsLoose(XHRUpload, _Plugin);\n\n  function XHRUpload(uppy, opts) {\n    var _this;\n\n    _this = _Plugin.call(this, uppy, opts) || this;\n    _this.type = 'uploader';\n    _this.id = _this.opts.id || 'XHRUpload';\n    _this.title = 'XHRUpload';\n    _this.defaultLocale = {\n      strings: {\n        timedOut: 'Upload stalled for %{seconds} seconds, aborting.'\n      }\n    }; // Default options\n\n    var defaultOptions = {\n      formData: true,\n      fieldName: 'files[]',\n      method: 'post',\n      metaFields: null,\n      responseUrlFieldName: 'url',\n      bundle: false,\n      headers: {},\n      timeout: 30 * 1000,\n      limit: 0,\n      withCredentials: false,\n      responseType: '',\n\n      /**\n       * @typedef respObj\n       * @property {string} responseText\n       * @property {number} status\n       * @property {string} statusText\n       * @property {object.<string, string>} headers\n       *\n       * @param {string} responseText the response body string\n       * @param {XMLHttpRequest | respObj} response the response object (XHR or similar)\n       */\n      getResponseData: function getResponseData(responseText, response) {\n        var parsedResponse = {};\n\n        try {\n          parsedResponse = JSON.parse(responseText);\n        } catch (err) {\n          console.log(err);\n        }\n\n        return parsedResponse;\n      },\n\n      /**\n       *\n       * @param {string} responseText the response body string\n       * @param {XMLHttpRequest | respObj} response the response object (XHR or similar)\n       */\n      getResponseError: function getResponseError(responseText, response) {\n        return new Error('Upload error');\n      },\n\n      /**\n       * @param {number} status the response status code\n       * @param {string} responseText the response body string\n       * @param {XMLHttpRequest | respObj} response the response object (XHR or similar)\n       */\n      validateStatus: function validateStatus(status, responseText, response) {\n        return status >= 200 && status < 300;\n      }\n    };\n    _this.opts = _extends({}, defaultOptions, {}, opts);\n\n    _this.i18nInit();\n\n    _this.handleUpload = _this.handleUpload.bind(_assertThisInitialized(_this)); // Simultaneous upload limiting is shared across all uploads with this plugin.\n    // __queue is for internal Uppy use only!\n\n    if (_this.opts.__queue instanceof RateLimitedQueue) {\n      _this.requests = _this.opts.__queue;\n    } else {\n      _this.requests = new RateLimitedQueue(_this.opts.limit);\n    }\n\n    if (_this.opts.bundle && !_this.opts.formData) {\n      throw new Error('`opts.formData` must be true when `opts.bundle` is enabled.');\n    }\n\n    _this.uploaderEvents = Object.create(null);\n    return _this;\n  }\n\n  var _proto = XHRUpload.prototype;\n\n  _proto.setOptions = function setOptions(newOpts) {\n    _Plugin.prototype.setOptions.call(this, newOpts);\n\n    this.i18nInit();\n  };\n\n  _proto.i18nInit = function i18nInit() {\n    this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = this.translator.translate.bind(this.translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  };\n\n  _proto.getOptions = function getOptions(file) {\n    var overrides = this.uppy.getState().xhrUpload;\n\n    var opts = _extends({}, this.opts, {}, overrides || {}, {}, file.xhrUpload || {}, {\n      headers: {}\n    });\n\n    _extends(opts.headers, this.opts.headers);\n\n    if (overrides) {\n      _extends(opts.headers, overrides.headers);\n    }\n\n    if (file.xhrUpload) {\n      _extends(opts.headers, file.xhrUpload.headers);\n    }\n\n    return opts;\n  };\n\n  _proto.addMetadata = function addMetadata(formData, meta, opts) {\n    var metaFields = Array.isArray(opts.metaFields) ? opts.metaFields // Send along all fields by default.\n    : Object.keys(meta);\n    metaFields.forEach(function (item) {\n      formData.append(item, meta[item]);\n    });\n  };\n\n  _proto.createFormDataUpload = function createFormDataUpload(file, opts) {\n    var formPost = new FormData();\n    this.addMetadata(formPost, file.meta, opts);\n    var dataWithUpdatedType = setTypeInBlob(file);\n\n    if (file.name) {\n      formPost.append(opts.fieldName, dataWithUpdatedType, file.meta.name);\n    } else {\n      formPost.append(opts.fieldName, dataWithUpdatedType);\n    }\n\n    return formPost;\n  };\n\n  _proto.createBundledUpload = function createBundledUpload(files, opts) {\n    var _this2 = this;\n\n    var formPost = new FormData();\n\n    var _this$uppy$getState = this.uppy.getState(),\n        meta = _this$uppy$getState.meta;\n\n    this.addMetadata(formPost, meta, opts);\n    files.forEach(function (file) {\n      var opts = _this2.getOptions(file);\n\n      var dataWithUpdatedType = setTypeInBlob(file);\n\n      if (file.name) {\n        formPost.append(opts.fieldName, dataWithUpdatedType, file.name);\n      } else {\n        formPost.append(opts.fieldName, dataWithUpdatedType);\n      }\n    });\n    return formPost;\n  };\n\n  _proto.createBareUpload = function createBareUpload(file, opts) {\n    return file.data;\n  };\n\n  _proto.upload = function upload(file, current, total) {\n    var _this3 = this;\n\n    var opts = this.getOptions(file);\n    this.uppy.log(\"uploading \" + current + \" of \" + total);\n    return new Promise(function (resolve, reject) {\n      _this3.uppy.emit('upload-started', file);\n\n      var data = opts.formData ? _this3.createFormDataUpload(file, opts) : _this3.createBareUpload(file, opts);\n      var timer = new ProgressTimeout(opts.timeout, function () {\n        xhr.abort();\n        queuedRequest.done();\n        var error = new Error(_this3.i18n('timedOut', {\n          seconds: Math.ceil(opts.timeout / 1000)\n        }));\n\n        _this3.uppy.emit('upload-error', file, error);\n\n        reject(error);\n      });\n      var xhr = new XMLHttpRequest();\n      _this3.uploaderEvents[file.id] = new EventTracker(_this3.uppy);\n      var id = cuid();\n      xhr.upload.addEventListener('loadstart', function (ev) {\n        _this3.uppy.log(\"[XHRUpload] \" + id + \" started\");\n      });\n      xhr.upload.addEventListener('progress', function (ev) {\n        _this3.uppy.log(\"[XHRUpload] \" + id + \" progress: \" + ev.loaded + \" / \" + ev.total); // Begin checking for timeouts when progress starts, instead of loading,\n        // to avoid timing out requests on browser concurrency queue\n\n\n        timer.progress();\n\n        if (ev.lengthComputable) {\n          _this3.uppy.emit('upload-progress', file, {\n            uploader: _this3,\n            bytesUploaded: ev.loaded,\n            bytesTotal: ev.total\n          });\n        }\n      });\n      xhr.addEventListener('load', function (ev) {\n        _this3.uppy.log(\"[XHRUpload] \" + id + \" finished\");\n\n        timer.done();\n        queuedRequest.done();\n\n        if (_this3.uploaderEvents[file.id]) {\n          _this3.uploaderEvents[file.id].remove();\n\n          _this3.uploaderEvents[file.id] = null;\n        }\n\n        if (opts.validateStatus(ev.target.status, xhr.responseText, xhr)) {\n          var body = opts.getResponseData(xhr.responseText, xhr);\n          var uploadURL = body[opts.responseUrlFieldName];\n          var uploadResp = {\n            status: ev.target.status,\n            body: body,\n            uploadURL: uploadURL\n          };\n\n          _this3.uppy.emit('upload-success', file, uploadResp);\n\n          if (uploadURL) {\n            _this3.uppy.log(\"Download \" + file.name + \" from \" + uploadURL);\n          }\n\n          return resolve(file);\n        } else {\n          var _body = opts.getResponseData(xhr.responseText, xhr);\n\n          var error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n          var response = {\n            status: ev.target.status,\n            body: _body\n          };\n\n          _this3.uppy.emit('upload-error', file, error, response);\n\n          return reject(error);\n        }\n      });\n      xhr.addEventListener('error', function (ev) {\n        _this3.uppy.log(\"[XHRUpload] \" + id + \" errored\");\n\n        timer.done();\n        queuedRequest.done();\n\n        if (_this3.uploaderEvents[file.id]) {\n          _this3.uploaderEvents[file.id].remove();\n\n          _this3.uploaderEvents[file.id] = null;\n        }\n\n        var error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n\n        _this3.uppy.emit('upload-error', file, error);\n\n        return reject(error);\n      });\n      xhr.open(opts.method.toUpperCase(), opts.endpoint, true); // IE10 does not allow setting `withCredentials` and `responseType`\n      // before `open()` is called.\n\n      xhr.withCredentials = opts.withCredentials;\n\n      if (opts.responseType !== '') {\n        xhr.responseType = opts.responseType;\n      }\n\n      Object.keys(opts.headers).forEach(function (header) {\n        xhr.setRequestHeader(header, opts.headers[header]);\n      });\n\n      var queuedRequest = _this3.requests.run(function () {\n        xhr.send(data);\n        return function () {\n          timer.done();\n          xhr.abort();\n        };\n      });\n\n      _this3.onFileRemove(file.id, function () {\n        queuedRequest.abort();\n        reject(new Error('File removed'));\n      });\n\n      _this3.onCancelAll(file.id, function () {\n        queuedRequest.abort();\n        reject(new Error('Upload cancelled'));\n      });\n    });\n  };\n\n  _proto.uploadRemote = function uploadRemote(file, current, total) {\n    var _this4 = this;\n\n    var opts = this.getOptions(file);\n    return new Promise(function (resolve, reject) {\n      _this4.uppy.emit('upload-started', file);\n\n      var fields = {};\n      var metaFields = Array.isArray(opts.metaFields) ? opts.metaFields // Send along all fields by default.\n      : Object.keys(file.meta);\n      metaFields.forEach(function (name) {\n        fields[name] = file.meta[name];\n      });\n      var Client = file.remote.providerOptions.provider ? Provider : RequestClient;\n      var client = new Client(_this4.uppy, file.remote.providerOptions);\n      client.post(file.remote.url, _extends({}, file.remote.body, {\n        endpoint: opts.endpoint,\n        size: file.data.size,\n        fieldname: opts.fieldName,\n        metadata: fields,\n        headers: opts.headers\n      })).then(function (res) {\n        var token = res.token;\n        var host = getSocketHost(file.remote.companionUrl);\n        var socket = new Socket({\n          target: host + \"/api/\" + token,\n          autoOpen: false\n        });\n        _this4.uploaderEvents[file.id] = new EventTracker(_this4.uppy);\n\n        _this4.onFileRemove(file.id, function () {\n          socket.send('pause', {});\n          queuedRequest.abort();\n          resolve(\"upload \" + file.id + \" was removed\");\n        });\n\n        _this4.onCancelAll(file.id, function () {\n          socket.send('pause', {});\n          queuedRequest.abort();\n          resolve(\"upload \" + file.id + \" was canceled\");\n        });\n\n        _this4.onRetry(file.id, function () {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        });\n\n        _this4.onRetryAll(file.id, function () {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        });\n\n        socket.on('progress', function (progressData) {\n          return emitSocketProgress(_this4, progressData, file);\n        });\n        socket.on('success', function (data) {\n          var body = opts.getResponseData(data.response.responseText, data.response);\n          var uploadURL = body[opts.responseUrlFieldName];\n          var uploadResp = {\n            status: data.response.status,\n            body: body,\n            uploadURL: uploadURL\n          };\n\n          _this4.uppy.emit('upload-success', file, uploadResp);\n\n          queuedRequest.done();\n\n          if (_this4.uploaderEvents[file.id]) {\n            _this4.uploaderEvents[file.id].remove();\n\n            _this4.uploaderEvents[file.id] = null;\n          }\n\n          return resolve();\n        });\n        socket.on('error', function (errData) {\n          var resp = errData.response;\n          var error = resp ? opts.getResponseError(resp.responseText, resp) : _extends(new Error(errData.error.message), {\n            cause: errData.error\n          });\n\n          _this4.uppy.emit('upload-error', file, error);\n\n          queuedRequest.done();\n\n          if (_this4.uploaderEvents[file.id]) {\n            _this4.uploaderEvents[file.id].remove();\n\n            _this4.uploaderEvents[file.id] = null;\n          }\n\n          reject(error);\n        });\n\n        var queuedRequest = _this4.requests.run(function () {\n          socket.open();\n\n          if (file.isPaused) {\n            socket.send('pause', {});\n          }\n\n          return function () {\n            return socket.close();\n          };\n        });\n      });\n    });\n  };\n\n  _proto.uploadBundle = function uploadBundle(files) {\n    var _this5 = this;\n\n    return new Promise(function (resolve, reject) {\n      var endpoint = _this5.opts.endpoint;\n      var method = _this5.opts.method;\n\n      var optsFromState = _this5.uppy.getState().xhrUpload;\n\n      var formData = _this5.createBundledUpload(files, _extends({}, _this5.opts, {}, optsFromState || {}));\n\n      var xhr = new XMLHttpRequest();\n      var timer = new ProgressTimeout(_this5.opts.timeout, function () {\n        xhr.abort();\n        var error = new Error(_this5.i18n('timedOut', {\n          seconds: Math.ceil(_this5.opts.timeout / 1000)\n        }));\n        emitError(error);\n        reject(error);\n      });\n\n      var emitError = function emitError(error) {\n        files.forEach(function (file) {\n          _this5.uppy.emit('upload-error', file, error);\n        });\n      };\n\n      xhr.upload.addEventListener('loadstart', function (ev) {\n        _this5.uppy.log('[XHRUpload] started uploading bundle');\n\n        timer.progress();\n      });\n      xhr.upload.addEventListener('progress', function (ev) {\n        timer.progress();\n        if (!ev.lengthComputable) return;\n        files.forEach(function (file) {\n          _this5.uppy.emit('upload-progress', file, {\n            uploader: _this5,\n            bytesUploaded: ev.loaded / ev.total * file.size,\n            bytesTotal: file.size\n          });\n        });\n      });\n      xhr.addEventListener('load', function (ev) {\n        timer.done();\n\n        if (_this5.opts.validateStatus(ev.target.status, xhr.responseText, xhr)) {\n          var body = _this5.opts.getResponseData(xhr.responseText, xhr);\n\n          var uploadResp = {\n            status: ev.target.status,\n            body: body\n          };\n          files.forEach(function (file) {\n            _this5.uppy.emit('upload-success', file, uploadResp);\n          });\n          return resolve();\n        }\n\n        var error = _this5.opts.getResponseError(xhr.responseText, xhr) || new Error('Upload error');\n        error.request = xhr;\n        emitError(error);\n        return reject(error);\n      });\n      xhr.addEventListener('error', function (ev) {\n        timer.done();\n        var error = _this5.opts.getResponseError(xhr.responseText, xhr) || new Error('Upload error');\n        emitError(error);\n        return reject(error);\n      });\n\n      _this5.uppy.on('cancel-all', function () {\n        timer.done();\n        xhr.abort();\n      });\n\n      xhr.open(method.toUpperCase(), endpoint, true); // IE10 does not allow setting `withCredentials` and `responseType`\n      // before `open()` is called.\n\n      xhr.withCredentials = _this5.opts.withCredentials;\n\n      if (_this5.opts.responseType !== '') {\n        xhr.responseType = _this5.opts.responseType;\n      }\n\n      Object.keys(_this5.opts.headers).forEach(function (header) {\n        xhr.setRequestHeader(header, _this5.opts.headers[header]);\n      });\n      xhr.send(formData);\n      files.forEach(function (file) {\n        _this5.uppy.emit('upload-started', file);\n      });\n    });\n  };\n\n  _proto.uploadFiles = function uploadFiles(files) {\n    var _this6 = this;\n\n    var promises = files.map(function (file, i) {\n      var current = parseInt(i, 10) + 1;\n      var total = files.length;\n\n      if (file.error) {\n        return Promise.reject(new Error(file.error));\n      } else if (file.isRemote) {\n        return _this6.uploadRemote(file, current, total);\n      } else {\n        return _this6.upload(file, current, total);\n      }\n    });\n    return settle(promises);\n  };\n\n  _proto.onFileRemove = function onFileRemove(fileID, cb) {\n    this.uploaderEvents[fileID].on('file-removed', function (file) {\n      if (fileID === file.id) cb(file.id);\n    });\n  };\n\n  _proto.onRetry = function onRetry(fileID, cb) {\n    this.uploaderEvents[fileID].on('upload-retry', function (targetFileID) {\n      if (fileID === targetFileID) {\n        cb();\n      }\n    });\n  };\n\n  _proto.onRetryAll = function onRetryAll(fileID, cb) {\n    var _this7 = this;\n\n    this.uploaderEvents[fileID].on('retry-all', function (filesToRetry) {\n      if (!_this7.uppy.getFile(fileID)) return;\n      cb();\n    });\n  };\n\n  _proto.onCancelAll = function onCancelAll(fileID, cb) {\n    var _this8 = this;\n\n    this.uploaderEvents[fileID].on('cancel-all', function () {\n      if (!_this8.uppy.getFile(fileID)) return;\n      cb();\n    });\n  };\n\n  _proto.handleUpload = function handleUpload(fileIDs) {\n    var _this9 = this;\n\n    if (fileIDs.length === 0) {\n      this.uppy.log('[XHRUpload] No files to upload!');\n      return Promise.resolve();\n    } // no limit configured by the user, and no RateLimitedQueue passed in by a \"parent\" plugin (basically just AwsS3) using the top secret `__queue` option\n\n\n    if (this.opts.limit === 0 && !this.opts.__queue) {\n      this.uppy.log('[XHRUpload] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/xhr-upload/#limit-0', 'warning');\n    }\n\n    this.uppy.log('[XHRUpload] Uploading...');\n    var files = fileIDs.map(function (fileID) {\n      return _this9.uppy.getFile(fileID);\n    });\n\n    if (this.opts.bundle) {\n      // if bundle: true, we don’t support remote uploads\n      var isSomeFileRemote = files.some(function (file) {\n        return file.isRemote;\n      });\n\n      if (isSomeFileRemote) {\n        throw new Error('Can’t upload remote files when bundle: true option is set');\n      }\n\n      return this.uploadBundle(files);\n    }\n\n    return this.uploadFiles(files).then(function () {\n      return null;\n    });\n  };\n\n  _proto.install = function install() {\n    if (this.opts.bundle) {\n      var _this$uppy$getState2 = this.uppy.getState(),\n          capabilities = _this$uppy$getState2.capabilities;\n\n      this.uppy.setState({\n        capabilities: _extends({}, capabilities, {\n          individualCancellation: false\n        })\n      });\n    }\n\n    this.uppy.addUploader(this.handleUpload);\n  };\n\n  _proto.uninstall = function uninstall() {\n    if (this.opts.bundle) {\n      var _this$uppy$getState3 = this.uppy.getState(),\n          capabilities = _this$uppy$getState3.capabilities;\n\n      this.uppy.setState({\n        capabilities: _extends({}, capabilities, {\n          individualCancellation: true\n        })\n      });\n    }\n\n    this.uppy.removeUploader(this.handleUpload);\n  };\n\n  return XHRUpload;\n}(Plugin), _class.VERSION = \"1.4.2\", _temp);\n\n//# sourceURL=webpack:///./node_modules/@uppy/xhr-upload/lib/index.js?");

/***/ }),

/***/ "./node_modules/after/index.js":
/*!*************************************!*\
  !*** ./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:///./node_modules/after/index.js?");

/***/ }),

/***/ "./node_modules/arraybuffer.slice/index.js":
/*!*************************************************!*\
  !*** ./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:///./node_modules/arraybuffer.slice/index.js?");

/***/ }),

/***/ "./node_modules/backo2/index.js":
/*!**************************************!*\
  !*** ./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:///./node_modules/backo2/index.js?");

/***/ }),

/***/ "./node_modules/base64-arraybuffer/lib/base64-arraybuffer.js":
/*!*******************************************************************!*\
  !*** ./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:///./node_modules/base64-arraybuffer/lib/base64-arraybuffer.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/blob/index.js":
/*!************************************!*\
  !*** ./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:///./node_modules/blob/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/classnames/index.js":
/*!******************************************!*\
  !*** ./node_modules/classnames/index.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n  Copyright (c) 2017 Jed Watson.\n  Licensed under the MIT License (MIT), see\n  http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif ( true && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (true) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn classNames;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n}());\n\n\n//# sourceURL=webpack:///./node_modules/classnames/index.js?");

/***/ }),

/***/ "./node_modules/component-bind/index.js":
/*!**********************************************!*\
  !*** ./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:///./node_modules/component-bind/index.js?");

/***/ }),

/***/ "./node_modules/component-emitter/index.js":
/*!*************************************************!*\
  !*** ./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:///./node_modules/component-emitter/index.js?");

/***/ }),

/***/ "./node_modules/component-inherit/index.js":
/*!*************************************************!*\
  !*** ./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:///./node_modules/component-inherit/index.js?");

/***/ }),

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

eval("/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\nvar fingerprint = __webpack_require__(/*! ./lib/fingerprint.js */ \"./node_modules/cuid/lib/fingerprint.browser.js\");\nvar pad = __webpack_require__(/*! ./lib/pad.js */ \"./node_modules/cuid/lib/pad.js\");\nvar getRandomValue = __webpack_require__(/*! ./lib/getRandomValue.js */ \"./node_modules/cuid/lib/getRandomValue.browser.js\");\n\nvar c = 0,\n  blockSize = 4,\n  base = 36,\n  discreteValues = Math.pow(base, blockSize);\n\nfunction randomBlock () {\n  return pad((getRandomValue() *\n    discreteValues << 0)\n    .toString(base), blockSize);\n}\n\nfunction safeCounter () {\n  c = c < discreteValues ? c : 0;\n  c++; // this is not subliminal\n  return c - 1;\n}\n\nfunction cuid () {\n  // Starting with a lowercase letter makes\n  // it HTML element ID friendly.\n  var letter = 'c', // hard-coded allows for sequential access\n\n    // timestamp\n    // warning: this exposes the exact date and time\n    // that the uid was created.\n    timestamp = (new Date().getTime()).toString(base),\n\n    // Prevent same-machine collisions.\n    counter = pad(safeCounter().toString(base), blockSize),\n\n    // A few chars to generate distinct ids for different\n    // clients (so different computers are far less\n    // likely to generate the same id)\n    print = fingerprint(),\n\n    // Grab some more chars from Math.random()\n    random = randomBlock() + randomBlock();\n\n  return letter + timestamp + counter + print + random;\n}\n\ncuid.slug = function slug () {\n  var date = new Date().getTime().toString(36),\n    counter = safeCounter().toString(36).slice(-4),\n    print = fingerprint().slice(0, 1) +\n      fingerprint().slice(-1),\n    random = randomBlock().slice(-2);\n\n  return date.slice(-2) +\n    counter + print + random;\n};\n\ncuid.isCuid = function isCuid (stringToCheck) {\n  if (typeof stringToCheck !== 'string') return false;\n  if (stringToCheck.startsWith('c')) return true;\n  return false;\n};\n\ncuid.isSlug = function isSlug (stringToCheck) {\n  if (typeof stringToCheck !== 'string') return false;\n  var stringLength = stringToCheck.length;\n  if (stringLength >= 7 && stringLength <= 10) return true;\n  return false;\n};\n\ncuid.fingerprint = fingerprint;\n\nmodule.exports = cuid;\n\n\n//# sourceURL=webpack:///./node_modules/cuid/index.js?");

/***/ }),

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

eval("var pad = __webpack_require__(/*! ./pad.js */ \"./node_modules/cuid/lib/pad.js\");\n\nvar env = typeof window === 'object' ? window : self;\nvar globalCount = Object.keys(env).length;\nvar mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar clientId = pad((mimeTypesLength +\n  navigator.userAgent.length).toString(36) +\n  globalCount.toString(36), 4);\n\nmodule.exports = function fingerprint () {\n  return clientId;\n};\n\n\n//# sourceURL=webpack:///./node_modules/cuid/lib/fingerprint.browser.js?");

/***/ }),

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

eval("\nvar getRandomValue;\n\nvar crypto = typeof window !== 'undefined' &&\n  (window.crypto || window.msCrypto) ||\n  typeof self !== 'undefined' &&\n  self.crypto;\n\nif (crypto) {\n    var lim = Math.pow(2, 32) - 1;\n    getRandomValue = function () {\n        return Math.abs(crypto.getRandomValues(new Uint32Array(1))[0] / lim);\n    };\n} else {\n    getRandomValue = Math.random;\n}\n\nmodule.exports = getRandomValue;\n\n\n//# sourceURL=webpack:///./node_modules/cuid/lib/getRandomValue.browser.js?");

/***/ }),

/***/ "./node_modules/cuid/lib/pad.js":
/*!**************************************!*\
  !*** ./node_modules/cuid/lib/pad.js ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function pad (num, size) {\n  var s = '000000000' + num;\n  return s.substr(s.length - size);\n};\n\n\n//# sourceURL=webpack:///./node_modules/cuid/lib/pad.js?");

/***/ }),

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

eval("\nmodule.exports = __webpack_require__(/*! ./socket */ \"./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 */ \"./node_modules/engine.io-parser/lib/browser.js\");\n\n\n//# sourceURL=webpack:///./node_modules/engine.io-client/lib/index.js?");

/***/ }),

/***/ "./node_modules/engine.io-client/lib/socket.js":
/*!*****************************************************!*\
  !*** ./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 */ \"./node_modules/engine.io-client/lib/transports/index.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./node_modules/component-emitter/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./node_modules/engine.io-client/node_modules/debug/src/browser.js\")('engine.io-client:socket');\nvar index = __webpack_require__(/*! indexof */ \"./node_modules/indexof/index.js\");\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./node_modules/engine.io-parser/lib/browser.js\");\nvar parseuri = __webpack_require__(/*! parseuri */ \"./node_modules/parseuri/index.js\");\nvar parseqs = __webpack_require__(/*! parseqs */ \"./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.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 */ \"./node_modules/engine.io-client/lib/transport.js\");\nSocket.transports = __webpack_require__(/*! ./transports/index */ \"./node_modules/engine.io-client/lib/transports/index.js\");\nSocket.parser = __webpack_require__(/*! engine.io-parser */ \"./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    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:///./node_modules/engine.io-client/lib/socket.js?");

/***/ }),

/***/ "./node_modules/engine.io-client/lib/transport.js":
/*!********************************************************!*\
  !*** ./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 */ \"./node_modules/engine.io-parser/lib/browser.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./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\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:///./node_modules/engine.io-client/lib/transport.js?");

/***/ }),

/***/ "./node_modules/engine.io-client/lib/transports/index.js":
/*!***************************************************************!*\
  !*** ./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 */ \"./node_modules/engine.io-client/lib/xmlhttprequest.js\");\nvar XHR = __webpack_require__(/*! ./polling-xhr */ \"./node_modules/engine.io-client/lib/transports/polling-xhr.js\");\nvar JSONP = __webpack_require__(/*! ./polling-jsonp */ \"./node_modules/engine.io-client/lib/transports/polling-jsonp.js\");\nvar websocket = __webpack_require__(/*! ./websocket */ \"./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:///./node_modules/engine.io-client/lib/transports/index.js?");

/***/ }),

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

eval("/* WEBPACK VAR INJECTION */(function(global) {/**\n * Module requirements.\n */\n\nvar Polling = __webpack_require__(/*! ./polling */ \"./node_modules/engine.io-client/lib/transports/polling.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./node_modules/component-inherit/index.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 * Until https://github.com/tc39/proposal-global is shipped.\n */\nfunction glob () {\n  return typeof self !== 'undefined' ? self\n      : typeof window !== 'undefined' ? window\n      : typeof global !== 'undefined' ? global : {};\n}\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    var global = glob();\n    callbacks = global.___eio = (global.___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/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./node_modules/engine.io-client/lib/transports/polling-jsonp.js?");

/***/ }),

/***/ "./node_modules/engine.io-client/lib/transports/polling-xhr.js":
/*!*********************************************************************!*\
  !*** ./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 */ \"./node_modules/engine.io-client/lib/xmlhttprequest.js\");\nvar Polling = __webpack_require__(/*! ./polling */ \"./node_modules/engine.io-client/lib/transports/polling.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./node_modules/component-emitter/index.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./node_modules/component-inherit/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./node_modules/engine.io-client/node_modules/debug/src/browser.js\")('engine.io-client:polling-xhr');\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\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.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 = true;\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') {\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(xhr.status);\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') {\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 self ? '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:///./node_modules/engine.io-client/lib/transports/polling-xhr.js?");

/***/ }),

/***/ "./node_modules/engine.io-client/lib/transports/polling.js":
/*!*****************************************************************!*\
  !*** ./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 */ \"./node_modules/engine.io-client/lib/transport.js\");\nvar parseqs = __webpack_require__(/*! parseqs */ \"./node_modules/parseqs/index.js\");\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./node_modules/engine.io-parser/lib/browser.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./node_modules/component-inherit/index.js\");\nvar yeast = __webpack_require__(/*! yeast */ \"./node_modules/yeast/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./node_modules/engine.io-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 */ \"./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:///./node_modules/engine.io-client/lib/transports/polling.js?");

/***/ }),

/***/ "./node_modules/engine.io-client/lib/transports/websocket.js":
/*!*******************************************************************!*\
  !*** ./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 */ \"./node_modules/engine.io-client/lib/transport.js\");\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./node_modules/engine.io-parser/lib/browser.js\");\nvar parseqs = __webpack_require__(/*! parseqs */ \"./node_modules/parseqs/index.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./node_modules/component-inherit/index.js\");\nvar yeast = __webpack_require__(/*! yeast */ \"./node_modules/yeast/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./node_modules/engine.io-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} else {\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  var opts = {\n    agent: this.agent,\n    perMessageDeflate: this.perMessageDeflate\n  };\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  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__(/*! ./../../../buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./node_modules/engine.io-client/lib/transports/websocket.js?");

/***/ }),

/***/ "./node_modules/engine.io-client/lib/xmlhttprequest.js":
/*!*************************************************************!*\
  !*** ./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 */ \"./node_modules/has-cors/index.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 self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n//# sourceURL=webpack:///./node_modules/engine.io-client/lib/xmlhttprequest.js?");

/***/ }),

/***/ "./node_modules/engine.io-client/node_modules/debug/src/browser.js":
/*!*************************************************************************!*\
  !*** ./node_modules/engine.io-client/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 */ \"./node_modules/engine.io-client/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__(/*! ./../../../../process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./node_modules/engine.io-client/node_modules/debug/src/browser.js?");

/***/ }),

/***/ "./node_modules/engine.io-client/node_modules/debug/src/debug.js":
/*!***********************************************************************!*\
  !*** ./node_modules/engine.io-client/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 */ \"./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:///./node_modules/engine.io-client/node_modules/debug/src/debug.js?");

/***/ }),

/***/ "./node_modules/engine.io-parser/lib/browser.js":
/*!******************************************************!*\
  !*** ./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 */ \"./node_modules/engine.io-parser/lib/keys.js\");\nvar hasBinary = __webpack_require__(/*! has-binary2 */ \"./node_modules/has-binary2/index.js\");\nvar sliceBuffer = __webpack_require__(/*! arraybuffer.slice */ \"./node_modules/arraybuffer.slice/index.js\");\nvar after = __webpack_require__(/*! after */ \"./node_modules/after/index.js\");\nvar utf8 = __webpack_require__(/*! ./utf8 */ \"./node_modules/engine.io-parser/lib/utf8.js\");\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = __webpack_require__(/*! base64-arraybuffer */ \"./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 */ \"./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:///./node_modules/engine.io-parser/lib/browser.js?");

/***/ }),

/***/ "./node_modules/engine.io-parser/lib/keys.js":
/*!***************************************************!*\
  !*** ./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:///./node_modules/engine.io-parser/lib/keys.js?");

/***/ }),

/***/ "./node_modules/engine.io-parser/lib/utf8.js":
/*!***************************************************!*\
  !*** ./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:///./node_modules/engine.io-parser/lib/utf8.js?");

/***/ }),

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

"use strict";
eval("\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n//# sourceURL=webpack:///./node_modules/extend/index.js?");

/***/ }),

/***/ "./node_modules/get-form-data/es/index.js":
/*!************************************************!*\
  !*** ./node_modules/get-form-data/es/index.js ***!
  \************************************************/
/*! exports provided: default, getFieldData */
/***/ (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 getFormData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getFieldData\", function() { return getFieldData; });\nvar NODE_LIST_CLASSES = {\n  '[object HTMLCollection]': true,\n  '[object NodeList]': true,\n  '[object RadioNodeList]': true\n\n  // .type values for elements which can appear in .elements and should be ignored\n};var IGNORED_ELEMENT_TYPES = {\n  'button': true,\n  'fieldset': true,\n  'reset': true,\n  'submit': true\n};\n\nvar CHECKED_INPUT_TYPES = {\n  'checkbox': true,\n  'radio': true\n};\n\nvar TRIM_RE = /^\\s+|\\s+$/g;\n\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * @param {HTMLFormElement} form\n * @param {Object} options\n * @return {Object.<string,(string|Array.<string>)>} an object containing\n *   submittable value(s) held in the form's .elements collection, with\n *   properties named as per element names or ids.\n */\n\nfunction getFormData(form) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { trim: false };\n\n  if (!form) {\n    throw new Error('A form is required by getFormData, was given form=' + form);\n  }\n\n  var data = {};\n  var elementName = void 0;\n  var elementNames = [];\n  var elementNameLookup = {};\n\n  // Get unique submittable element names for the form\n  for (var i = 0, l = form.elements.length; i < l; i++) {\n    var element = form.elements[i];\n    if (IGNORED_ELEMENT_TYPES[element.type] || element.disabled) {\n      continue;\n    }\n    elementName = element.name || element.id;\n    if (elementName && !elementNameLookup[elementName]) {\n      elementNames.push(elementName);\n      elementNameLookup[elementName] = true;\n    }\n  }\n\n  // Extract element data name-by-name for consistent handling of special cases\n  // around elements which contain multiple inputs.\n  for (var _i = 0, _l = elementNames.length; _i < _l; _i++) {\n    elementName = elementNames[_i];\n    var value = getFieldData(form, elementName, options);\n    if (value != null) {\n      data[elementName] = value;\n    }\n  }\n\n  return data;\n}\n\n/**\n * @param {HTMLFormElement} form\n * @param {string} fieldName\n * @param {Object} options\n * @return {(string|Array.<string>)} submittable value(s) in the form for a\n *   named element from its .elements collection, or null if there was no\n *   element with that name or the element had no submittable value(s).\n */\nfunction getFieldData(form, fieldName) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { trim: false };\n\n  if (!form) {\n    throw new Error('A form is required by getFieldData, was given form=' + form);\n  }\n  if (!fieldName && toString.call(fieldName) !== '[object String]') {\n    throw new Error('A field name is required by getFieldData, was given fieldName=' + fieldName);\n  }\n\n  var element = form.elements[fieldName];\n  if (!element || element.disabled) {\n    return null;\n  }\n\n  if (!NODE_LIST_CLASSES[toString.call(element)]) {\n    return getFormElementValue(element, options.trim);\n  }\n\n  // Deal with multiple form controls which have the same name\n  var data = [];\n  var allRadios = true;\n  for (var i = 0, l = element.length; i < l; i++) {\n    if (element[i].disabled) {\n      continue;\n    }\n    if (allRadios && element[i].type !== 'radio') {\n      allRadios = false;\n    }\n    var value = getFormElementValue(element[i], options.trim);\n    if (value != null) {\n      data = data.concat(value);\n    }\n  }\n\n  // Special case for an element with multiple same-named inputs which were all\n  // radio buttons: if there was a selected value, only return the value.\n  if (allRadios && data.length === 1) {\n    return data[0];\n  }\n\n  return data.length > 0 ? data : null;\n}\n\n/**\n * @param {HTMLElement} element a form element.\n * @param {booleam} trim should values for text entry inputs be trimmed?\n * @return {(string|Array.<string>|File|Array.<File>)} the element's submittable\n *   value(s), or null if it had none.\n */\nfunction getFormElementValue(element, trim) {\n  var value = null;\n  var type = element.type;\n\n\n  if (type === 'select-one') {\n    if (element.options.length) {\n      value = element.options[element.selectedIndex].value;\n    }\n    return value;\n  }\n\n  if (type === 'select-multiple') {\n    value = [];\n    for (var i = 0, l = element.options.length; i < l; i++) {\n      if (element.options[i].selected) {\n        value.push(element.options[i].value);\n      }\n    }\n    if (value.length === 0) {\n      value = null;\n    }\n    return value;\n  }\n\n  // If a file input doesn't have a files attribute, fall through to using its\n  // value attribute.\n  if (type === 'file' && 'files' in element) {\n    if (element.multiple) {\n      value = slice.call(element.files);\n      if (value.length === 0) {\n        value = null;\n      }\n    } else {\n      // Should be null if not present, according to the spec\n      value = element.files[0];\n    }\n    return value;\n  }\n\n  if (!CHECKED_INPUT_TYPES[type]) {\n    value = trim ? element.value.replace(TRIM_RE, '') : element.value;\n  } else if (element.checked) {\n    value = element.value;\n  }\n\n  return value;\n}\n\n// For UMD build access to getFieldData\ngetFormData.getFieldData = getFieldData;\n\n//# sourceURL=webpack:///./node_modules/get-form-data/es/index.js?");

/***/ }),

/***/ "./node_modules/has-binary2/index.js":
/*!*******************************************!*\
  !*** ./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 */ \"./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__(/*! ./../buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./node_modules/has-binary2/index.js?");

/***/ }),

/***/ "./node_modules/has-binary2/node_modules/isarray/index.js":
/*!****************************************************************!*\
  !*** ./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:///./node_modules/has-binary2/node_modules/isarray/index.js?");

/***/ }),

/***/ "./node_modules/has-cors/index.js":
/*!****************************************!*\
  !*** ./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:///./node_modules/has-cors/index.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/indexof/index.js":
/*!***************************************!*\
  !*** ./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:///./node_modules/indexof/index.js?");

/***/ }),

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

eval("module.exports = function isShallowEqual (a, b) {\n  if (a === b) return true\n  for (var i in a) if (!(i in b)) return false\n  for (var i in b) if (a[i] !== b[i]) return false\n  return true\n}\n\n\n//# sourceURL=webpack:///./node_modules/is-shallow-equal/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/js-base64/base64.js":
/*!******************************************!*\
  !*** ./node_modules/js-base64/base64.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*\n *  base64.js\n *\n *  Licensed under the BSD 3-Clause License.\n *    http://opensource.org/licenses/BSD-3-Clause\n *\n *  References:\n *    http://en.wikipedia.org/wiki/Base64\n */\n;(function (global, factory) {\n     true\n        ? module.exports = factory(global)\n        : undefined\n}((\n    typeof self !== 'undefined' ? self\n        : typeof window !== 'undefined' ? window\n        : typeof global !== 'undefined' ? global\n: this\n), function(global) {\n    'use strict';\n    // existing version for noConflict()\n    global = global || {};\n    var _Base64 = global.Base64;\n    var version = \"2.5.1\";\n    // if node.js and NOT React Native, we use Buffer\n    var buffer;\n    if ( true && module.exports) {\n        try {\n            buffer = eval(\"require('buffer').Buffer\");\n        } catch (err) {\n            buffer = undefined;\n        }\n    }\n    // constants\n    var b64chars\n        = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    var b64tab = function(bin) {\n        var t = {};\n        for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;\n        return t;\n    }(b64chars);\n    var fromCharCode = String.fromCharCode;\n    // encoder stuff\n    var cb_utob = function(c) {\n        if (c.length < 2) {\n            var cc = c.charCodeAt(0);\n            return cc < 0x80 ? c\n                : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))\n                                + fromCharCode(0x80 | (cc & 0x3f)))\n                : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))\n                   + fromCharCode(0x80 | ((cc >>>  6) & 0x3f))\n                   + fromCharCode(0x80 | ( cc         & 0x3f)));\n        } else {\n            var cc = 0x10000\n                + (c.charCodeAt(0) - 0xD800) * 0x400\n                + (c.charCodeAt(1) - 0xDC00);\n            return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))\n                    + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))\n                    + fromCharCode(0x80 | ((cc >>>  6) & 0x3f))\n                    + fromCharCode(0x80 | ( cc         & 0x3f)));\n        }\n    };\n    var re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n    var utob = function(u) {\n        return u.replace(re_utob, cb_utob);\n    };\n    var cb_encode = function(ccc) {\n        var padlen = [0, 2, 1][ccc.length % 3],\n        ord = ccc.charCodeAt(0) << 16\n            | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)\n            | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),\n        chars = [\n            b64chars.charAt( ord >>> 18),\n            b64chars.charAt((ord >>> 12) & 63),\n            padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n            padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n        ];\n        return chars.join('');\n    };\n    var btoa = global.btoa ? function(b) {\n        return global.btoa(b);\n    } : function(b) {\n        return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n    };\n    var _encode = buffer ?\n        buffer.from && Uint8Array && buffer.from !== Uint8Array.from\n        ? function (u) {\n            return (u.constructor === buffer.constructor ? u : buffer.from(u))\n                .toString('base64')\n        }\n        :  function (u) {\n            return (u.constructor === buffer.constructor ? u : new  buffer(u))\n                .toString('base64')\n        }\n        : function (u) { return btoa(utob(u)) }\n    ;\n    var encode = function(u, urisafe) {\n        return !urisafe\n            ? _encode(String(u))\n            : _encode(String(u)).replace(/[+\\/]/g, function(m0) {\n                return m0 == '+' ? '-' : '_';\n            }).replace(/=/g, '');\n    };\n    var encodeURI = function(u) { return encode(u, true) };\n    // decoder stuff\n    var re_btou = new RegExp([\n        '[\\xC0-\\xDF][\\x80-\\xBF]',\n        '[\\xE0-\\xEF][\\x80-\\xBF]{2}',\n        '[\\xF0-\\xF7][\\x80-\\xBF]{3}'\n    ].join('|'), 'g');\n    var cb_btou = function(cccc) {\n        switch(cccc.length) {\n        case 4:\n            var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n                |    ((0x3f & cccc.charCodeAt(1)) << 12)\n                |    ((0x3f & cccc.charCodeAt(2)) <<  6)\n                |     (0x3f & cccc.charCodeAt(3)),\n            offset = cp - 0x10000;\n            return (fromCharCode((offset  >>> 10) + 0xD800)\n                    + fromCharCode((offset & 0x3FF) + 0xDC00));\n        case 3:\n            return fromCharCode(\n                ((0x0f & cccc.charCodeAt(0)) << 12)\n                    | ((0x3f & cccc.charCodeAt(1)) << 6)\n                    |  (0x3f & cccc.charCodeAt(2))\n            );\n        default:\n            return  fromCharCode(\n                ((0x1f & cccc.charCodeAt(0)) << 6)\n                    |  (0x3f & cccc.charCodeAt(1))\n            );\n        }\n    };\n    var btou = function(b) {\n        return b.replace(re_btou, cb_btou);\n    };\n    var cb_decode = function(cccc) {\n        var len = cccc.length,\n        padlen = len % 4,\n        n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)\n            | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)\n            | (len > 2 ? b64tab[cccc.charAt(2)] <<  6 : 0)\n            | (len > 3 ? b64tab[cccc.charAt(3)]       : 0),\n        chars = [\n            fromCharCode( n >>> 16),\n            fromCharCode((n >>>  8) & 0xff),\n            fromCharCode( n         & 0xff)\n        ];\n        chars.length -= [0, 0, 2, 1][padlen];\n        return chars.join('');\n    };\n    var _atob = global.atob ? function(a) {\n        return global.atob(a);\n    } : function(a){\n        return a.replace(/\\S{1,4}/g, cb_decode);\n    };\n    var atob = function(a) {\n        return _atob(String(a).replace(/[^A-Za-z0-9\\+\\/]/g, ''));\n    };\n    var _decode = buffer ?\n        buffer.from && Uint8Array && buffer.from !== Uint8Array.from\n        ? function(a) {\n            return (a.constructor === buffer.constructor\n                    ? a : buffer.from(a, 'base64')).toString();\n        }\n        : function(a) {\n            return (a.constructor === buffer.constructor\n                    ? a : new buffer(a, 'base64')).toString();\n        }\n        : function(a) { return btou(_atob(a)) };\n    var decode = function(a){\n        return _decode(\n            String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })\n                .replace(/[^A-Za-z0-9\\+\\/]/g, '')\n        );\n    };\n    var noConflict = function() {\n        var Base64 = global.Base64;\n        global.Base64 = _Base64;\n        return Base64;\n    };\n    // export Base64\n    global.Base64 = {\n        VERSION: version,\n        atob: atob,\n        btoa: btoa,\n        fromBase64: decode,\n        toBase64: encode,\n        utob: utob,\n        encode: encode,\n        encodeURI: encodeURI,\n        btou: btou,\n        decode: decode,\n        noConflict: noConflict,\n        __buffer__: buffer\n    };\n    // if ES5 is available, make Base64.extendString() available\n    if (typeof Object.defineProperty === 'function') {\n        var noEnum = function(v){\n            return {value:v,enumerable:false,writable:true,configurable:true};\n        };\n        global.Base64.extendString = function () {\n            Object.defineProperty(\n                String.prototype, 'fromBase64', noEnum(function () {\n                    return decode(this)\n                }));\n            Object.defineProperty(\n                String.prototype, 'toBase64', noEnum(function (urisafe) {\n                    return encode(this, urisafe)\n                }));\n            Object.defineProperty(\n                String.prototype, 'toBase64URI', noEnum(function () {\n                    return encode(this, true)\n                }));\n        };\n    }\n    //\n    // export Base64 to the namespace\n    //\n    if (global['Meteor']) { // Meteor.js\n        Base64 = global.Base64;\n    }\n    // module.exports and AMD are mutually exclusive.\n    // module.exports has precedence.\n    if ( true && module.exports) {\n        module.exports.Base64 = global.Base64;\n    }\n    else if (true) {\n        // AMD. Register as an anonymous module.\n        !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function(){ return global.Base64 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n    }\n    // that's it!\n    return {Base64: global.Base64}\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/js-base64/base64.js?");

/***/ }),

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

eval("/* WEBPACK VAR INJECTION */(function(global) {/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\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/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\n/** Used for built-in method references. */\nvar objectProto = 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 objectToString = objectProto.toString;\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 * 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\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(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(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        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\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();\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());\n  }\n\n  function debounced() {\n    var time = now(),\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        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\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 && (type == 'object' || type == 'function');\n}\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 && typeof value == 'object';\n}\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(value) && objectToString.call(value) == symbolTag);\n}\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(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(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\nmodule.exports = debounce;\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/lodash.debounce/index.js?");

/***/ }),

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

eval("/* WEBPACK VAR INJECTION */(function(global) {/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\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/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\n/** Used for built-in method references. */\nvar objectProto = 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 objectToString = objectProto.toString;\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 * 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\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(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(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        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\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();\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());\n  }\n\n  function debounced() {\n    var time = now(),\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        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\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` 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 throttled 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 `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\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 && (type == 'object' || type == 'function');\n}\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 && typeof value == 'object';\n}\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(value) && objectToString.call(value) == symbolTag);\n}\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(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(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\nmodule.exports = throttle;\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/lodash.throttle/index.js?");

/***/ }),

/***/ "./node_modules/memoize-one/dist/memoize-one.esm.js":
/*!**********************************************************!*\
  !*** ./node_modules/memoize-one/dist/memoize-one.esm.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction areInputsEqual(newInputs, lastInputs) {\n    if (newInputs.length !== lastInputs.length) {\n        return false;\n    }\n    for (var i = 0; i < newInputs.length; i++) {\n        if (newInputs[i] !== lastInputs[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n    if (isEqual === void 0) { isEqual = areInputsEqual; }\n    var lastThis;\n    var lastArgs = [];\n    var lastResult;\n    var calledOnce = false;\n    function memoized() {\n        var newArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newArgs[_i] = arguments[_i];\n        }\n        if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n            return lastResult;\n        }\n        lastResult = resultFn.apply(this, newArgs);\n        calledOnce = true;\n        lastThis = this;\n        lastArgs = newArgs;\n        return lastResult;\n    }\n    return memoized;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (memoizeOne);\n\n\n//# sourceURL=webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js?");

/***/ }),

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

eval("var wildcard = __webpack_require__(/*! wildcard */ \"./node_modules/wildcard/index.js\");\nvar reMimePartSplit = /[\\/\\+\\.]/;\n\n/**\n  # mime-match\n\n  A simple function to checker whether a target mime type matches a mime-type\n  pattern (e.g. image/jpeg matches image/jpeg OR image/*).\n\n  ## Example Usage\n\n  <<< example.js\n\n**/\nmodule.exports = function(target, pattern) {\n  function test(pattern) {\n    var result = wildcard(pattern, target, reMimePartSplit);\n\n    // ensure that we have a valid mime type (should have two parts)\n    return result && result.length >= 2;\n  }\n\n  return pattern ? test(pattern.split(';')[0]) : test;\n};\n\n\n//# sourceURL=webpack:///./node_modules/mime-match/index.js?");

/***/ }),

/***/ "./node_modules/ms/index.js":
/*!**********************************!*\
  !*** ./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:///./node_modules/ms/index.js?");

/***/ }),

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

eval("/**\n* Create an event emitter with namespaces\n* @name createNamespaceEmitter\n* @example\n* var emitter = require('./index')()\n*\n* emitter.on('*', function () {\n*   console.log('all events emitted', this.event)\n* })\n*\n* emitter.on('example', function () {\n*   console.log('example event emitted')\n* })\n*/\nmodule.exports = function createNamespaceEmitter () {\n  var emitter = {}\n  var _fns = emitter._fns = {}\n\n  /**\n  * Emit an event. Optionally namespace the event. Handlers are fired in the order in which they were added with exact matches taking precedence. Separate the namespace and event with a `:`\n  * @name emit\n  * @param {String} event – the name of the event, with optional namespace\n  * @param {...*} data – up to 6 arguments that are passed to the event listener\n  * @example\n  * emitter.emit('example')\n  * emitter.emit('demo:test')\n  * emitter.emit('data', { example: true}, 'a string', 1)\n  */\n  emitter.emit = function emit (event, arg1, arg2, arg3, arg4, arg5, arg6) {\n    var toEmit = getListeners(event)\n\n    if (toEmit.length) {\n      emitAll(event, toEmit, [arg1, arg2, arg3, arg4, arg5, arg6])\n    }\n  }\n\n  /**\n  * Create en event listener.\n  * @name on\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.on('example', function () {})\n  * emitter.on('demo', function () {})\n  */\n  emitter.on = function on (event, fn) {\n    if (!_fns[event]) {\n      _fns[event] = []\n    }\n\n    _fns[event].push(fn)\n  }\n\n  /**\n  * Create en event listener that fires once.\n  * @name once\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.once('example', function () {})\n  * emitter.once('demo', function () {})\n  */\n  emitter.once = function once (event, fn) {\n    function one () {\n      fn.apply(this, arguments)\n      emitter.off(event, one)\n    }\n    this.on(event, one)\n  }\n\n  /**\n  * Stop listening to an event. Stop all listeners on an event by only passing the event name. Stop a single listener by passing that event handler as a callback.\n  * You must be explicit about what will be unsubscribed: `emitter.off('demo')` will unsubscribe an `emitter.on('demo')` listener,\n  * `emitter.off('demo:example')` will unsubscribe an `emitter.on('demo:example')` listener\n  * @name off\n  * @param {String} event\n  * @param {Function} [fn] – the specific handler\n  * @example\n  * emitter.off('example')\n  * emitter.off('demo', function () {})\n  */\n  emitter.off = function off (event, fn) {\n    var keep = []\n\n    if (event && fn) {\n      var fns = this._fns[event]\n      var i = 0\n      var l = fns ? fns.length : 0\n\n      for (i; i < l; i++) {\n        if (fns[i] !== fn) {\n          keep.push(fns[i])\n        }\n      }\n    }\n\n    keep.length ? this._fns[event] = keep : delete this._fns[event]\n  }\n\n  function getListeners (e) {\n    var out = _fns[e] ? _fns[e] : []\n    var idx = e.indexOf(':')\n    var args = (idx === -1) ? [e] : [e.substring(0, idx), e.substring(idx + 1)]\n\n    var keys = Object.keys(_fns)\n    var i = 0\n    var l = keys.length\n\n    for (i; i < l; i++) {\n      var key = keys[i]\n      if (key === '*') {\n        out = out.concat(_fns[key])\n      }\n\n      if (args.length === 2 && args[0] === key) {\n        out = out.concat(_fns[key])\n        break\n      }\n    }\n\n    return out\n  }\n\n  function emitAll (e, fns, args) {\n    var i = 0\n    var l = fns.length\n\n    for (i; i < l; i++) {\n      if (!fns[i]) break\n      fns[i].event = e\n      fns[i].apply(fns[i], args)\n    }\n  }\n\n  return emitter\n}\n\n\n//# sourceURL=webpack:///./node_modules/namespace-emitter/index.js?");

/***/ }),

/***/ "./node_modules/parseqs/index.js":
/*!***************************************!*\
  !*** ./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:///./node_modules/parseqs/index.js?");

/***/ }),

/***/ "./node_modules/parseuri/index.js":
/*!****************************************!*\
  !*** ./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:///./node_modules/parseuri/index.js?");

/***/ }),

/***/ "./node_modules/preact-css-transition-group/dist/preact-css-transition-group.js":
/*!**************************************************************************************!*\
  !*** ./node_modules/preact-css-transition-group/dist/preact-css-transition-group.js ***!
  \**************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("(function (global, factory) {\n   true ? module.exports = factory(__webpack_require__(/*! preact */ \"./node_modules/preact/dist/preact.esm.js\")) :\n  undefined;\n}(this, (function (preact) { 'use strict';\n\nfunction getKey(vnode) {\n\treturn vnode.attributes && vnode.attributes.key;\n}\n\nfunction getComponentBase(component) {\n\treturn component.base;\n}\n\nfunction onlyChild(children) {\n\treturn children && children[0];\n}\n\nfunction filterNullChildren(children) {\n\treturn children && children.filter(function (i) {\n\t\treturn i !== null;\n\t});\n}\n\nfunction find(arr, iter) {\n\tfor (var i = arr.length; i--;) {\n\t\tif (iter(arr[i])) return true;\n\t}\n\treturn false;\n}\n\nfunction inChildrenByKey(children, key) {\n\treturn find(children, function (c) {\n\t\treturn getKey(c) === key;\n\t});\n}\n\nfunction inChildren(children, child) {\n\treturn inChildrenByKey(children, getKey(child));\n}\n\nfunction isShownInChildrenByKey(children, key, showProp) {\n\treturn find(children, function (c) {\n\t\treturn getKey(c) === key && c.props[showProp];\n\t});\n}\n\nfunction isShownInChildren(children, child, showProp) {\n\treturn isShownInChildrenByKey(children, getKey(child), showProp);\n}\n\nfunction mergeChildMappings(prev, next) {\n\tvar ret = [];\n\n\tvar nextChildrenPending = {},\n\t    pendingChildren = [];\n\tprev.forEach(function (c) {\n\t\tvar key = getKey(c);\n\t\tif (inChildrenByKey(next, key)) {\n\t\t\tif (pendingChildren.length) {\n\t\t\t\tnextChildrenPending[key] = pendingChildren;\n\t\t\t\tpendingChildren = [];\n\t\t\t}\n\t\t} else {\n\t\t\tpendingChildren.push(c);\n\t\t}\n\t});\n\n\tnext.forEach(function (c) {\n\t\tvar key = getKey(c);\n\t\tif (nextChildrenPending.hasOwnProperty(key)) {\n\t\t\tret = ret.concat(nextChildrenPending[key]);\n\t\t}\n\t\tret.push(c);\n\t});\n\n\treturn ret.concat(pendingChildren);\n}\n\nvar SPACE = ' ';\nvar RE_CLASS = /[\\n\\t\\r]+/g;\n\nvar norm = function (elemClass) {\n\treturn (SPACE + elemClass + SPACE).replace(RE_CLASS, SPACE);\n};\n\nfunction addClass(elem, className) {\n\tif (elem.classList) {\n\t\tvar _elem$classList;\n\n\t\t(_elem$classList = elem.classList).add.apply(_elem$classList, className.split(' '));\n\t} else {\n\t\telem.className += ' ' + className;\n\t}\n}\n\nfunction removeClass(elem, needle) {\n\tneedle = needle.trim();\n\tif (elem.classList) {\n\t\tvar _elem$classList2;\n\n\t\t(_elem$classList2 = elem.classList).remove.apply(_elem$classList2, needle.split(' '));\n\t} else {\n\t\tvar elemClass = elem.className.trim();\n\t\tvar className = norm(elemClass);\n\t\tneedle = SPACE + needle + SPACE;\n\t\twhile (className.indexOf(needle) >= 0) {\n\t\t\tclassName = className.replace(needle, SPACE);\n\t\t}\n\t\telem.className = className.trim();\n\t}\n}\n\nvar EVENT_NAME_MAP = {\n\ttransitionend: {\n\t\ttransition: 'transitionend',\n\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\tMozTransition: 'mozTransitionEnd',\n\t\tOTransition: 'oTransitionEnd',\n\t\tmsTransition: 'MSTransitionEnd'\n\t},\n\n\tanimationend: {\n\t\tanimation: 'animationend',\n\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\tMozAnimation: 'mozAnimationEnd',\n\t\tOAnimation: 'oAnimationEnd',\n\t\tmsAnimation: 'MSAnimationEnd'\n\t}\n};\n\nvar endEvents = [];\n\nfunction detectEvents() {\n\tvar testEl = document.createElement('div'),\n\t    style = testEl.style;\n\n\tif (!('AnimationEvent' in window)) {\n\t\tdelete EVENT_NAME_MAP.animationend.animation;\n\t}\n\n\tif (!('TransitionEvent' in window)) {\n\t\tdelete EVENT_NAME_MAP.transitionend.transition;\n\t}\n\n\tfor (var baseEventName in EVENT_NAME_MAP) {\n\t\tvar baseEvents = EVENT_NAME_MAP[baseEventName];\n\t\tfor (var styleName in baseEvents) {\n\t\t\tif (styleName in style) {\n\t\t\t\tendEvents.push(baseEvents[styleName]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nif (typeof window !== 'undefined') {\n\tdetectEvents();\n}\n\nfunction addEndEventListener(node, eventListener) {\n\tif (!endEvents.length) {\n\t\treturn window.setTimeout(eventListener, 0);\n\t}\n\tendEvents.forEach(function (endEvent) {\n\t\tnode.addEventListener(endEvent, eventListener, false);\n\t});\n}\n\nfunction removeEndEventListener(node, eventListener) {\n\tif (!endEvents.length) return;\n\tendEvents.forEach(function (endEvent) {\n\t\tnode.removeEventListener(endEvent, eventListener, false);\n\t});\n}\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 inherits = 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 objectWithoutProperties = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};\n\nvar possibleConstructorReturn = 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 TICK = 17;\n\nvar CSSTransitionGroupChild = function (_Component) {\n\tinherits(CSSTransitionGroupChild, _Component);\n\n\tfunction CSSTransitionGroupChild() {\n\t\tvar _temp, _this, _ret;\n\n\t\tclassCallCheck(this, CSSTransitionGroupChild);\n\n\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\targs[_key] = arguments[_key];\n\t\t}\n\n\t\treturn _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.flushClassNameQueue = function () {\n\t\t\tif (getComponentBase(_this)) {\n\t\t\t\taddClass(getComponentBase(_this), _this.classNameQueue.join(' '));\n\t\t\t}\n\t\t\t_this.classNameQueue.length = 0;\n\t\t\t_this.timeout = null;\n\t\t}, _temp), possibleConstructorReturn(_this, _ret);\n\t}\n\n\tCSSTransitionGroupChild.prototype.transition = function transition(animationType, finishCallback, timeout) {\n\t\tvar _this2 = this;\n\n\t\tvar node = getComponentBase(this);\n\n\t\tvar className = this.props.name[animationType] || this.props.name + '-' + animationType;\n\t\tvar activeClassName = this.props.name[animationType + 'Active'] || className + '-active';\n\t\tvar timer = null;\n\n\t\tif (this.endListener) {\n\t\t\tthis.endListener();\n\t\t}\n\n\t\tthis.endListener = function (e) {\n\t\t\tif (e && e.target !== node) return;\n\n\t\t\tclearTimeout(timer);\n\t\t\tremoveClass(node, className);\n\t\t\tremoveClass(node, activeClassName);\n\t\t\tremoveEndEventListener(node, _this2.endListener);\n\t\t\t_this2.endListener = null;\n\n\t\t\tif (finishCallback) {\n\t\t\t\tfinishCallback();\n\t\t\t}\n\t\t};\n\n\t\tif (timeout) {\n\t\t\ttimer = setTimeout(this.endListener, timeout);\n\t\t\tthis.transitionTimeouts.push(timer);\n\t\t} else {\n\t\t\taddEndEventListener(node, this.endListener);\n\t\t}\n\n\t\taddClass(node, className);\n\n\t\tthis.queueClass(activeClassName);\n\t};\n\n\tCSSTransitionGroupChild.prototype.queueClass = function queueClass(className) {\n\t\tthis.classNameQueue.push(className);\n\n\t\tif (!this.timeout) {\n\t\t\tthis.timeout = setTimeout(this.flushClassNameQueue, TICK);\n\t\t}\n\t};\n\n\tCSSTransitionGroupChild.prototype.stop = function stop() {\n\t\tif (this.timeout) {\n\t\t\tclearTimeout(this.timeout);\n\t\t\tthis.classNameQueue.length = 0;\n\t\t\tthis.timeout = null;\n\t\t}\n\t\tif (this.endListener) {\n\t\t\tthis.endListener();\n\t\t}\n\t};\n\n\tCSSTransitionGroupChild.prototype.componentWillMount = function componentWillMount() {\n\t\tthis.classNameQueue = [];\n\t\tthis.transitionTimeouts = [];\n\t};\n\n\tCSSTransitionGroupChild.prototype.componentWillUnmount = function componentWillUnmount() {\n\t\tif (this.timeout) {\n\t\t\tclearTimeout(this.timeout);\n\t\t}\n\t\tthis.transitionTimeouts.forEach(function (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t});\n\t};\n\n\tCSSTransitionGroupChild.prototype.componentWillEnter = function componentWillEnter(done) {\n\t\tif (this.props.enter) {\n\t\t\tthis.transition('enter', done, this.props.enterTimeout);\n\t\t} else {\n\t\t\tdone();\n\t\t}\n\t};\n\n\tCSSTransitionGroupChild.prototype.componentWillLeave = function componentWillLeave(done) {\n\t\tif (this.props.leave) {\n\t\t\tthis.transition('leave', done, this.props.leaveTimeout);\n\t\t} else {\n\t\t\tdone();\n\t\t}\n\t};\n\n\tCSSTransitionGroupChild.prototype.render = function render() {\n\t\treturn onlyChild(this.props.children);\n\t};\n\n\treturn CSSTransitionGroupChild;\n}(preact.Component);\n\nvar CSSTransitionGroup = function (_Component) {\n\tinherits(CSSTransitionGroup, _Component);\n\n\tfunction CSSTransitionGroup(props) {\n\t\tclassCallCheck(this, CSSTransitionGroup);\n\n\t\tvar _this = possibleConstructorReturn(this, _Component.call(this));\n\n\t\t_this.renderChild = function (child) {\n\t\t\tvar _this$props = _this.props;\n\t\t\tvar transitionName = _this$props.transitionName;\n\t\t\tvar transitionEnter = _this$props.transitionEnter;\n\t\t\tvar transitionLeave = _this$props.transitionLeave;\n\t\t\tvar transitionEnterTimeout = _this$props.transitionEnterTimeout;\n\t\t\tvar transitionLeaveTimeout = _this$props.transitionLeaveTimeout;\n\t\t\tvar key = getKey(child);\n\t\t\treturn preact.h(\n\t\t\t\tCSSTransitionGroupChild,\n\t\t\t\t{\n\t\t\t\t\tkey: key,\n\t\t\t\t\tref: function (c) {\n\t\t\t\t\t\tif (!(_this.refs[key] = c)) child = null;\n\t\t\t\t\t},\n\t\t\t\t\tname: transitionName,\n\t\t\t\t\tenter: transitionEnter,\n\t\t\t\t\tleave: transitionLeave,\n\t\t\t\t\tenterTimeout: transitionEnterTimeout,\n\t\t\t\t\tleaveTimeout: transitionLeaveTimeout },\n\t\t\t\tchild\n\t\t\t);\n\t\t};\n\n\t\t_this.refs = {};\n\t\t_this.state = {\n\t\t\tchildren: (props.children || []).slice()\n\t\t};\n\t\treturn _this;\n\t}\n\n\tCSSTransitionGroup.prototype.shouldComponentUpdate = function shouldComponentUpdate(_, _ref) {\n\t\tvar children = _ref.children;\n\n\t\treturn children !== this.state.children;\n\t};\n\n\tCSSTransitionGroup.prototype.componentWillMount = function componentWillMount() {\n\t\tthis.currentlyTransitioningKeys = {};\n\t\tthis.keysToEnter = [];\n\t\tthis.keysToLeave = [];\n\t};\n\n\tCSSTransitionGroup.prototype.componentWillReceiveProps = function componentWillReceiveProps(_ref2) {\n\t\tvar _this2 = this;\n\n\t\tvar children = _ref2.children;\n\t\tvar exclusive = _ref2.exclusive;\n\t\tvar showProp = _ref2.showProp;\n\n\t\tvar nextChildMapping = filterNullChildren(children || []).slice();\n\n\t\tvar prevChildMapping = filterNullChildren(exclusive ? this.props.children : this.state.children);\n\n\t\tvar newChildren = mergeChildMappings(prevChildMapping, nextChildMapping);\n\n\t\tif (showProp) {\n\t\t\tnewChildren = newChildren.map(function (c) {\n\t\t\t\tif (!c.props[showProp] && isShownInChildren(prevChildMapping, c, showProp)) {\n\t\t\t\t\tvar _cloneElement;\n\n\t\t\t\t\tc = preact.cloneElement(c, (_cloneElement = {}, _cloneElement[showProp] = true, _cloneElement));\n\t\t\t\t}\n\t\t\t\treturn c;\n\t\t\t});\n\t\t}\n\n\t\tif (exclusive) {\n\t\t\tnewChildren.forEach(function (c) {\n\t\t\t\treturn _this2.stop(getKey(c));\n\t\t\t});\n\t\t}\n\n\t\tthis.setState({ children: newChildren });\n\t\tthis.forceUpdate();\n\n\t\tnextChildMapping.forEach(function (c) {\n\t\t\tvar key = c.key;\n\t\t\tvar hasPrev = prevChildMapping && inChildren(prevChildMapping, c);\n\t\t\tif (showProp) {\n\t\t\t\tif (hasPrev) {\n\t\t\t\t\tvar showInPrev = isShownInChildren(prevChildMapping, c, showProp),\n\t\t\t\t\t    showInNow = c.props[showProp];\n\t\t\t\t\tif (!showInPrev && showInNow && !_this2.currentlyTransitioningKeys[key]) {\n\t\t\t\t\t\t_this2.keysToEnter.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (!hasPrev && !_this2.currentlyTransitioningKeys[key]) {\n\t\t\t\t_this2.keysToEnter.push(key);\n\t\t\t}\n\t\t});\n\n\t\tprevChildMapping.forEach(function (c) {\n\t\t\tvar key = c.key;\n\t\t\tvar hasNext = nextChildMapping && inChildren(nextChildMapping, c);\n\t\t\tif (showProp) {\n\t\t\t\tif (hasNext) {\n\t\t\t\t\tvar showInNext = isShownInChildren(nextChildMapping, c, showProp);\n\t\t\t\t\tvar showInNow = c.props[showProp];\n\t\t\t\t\tif (!showInNext && showInNow && !_this2.currentlyTransitioningKeys[key]) {\n\t\t\t\t\t\t_this2.keysToLeave.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (!hasNext && !_this2.currentlyTransitioningKeys[key]) {\n\t\t\t\t_this2.keysToLeave.push(key);\n\t\t\t}\n\t\t});\n\t};\n\n\tCSSTransitionGroup.prototype.performEnter = function performEnter(key) {\n\t\tvar _this3 = this;\n\n\t\tthis.currentlyTransitioningKeys[key] = true;\n\t\tvar component = this.refs[key];\n\t\tif (component.componentWillEnter) {\n\t\t\tcomponent.componentWillEnter(function () {\n\t\t\t\treturn _this3._handleDoneEntering(key);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._handleDoneEntering(key);\n\t\t}\n\t};\n\n\tCSSTransitionGroup.prototype._handleDoneEntering = function _handleDoneEntering(key) {\n\t\tdelete this.currentlyTransitioningKeys[key];\n\t\tvar currentChildMapping = filterNullChildren(this.props.children),\n\t\t    showProp = this.props.showProp;\n\t\tif (!currentChildMapping || !showProp && !inChildrenByKey(currentChildMapping, key) || showProp && !isShownInChildrenByKey(currentChildMapping, key, showProp)) {\n\t\t\tthis.performLeave(key);\n\t\t} else {\n\t\t\tthis.setState({ children: currentChildMapping });\n\t\t}\n\t};\n\n\tCSSTransitionGroup.prototype.stop = function stop(key) {\n\t\tdelete this.currentlyTransitioningKeys[key];\n\t\tvar component = this.refs[key];\n\t\tif (component) component.stop();\n\t};\n\n\tCSSTransitionGroup.prototype.performLeave = function performLeave(key) {\n\t\tvar _this4 = this;\n\n\t\tthis.currentlyTransitioningKeys[key] = true;\n\t\tvar component = this.refs[key];\n\t\tif (component && component.componentWillLeave) {\n\t\t\tcomponent.componentWillLeave(function () {\n\t\t\t\treturn _this4._handleDoneLeaving(key);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._handleDoneLeaving(key);\n\t\t}\n\t};\n\n\tCSSTransitionGroup.prototype._handleDoneLeaving = function _handleDoneLeaving(key) {\n\t\tdelete this.currentlyTransitioningKeys[key];\n\t\tvar showProp = this.props.showProp,\n\t\t    currentChildMapping = filterNullChildren(this.props.children);\n\t\tif (showProp && currentChildMapping && isShownInChildrenByKey(currentChildMapping, key, showProp)) {\n\t\t\tthis.performEnter(key);\n\t\t} else if (!showProp && currentChildMapping && inChildrenByKey(currentChildMapping, key)) {\n\t\t\tthis.performEnter(key);\n\t\t} else {\n\t\t\tthis.setState({ children: currentChildMapping });\n\t\t}\n\t};\n\n\tCSSTransitionGroup.prototype.componentDidUpdate = function componentDidUpdate() {\n\t\tvar _this5 = this;\n\n\t\tvar keysToEnter = this.keysToEnter;\n\t\tvar keysToLeave = this.keysToLeave;\n\n\t\tthis.keysToEnter = [];\n\t\tkeysToEnter.forEach(function (k) {\n\t\t\treturn _this5.performEnter(k);\n\t\t});\n\t\tthis.keysToLeave = [];\n\t\tkeysToLeave.forEach(function (k) {\n\t\t\treturn _this5.performLeave(k);\n\t\t});\n\t};\n\n\tCSSTransitionGroup.prototype.render = function render(_ref3, _ref4) {\n\t\tvar Component = _ref3.component;\n\t\tvar transitionName = _ref3.transitionName;\n\t\tvar transitionEnter = _ref3.transitionEnter;\n\t\tvar transitionLeave = _ref3.transitionLeave;\n\t\tvar transitionEnterTimeout = _ref3.transitionEnterTimeout;\n\t\tvar transitionLeaveTimeout = _ref3.transitionLeaveTimeout;\n\t\tvar c = _ref3.children;\n\t\tvar props = objectWithoutProperties(_ref3, ['component', 'transitionName', 'transitionEnter', 'transitionLeave', 'transitionEnterTimeout', 'transitionLeaveTimeout', 'children']);\n\t\tvar children = _ref4.children;\n\n\t\treturn preact.h(\n\t\t\tComponent,\n\t\t\tprops,\n\t\t\tfilterNullChildren(children).map(this.renderChild)\n\t\t);\n\t};\n\n\treturn CSSTransitionGroup;\n}(preact.Component);\nCSSTransitionGroup.defaultProps = {\n\tcomponent: 'span',\n\ttransitionEnter: true,\n\ttransitionLeave: true\n};\n\nreturn CSSTransitionGroup;\n\n})));\n//# sourceMappingURL=preact-css-transition-group.js.map\n\n\n//# sourceURL=webpack:///./node_modules/preact-css-transition-group/dist/preact-css-transition-group.js?");

/***/ }),

/***/ "./node_modules/preact/dist/preact.esm.js":
/*!************************************************!*\
  !*** ./node_modules/preact/dist/preact.esm.js ***!
  \************************************************/
/*! exports provided: default, h, createElement, cloneElement, Component, render, rerender, options */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return h; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createElement\", function() { return h; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cloneElement\", function() { return cloneElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Component\", function() { return Component; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rerender\", function() { return rerender; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"options\", function() { return options; });\n/** Virtual DOM Node */\nfunction VNode() {}\n\n/** Global options\n *\t@public\n *\t@namespace options {Object}\n */\nvar options = {\n\n\t/** If `true`, `prop` changes trigger synchronous component updates.\n  *\t@name syncComponentUpdates\n  *\t@type Boolean\n  *\t@default true\n  */\n\t//syncComponentUpdates: true,\n\n\t/** Processes all created VNodes.\n  *\t@param {VNode} vnode\tA newly-created VNode to normalize/process\n  */\n\t//vnode(vnode) { }\n\n\t/** Hook invoked after a component is mounted. */\n\t// afterMount(component) { }\n\n\t/** Hook invoked after the DOM is updated with a component's latest render. */\n\t// afterUpdate(component) { }\n\n\t/** Hook invoked immediately before a component is unmounted. */\n\t// beforeUnmount(component) { }\n};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\n/**\n * JSX/hyperscript reviver.\n * @see http://jasonformat.com/wtf-is-jsx\n * Benchmarks: https://esbench.com/bench/57ee8f8e330ab09900a1a1a0\n *\n * Note: this is exported as both `h()` and `createElement()` for compatibility reasons.\n *\n * Creates a VNode (virtual DOM element). A tree of VNodes can be used as a lightweight representation\n * of the structure of a DOM tree. This structure can be realized by recursively comparing it against\n * the current _actual_ DOM structure, and applying only the differences.\n *\n * `h()`/`createElement()` accepts an element name, a list of attributes/props,\n * and optionally children to append to the element.\n *\n * @example The following DOM tree\n *\n * `<div id=\"foo\" name=\"bar\">Hello!</div>`\n *\n * can be constructed using this function as:\n *\n * `h('div', { id: 'foo', name : 'bar' }, 'Hello!');`\n *\n * @param {string} nodeName\tAn element name. Ex: `div`, `a`, `span`, etc.\n * @param {Object} attributes\tAny attributes/props to set on the created element.\n * @param rest\t\t\tAdditional arguments are taken to be children to append. Can be infinitely nested Arrays.\n *\n * @public\n */\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t    lastSimple,\n\t    child,\n\t    simple,\n\t    i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\t// if a \"vnode hook\" is defined, pass every created VNode to it\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\n/**\n *  Copy all properties from `props` onto `obj`.\n *  @param {Object} obj\t\tObject onto which properties should be copied.\n *  @param {Object} props\tObject from which to copy properties.\n *  @returns obj\n *  @private\n */\nfunction extend(obj, props) {\n  for (var i in props) {\n    obj[i] = props[i];\n  }return obj;\n}\n\n/**\n * Call a function asynchronously, as soon as possible. Makes\n * use of HTML Promise to schedule the callback if available,\n * otherwise falling back to `setTimeout` (mainly for IE<11).\n *\n * @param {Function} callback\n */\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\n * @param {VNode} vnode\t\tThe virtual DOM element to clone\n * @param {Object} props\tAttributes/props to add when cloning\n * @param {VNode} rest\t\tAny additional arguments will be used as replacement children.\n */\nfunction cloneElement(vnode, props) {\n  return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\n// DOM properties that should NOT have \"px\" added when numeric\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\n/** Managed queue of dirty components to be re-rendered */\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p,\n\t    list = items;\n\titems = [];\n\twhile (p = list.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\n/**\n * Check if two nodes are equivalent.\n *\n * @param {Node} node\t\t\tDOM Node to compare\n * @param {VNode} vnode\t\t\tVirtual DOM node to compare\n * @param {boolean} [hydrating=false]\tIf true, ignores component constructors when comparing.\n * @private\n */\nfunction isSameNodeType(node, vnode, hydrating) {\n  if (typeof vnode === 'string' || typeof vnode === 'number') {\n    return node.splitText !== undefined;\n  }\n  if (typeof vnode.nodeName === 'string') {\n    return !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n  }\n  return hydrating || node._componentConstructor === vnode.nodeName;\n}\n\n/**\n * Check if an Element has a given nodeName, case-insensitively.\n *\n * @param {Element} node\tA DOM Element to inspect the name of.\n * @param {String} nodeName\tUnnormalized name to compare against.\n */\nfunction isNamedNode(node, nodeName) {\n  return node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\n/**\n * Reconstruct Component-style `props` from a VNode.\n * Ensures default/fallback values from `defaultProps`:\n * Own-properties of `defaultProps` not present in `vnode.attributes` are added.\n *\n * @param {VNode} vnode\n * @returns {Object} props\n */\nfunction getNodeProps(vnode) {\n  var props = extend({}, vnode.attributes);\n  props.children = vnode.children;\n\n  var defaultProps = vnode.nodeName.defaultProps;\n  if (defaultProps !== undefined) {\n    for (var i in defaultProps) {\n      if (props[i] === undefined) {\n        props[i] = defaultProps[i];\n      }\n    }\n  }\n\n  return props;\n}\n\n/** Create an element with the given nodeName.\n *\t@param {String} nodeName\n *\t@param {Boolean} [isSvg=false]\tIf `true`, creates an element within the SVG namespace.\n *\t@returns {Element} node\n */\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\n/** Remove a child node from its parent if attached.\n *\t@param {Element} node\t\tThe node to remove\n */\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\n/** Set a named attribute on the given Node, with special behavior for some names and event handlers.\n *\tIf `value` is `null`, the attribute/handler will be removed.\n *\t@param {Element} node\tAn element to mutate\n *\t@param {string} name\tThe name/key to set, such as an event or attribute name\n *\t@param {any} old\tThe last value that was set for this name/node pair\n *\t@param {any} value\tAn attribute value, such as a function to be used as an event handler\n *\t@param {Boolean} isSvg\tAre we currently diffing inside an svg?\n *\t@private\n */\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {\n\t\t// ignore\n\t} else if (name === 'ref') {\n\t\tif (old) old(null);\n\t\tif (value) value(node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\tsetProperty(node, name, value == null ? '' : value);\n\t\tif (value == null || value === false) node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\n/** Attempt to set a DOM property to the given value.\n *\tIE & FF throw for certain property-value combinations.\n */\nfunction setProperty(node, name, value) {\n\ttry {\n\t\tnode[name] = value;\n\t} catch (e) {}\n}\n\n/** Proxy an event to hooked event handlers\n *\t@private\n */\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\n/** Queue of components that have been mounted and are awaiting componentDidMount */\nvar mounts = [];\n\n/** Diff recursion count, used to track the end of the diff cycle. */\nvar diffLevel = 0;\n\n/** Global flag indicating if the diff is currently within an SVG */\nvar isSvgMode = false;\n\n/** Global flag indicating if the diff is performing hydration */\nvar hydrating = false;\n\n/** Invoke queued componentDidMount lifecycle methods */\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.pop()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\n/** Apply differences in a given vnode (and it's deep children) to a real DOM Node.\n *\t@param {Element} [dom=null]\t\tA DOM node to mutate into the shape of the `vnode`\n *\t@param {VNode} vnode\t\t\tA VNode (with descendants forming a tree) representing the desired DOM structure\n *\t@returns {Element} dom\t\t\tThe created/mutated element\n *\t@private\n */\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\t// diffLevel having been 0 here indicates initial entry into the diff (not a subdiff)\n\tif (!diffLevel++) {\n\t\t// when first starting the diff, check if we're diffing an SVG or within an SVG\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\t// hydration is indicated by the existing element to be diffed not having a prop cache\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\t// append the element if its a new parent\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\t// diffLevel being reduced to 0 means we're exiting the diff\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\t\t// invoke queued componentDidMount lifecycle methods\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\n/** Internals of `diff()`, separated to allow bypassing diffLevel / mount flushing. */\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t    prevSvgMode = isSvgMode;\n\n\t// empty values (null, undefined, booleans) render as empty Text nodes\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\t// Fast case: Strings & Numbers create/update Text nodes.\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\n\t\t// update if it's already a Text node:\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\t/* istanbul ignore if */ /* Browser quirk that can't be covered: https://github.com/developit/preact/commit/fd4f21f5c45dfd75151bd27b4c217d8003aa5eb9 */\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\t// it wasn't a Text node: replace it with one and recycle the old Element\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\t// If the VNode represents a Component, perform a component diff:\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\t// If there's no existing element or it's the wrong type, create a new one:\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\t// move children into the replacement node\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t} // if the previous Element was mounted into the DOM, replace it inline\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\t// recycle the old element (skips non-Element node types)\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t    props = out['__preactattr_'],\n\t    vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\t// Optimization: fast-path for elements containing a single TextNode:\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t}\n\t// otherwise, if there are existing or new children, diff them:\n\telse if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\t// Apply attributes/props from VNode to the DOM Element:\n\tdiffAttributes(out, vnode.attributes, props);\n\n\t// restore previous SVG mode: (in case we're exiting an SVG namespace)\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\n/** Apply child and attribute changes between a VNode and a DOM Node to the DOM.\n *\t@param {Element} dom\t\t\tElement whose children should be compared & mutated\n *\t@param {Array} vchildren\t\tArray of VNodes to compare to `dom.childNodes`\n *\t@param {Object} context\t\t\tImplicitly descendant context object (from most recent `getChildContext()`)\n *\t@param {Boolean} mountAll\n *\t@param {Boolean} isHydrating\tIf `true`, consumes externally created elements similar to hydration\n */\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t    children = [],\n\t    keyed = {},\n\t    keyedLen = 0,\n\t    min = 0,\n\t    len = originalChildren.length,\n\t    childrenLen = 0,\n\t    vlen = vchildren ? vchildren.length : 0,\n\t    j,\n\t    c,\n\t    f,\n\t    vchild,\n\t    child;\n\n\t// Build up a map of keyed children and an Array of unkeyed children:\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t    props = _child['__preactattr_'],\n\t\t\t    key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\t// attempt to find a node based on key matching\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// attempt to pluck a node of the same type from the existing children\n\t\t\telse if (!child && min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// morph the matched/found/created DOM child to match vchild (deep)\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// remove unused keyed children:\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\t// remove orphaned unkeyed children:\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\n/** Recursively recycle (or just unmount) a node and its descendants.\n *\t@param {Node} node\t\t\t\t\t\tDOM node to start unmount/removal from\n *\t@param {Boolean} [unmountOnly=false]\tIf `true`, only triggers unmount lifecycle, skips removal\n */\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\t// if node is owned by a Component, unmount that component (ends up recursing back here)\n\t\tunmountComponent(component);\n\t} else {\n\t\t// If the node's VNode had a ref function, invoke it with null here.\n\t\t// (this is part of the React spec, and smart for unsetting references)\n\t\tif (node['__preactattr_'] != null && node['__preactattr_'].ref) node['__preactattr_'].ref(null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\n/** Recollect/unmount all children.\n *\t- we use .lastChild here because it causes less reflow than .firstChild\n *\t- it's also cheaper than accessing the .childNodes Live NodeList\n */\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\n/** Apply differences in attributes from a VNode to the given DOM Element.\n *\t@param {Element} dom\t\tElement with attributes to diff `attrs` against\n *\t@param {Object} attrs\t\tThe desired end-state key-value attribute pairs\n *\t@param {Object} old\t\t\tCurrent/previous attributes (from previous VNode or element's prop cache)\n */\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\t// remove attributes no longer present on the vnode by setting them to undefined\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\t// add new & update changed attributes\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\n/** Retains a pool of Components for re-use, keyed on component name.\n *\tNote: since component names are not unique or even necessarily available, these are primarily a form of sharding.\n *\t@private\n */\nvar components = {};\n\n/** Reclaim a component for later re-use by the recycler. */\nfunction collectComponent(component) {\n\tvar name = component.constructor.name;\n\t(components[name] || (components[name] = [])).push(component);\n}\n\n/** Create a component. Normalizes differences between PFC's and classful Components. */\nfunction createComponent(Ctor, props, context) {\n\tvar list = components[Ctor.name],\n\t    inst;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\tif (list) {\n\t\tfor (var i = list.length; i--;) {\n\t\t\tif (list[i].constructor === Ctor) {\n\t\t\t\tinst.nextBase = list[i].nextBase;\n\t\t\t\tlist.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn inst;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\n/** Set a component's `props` (generally derived from JSX attributes).\n *\t@param {Object} props\n *\t@param {Object} [opts]\n *\t@param {boolean} [opts.renderSync=false]\tIf `true` and {@link options.syncComponentUpdates} is `true`, triggers synchronous rendering.\n *\t@param {boolean} [opts.render=true]\t\t\tIf `false`, no render will be triggered.\n */\nfunction setComponentProps(component, props, opts, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tif (component.__ref = props.ref) delete props.ref;\n\tif (component.__key = props.key) delete props.key;\n\n\tif (!component.base || mountAll) {\n\t\tif (component.componentWillMount) component.componentWillMount();\n\t} else if (component.componentWillReceiveProps) {\n\t\tcomponent.componentWillReceiveProps(props, context);\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (opts !== 0) {\n\t\tif (opts === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tif (component.__ref) component.__ref(component);\n}\n\n/** Render a Component, triggering necessary lifecycle events and taking High-Order Components into account.\n *\t@param {Component} component\n *\t@param {Object} [opts]\n *\t@param {boolean} [opts.build=false]\t\tIf `true`, component will build and store a DOM node if not already associated with one.\n *\t@private\n */\nfunction renderComponent(component, opts, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t    state = component.state,\n\t    context = component.context,\n\t    previousProps = component.prevProps || props,\n\t    previousState = component.prevState || state,\n\t    previousContext = component.prevContext || context,\n\t    isUpdate = component.base,\n\t    nextBase = component.nextBase,\n\t    initialBase = isUpdate || nextBase,\n\t    initialChildComponent = component._component,\n\t    skip = false,\n\t    rendered,\n\t    inst,\n\t    cbase;\n\n\t// if updating\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (opts !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\t// context to pass to the child, can be updated via (grand-)parent component\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t    toUnmount,\n\t\t    base;\n\n\t\tif (typeof childComponent === 'function') {\n\t\t\t// set up high order component link\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\t// destroy high order component link\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || opts === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t    t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.unshift(component);\n\t} else if (!skip) {\n\t\t// Ensure that pending componentDidMount() hooks of child components\n\t\t// are called before the componentDidUpdate() hook in the parent.\n\t\t// Note: disabled as it causes duplicate hooks, see https://github.com/developit/preact/issues/750\n\t\t// flushMounts();\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, previousContext);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\tif (component._renderCallbacks != null) {\n\t\twhile (component._renderCallbacks.length) {\n\t\t\tcomponent._renderCallbacks.pop().call(component);\n\t\t}\n\t}\n\n\tif (!diffLevel && !isChild) flushMounts();\n}\n\n/** Apply the Component referenced by a VNode to the DOM.\n *\t@param {Element} dom\tThe DOM node to mutate\n *\t@param {VNode} vnode\tA Component-referencing VNode\n *\t@returns {Element} dom\tThe created/mutated element\n *\t@private\n */\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t    originalComponent = c,\n\t    oldDom = dom,\n\t    isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t    isOwner = isDirectOwner,\n\t    props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\t\t\t// passing dom/oldDom as nextBase will recycle it if unused, so bypass recycling on L229:\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/** Remove a component from the DOM and recycle it.\n *\t@param {Component} component\tThe Component instance to unmount\n *\t@private\n */\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\t// recursively tear down & recollect high-order component children:\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] && base['__preactattr_'].ref) base['__preactattr_'].ref(null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\tcollectComponent(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tif (component.__ref) component.__ref(null);\n}\n\n/** Base Component class.\n *\tProvides `setState()` and `forceUpdate()`, which trigger rendering.\n *\t@public\n *\n *\t@example\n *\tclass MyFoo extends Component {\n *\t\trender(props, state) {\n *\t\t\treturn <div />;\n *\t\t}\n *\t}\n */\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\t/** @public\n  *\t@type {object}\n  */\n\tthis.context = context;\n\n\t/** @public\n  *\t@type {object}\n  */\n\tthis.props = props;\n\n\t/** @public\n  *\t@type {object}\n  */\n\tthis.state = this.state || {};\n}\n\nextend(Component.prototype, {\n\n\t/** Returns a `boolean` indicating if the component should re-render when receiving the given `props` and `state`.\n  *\t@param {object} nextProps\n  *\t@param {object} nextState\n  *\t@param {object} nextContext\n  *\t@returns {Boolean} should the component re-render\n  *\t@name shouldComponentUpdate\n  *\t@function\n  */\n\n\t/** Update component state by copying properties from `state` to `this.state`.\n  *\t@param {object} state\t\tA hash of state properties to update with new values\n  *\t@param {function} callback\tA function to be called once component state is updated\n  */\n\tsetState: function setState(state, callback) {\n\t\tvar s = this.state;\n\t\tif (!this.prevState) this.prevState = extend({}, s);\n\t\textend(s, typeof state === 'function' ? state(s, this.props) : state);\n\t\tif (callback) (this._renderCallbacks = this._renderCallbacks || []).push(callback);\n\t\tenqueueRender(this);\n\t},\n\n\n\t/** Immediately perform a synchronous re-render of the component.\n  *\t@param {function} callback\t\tA function to be called after component is re-rendered.\n  *\t@private\n  */\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) (this._renderCallbacks = this._renderCallbacks || []).push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\n\n\t/** Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n  *\tVirtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n  *\t@param {object} props\t\tProps (eg: JSX attributes) received from parent element/component\n  *\t@param {object} state\t\tThe component's current state\n  *\t@param {object} context\t\tContext object (if a parent component has provided context)\n  *\t@returns VNode\n  */\n\trender: function render() {}\n});\n\n/** Render JSX into a `parent` Element.\n *\t@param {VNode} vnode\t\tA (JSX) VNode to render\n *\t@param {Element} parent\t\tDOM element to render into\n *\t@param {Element} [merge]\tAttempt to re-use an existing DOM tree rooted at `merge`\n *\t@public\n *\n *\t@example\n *\t// render a div into <body>:\n *\trender(<div id=\"hello\">hello!</div>, document.body);\n *\n *\t@example\n *\t// render a \"Thing\" component into #foo:\n *\tconst Thing = ({ name }) => <span>{ name }</span>;\n *\trender(<Thing name=\"one\" />, document.querySelector('#foo'));\n */\nfunction render(vnode, parent, merge) {\n  return diff(merge, vnode, {}, false, parent, false);\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (preact);\n\n//# sourceMappingURL=preact.esm.js.map\n\n\n//# sourceURL=webpack:///./node_modules/preact/dist/preact.esm.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/qs-stringify/index.js":
/*!********************************************!*\
  !*** ./node_modules/qs-stringify/index.js ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var has = Object.prototype.hasOwnProperty\n\n/**\n * Stringify an object for use in a query string.\n *\n * @param {Object} obj - The object.\n * @param {string} prefix - When nesting, the parent key.\n *     keys in `obj` will be stringified as `prefix[key]`.\n */\n\nmodule.exports = function queryStringify (obj, prefix) {\n  var pairs = []\n  for (var key in obj) {\n    if (!has.call(obj, key)) {\n      continue\n    }\n\n    var value = obj[key]\n    var enkey = encodeURIComponent(key)\n    var pair\n    if (typeof value === 'object') {\n      pair = queryStringify(value, prefix ? prefix + '[' + enkey + ']' : enkey)\n    } else {\n      pair = (prefix ? prefix + '[' + enkey + ']' : enkey) + '=' + encodeURIComponent(value)\n    }\n    pairs.push(pair)\n  }\n  return pairs.join('&')\n}\n\n\n//# sourceURL=webpack:///./node_modules/qs-stringify/index.js?");

/***/ }),

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

"use strict";
eval("\n\nvar has = Object.prototype.hasOwnProperty\n  , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  try {\n    return decodeURIComponent(input.replace(/\\+/g, ' '));\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n  try {\n    return encodeURIComponent(input);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    // In the case if failed decoding, we want to omit the key/value pairs\n    // from the result.\n    //\n    if (key === null || value === null || key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = []\n    , value\n    , key;\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (key in obj) {\n    if (has.call(obj, key)) {\n      value = obj[key];\n\n      //\n      // Edge cases where we actually want to encode the value to an empty\n      // string instead of the stringified value.\n      //\n      if (!value && (value === null || value === undef || isNaN(value))) {\n        value = '';\n      }\n\n      key = encodeURIComponent(key);\n      value = encodeURIComponent(value);\n\n      //\n      // If we failed to encode the strings, we should bail out as we don't\n      // want to add invalid strings to the query.\n      //\n      if (key === null || value === null) continue;\n      pairs.push(key +'='+ value);\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n\n\n//# sourceURL=webpack:///./node_modules/querystringify/index.js?");

/***/ }),

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

"use strict";
eval("\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n\n\n//# sourceURL=webpack:///./node_modules/requires-port/index.js?");

/***/ }),

/***/ "./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js":
/*!*************************************************************************!*\
  !*** ./node_modules/resize-observer-polyfill/dist/ResizeObserver.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) {/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n    if (typeof Map !== 'undefined') {\r\n        return Map;\r\n    }\r\n    /**\r\n     * Returns index in provided array that matches the specified key.\r\n     *\r\n     * @param {Array<Array>} arr\r\n     * @param {*} key\r\n     * @returns {number}\r\n     */\r\n    function getIndex(arr, key) {\r\n        var result = -1;\r\n        arr.some(function (entry, index) {\r\n            if (entry[0] === key) {\r\n                result = index;\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n        return result;\r\n    }\r\n    return /** @class */ (function () {\r\n        function class_1() {\r\n            this.__entries__ = [];\r\n        }\r\n        Object.defineProperty(class_1.prototype, \"size\", {\r\n            /**\r\n             * @returns {boolean}\r\n             */\r\n            get: function () {\r\n                return this.__entries__.length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        /**\r\n         * @param {*} key\r\n         * @returns {*}\r\n         */\r\n        class_1.prototype.get = function (key) {\r\n            var index = getIndex(this.__entries__, key);\r\n            var entry = this.__entries__[index];\r\n            return entry && entry[1];\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @param {*} value\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.set = function (key, value) {\r\n            var index = getIndex(this.__entries__, key);\r\n            if (~index) {\r\n                this.__entries__[index][1] = value;\r\n            }\r\n            else {\r\n                this.__entries__.push([key, value]);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.delete = function (key) {\r\n            var entries = this.__entries__;\r\n            var index = getIndex(entries, key);\r\n            if (~index) {\r\n                entries.splice(index, 1);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.has = function (key) {\r\n            return !!~getIndex(this.__entries__, key);\r\n        };\r\n        /**\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.clear = function () {\r\n            this.__entries__.splice(0);\r\n        };\r\n        /**\r\n         * @param {Function} callback\r\n         * @param {*} [ctx=null]\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.forEach = function (callback, ctx) {\r\n            if (ctx === void 0) { ctx = null; }\r\n            for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n                var entry = _a[_i];\r\n                callback.call(ctx, entry[1], entry[0]);\r\n            }\r\n        };\r\n        return class_1;\r\n    }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n    if (typeof global !== 'undefined' && global.Math === Math) {\r\n        return global;\r\n    }\r\n    if (typeof self !== 'undefined' && self.Math === Math) {\r\n        return self;\r\n    }\r\n    if (typeof window !== 'undefined' && window.Math === Math) {\r\n        return window;\r\n    }\r\n    // eslint-disable-next-line no-new-func\r\n    return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n    if (typeof requestAnimationFrame === 'function') {\r\n        // It's required to use a bounded function because IE sometimes throws\r\n        // an \"Invalid calling object\" error if rAF is invoked without the global\r\n        // object on the left hand side.\r\n        return requestAnimationFrame.bind(global$1);\r\n    }\r\n    return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n    var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n    /**\r\n     * Invokes the original callback function and schedules new invocation if\r\n     * the \"proxy\" was called during current request.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function resolvePending() {\r\n        if (leadingCall) {\r\n            leadingCall = false;\r\n            callback();\r\n        }\r\n        if (trailingCall) {\r\n            proxy();\r\n        }\r\n    }\r\n    /**\r\n     * Callback invoked after the specified delay. It will further postpone\r\n     * invocation of the original function delegating it to the\r\n     * requestAnimationFrame.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function timeoutCallback() {\r\n        requestAnimationFrame$1(resolvePending);\r\n    }\r\n    /**\r\n     * Schedules invocation of the original function.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function proxy() {\r\n        var timeStamp = Date.now();\r\n        if (leadingCall) {\r\n            // Reject immediately following calls.\r\n            if (timeStamp - lastCallTime < trailingTimeout) {\r\n                return;\r\n            }\r\n            // Schedule new call to be in invoked when the pending one is resolved.\r\n            // This is important for \"transitions\" which never actually start\r\n            // immediately so there is a chance that we might miss one if change\r\n            // happens amids the pending invocation.\r\n            trailingCall = true;\r\n        }\r\n        else {\r\n            leadingCall = true;\r\n            trailingCall = false;\r\n            setTimeout(timeoutCallback, delay);\r\n        }\r\n        lastCallTime = timeStamp;\r\n    }\r\n    return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserverController.\r\n     *\r\n     * @private\r\n     */\r\n    function ResizeObserverController() {\r\n        /**\r\n         * Indicates whether DOM listeners have been added.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.connected_ = false;\r\n        /**\r\n         * Tells that controller has subscribed for Mutation Events.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.mutationEventsAdded_ = false;\r\n        /**\r\n         * Keeps reference to the instance of MutationObserver.\r\n         *\r\n         * @private {MutationObserver}\r\n         */\r\n        this.mutationsObserver_ = null;\r\n        /**\r\n         * A list of connected observers.\r\n         *\r\n         * @private {Array<ResizeObserverSPI>}\r\n         */\r\n        this.observers_ = [];\r\n        this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n        this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n    }\r\n    /**\r\n     * Adds observer to observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be added.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.addObserver = function (observer) {\r\n        if (!~this.observers_.indexOf(observer)) {\r\n            this.observers_.push(observer);\r\n        }\r\n        // Add listeners if they haven't been added yet.\r\n        if (!this.connected_) {\r\n            this.connect_();\r\n        }\r\n    };\r\n    /**\r\n     * Removes observer from observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.removeObserver = function (observer) {\r\n        var observers = this.observers_;\r\n        var index = observers.indexOf(observer);\r\n        // Remove observer if it's present in registry.\r\n        if (~index) {\r\n            observers.splice(index, 1);\r\n        }\r\n        // Remove listeners if controller has no connected observers.\r\n        if (!observers.length && this.connected_) {\r\n            this.disconnect_();\r\n        }\r\n    };\r\n    /**\r\n     * Invokes the update of observers. It will continue running updates insofar\r\n     * it detects changes.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.refresh = function () {\r\n        var changesDetected = this.updateObservers_();\r\n        // Continue running updates if changes have been detected as there might\r\n        // be future ones caused by CSS transitions.\r\n        if (changesDetected) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Updates every observer from observers list and notifies them of queued\r\n     * entries.\r\n     *\r\n     * @private\r\n     * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n     *      dimensions of it's elements.\r\n     */\r\n    ResizeObserverController.prototype.updateObservers_ = function () {\r\n        // Collect observers that have active observations.\r\n        var activeObservers = this.observers_.filter(function (observer) {\r\n            return observer.gatherActive(), observer.hasActive();\r\n        });\r\n        // Deliver notifications in a separate cycle in order to avoid any\r\n        // collisions between observers, e.g. when multiple instances of\r\n        // ResizeObserver are tracking the same element and the callback of one\r\n        // of them changes content dimensions of the observed target. Sometimes\r\n        // this may result in notifications being blocked for the rest of observers.\r\n        activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n        return activeObservers.length > 0;\r\n    };\r\n    /**\r\n     * Initializes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.connect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already added.\r\n        if (!isBrowser || this.connected_) {\r\n            return;\r\n        }\r\n        // Subscription to the \"Transitionend\" event is used as a workaround for\r\n        // delayed transitions. This way it's possible to capture at least the\r\n        // final state of an element.\r\n        document.addEventListener('transitionend', this.onTransitionEnd_);\r\n        window.addEventListener('resize', this.refresh);\r\n        if (mutationObserverSupported) {\r\n            this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n            this.mutationsObserver_.observe(document, {\r\n                attributes: true,\r\n                childList: true,\r\n                characterData: true,\r\n                subtree: true\r\n            });\r\n        }\r\n        else {\r\n            document.addEventListener('DOMSubtreeModified', this.refresh);\r\n            this.mutationEventsAdded_ = true;\r\n        }\r\n        this.connected_ = true;\r\n    };\r\n    /**\r\n     * Removes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.disconnect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already removed.\r\n        if (!isBrowser || !this.connected_) {\r\n            return;\r\n        }\r\n        document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n        window.removeEventListener('resize', this.refresh);\r\n        if (this.mutationsObserver_) {\r\n            this.mutationsObserver_.disconnect();\r\n        }\r\n        if (this.mutationEventsAdded_) {\r\n            document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n        }\r\n        this.mutationsObserver_ = null;\r\n        this.mutationEventsAdded_ = false;\r\n        this.connected_ = false;\r\n    };\r\n    /**\r\n     * \"Transitionend\" event handler.\r\n     *\r\n     * @private\r\n     * @param {TransitionEvent} event\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n        var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n        // Detect whether transition may affect dimensions of an element.\r\n        var isReflowProperty = transitionKeys.some(function (key) {\r\n            return !!~propertyName.indexOf(key);\r\n        });\r\n        if (isReflowProperty) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Returns instance of the ResizeObserverController.\r\n     *\r\n     * @returns {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.getInstance = function () {\r\n        if (!this.instance_) {\r\n            this.instance_ = new ResizeObserverController();\r\n        }\r\n        return this.instance_;\r\n    };\r\n    /**\r\n     * Holds reference to the controller's instance.\r\n     *\r\n     * @private {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.instance_ = null;\r\n    return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n        var key = _a[_i];\r\n        Object.defineProperty(target, key, {\r\n            value: props[key],\r\n            enumerable: false,\r\n            writable: false,\r\n            configurable: true\r\n        });\r\n    }\r\n    return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n    // Assume that the element is an instance of Node, which means that it\r\n    // has the \"ownerDocument\" property from which we can retrieve a\r\n    // corresponding global object.\r\n    var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n    // Return the local global object if it's not possible extract one from\r\n    // provided element.\r\n    return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n    return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n    var positions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        positions[_i - 1] = arguments[_i];\r\n    }\r\n    return positions.reduce(function (size, position) {\r\n        var value = styles['border-' + position + '-width'];\r\n        return size + toFloat(value);\r\n    }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n    var positions = ['top', 'right', 'bottom', 'left'];\r\n    var paddings = {};\r\n    for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n        var position = positions_1[_i];\r\n        var value = styles['padding-' + position];\r\n        paddings[position] = toFloat(value);\r\n    }\r\n    return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n *      to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n    var bbox = target.getBBox();\r\n    return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n    // Client width & height properties can't be\r\n    // used exclusively as they provide rounded values.\r\n    var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n    // By this condition we can catch all non-replaced inline, hidden and\r\n    // detached elements. Though elements with width & height properties less\r\n    // than 0.5 will be discarded as well.\r\n    //\r\n    // Without it we would need to implement separate methods for each of\r\n    // those cases and it's not possible to perform a precise and performance\r\n    // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n    // gives wrong results for elements with width & height less than 0.5.\r\n    if (!clientWidth && !clientHeight) {\r\n        return emptyRect;\r\n    }\r\n    var styles = getWindowOf(target).getComputedStyle(target);\r\n    var paddings = getPaddings(styles);\r\n    var horizPad = paddings.left + paddings.right;\r\n    var vertPad = paddings.top + paddings.bottom;\r\n    // Computed styles of width & height are being used because they are the\r\n    // only dimensions available to JS that contain non-rounded values. It could\r\n    // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n    // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n    var width = toFloat(styles.width), height = toFloat(styles.height);\r\n    // Width & height include paddings and borders when the 'border-box' box\r\n    // model is applied (except for IE).\r\n    if (styles.boxSizing === 'border-box') {\r\n        // Following conditions are required to handle Internet Explorer which\r\n        // doesn't include paddings and borders to computed CSS dimensions.\r\n        //\r\n        // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n        // properties then it's either IE, and thus we don't need to subtract\r\n        // anything, or an element merely doesn't have paddings/borders styles.\r\n        if (Math.round(width + horizPad) !== clientWidth) {\r\n            width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n        }\r\n        if (Math.round(height + vertPad) !== clientHeight) {\r\n            height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n        }\r\n    }\r\n    // Following steps can't be applied to the document's root element as its\r\n    // client[Width/Height] properties represent viewport area of the window.\r\n    // Besides, it's as well not necessary as the <html> itself neither has\r\n    // rendered scroll bars nor it can be clipped.\r\n    if (!isDocumentElement(target)) {\r\n        // In some browsers (only in Firefox, actually) CSS width & height\r\n        // include scroll bars size which can be removed at this step as scroll\r\n        // bars are the only difference between rounded dimensions + paddings\r\n        // and \"client\" properties, though that is not always true in Chrome.\r\n        var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n        var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n        // Chrome has a rather weird rounding of \"client\" properties.\r\n        // E.g. for an element with content width of 314.2px it sometimes gives\r\n        // the client width of 315px and for the width of 314.7px it may give\r\n        // 314px. And it doesn't happen all the time. So just ignore this delta\r\n        // as a non-relevant.\r\n        if (Math.abs(vertScrollbar) !== 1) {\r\n            width -= vertScrollbar;\r\n        }\r\n        if (Math.abs(horizScrollbar) !== 1) {\r\n            height -= horizScrollbar;\r\n        }\r\n    }\r\n    return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n    // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n    // interface.\r\n    if (typeof SVGGraphicsElement !== 'undefined') {\r\n        return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n    }\r\n    // If it's so, then check that element is at least an instance of the\r\n    // SVGElement and that it has the \"getBBox\" method.\r\n    // eslint-disable-next-line no-extra-parens\r\n    return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n        typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n    return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n    if (!isBrowser) {\r\n        return emptyRect;\r\n    }\r\n    if (isSVGGraphicsElement(target)) {\r\n        return getSVGContentRect(target);\r\n    }\r\n    return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n    var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n    // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n    var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n    var rect = Object.create(Constr.prototype);\r\n    // Rectangle's properties are not writable and non-enumerable.\r\n    defineConfigurable(rect, {\r\n        x: x, y: y, width: width, height: height,\r\n        top: y,\r\n        right: x + width,\r\n        bottom: height + y,\r\n        left: x\r\n    });\r\n    return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n    return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObservation.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     */\r\n    function ResizeObservation(target) {\r\n        /**\r\n         * Broadcasted width of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastWidth = 0;\r\n        /**\r\n         * Broadcasted height of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastHeight = 0;\r\n        /**\r\n         * Reference to the last observed content rectangle.\r\n         *\r\n         * @private {DOMRectInit}\r\n         */\r\n        this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n        this.target = target;\r\n    }\r\n    /**\r\n     * Updates content rectangle and tells whether it's width or height properties\r\n     * have changed since the last broadcast.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObservation.prototype.isActive = function () {\r\n        var rect = getContentRect(this.target);\r\n        this.contentRect_ = rect;\r\n        return (rect.width !== this.broadcastWidth ||\r\n            rect.height !== this.broadcastHeight);\r\n    };\r\n    /**\r\n     * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n     * from the corresponding properties of the last observed content rectangle.\r\n     *\r\n     * @returns {DOMRectInit} Last observed content rectangle.\r\n     */\r\n    ResizeObservation.prototype.broadcastRect = function () {\r\n        var rect = this.contentRect_;\r\n        this.broadcastWidth = rect.width;\r\n        this.broadcastHeight = rect.height;\r\n        return rect;\r\n    };\r\n    return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObserverEntry.\r\n     *\r\n     * @param {Element} target - Element that is being observed.\r\n     * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n     */\r\n    function ResizeObserverEntry(target, rectInit) {\r\n        var contentRect = createReadOnlyRect(rectInit);\r\n        // According to the specification following properties are not writable\r\n        // and are also not enumerable in the native implementation.\r\n        //\r\n        // Property accessors are not being used as they'd require to define a\r\n        // private WeakMap storage which may cause memory leaks in browsers that\r\n        // don't support this type of collections.\r\n        defineConfigurable(this, { target: target, contentRect: contentRect });\r\n    }\r\n    return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n     *      when one of the observed elements changes it's content dimensions.\r\n     * @param {ResizeObserverController} controller - Controller instance which\r\n     *      is responsible for the updates of observer.\r\n     * @param {ResizeObserver} callbackCtx - Reference to the public\r\n     *      ResizeObserver instance which will be passed to callback function.\r\n     */\r\n    function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n        /**\r\n         * Collection of resize observations that have detected changes in dimensions\r\n         * of elements.\r\n         *\r\n         * @private {Array<ResizeObservation>}\r\n         */\r\n        this.activeObservations_ = [];\r\n        /**\r\n         * Registry of the ResizeObservation instances.\r\n         *\r\n         * @private {Map<Element, ResizeObservation>}\r\n         */\r\n        this.observations_ = new MapShim();\r\n        if (typeof callback !== 'function') {\r\n            throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n        }\r\n        this.callback_ = callback;\r\n        this.controller_ = controller;\r\n        this.callbackCtx_ = callbackCtx;\r\n    }\r\n    /**\r\n     * Starts observing provided element.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.observe = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is already being observed.\r\n        if (observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.set(target, new ResizeObservation(target));\r\n        this.controller_.addObserver(this);\r\n        // Force the update of observations.\r\n        this.controller_.refresh();\r\n    };\r\n    /**\r\n     * Stops observing provided element.\r\n     *\r\n     * @param {Element} target - Element to stop observing.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.unobserve = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is not being observed.\r\n        if (!observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.delete(target);\r\n        if (!observations.size) {\r\n            this.controller_.removeObserver(this);\r\n        }\r\n    };\r\n    /**\r\n     * Stops observing all elements.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.disconnect = function () {\r\n        this.clearActive();\r\n        this.observations_.clear();\r\n        this.controller_.removeObserver(this);\r\n    };\r\n    /**\r\n     * Collects observation instances the associated element of which has changed\r\n     * it's content rectangle.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.gatherActive = function () {\r\n        var _this = this;\r\n        this.clearActive();\r\n        this.observations_.forEach(function (observation) {\r\n            if (observation.isActive()) {\r\n                _this.activeObservations_.push(observation);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Invokes initial callback function with a list of ResizeObserverEntry\r\n     * instances collected from active resize observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.broadcastActive = function () {\r\n        // Do nothing if observer doesn't have active observations.\r\n        if (!this.hasActive()) {\r\n            return;\r\n        }\r\n        var ctx = this.callbackCtx_;\r\n        // Create ResizeObserverEntry instance for every active observation.\r\n        var entries = this.activeObservations_.map(function (observation) {\r\n            return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n        });\r\n        this.callback_.call(ctx, entries, ctx);\r\n        this.clearActive();\r\n    };\r\n    /**\r\n     * Clears the collection of active observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.clearActive = function () {\r\n        this.activeObservations_.splice(0);\r\n    };\r\n    /**\r\n     * Tells whether observer has active observations.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObserverSPI.prototype.hasActive = function () {\r\n        return this.activeObservations_.length > 0;\r\n    };\r\n    return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n     *      dimensions of the observed elements change.\r\n     */\r\n    function ResizeObserver(callback) {\r\n        if (!(this instanceof ResizeObserver)) {\r\n            throw new TypeError('Cannot call a class as a function.');\r\n        }\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        var controller = ResizeObserverController.getInstance();\r\n        var observer = new ResizeObserverSPI(callback, controller, this);\r\n        observers.set(this, observer);\r\n    }\r\n    return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n    'observe',\r\n    'unobserve',\r\n    'disconnect'\r\n].forEach(function (method) {\r\n    ResizeObserver.prototype[method] = function () {\r\n        var _a;\r\n        return (_a = observers.get(this))[method].apply(_a, arguments);\r\n    };\r\n});\n\nvar index = (function () {\r\n    // Export existing implementation if available.\r\n    if (typeof global$1.ResizeObserver !== 'undefined') {\r\n        return global$1.ResizeObserver;\r\n    }\r\n    return ResizeObserver;\r\n})();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\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/resize-observer-polyfill/dist/ResizeObserver.es.js?");

/***/ }),

/***/ "./node_modules/socket.io-client/lib/index.js":
/*!****************************************************!*\
  !*** ./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 */ \"./node_modules/socket.io-client/lib/url.js\");\nvar parser = __webpack_require__(/*! socket.io-parser */ \"./node_modules/socket.io-parser/index.js\");\nvar Manager = __webpack_require__(/*! ./manager */ \"./node_modules/socket.io-client/lib/manager.js\");\nvar debug = __webpack_require__(/*! debug */ \"./node_modules/socket.io-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 */ \"./node_modules/socket.io-client/lib/manager.js\");\nexports.Socket = __webpack_require__(/*! ./socket */ \"./node_modules/socket.io-client/lib/socket.js\");\n\n\n//# sourceURL=webpack:///./node_modules/socket.io-client/lib/index.js?");

/***/ }),

/***/ "./node_modules/socket.io-client/lib/manager.js":
/*!******************************************************!*\
  !*** ./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 */ \"./node_modules/engine.io-client/lib/index.js\");\nvar Socket = __webpack_require__(/*! ./socket */ \"./node_modules/socket.io-client/lib/socket.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./node_modules/component-emitter/index.js\");\nvar parser = __webpack_require__(/*! socket.io-parser */ \"./node_modules/socket.io-parser/index.js\");\nvar on = __webpack_require__(/*! ./on */ \"./node_modules/socket.io-client/lib/on.js\");\nvar bind = __webpack_require__(/*! component-bind */ \"./node_modules/component-bind/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./node_modules/socket.io-client/node_modules/debug/src/browser.js\")('socket.io-client:manager');\nvar indexOf = __webpack_require__(/*! indexof */ \"./node_modules/indexof/index.js\");\nvar Backoff = __webpack_require__(/*! backo2 */ \"./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:///./node_modules/socket.io-client/lib/manager.js?");

/***/ }),

/***/ "./node_modules/socket.io-client/lib/on.js":
/*!*************************************************!*\
  !*** ./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:///./node_modules/socket.io-client/lib/on.js?");

/***/ }),

/***/ "./node_modules/socket.io-client/lib/socket.js":
/*!*****************************************************!*\
  !*** ./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 */ \"./node_modules/socket.io-parser/index.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./node_modules/component-emitter/index.js\");\nvar toArray = __webpack_require__(/*! to-array */ \"./node_modules/to-array/index.js\");\nvar on = __webpack_require__(/*! ./on */ \"./node_modules/socket.io-client/lib/on.js\");\nvar bind = __webpack_require__(/*! component-bind */ \"./node_modules/component-bind/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./node_modules/socket.io-client/node_modules/debug/src/browser.js\")('socket.io-client:socket');\nvar parseqs = __webpack_require__(/*! parseqs */ \"./node_modules/parseqs/index.js\");\nvar hasBin = __webpack_require__(/*! has-binary2 */ \"./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:///./node_modules/socket.io-client/lib/socket.js?");

/***/ }),

/***/ "./node_modules/socket.io-client/lib/url.js":
/*!**************************************************!*\
  !*** ./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 */ \"./node_modules/parseuri/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./node_modules/socket.io-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:///./node_modules/socket.io-client/lib/url.js?");

/***/ }),

/***/ "./node_modules/socket.io-client/node_modules/debug/src/browser.js":
/*!*************************************************************************!*\
  !*** ./node_modules/socket.io-client/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 */ \"./node_modules/socket.io-client/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__(/*! ./../../../../process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./node_modules/socket.io-client/node_modules/debug/src/browser.js?");

/***/ }),

/***/ "./node_modules/socket.io-client/node_modules/debug/src/debug.js":
/*!***********************************************************************!*\
  !*** ./node_modules/socket.io-client/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 */ \"./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:///./node_modules/socket.io-client/node_modules/debug/src/debug.js?");

/***/ }),

/***/ "./node_modules/socket.io-parser/binary.js":
/*!*************************************************!*\
  !*** ./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 */ \"./node_modules/socket.io-parser/node_modules/isarray/index.js\");\nvar isBuf = __webpack_require__(/*! ./is-buffer */ \"./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:///./node_modules/socket.io-parser/binary.js?");

/***/ }),

/***/ "./node_modules/socket.io-parser/index.js":
/*!************************************************!*\
  !*** ./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 */ \"./node_modules/socket.io-parser/node_modules/debug/src/browser.js\")('socket.io-parser');\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./node_modules/component-emitter/index.js\");\nvar binary = __webpack_require__(/*! ./binary */ \"./node_modules/socket.io-parser/binary.js\");\nvar isArray = __webpack_require__(/*! isarray */ \"./node_modules/socket.io-parser/node_modules/isarray/index.js\");\nvar isBuf = __webpack_require__(/*! ./is-buffer */ \"./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:///./node_modules/socket.io-parser/index.js?");

/***/ }),

/***/ "./node_modules/socket.io-parser/is-buffer.js":
/*!****************************************************!*\
  !*** ./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__(/*! ./../buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./node_modules/socket.io-parser/is-buffer.js?");

/***/ }),

/***/ "./node_modules/socket.io-parser/node_modules/debug/src/browser.js":
/*!*************************************************************************!*\
  !*** ./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 */ \"./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__(/*! ./../../../../process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./node_modules/socket.io-parser/node_modules/debug/src/browser.js?");

/***/ }),

/***/ "./node_modules/socket.io-parser/node_modules/debug/src/debug.js":
/*!***********************************************************************!*\
  !*** ./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 */ \"./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:///./node_modules/socket.io-parser/node_modules/debug/src/debug.js?");

/***/ }),

/***/ "./node_modules/socket.io-parser/node_modules/isarray/index.js":
/*!*********************************************************************!*\
  !*** ./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:///./node_modules/socket.io-parser/node_modules/isarray/index.js?");

/***/ }),

/***/ "./node_modules/to-array/index.js":
/*!****************************************!*\
  !*** ./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:///./node_modules/to-array/index.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/browser/fingerprint.js":
/*!*******************************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/browser/fingerprint.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = fingerprint;\n\nvar _isReactNative = __webpack_require__(/*! ./isReactNative */ \"./node_modules/tus-js-client/lib.es5/browser/isReactNative.js\");\n\nvar _isReactNative2 = _interopRequireDefault(_isReactNative);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Generate a fingerprint for a file which will be used the store the endpoint\n *\n * @param {File} file\n * @param {Object} options\n * @param {Function} callback\n */\nfunction fingerprint(file, options, callback) {\n  if ((0, _isReactNative2.default)()) {\n    return callback(null, reactNativeFingerprint(file, options));\n  }\n\n  return callback(null, [\"tus-br\", file.name, file.type, file.size, file.lastModified, options.endpoint].join(\"-\"));\n}\n\nfunction reactNativeFingerprint(file, options) {\n  var exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : \"noexif\";\n  return [\"tus-rn\", file.name || \"noname\", file.size || \"nosize\", exifHash, options.endpoint].join(\"/\");\n}\n\nfunction hashCode(str) {\n  // from https://stackoverflow.com/a/8831937/151666\n  var hash = 0;\n  if (str.length === 0) {\n    return hash;\n  }\n  for (var i = 0; i < str.length; i++) {\n    var char = str.charCodeAt(i);\n    hash = (hash << 5) - hash + char;\n    hash = hash & hash; // Convert to 32bit integer\n  }\n  return hash;\n}\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/browser/fingerprint.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/browser/isCordova.js":
/*!*****************************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/browser/isCordova.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar isCordova = function isCordova() {\n  return typeof window != \"undefined\" && (typeof window.PhoneGap != \"undefined\" || typeof window.Cordova != \"undefined\" || typeof window.cordova != \"undefined\");\n};\n\nexports.default = isCordova;\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/browser/isCordova.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/browser/isReactNative.js":
/*!*********************************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/browser/isReactNative.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar isReactNative = function isReactNative() {\n  return typeof navigator !== \"undefined\" && typeof navigator.product === \"string\" && navigator.product.toLowerCase() === \"reactnative\";\n};\n\nexports.default = isReactNative;\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/browser/isReactNative.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/browser/readAsByteArray.js":
/*!***********************************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/browser/readAsByteArray.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n/**\n * readAsByteArray converts a File object to a Uint8Array.\n * This function is only used on the Apache Cordova platform.\n * See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file\n */\nfunction readAsByteArray(chunk, callback) {\n  var reader = new FileReader();\n  reader.onload = function () {\n    callback(null, new Uint8Array(reader.result));\n  };\n  reader.onerror = function (err) {\n    callback(err);\n  };\n  reader.readAsArrayBuffer(chunk);\n}\n\nexports.default = readAsByteArray;\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/browser/readAsByteArray.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/browser/request.js":
/*!***************************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/browser/request.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.newRequest = newRequest;\nexports.resolveUrl = resolveUrl;\n\nvar _urlParse = __webpack_require__(/*! url-parse */ \"./node_modules/url-parse/index.js\");\n\nvar _urlParse2 = _interopRequireDefault(_urlParse);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction newRequest() {\n  return new window.XMLHttpRequest();\n} /* global window */\nfunction resolveUrl(origin, link) {\n  return new _urlParse2.default(link, origin).toString();\n}\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/browser/request.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/browser/source.js":
/*!**************************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/browser/source.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\nexports.getSource = getSource;\n\nvar _isReactNative = __webpack_require__(/*! ./isReactNative */ \"./node_modules/tus-js-client/lib.es5/browser/isReactNative.js\");\n\nvar _isReactNative2 = _interopRequireDefault(_isReactNative);\n\nvar _uriToBlob = __webpack_require__(/*! ./uriToBlob */ \"./node_modules/tus-js-client/lib.es5/browser/uriToBlob.js\");\n\nvar _uriToBlob2 = _interopRequireDefault(_uriToBlob);\n\nvar _isCordova = __webpack_require__(/*! ./isCordova */ \"./node_modules/tus-js-client/lib.es5/browser/isCordova.js\");\n\nvar _isCordova2 = _interopRequireDefault(_isCordova);\n\nvar _readAsByteArray = __webpack_require__(/*! ./readAsByteArray */ \"./node_modules/tus-js-client/lib.es5/browser/readAsByteArray.js\");\n\nvar _readAsByteArray2 = _interopRequireDefault(_readAsByteArray);\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\nvar FileSource = function () {\n  function FileSource(file) {\n    _classCallCheck(this, FileSource);\n\n    this._file = file;\n    this.size = file.size;\n  }\n\n  _createClass(FileSource, [{\n    key: \"slice\",\n    value: function slice(start, end, callback) {\n      // In Apache Cordova applications, a File must be resolved using\n      // FileReader instances, see\n      // https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file\n      if ((0, _isCordova2.default)()) {\n        (0, _readAsByteArray2.default)(this._file.slice(start, end), function (err, chunk) {\n          if (err) return callback(err);\n\n          callback(null, chunk);\n        });\n        return;\n      }\n\n      callback(null, this._file.slice(start, end));\n    }\n  }, {\n    key: \"close\",\n    value: function close() {}\n  }]);\n\n  return FileSource;\n}();\n\nvar StreamSource = function () {\n  function StreamSource(reader, chunkSize) {\n    _classCallCheck(this, StreamSource);\n\n    this._chunkSize = chunkSize;\n    this._buffer = undefined;\n    this._bufferOffset = 0;\n    this._reader = reader;\n    this._done = false;\n  }\n\n  _createClass(StreamSource, [{\n    key: \"slice\",\n    value: function slice(start, end, callback) {\n      if (start < this._bufferOffset) {\n        callback(new Error(\"Requested data is before the reader's current offset\"));\n        return;\n      }\n\n      return this._readUntilEnoughDataOrDone(start, end, callback);\n    }\n  }, {\n    key: \"_readUntilEnoughDataOrDone\",\n    value: function _readUntilEnoughDataOrDone(start, end, callback) {\n      var _this = this;\n\n      var hasEnoughData = end <= this._bufferOffset + len(this._buffer);\n      if (this._done || hasEnoughData) {\n        var value = this._getDataFromBuffer(start, end);\n        callback(null, value, value == null ? this._done : false);\n        return;\n      }\n      this._reader.read().then(function (_ref) {\n        var value = _ref.value,\n            done = _ref.done;\n\n        if (done) {\n          _this._done = true;\n        } else if (_this._buffer === undefined) {\n          _this._buffer = value;\n        } else {\n          _this._buffer = concat(_this._buffer, value);\n        }\n\n        _this._readUntilEnoughDataOrDone(start, end, callback);\n      }).catch(function (err) {\n        callback(new Error(\"Error during read: \" + err));\n      });\n    }\n  }, {\n    key: \"_getDataFromBuffer\",\n    value: function _getDataFromBuffer(start, end) {\n      // Remove data from buffer before `start`.\n      // Data might be reread from the buffer if an upload fails, so we can only\n      // safely delete data when it comes *before* what is currently being read.\n      if (start > this._bufferOffset) {\n        this._buffer = this._buffer.slice(start - this._bufferOffset);\n        this._bufferOffset = start;\n      }\n      // If the buffer is empty after removing old data, all data has been read.\n      var hasAllDataBeenRead = len(this._buffer) === 0;\n      if (this._done && hasAllDataBeenRead) {\n        return null;\n      }\n      // We already removed data before `start`, so we just return the first\n      // chunk from the buffer.\n      return this._buffer.slice(0, end - start);\n    }\n  }, {\n    key: \"close\",\n    value: function close() {\n      if (this._reader.cancel) {\n        this._reader.cancel();\n      }\n    }\n  }]);\n\n  return StreamSource;\n}();\n\nfunction len(blobOrArray) {\n  if (blobOrArray === undefined) return 0;\n  if (blobOrArray.size !== undefined) return blobOrArray.size;\n  return blobOrArray.length;\n}\n\n/*\n  Typed arrays and blobs don't have a concat method.\n  This function helps StreamSource accumulate data to reach chunkSize.\n*/\nfunction concat(a, b) {\n  if (a.concat) {\n    // Is `a` an Array?\n    return a.concat(b);\n  }\n  if (a instanceof Blob) {\n    return new Blob([a, b], { type: a.type });\n  }\n  if (a.set) {\n    // Is `a` a typed array?\n    var c = new a.constructor(a.length + b.length);\n    c.set(a);\n    c.set(b, a.length);\n    return c;\n  }\n  throw new Error(\"Unknown data type\");\n}\n\nfunction getSource(input, chunkSize, callback) {\n  // In React Native, when user selects a file, instead of a File or Blob,\n  // you usually get a file object {} with a uri property that contains\n  // a local path to the file. We use XMLHttpRequest to fetch\n  // the file blob, before uploading with tus.\n  if ((0, _isReactNative2.default)() && input && typeof input.uri !== \"undefined\") {\n    (0, _uriToBlob2.default)(input.uri, function (err, blob) {\n      if (err) {\n        return callback(new Error(\"tus: cannot fetch `file.uri` as Blob, make sure the uri is correct and accessible. \" + err));\n      }\n      callback(null, new FileSource(blob));\n    });\n    return;\n  }\n\n  // Since we emulate the Blob type in our tests (not all target browsers\n  // support it), we cannot use `instanceof` for testing whether the input value\n  // can be handled. Instead, we simply check is the slice() function and the\n  // size property are available.\n  if (typeof input.slice === \"function\" && typeof input.size !== \"undefined\") {\n    callback(null, new FileSource(input));\n    return;\n  }\n\n  if (typeof input.read === \"function\") {\n    chunkSize = +chunkSize;\n    if (!isFinite(chunkSize)) {\n      callback(new Error(\"cannot create source for stream without a finite value for the `chunkSize` option\"));\n      return;\n    }\n    callback(null, new StreamSource(input, chunkSize));\n    return;\n  }\n\n  callback(new Error(\"source object may only be an instance of File, Blob, or Reader in this environment\"));\n}\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/browser/source.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/browser/storage.js":
/*!***************************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/browser/storage.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\nexports.getStorage = getStorage;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* global window, localStorage */\n\nvar hasStorage = false;\ntry {\n  hasStorage = \"localStorage\" in window;\n\n  // Attempt to store and read entries from the local storage to detect Private\n  // Mode on Safari on iOS (see #49)\n  var key = \"tusSupport\";\n  localStorage.setItem(key, localStorage.getItem(key));\n} catch (e) {\n  // If we try to access localStorage inside a sandboxed iframe, a SecurityError\n  // is thrown. When in private mode on iOS Safari, a QuotaExceededError is\n  // thrown (see #49)\n  if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {\n    hasStorage = false;\n  } else {\n    throw e;\n  }\n}\n\nvar canStoreURLs = exports.canStoreURLs = hasStorage;\n\nvar LocalStorage = function () {\n  function LocalStorage() {\n    _classCallCheck(this, LocalStorage);\n  }\n\n  _createClass(LocalStorage, [{\n    key: \"setItem\",\n    value: function setItem(key, value, cb) {\n      cb(null, localStorage.setItem(key, value));\n    }\n  }, {\n    key: \"getItem\",\n    value: function getItem(key, cb) {\n      cb(null, localStorage.getItem(key));\n    }\n  }, {\n    key: \"removeItem\",\n    value: function removeItem(key, cb) {\n      cb(null, localStorage.removeItem(key));\n    }\n  }]);\n\n  return LocalStorage;\n}();\n\nfunction getStorage() {\n  return hasStorage ? new LocalStorage() : null;\n}\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/browser/storage.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/browser/uriToBlob.js":
/*!*****************************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/browser/uriToBlob.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n/**\n * uriToBlob resolves a URI to a Blob object. This is used for\n * React Native to retrieve a file (identified by a file://\n * URI) as a blob.\n */\nfunction uriToBlob(uri, done) {\n  var xhr = new XMLHttpRequest();\n  xhr.responseType = \"blob\";\n  xhr.onload = function () {\n    var blob = xhr.response;\n    done(null, blob);\n  };\n  xhr.onerror = function (err) {\n    done(err);\n  };\n  xhr.open(\"GET\", uri);\n  xhr.send();\n}\n\nexports.default = uriToBlob;\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/browser/uriToBlob.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/error.js":
/*!*****************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/error.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 DetailedError = function (_Error) {\n  _inherits(DetailedError, _Error);\n\n  function DetailedError(error) {\n    var causingErr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    var xhr = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n    _classCallCheck(this, DetailedError);\n\n    var _this = _possibleConstructorReturn(this, (DetailedError.__proto__ || Object.getPrototypeOf(DetailedError)).call(this, error.message));\n\n    _this.originalRequest = xhr;\n    _this.causingError = causingErr;\n\n    var message = error.message;\n    if (causingErr != null) {\n      message += \", caused by \" + causingErr.toString();\n    }\n    if (xhr != null) {\n      message += \", originated from request (response code: \" + xhr.status + \", response text: \" + xhr.responseText + \")\";\n    }\n    _this.message = message;\n    return _this;\n  }\n\n  return DetailedError;\n}(Error);\n\nexports.default = DetailedError;\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/error.js?");

/***/ }),

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

"use strict";
eval("\n\nvar _upload = __webpack_require__(/*! ./upload */ \"./node_modules/tus-js-client/lib.es5/upload.js\");\n\nvar _upload2 = _interopRequireDefault(_upload);\n\nvar _storage = __webpack_require__(/*! ./node/storage */ \"./node_modules/tus-js-client/lib.es5/browser/storage.js\");\n\nvar storage = _interopRequireWildcard(_storage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* global window */\nvar defaultOptions = _upload2.default.defaultOptions;\n\n\nvar moduleExport = {\n  Upload: _upload2.default,\n  canStoreURLs: storage.canStoreURLs,\n  defaultOptions: defaultOptions\n};\n\nif (typeof window !== \"undefined\") {\n  // Browser environment using XMLHttpRequest\n  var _window = window,\n      XMLHttpRequest = _window.XMLHttpRequest,\n      Blob = _window.Blob;\n\n\n  moduleExport.isSupported = XMLHttpRequest && Blob && typeof Blob.prototype.slice === \"function\";\n} else {\n  // Node.js environment using http module\n  moduleExport.isSupported = true;\n  // make FileStorage module available as it will not be set by default.\n  moduleExport.FileStorage = storage.FileStorage;\n}\n\n// The usage of the commonjs exporting syntax instead of the new ECMAScript\n// one is actually inteded and prevents weird behaviour if we are trying to\n// import this module in another module using Babel.\nmodule.exports = moduleExport;\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/index.js?");

/***/ }),

/***/ "./node_modules/tus-js-client/lib.es5/upload.js":
/*!******************************************************!*\
  !*** ./node_modules/tus-js-client/lib.es5/upload.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; }; }(); /* global window */\n\n\n// We import the files used inside the Node environment which are rewritten\n// for browsers using the rules defined in the package.json\n\n\nvar _error = __webpack_require__(/*! ./error */ \"./node_modules/tus-js-client/lib.es5/error.js\");\n\nvar _error2 = _interopRequireDefault(_error);\n\nvar _extend = __webpack_require__(/*! extend */ \"./node_modules/extend/index.js\");\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _jsBase = __webpack_require__(/*! js-base64 */ \"./node_modules/js-base64/base64.js\");\n\nvar _request = __webpack_require__(/*! ./node/request */ \"./node_modules/tus-js-client/lib.es5/browser/request.js\");\n\nvar _source = __webpack_require__(/*! ./node/source */ \"./node_modules/tus-js-client/lib.es5/browser/source.js\");\n\nvar _storage = __webpack_require__(/*! ./node/storage */ \"./node_modules/tus-js-client/lib.es5/browser/storage.js\");\n\nvar _fingerprint = __webpack_require__(/*! ./node/fingerprint */ \"./node_modules/tus-js-client/lib.es5/browser/fingerprint.js\");\n\nvar _fingerprint2 = _interopRequireDefault(_fingerprint);\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\nvar defaultOptions = {\n  endpoint: null,\n  fingerprint: _fingerprint2.default,\n  resume: true,\n  onProgress: null,\n  onChunkComplete: null,\n  onSuccess: null,\n  onError: null,\n  headers: {},\n  chunkSize: Infinity,\n  withCredentials: false,\n  uploadUrl: null,\n  uploadSize: null,\n  overridePatchMethod: false,\n  retryDelays: null,\n  removeFingerprintOnSuccess: false,\n  uploadLengthDeferred: false,\n  urlStorage: null,\n  fileReader: null,\n  uploadDataDuringCreation: false\n};\n\nvar Upload = function () {\n  function Upload(file, options) {\n    _classCallCheck(this, Upload);\n\n    this.options = (0, _extend2.default)(true, {}, defaultOptions, options);\n\n    // The storage module used to store URLs\n    this._storage = this.options.urlStorage;\n\n    // The underlying File/Blob object\n    this.file = file;\n\n    // The URL against which the file will be uploaded\n    this.url = null;\n\n    // The underlying XHR object for the current PATCH request\n    this._xhr = null;\n\n    // The fingerpinrt for the current file (set after start())\n    this._fingerprint = null;\n\n    // The offset used in the current PATCH request\n    this._offset = null;\n\n    // True if the current PATCH request has been aborted\n    this._aborted = false;\n\n    // The file's size in bytes\n    this._size = null;\n\n    // The Source object which will wrap around the given file and provides us\n    // with a unified interface for getting its size and slice chunks from its\n    // content allowing us to easily handle Files, Blobs, Buffers and Streams.\n    this._source = null;\n\n    // The current count of attempts which have been made. Null indicates none.\n    this._retryAttempt = 0;\n\n    // The timeout's ID which is used to delay the next retry\n    this._retryTimeout = null;\n\n    // The offset of the remote upload before the latest attempt was started.\n    this._offsetBeforeRetry = 0;\n  }\n\n  _createClass(Upload, [{\n    key: \"start\",\n    value: function start() {\n      var _this = this;\n\n      var file = this.file;\n\n      if (!file) {\n        this._emitError(new Error(\"tus: no file or stream to upload provided\"));\n        return;\n      }\n\n      if (!this.options.endpoint && !this.options.uploadUrl) {\n        this._emitError(new Error(\"tus: neither an endpoint or an upload URL is provided\"));\n        return;\n      }\n\n      if (this.options.resume && this._storage == null) {\n        this._storage = (0, _storage.getStorage)();\n      }\n\n      if (this._source) {\n        this._start(this._source);\n      } else {\n        var fileReader = this.options.fileReader || _source.getSource;\n        fileReader(file, this.options.chunkSize, function (err, source) {\n          if (err) {\n            _this._emitError(err);\n            return;\n          }\n\n          _this._source = source;\n          _this._start(source);\n        });\n      }\n    }\n  }, {\n    key: \"_start\",\n    value: function _start(source) {\n      var _this2 = this;\n\n      var file = this.file;\n\n      // First, we look at the uploadLengthDeferred option.\n      // Next, we check if the caller has supplied a manual upload size.\n      // Finally, we try to use the calculated size from the source object.\n      if (this.options.uploadLengthDeferred) {\n        this._size = null;\n      } else if (this.options.uploadSize != null) {\n        this._size = +this.options.uploadSize;\n        if (isNaN(this._size)) {\n          this._emitError(new Error(\"tus: cannot convert `uploadSize` option into a number\"));\n          return;\n        }\n      } else {\n        this._size = source.size;\n        if (this._size == null) {\n          this._emitError(new Error(\"tus: cannot automatically derive upload's size from input and must be specified manually using the `uploadSize` option\"));\n          return;\n        }\n      }\n\n      var retryDelays = this.options.retryDelays;\n      if (retryDelays != null) {\n        if (Object.prototype.toString.call(retryDelays) !== \"[object Array]\") {\n          this._emitError(new Error(\"tus: the `retryDelays` option must either be an array or null\"));\n          return;\n        } else {\n          var errorCallback = this.options.onError;\n          this.options.onError = function (err) {\n            // Restore the original error callback which may have been set.\n            _this2.options.onError = errorCallback;\n\n            // We will reset the attempt counter if\n            // - we were already able to connect to the server (offset != null) and\n            // - we were able to upload a small chunk of data to the server\n            var shouldResetDelays = _this2._offset != null && _this2._offset > _this2._offsetBeforeRetry;\n            if (shouldResetDelays) {\n              _this2._retryAttempt = 0;\n            }\n\n            var isOnline = true;\n            if (typeof window !== \"undefined\" && \"navigator\" in window && window.navigator.onLine === false) {\n              isOnline = false;\n            }\n\n            // We only attempt a retry if\n            // - we didn't exceed the maxium number of retries, yet, and\n            // - this error was caused by a request or it's response and\n            // - the error is server error (i.e. no a status 4xx or a 409 or 423) and\n            // - the browser does not indicate that we are offline\n            var status = err.originalRequest ? err.originalRequest.status : 0;\n            var isServerError = !inStatusCategory(status, 400) || status === 409 || status === 423;\n            var shouldRetry = _this2._retryAttempt < retryDelays.length && err.originalRequest != null && isServerError && isOnline;\n\n            if (!shouldRetry) {\n              _this2._emitError(err);\n              return;\n            }\n\n            var delay = retryDelays[_this2._retryAttempt++];\n\n            _this2._offsetBeforeRetry = _this2._offset;\n            _this2.options.uploadUrl = _this2.url;\n\n            _this2._retryTimeout = setTimeout(function () {\n              _this2.start();\n            }, delay);\n          };\n        }\n      }\n\n      // Reset the aborted flag when the upload is started or else the\n      // _startUpload will stop before sending a request if the upload has been\n      // aborted previously.\n      this._aborted = false;\n\n      // The upload had been started previously and we should reuse this URL.\n      if (this.url != null) {\n        this._resumeUpload();\n        return;\n      }\n\n      // A URL has manually been specified, so we try to resume\n      if (this.options.uploadUrl != null) {\n        this.url = this.options.uploadUrl;\n        this._resumeUpload();\n        return;\n      }\n\n      // Try to find the endpoint for the file in the storage\n      if (this._hasStorage()) {\n        this.options.fingerprint(file, this.options, function (err, fingerprintValue) {\n          if (err) {\n            _this2._emitError(err);\n            return;\n          }\n\n          _this2._fingerprint = fingerprintValue;\n          _this2._storage.getItem(_this2._fingerprint, function (err, resumedUrl) {\n            if (err) {\n              _this2._emitError(err);\n              return;\n            }\n\n            if (resumedUrl != null) {\n              _this2.url = resumedUrl;\n              _this2._resumeUpload();\n            } else {\n              _this2._createUpload();\n            }\n          });\n        });\n      } else {\n        // An upload has not started for the file yet, so we start a new one\n        this._createUpload();\n      }\n    }\n  }, {\n    key: \"abort\",\n    value: function abort(shouldTerminate, cb) {\n      var _this3 = this;\n\n      if (this._xhr !== null) {\n        this._xhr.abort();\n        this._source.close();\n      }\n      this._aborted = true;\n\n      if (this._retryTimeout != null) {\n        clearTimeout(this._retryTimeout);\n        this._retryTimeout = null;\n      }\n\n      cb = cb || function () {};\n      if (shouldTerminate) {\n        Upload.terminate(this.url, this.options, function (err, xhr) {\n          if (err) {\n            return cb(err, xhr);\n          }\n\n          _this3._hasStorage() ? _this3._storage.removeItem(_this3._fingerprint, cb) : cb();\n        });\n      } else {\n        cb();\n      }\n    }\n  }, {\n    key: \"_hasStorage\",\n    value: function _hasStorage() {\n      return this.options.resume && this._storage;\n    }\n  }, {\n    key: \"_emitXhrError\",\n    value: function _emitXhrError(xhr, err, causingErr) {\n      this._emitError(new _error2.default(err, causingErr, xhr));\n    }\n  }, {\n    key: \"_emitError\",\n    value: function _emitError(err) {\n      if (typeof this.options.onError === \"function\") {\n        this.options.onError(err);\n      } else {\n        throw err;\n      }\n    }\n  }, {\n    key: \"_emitSuccess\",\n    value: function _emitSuccess() {\n      if (typeof this.options.onSuccess === \"function\") {\n        this.options.onSuccess();\n      }\n    }\n\n    /**\n     * Publishes notification when data has been sent to the server. This\n     * data may not have been accepted by the server yet.\n     * @param  {number} bytesSent  Number of bytes sent to the server.\n     * @param  {number} bytesTotal Total number of bytes to be sent to the server.\n     */\n\n  }, {\n    key: \"_emitProgress\",\n    value: function _emitProgress(bytesSent, bytesTotal) {\n      if (typeof this.options.onProgress === \"function\") {\n        this.options.onProgress(bytesSent, bytesTotal);\n      }\n    }\n\n    /**\n     * Publishes notification when a chunk of data has been sent to the server\n     * and accepted by the server.\n     * @param  {number} chunkSize  Size of the chunk that was accepted by the\n     *                             server.\n     * @param  {number} bytesAccepted Total number of bytes that have been\n     *                                accepted by the server.\n     * @param  {number} bytesTotal Total number of bytes to be sent to the server.\n     */\n\n  }, {\n    key: \"_emitChunkComplete\",\n    value: function _emitChunkComplete(chunkSize, bytesAccepted, bytesTotal) {\n      if (typeof this.options.onChunkComplete === \"function\") {\n        this.options.onChunkComplete(chunkSize, bytesAccepted, bytesTotal);\n      }\n    }\n\n    /**\n     * Set the headers used in the request and the withCredentials property\n     * as defined in the options\n     *\n     * @param {XMLHttpRequest} xhr\n     */\n\n  }, {\n    key: \"_setupXHR\",\n    value: function _setupXHR(xhr) {\n      this._xhr = xhr;\n      setupXHR(xhr, this.options);\n    }\n\n    /**\n     * Create a new upload using the creation extension by sending a POST\n     * request to the endpoint. After successful creation the file will be\n     * uploaded\n     *\n     * @api private\n     */\n\n  }, {\n    key: \"_createUpload\",\n    value: function _createUpload() {\n      var _this4 = this;\n\n      if (!this.options.endpoint) {\n        this._emitError(new Error(\"tus: unable to create upload because no endpoint is provided\"));\n        return;\n      }\n\n      var xhr = (0, _request.newRequest)();\n      xhr.open(\"POST\", this.options.endpoint, true);\n\n      xhr.onload = function () {\n        if (!inStatusCategory(xhr.status, 200)) {\n          _this4._emitXhrError(xhr, new Error(\"tus: unexpected response while creating upload\"));\n          return;\n        }\n\n        var location = xhr.getResponseHeader(\"Location\");\n        if (location == null) {\n          _this4._emitXhrError(xhr, new Error(\"tus: invalid or missing Location header\"));\n          return;\n        }\n\n        _this4.url = (0, _request.resolveUrl)(_this4.options.endpoint, location);\n\n        if (_this4._size === 0) {\n          // Nothing to upload and file was successfully created\n          _this4._emitSuccess();\n          _this4._source.close();\n          return;\n        }\n\n        if (_this4._hasStorage()) {\n          _this4._storage.setItem(_this4._fingerprint, _this4.url, function (err) {\n            if (err) {\n              _this4._emitError(err);\n            }\n          });\n        }\n\n        if (_this4.options.uploadDataDuringCreation) {\n          _this4._handleUploadResponse(xhr);\n        } else {\n          _this4._offset = 0;\n          _this4._startUpload();\n        }\n      };\n\n      xhr.onerror = function (err) {\n        _this4._emitXhrError(xhr, new Error(\"tus: failed to create upload\"), err);\n      };\n\n      this._setupXHR(xhr);\n      if (this.options.uploadLengthDeferred) {\n        xhr.setRequestHeader(\"Upload-Defer-Length\", 1);\n      } else {\n        xhr.setRequestHeader(\"Upload-Length\", this._size);\n      }\n\n      // Add metadata if values have been added\n      var metadata = encodeMetadata(this.options.metadata);\n      if (metadata !== \"\") {\n        xhr.setRequestHeader(\"Upload-Metadata\", metadata);\n      }\n\n      if (this.options.uploadDataDuringCreation && !this.options.uploadLengthDeferred) {\n        this._offset = 0;\n        this._addChunkToRequest(xhr);\n      } else {\n        xhr.send(null);\n      }\n    }\n\n    /*\n     * Try to resume an existing upload. First a HEAD request will be sent\n     * to retrieve the offset. If the request fails a new upload will be\n     * created. In the case of a successful response the file will be uploaded.\n     *\n     * @api private\n     */\n\n  }, {\n    key: \"_resumeUpload\",\n    value: function _resumeUpload() {\n      var _this5 = this;\n\n      var xhr = (0, _request.newRequest)();\n      xhr.open(\"HEAD\", this.url, true);\n\n      xhr.onload = function () {\n        if (!inStatusCategory(xhr.status, 200)) {\n          if (_this5._hasStorage() && inStatusCategory(xhr.status, 400)) {\n            // Remove stored fingerprint and corresponding endpoint,\n            // on client errors since the file can not be found\n            _this5._storage.removeItem(_this5._fingerprint, function (err) {\n              if (err) {\n                _this5._emitError(err);\n              }\n            });\n          }\n\n          // If the upload is locked (indicated by the 423 Locked status code), we\n          // emit an error instead of directly starting a new upload. This way the\n          // retry logic can catch the error and will retry the upload. An upload\n          // is usually locked for a short period of time and will be available\n          // afterwards.\n          if (xhr.status === 423) {\n            _this5._emitXhrError(xhr, new Error(\"tus: upload is currently locked; retry later\"));\n            return;\n          }\n\n          if (!_this5.options.endpoint) {\n            // Don't attempt to create a new upload if no endpoint is provided.\n            _this5._emitXhrError(xhr, new Error(\"tus: unable to resume upload (new upload cannot be created without an endpoint)\"));\n            return;\n          }\n\n          // Try to create a new upload\n          _this5.url = null;\n          _this5._createUpload();\n          return;\n        }\n\n        var offset = parseInt(xhr.getResponseHeader(\"Upload-Offset\"), 10);\n        if (isNaN(offset)) {\n          _this5._emitXhrError(xhr, new Error(\"tus: invalid or missing offset value\"));\n          return;\n        }\n\n        var length = parseInt(xhr.getResponseHeader(\"Upload-Length\"), 10);\n        if (isNaN(length) && !_this5.options.uploadLengthDeferred) {\n          _this5._emitXhrError(xhr, new Error(\"tus: invalid or missing length value\"));\n          return;\n        }\n\n        // Upload has already been completed and we do not need to send additional\n        // data to the server\n        if (offset === length) {\n          _this5._emitProgress(length, length);\n          _this5._emitSuccess();\n          return;\n        }\n\n        _this5._offset = offset;\n        _this5._startUpload();\n      };\n\n      xhr.onerror = function (err) {\n        _this5._emitXhrError(xhr, new Error(\"tus: failed to resume upload\"), err);\n      };\n\n      this._setupXHR(xhr);\n      xhr.send(null);\n    }\n\n    /**\n     * Start uploading the file using PATCH requests. The file will be divided\n     * into chunks as specified in the chunkSize option. During the upload\n     * the onProgress event handler may be invoked multiple times.\n     *\n     * @api private\n     */\n\n  }, {\n    key: \"_startUpload\",\n    value: function _startUpload() {\n      var _this6 = this;\n\n      // If the upload has been aborted, we will not send the next PATCH request.\n      // This is important if the abort method was called during a callback, such\n      // as onChunkComplete or onProgress.\n      if (this._aborted) {\n        return;\n      }\n\n      var xhr = (0, _request.newRequest)();\n\n      // Some browser and servers may not support the PATCH method. For those\n      // cases, you can tell tus-js-client to use a POST request with the\n      // X-HTTP-Method-Override header for simulating a PATCH request.\n      if (this.options.overridePatchMethod) {\n        xhr.open(\"POST\", this.url, true);\n        xhr.setRequestHeader(\"X-HTTP-Method-Override\", \"PATCH\");\n      } else {\n        xhr.open(\"PATCH\", this.url, true);\n      }\n\n      xhr.onload = function () {\n        if (!inStatusCategory(xhr.status, 200)) {\n          _this6._emitXhrError(xhr, new Error(\"tus: unexpected response while uploading chunk\"));\n          return;\n        }\n\n        _this6._handleUploadResponse(xhr);\n      };\n\n      xhr.onerror = function (err) {\n        // Don't emit an error if the upload was aborted manually\n        if (_this6._aborted) {\n          return;\n        }\n\n        _this6._emitXhrError(xhr, new Error(\"tus: failed to upload chunk at offset \" + _this6._offset), err);\n      };\n\n      this._setupXHR(xhr);\n\n      xhr.setRequestHeader(\"Upload-Offset\", this._offset);\n      this._addChunkToRequest(xhr);\n    }\n\n    /**\n     * _addChunktoRequest reads a chunk from the source and sends it using the\n     * supplied XHR object. It will not handle the response.\n     */\n\n  }, {\n    key: \"_addChunkToRequest\",\n    value: function _addChunkToRequest(xhr) {\n      var _this7 = this;\n\n      // Test support for progress events before attaching an event listener\n      if (\"upload\" in xhr) {\n        xhr.upload.onprogress = function (e) {\n          if (!e.lengthComputable) {\n            return;\n          }\n\n          _this7._emitProgress(start + e.loaded, _this7._size);\n        };\n      }\n\n      xhr.setRequestHeader(\"Content-Type\", \"application/offset+octet-stream\");\n\n      var start = this._offset;\n      var end = this._offset + this.options.chunkSize;\n\n      // The specified chunkSize may be Infinity or the calcluated end position\n      // may exceed the file's size. In both cases, we limit the end position to\n      // the input's total size for simpler calculations and correctness.\n      if ((end === Infinity || end > this._size) && !this.options.uploadLengthDeferred) {\n        end = this._size;\n      }\n\n      this._source.slice(start, end, function (err, value, complete) {\n        if (err) {\n          _this7._emitError(err);\n          return;\n        }\n\n        if (_this7.options.uploadLengthDeferred) {\n          if (complete) {\n            _this7._size = _this7._offset + (value && value.size ? value.size : 0);\n            xhr.setRequestHeader(\"Upload-Length\", _this7._size);\n          }\n        }\n\n        if (value === null) {\n          xhr.send();\n        } else {\n          xhr.send(value);\n          _this7._emitProgress(_this7._offset, _this7._size);\n        }\n      });\n    }\n\n    /**\n     * _handleUploadResponse is used by requests that haven been sent using _addChunkToRequest\n     * and already have received a response.\n     */\n\n  }, {\n    key: \"_handleUploadResponse\",\n    value: function _handleUploadResponse(xhr) {\n      var _this8 = this;\n\n      var offset = parseInt(xhr.getResponseHeader(\"Upload-Offset\"), 10);\n      if (isNaN(offset)) {\n        this._emitXhrError(xhr, new Error(\"tus: invalid or missing offset value\"));\n        return;\n      }\n\n      this._emitProgress(offset, this._size);\n      this._emitChunkComplete(offset - this._offset, offset, this._size);\n\n      this._offset = offset;\n\n      if (offset == this._size) {\n        if (this.options.removeFingerprintOnSuccess && this.options.resume) {\n          // Remove stored fingerprint and corresponding endpoint. This causes\n          // new upload of the same file must be treated as a different file.\n          this._storage.removeItem(this._fingerprint, function (err) {\n            if (err) {\n              _this8._emitError(err);\n            }\n          });\n        }\n\n        // Yay, finally done :)\n        this._emitSuccess();\n        this._source.close();\n        return;\n      }\n\n      this._startUpload();\n    }\n  }], [{\n    key: \"terminate\",\n    value: function terminate(url, options, cb) {\n      if (typeof options !== \"function\" && typeof cb !== \"function\") {\n        throw new Error(\"tus: a callback function must be specified\");\n      }\n\n      if (typeof options === \"function\") {\n        cb = options;\n        options = {};\n      }\n\n      var xhr = (0, _request.newRequest)();\n      xhr.open(\"DELETE\", url, true);\n\n      xhr.onload = function () {\n        if (xhr.status !== 204) {\n          cb(new _error2.default(new Error(\"tus: unexpected response while terminating upload\"), null, xhr));\n          return;\n        }\n\n        cb();\n      };\n\n      xhr.onerror = function (err) {\n        cb(new _error2.default(err, new Error(\"tus: failed to terminate upload\"), xhr));\n      };\n\n      setupXHR(xhr, options);\n      xhr.send(null);\n    }\n  }]);\n\n  return Upload;\n}();\n\nfunction encodeMetadata(metadata) {\n  var encoded = [];\n\n  for (var key in metadata) {\n    encoded.push(key + \" \" + _jsBase.Base64.encode(metadata[key]));\n  }\n\n  return encoded.join(\",\");\n}\n\n/**\n * Checks whether a given status is in the range of the expected category.\n * For example, only a status between 200 and 299 will satisfy the category 200.\n *\n * @api private\n */\nfunction inStatusCategory(status, category) {\n  return status >= category && status < category + 100;\n}\n\nfunction setupXHR(xhr, options) {\n  xhr.setRequestHeader(\"Tus-Resumable\", \"1.0.0\");\n  var headers = options.headers || {};\n\n  for (var name in headers) {\n    xhr.setRequestHeader(name, headers[name]);\n  }\n\n  xhr.withCredentials = options.withCredentials;\n}\n\nUpload.defaultOptions = defaultOptions;\n\nexports.default = Upload;\n\n//# sourceURL=webpack:///./node_modules/tus-js-client/lib.es5/upload.js?");

/***/ }),

/***/ "./node_modules/uppy/dist/uppy.css":
/*!*****************************************!*\
  !*** ./node_modules/uppy/dist/uppy.css ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./node_modules/uppy/dist/uppy.css?");

/***/ }),

/***/ "./node_modules/uppy/index.mjs":
/*!*************************************!*\
  !*** ./node_modules/uppy/index.mjs ***!
  \*************************************/
/*! exports provided: Core, server, views, DefaultStore, ReduxStore, Dashboard, DragDrop, FileInput, Informer, ProgressBar, StatusBar, Dropbox, GoogleDrive, Instagram, Url, Webcam, AwsS3, AwsS3Multipart, Transloadit, Tus, XHRUpload, Form, GoldenRetriever, ReduxDevTools, ThumbnailGenerator */
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"views\", function() { return views; });\n/* harmony import */ var _uppy_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @uppy/core */ \"./node_modules/@uppy/core/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Core\", function() { return _uppy_core__WEBPACK_IMPORTED_MODULE_0__; });\n/* harmony import */ var _uppy_companion_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @uppy/companion-client */ \"./node_modules/@uppy/companion-client/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"server\", function() { return _uppy_companion_client__WEBPACK_IMPORTED_MODULE_1__; });\n/* harmony import */ var _uppy_provider_views__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @uppy/provider-views */ \"./node_modules/@uppy/provider-views/lib/index.js\");\n/* harmony import */ var _uppy_store_default__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @uppy/store-default */ \"./node_modules/@uppy/store-default/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"DefaultStore\", function() { return _uppy_store_default__WEBPACK_IMPORTED_MODULE_3__; });\n/* harmony import */ var _uppy_store_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @uppy/store-redux */ \"./node_modules/@uppy/store-redux/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"ReduxStore\", function() { return _uppy_store_redux__WEBPACK_IMPORTED_MODULE_4__; });\n/* harmony import */ var _uppy_dashboard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @uppy/dashboard */ \"./node_modules/@uppy/dashboard/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Dashboard\", function() { return _uppy_dashboard__WEBPACK_IMPORTED_MODULE_5__; });\n/* harmony import */ var _uppy_drag_drop__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @uppy/drag-drop */ \"./node_modules/@uppy/drag-drop/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"DragDrop\", function() { return _uppy_drag_drop__WEBPACK_IMPORTED_MODULE_6__; });\n/* harmony import */ var _uppy_file_input__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @uppy/file-input */ \"./node_modules/@uppy/file-input/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"FileInput\", function() { return _uppy_file_input__WEBPACK_IMPORTED_MODULE_7__; });\n/* harmony import */ var _uppy_informer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @uppy/informer */ \"./node_modules/@uppy/informer/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Informer\", function() { return _uppy_informer__WEBPACK_IMPORTED_MODULE_8__; });\n/* harmony import */ var _uppy_progress_bar__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @uppy/progress-bar */ \"./node_modules/@uppy/progress-bar/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"ProgressBar\", function() { return _uppy_progress_bar__WEBPACK_IMPORTED_MODULE_9__; });\n/* harmony import */ var _uppy_status_bar__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @uppy/status-bar */ \"./node_modules/@uppy/status-bar/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"StatusBar\", function() { return _uppy_status_bar__WEBPACK_IMPORTED_MODULE_10__; });\n/* harmony import */ var _uppy_dropbox__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @uppy/dropbox */ \"./node_modules/@uppy/dropbox/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Dropbox\", function() { return _uppy_dropbox__WEBPACK_IMPORTED_MODULE_11__; });\n/* harmony import */ var _uppy_google_drive__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @uppy/google-drive */ \"./node_modules/@uppy/google-drive/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"GoogleDrive\", function() { return _uppy_google_drive__WEBPACK_IMPORTED_MODULE_12__; });\n/* harmony import */ var _uppy_instagram__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @uppy/instagram */ \"./node_modules/@uppy/instagram/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Instagram\", function() { return _uppy_instagram__WEBPACK_IMPORTED_MODULE_13__; });\n/* harmony import */ var _uppy_url__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @uppy/url */ \"./node_modules/@uppy/url/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Url\", function() { return _uppy_url__WEBPACK_IMPORTED_MODULE_14__; });\n/* harmony import */ var _uppy_webcam__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @uppy/webcam */ \"./node_modules/@uppy/webcam/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Webcam\", function() { return _uppy_webcam__WEBPACK_IMPORTED_MODULE_15__; });\n/* harmony import */ var _uppy_aws_s3__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @uppy/aws-s3 */ \"./node_modules/@uppy/aws-s3/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"AwsS3\", function() { return _uppy_aws_s3__WEBPACK_IMPORTED_MODULE_16__; });\n/* harmony import */ var _uppy_aws_s3_multipart__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @uppy/aws-s3-multipart */ \"./node_modules/@uppy/aws-s3-multipart/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"AwsS3Multipart\", function() { return _uppy_aws_s3_multipart__WEBPACK_IMPORTED_MODULE_17__; });\n/* harmony import */ var _uppy_transloadit__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @uppy/transloadit */ \"./node_modules/@uppy/transloadit/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Transloadit\", function() { return _uppy_transloadit__WEBPACK_IMPORTED_MODULE_18__; });\n/* harmony import */ var _uppy_tus__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @uppy/tus */ \"./node_modules/@uppy/tus/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Tus\", function() { return _uppy_tus__WEBPACK_IMPORTED_MODULE_19__; });\n/* harmony import */ var _uppy_xhr_upload__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @uppy/xhr-upload */ \"./node_modules/@uppy/xhr-upload/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"XHRUpload\", function() { return _uppy_xhr_upload__WEBPACK_IMPORTED_MODULE_20__; });\n/* harmony import */ var _uppy_form__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @uppy/form */ \"./node_modules/@uppy/form/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Form\", function() { return _uppy_form__WEBPACK_IMPORTED_MODULE_21__; });\n/* harmony import */ var _uppy_golden_retriever__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @uppy/golden-retriever */ \"./node_modules/@uppy/golden-retriever/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"GoldenRetriever\", function() { return _uppy_golden_retriever__WEBPACK_IMPORTED_MODULE_22__; });\n/* harmony import */ var _uppy_redux_dev_tools__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @uppy/redux-dev-tools */ \"./node_modules/@uppy/redux-dev-tools/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"ReduxDevTools\", function() { return _uppy_redux_dev_tools__WEBPACK_IMPORTED_MODULE_23__; });\n/* harmony import */ var _uppy_thumbnail_generator__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @uppy/thumbnail-generator */ \"./node_modules/@uppy/thumbnail-generator/lib/index.js\");\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"ThumbnailGenerator\", function() { return _uppy_thumbnail_generator__WEBPACK_IMPORTED_MODULE_24__; });\n// Core\n\n\n// Utilities\n\n\nvar views = { ProviderView: _uppy_provider_views__WEBPACK_IMPORTED_MODULE_2__ }\n\n// Stores\n\n\n\n// UI plugins\n\n\n\n\n\n\n\n// Acquirers\n\n\n\n\n\n\n// Uploaders\n\n\n\n\n\n\n// Miscellaneous\n\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/uppy/index.mjs?");

/***/ }),

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

"use strict";
eval("/* WEBPACK VAR INJECTION */(function(global) {\n\nvar required = __webpack_require__(/*! requires-port */ \"./node_modules/requires-port/index.js\")\n  , qs = __webpack_require__(/*! querystringify */ \"./node_modules/querystringify/index.js\")\n  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n  , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n  , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n  return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address) {          // Sanitize what is left of the address\n    return address.replace('\\\\', '/');\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d+)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var globalVar;\n\n  if (typeof window !== 'undefined') globalVar = window;\n  else if (typeof global !== 'undefined') globalVar = global;\n  else if (typeof self !== 'undefined') globalVar = self;\n  else globalVar = {};\n\n  var location = globalVar.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n  address = trimLeft(address);\n  var match = protocolre.exec(address);\n\n  return {\n    protocol: match[1] ? match[1].toLowerCase() : '',\n    slashes: !!match[2],\n    rest: match[3]\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  if (relative === '') return base;\n\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  address = trimLeft(address);\n\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '');\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      if (~(index = address.indexOf(parse))) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n  if (url.auth) {\n    instruction = url.auth.split(':');\n    url.username = instruction[0] || '';\n    url.password = instruction[1] || '';\n  }\n\n  url.origin = url.protocol && url.host && url.protocol !== 'file:'\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (/:\\d+$/.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    default:\n      url[part] = value;\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.origin = url.protocol && url.host && url.protocol !== 'file:'\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result = protocol + (url.slashes ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  }\n\n  result += url.host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\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/url-parse/index.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/wildcard/index.js":
/*!****************************************!*\
  !*** ./node_modules/wildcard/index.js ***!
  \****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/* jshint node: true */\n\n\n/**\n  # wildcard\n\n  Very simple wildcard matching, which is designed to provide the same\n  functionality that is found in the\n  [eve](https://github.com/adobe-webplatform/eve) eventing library.\n\n  ## Usage\n\n  It works with strings:\n\n  <<< examples/strings.js\n\n  Arrays:\n\n  <<< examples/arrays.js\n\n  Objects (matching against keys):\n\n  <<< examples/objects.js\n\n  While the library works in Node, if you are are looking for file-based\n  wildcard matching then you should have a look at:\n\n  <https://github.com/isaacs/node-glob>\n**/\n\nfunction WildcardMatcher(text, separator) {\n  this.text = text = text || '';\n  this.hasWild = ~text.indexOf('*');\n  this.separator = separator;\n  this.parts = text.split(separator);\n}\n\nWildcardMatcher.prototype.match = function(input) {\n  var matches = true;\n  var parts = this.parts;\n  var ii;\n  var partsCount = parts.length;\n  var testParts;\n\n  if (typeof input == 'string' || input instanceof String) {\n    if (!this.hasWild && this.text != input) {\n      matches = false;\n    } else {\n      testParts = (input || '').split(this.separator);\n      for (ii = 0; matches && ii < partsCount; ii++) {\n        if (parts[ii] === '*')  {\n          continue;\n        } else if (ii < testParts.length) {\n          matches = parts[ii] === testParts[ii];\n        } else {\n          matches = false;\n        }\n      }\n\n      // If matches, then return the component parts\n      matches = matches && testParts;\n    }\n  }\n  else if (typeof input.splice == 'function') {\n    matches = [];\n\n    for (ii = input.length; ii--; ) {\n      if (this.match(input[ii])) {\n        matches[matches.length] = input[ii];\n      }\n    }\n  }\n  else if (typeof input == 'object') {\n    matches = {};\n\n    for (var key in input) {\n      if (this.match(key)) {\n        matches[key] = input[key];\n      }\n    }\n  }\n\n  return matches;\n};\n\nmodule.exports = function(text, test, separator) {\n  var matcher = new WildcardMatcher(text, separator || /[\\/\\.]/);\n  if (typeof test != 'undefined') {\n    return matcher.match(test);\n  }\n\n  return matcher;\n};\n\n\n//# sourceURL=webpack:///./node_modules/wildcard/index.js?");

/***/ }),

/***/ "./node_modules/yeast/index.js":
/*!*************************************!*\
  !*** ./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:///./node_modules/yeast/index.js?");

/***/ }),

/***/ "./webpack/vendors/custom/uppy.js":
/*!****************************************!*\
  !*** ./webpack/vendors/custom/uppy.js ***!
  \****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\r\n\r\n/**\r\n * Define the output of this file. The output of CSS and JS file will be auto detected.\r\n *\r\n * @output plugins/custom/uppy/uppy.bundle\r\n */\r\n\r\n// Uppy\r\n__webpack_require__(/*! uppy/dist/uppy.css */ \"./node_modules/uppy/dist/uppy.css\");\r\nwindow.Uppy = __webpack_require__(/*! uppy */ \"./node_modules/uppy/index.mjs\");\r\n\n\n//# sourceURL=webpack:///./webpack/vendors/custom/uppy.js?");

/***/ }),

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

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

/***/ })

/******/ });