{"version":3,"sources":["webpack:///./node_modules/react-router/es/Router.js","webpack:///./node_modules/react-router-dom/es/Router.js","webpack:///./node_modules/react-router-dom/es/BrowserRouter.js","webpack:///./node_modules/react-router/es/generatePath.js","webpack:///./node_modules/react-router/es/Redirect.js","webpack:///./node_modules/react-router-dom/es/Redirect.js","webpack:///./app/javascript/mastodon/features/ui/components/column_loading.js","webpack:///./app/javascript/mastodon/features/ui/components/bundle_column_error.js","webpack:///./app/javascript/mastodon/features/ui/util/react_router_helpers.js","webpack:///./app/javascript/mastodon/features/ui/components/upload_area.js","webpack:///./app/javascript/mastodon/features/ui/components/drawer_loading.js","webpack:///./app/javascript/mastodon/components/server_banner.js","webpack:///./app/javascript/mastodon/features/ui/components/compose_panel.js","webpack:///./app/javascript/mastodon/components/logo.js","webpack:///./app/javascript/mastodon/features/ui/components/disabled_account_banner.js","webpack:///./app/javascript/mastodon/features/ui/components/follow_requests_column_link.js","webpack:///./app/javascript/mastodon/features/ui/components/list_panel.js","webpack:///./app/javascript/mastodon/features/ui/components/notifications_counter_icon.js","webpack:///./app/javascript/mastodon/features/ui/components/sign_in_banner.js","webpack:///./app/javascript/mastodon/features/account/components/featured_tags.js","webpack:///./app/javascript/mastodon/features/account/containers/featured_tags_container.js","webpack:///./app/javascript/mastodon/features/account/navigation.js","webpack:///./app/javascript/mastodon/components/navigation_portal.js","webpack:///./app/javascript/mastodon/features/ui/components/navigation_panel.js","webpack:///./app/javascript/mastodon/features/ui/components/columns_area.js","webpack:///./app/javascript/mastodon/features/ui/containers/columns_area_container.js","webpack:///./app/javascript/mastodon/features/picture_in_picture/components/header.js","webpack:///./app/javascript/mastodon/features/picture_in_picture/index.js","webpack:///./app/javascript/mastodon/actions/onboarding.js","webpack:///./app/javascript/mastodon/features/ui/components/header.js","webpack:///./app/javascript/mastodon/features/ui/index.js","webpack:///./app/javascript/mastodon/components/error_boundary.js","webpack:///./app/javascript/mastodon/containers/mastodon.js","webpack:///./app/javascript/mastodon/main.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/util.js","webpack:///./node_modules/stackframe/stackframe.js","webpack:///./node_modules/stacktrace-js/stacktrace.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-map-generator.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/base64-vlq.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/array-set.js","webpack:///./node_modules/error-stack-parser/error-stack-parser.js","webpack:///./node_modules/stack-generator/stack-generator.js","webpack:///./node_modules/stacktrace-gps/stacktrace-gps.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/source-map.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/base64.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/mapping-list.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-map-consumer.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/binary-search.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/quick-sort.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-node.js","webpack:///./app/javascript/mastodon/performance.js"],"names":["_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","ReferenceError","_React$Component","Router","_temp","_this","this","_len","args","Array","_key","apply","concat","state","match","computeMatch","props","history","location","pathname","subClass","superClass","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","_inherits","getChildContext","router","context","route","path","url","params","isExact","componentWillMount","_this2","_props","children","Children","count","unlisten","listen","setState","componentWillReceiveProps","nextProps","componentWillUnmount","render","only","Component","propTypes","object","isRequired","node","contextTypes","childContextTypes","BrowserRouter","createElement","patternCache","cacheCount","pattern","cacheKey","cache","compiledGenerator","compile","undefined","generator","pretty","Redirect","isStatic","staticContext","perform","componentDidMount","componentDidUpdate","prevProps","prevTo","to","nextTo","search","computeTo","_ref","computedMatch","push","replace","bool","from","string","oneOfType","defaultProps","shape","func","ColumnLoading","ImmutablePureComponent","title","icon","multiColumn","focusable","placeholder","className","PropTypes","GIF","React","PureComponent","hovering","handleMouseEnter","animate","handleMouseLeave","src","staticSrc","alt","role","onMouseEnter","onMouseLeave","autoPlayGif","CopyButton","copied","handleClick","navigator","clipboard","writeText","timeout","setTimeout","clearTimeout","onClick","id","defaultMessage","BundleColumnError","injectIntl","handleRetry","onRetry","errorType","stacktrace","body","bindToDocument","Link","classNames","Helmet","name","content","WrappedSwitch","Switch","map","child","cloneElement","WrappedRoute","hasError","renderComponent","component","componentParams","fetchComponent","loading","renderLoading","error","renderError","static","componentDidCatch","StackTrace","fromError","then","stackframes","toString","frame","join","catch","err","console","rest","Route","UploadArea","handleKeyUp","e","keyCode","active","preventDefault","stopPropagation","onClose","window","addEventListener","removeEventListener","defaultStyle","backgroundOpacity","backgroundScale","style","spring","stiffness","damping","visibility","opacity","transform","DrawerLoading","messages","defineMessages","aboutActiveUsers","ServerBanner","connect","server","getIn","dispatch","fetchServer","intl","isLoading","get","values","domain","mastodon","href","blurhash","width","size","formatMessage","ComposePanel","onFocus","changeComposing","onBlur","mountCompose","unmountCompose","signedIn","identity","openInRoute","Fragment","singleColumn","Logo","viewBox","xlinkHref","logoutMessage","logoutConfirm","DisabledAccountBanner","disabledAcct","disabledAccountId","movedToAcct","movedToAccountId","onLogout","openModal","message","confirm","closeWhenConfirm","onConfirm","logOut","handleLogOutClick","disabledAccountLink","disabledAccount","movedToAccount","includes","type","text","FollowRequestsColumnLink","ImmutableList","fetchFollowRequests","transparent","getOrderedLists","createSelector","lists","toList","filter","item","sort","a","b","localeCompare","take","ListPanel","withRouter","fetchLists","isEmpty","list","strict","ImmutablePropTypes","IconWithBadge","SignInBanner","useDispatch","openClosedRegistrationsModal","useCallback","signupButton","registrationsOpen","lastStatusAt","empty","FeaturedTags","account","featuredTags","dangerouslySetInnerHTML","__html","featuredTag","uses","withGraph","description","date","formatDate","month","day","tagged","getAccount","makeGetAccount","accountId","AccountNavigation","acct","normalizeForLookup","DefaultNavigation","showTrends","NavigationPortal","exact","home","notifications","explore","local","federated","direct","favourites","bookmarks","preferences","followsAndFollowers","about","NavigationPanel","timelinePreview","componentMap","Compose","HomeTimeline","Notifications","PublicTimeline","CommunityTimeline","HashtagTimeline","DirectTimeline","FavouritedStatuses","BookmarkedStatuses","ListTimeline","Directory","ColumnsArea","mediaQuery","matchMedia","renderComposePanel","matches","handleLayoutChange","handleWheel","_interruptScrollAnimation","setRef","columnId","supportsPassiveEvents","passive","addListener","isRtlLayout","document","getElementsByTagName","classList","contains","componentWillUpdate","removeListener","handleChildrenContentChange","modifier","scrollRight","scrollWidth","innerWidth","columns","isModalOpen","ref","column","toJS","other","SpecificComponent","modalType","forwardRef","close","Header","statusId","PictureInPicture","handleClose","removePictureInPicture","currentTime","player","volume","muted","autoPlay","inline","alwaysVisible","poster","backgroundColor","foregroundColor","accentColor","INTRODUCTION_VERSION","Account","me","beforeUnload","keyMap","help","new","forceNew","toggleComposeSpoilers","focusColumn","reply","favourite","boost","mention","open","openProfile","moveDown","moveUp","back","goToHome","goToNotifications","goToLocal","goToFederated","goToDirect","goToStart","goToFavourites","goToPinned","goToProfile","goToBlocked","goToMuted","goToRequests","toggleHidden","toggleSensitive","openMedia","SwitchingColumnsArea","c","mobile","toggle","redirect","singleUserMode","owner","initialState","accounts","username","trendsAsLanding","GettingStarted","KeyboardShortcuts","About","PrivacyPolicy","PinnedStatuses","FollowRecommendations","Explore","AccountTimeline","withReplies","Followers","Following","AccountGallery","Status","Reblogs","Favourites","FollowRequests","Blocks","DomainBlocks","FollowedTags","Mutes","Lists","UI","layout","isComposing","hasComposingText","trim","hasMediaAttachments","canUploadMore","some","x","dropdownMenuIsOpen","firstLaunch","draggingOver","handleBeforeUnload","synchronouslySubmitMarkers","returnValue","handleWindowFocus","focusApp","submitMarkers","immediate","handleWindowBlur","unfocusApp","handleDragEnter","dragTargets","indexOf","dataTransfer","types","handleDragOver","dataTransferIsText","dropEffect","handleDrop","files","uploadCompose","handleDragLeave","el","closeUploadModal","handleServiceWorkerPostMessage","data","warn","clearHeight","trailing","handleResize","layoutFromWindow","cancel","changeLayout","handleHotkeyNew","element","querySelector","focus","handleHotkeySearch","handleHotkeyForceNew","resetCompose","handleHotkeyToggleComposeSpoilers","changeComposeSpoilerness","handleHotkeyFocusColumn","index","container","status","scrollTop","offsetTop","scrollIntoView","handleHotkeyBack","goBack","setHotkeysRef","hotkeys","handleHotkeyToggleHelp","handleHotkeyGoToHome","handleHotkeyGoToNotifications","handleHotkeyGoToLocal","handleHotkeyGoToFederated","handleHotkeyGoToDirect","handleHotkeyGoToStart","handleHotkeyGoToFavourites","handleHotkeyGoToPinned","handleHotkeyGoToProfile","handleHotkeyGoToBlocked","handleHotkeyGoToMuted","handleHotkeyGoToRequests","handleDragEnd","serviceWorker","changeSetting","saveSettings","fetchMarkers","expandHomeTimeline","expandNotifications","__mousetrap__","stopCallback","tagName","handlers","attach","focused","pointerEvents","ErrorBoundary","errorMessage","stackTrace","mappedStackTrace","componentStack","handleCopyStackTrace","textarea","contents","textContent","position","appendChild","select","execCommand","removeChild","info","stack","sf","likelyBrowserAddonIssue","version","source_url","rel","localeData","getLocale","addLocaleData","siteTitle","store","configureStore","hydrateAction","hydrateStore","meta","fetchCustomEmojis","Mastodon","disabled_account_id","accessToken","access_token","permissions","disconnect","connectUserStream","shouldUpdateScroll","prevRouterProps","mastodonModalKey","locale","defaultTitle","titleTemplate","perf","require","main","start","ready","async","mountNode","getElementById","JSON","parse","getAttribute","ReactDOM","setupBrowserNotifications","Workbox","wb","registration","register","registerPushNotifications","stop","exports","getArg","aArgs","aName","aDefaultValue","Error","urlRegexp","dataUrlRegexp","urlParse","aUrl","scheme","auth","host","port","urlGenerate","aParsedUrl","normalize","aPath","part","isAbsolute","parts","split","up","splice","aRoot","aPathUrl","aRootUrl","joined","charAt","relative","level","lastIndexOf","slice","substr","supportsNullProto","s","isProtoString","charCodeAt","strcmp","aStr1","aStr2","toSetString","aStr","fromSetString","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","originalLine","originalColumn","generatedColumn","generatedLine","compareByGeneratedPositionsDeflated","onlyCompareGenerated","compareByGeneratedPositionsInflated","_isNumber","n","isNaN","parseFloat","isFinite","_capitalize","str","toUpperCase","substring","_getter","p","booleanProps","numericProps","stringProps","arrayProps","objectProps","StackFrame","obj","getArgs","setArgs","v","getEvalOrigin","evalOrigin","setEvalOrigin","fileName","getFileName","lineNumber","getLineNumber","columnNumber","getColumnNumber","functionName","getFunctionName","getIsEval","fromString","argsStartIndex","argsEndIndex","locationString","exec","Boolean","j","Number","k","String","ErrorStackParser","StackGenerator","StackTraceGPS","_options","stackframe","sourceCache","_generateError","_merge","first","second","forEach","prop","_isShapedLikeParsableError","_filtered","opts","generateArtificially","getSync","backtrace","gps","Promise","resolve","all","resolveOriginal","pinpoint","bind","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","requestOptions","reject","req","XMLHttpRequest","onerror","onreadystatechange","readyState","responseText","setRequestHeader","headers","header","reportPayload","send","stringify","base64VLQ","util","ArraySet","MappingList","SourceMapGenerator","_file","_sourceRoot","_skipValidation","_sources","_names","_mappings","_sourcesContents","_version","fromSourceMap","aSourceMapConsumer","sourceRoot","file","eachMapping","mapping","newMapping","generated","line","original","addMapping","sources","sourceFile","sourceContentFor","setSourceContent","_validateMapping","has","add","aSourceFile","aSourceContent","keys","applySourceMap","aSourceMapPath","newSources","newNames","unsortedForEach","originalPositionFor","aGenerated","aOriginal","aSource","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","result","mappings","toArray","len","encode","_generateSourcesContent","aSources","aSourceRoot","toJSON","names","sourcesContent","base64","aValue","digit","encoded","vlq","toVLQSigned","VLQ_BASE","decode","aIndex","aOutParam","continuation","shifted","strLen","shift","_array","_set","fromArray","aArray","aAllowDuplicates","set","getOwnPropertyNames","sStr","isDuplicate","idx","at","aIdx","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","sanitizedLine","tokens","locationParts","pop","functionNameRegex","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","maxStackSize","curr","callee","test","RegExp","$1","caller","SourceMap","_xdr","_atob","b64str","atob","_parseJson","_findFunctionName","syntaxes","code","maxLines","Math","min","commentPos","m","_ensureSupportedEnvironment","defineProperty","_ensureStackFrameIsLegit","_findSourceMappingURL","lastSourceMappingUrl","matchSourceMappingUrl","sourceMappingUrlRegExp","_extractLocationInfoFromSourceMapSource","sourceMapConsumer","loc","mappedSource","sourceMapConsumerCache","ajax","_get","isDataUrl","offline","supportedEncodingRegexp","sourceMapStart","encodedSource","xhrPromise","method","_getSourceMapConsumer","sourceMappingURL","defaultSourceRoot","sourceMapConsumerPromise","sourceMapSource","SourceMapConsumer","getMappedLocation","mappedStackFrame","resolveMappedStackFrame","findFunctionName","guessedFunctionName","SourceNode","intToCharMap","number","charCode","_sorted","_last","aCallback","aThisArg","aMapping","lineA","lineB","columnA","columnB","binarySearch","quickSort","aSourceMap","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","Mapping","lastOffset","_sections","offset","offsetLine","offsetColumn","generatedOffset","consumer","__generatedMappings","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","aContext","aOrder","_generatedMappings","_originalMappings","allGeneratedPositionsFor","needle","_findMapping","lastColumn","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","segment","end","cachedSegments","temp","originalMappings","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","sc","nullOnMissing","fileUriAbsPath","generatedPositionFor","sectionIndex","section","bias","every","generatedPosition","sectionMappings","adjustedMapping","recursiveSearch","aLow","aHigh","aHaystack","aCompare","mid","floor","swap","ary","y","doQuickSort","comparator","r","low","high","round","random","pivot","q","REGEX_NEWLINE","isSourceNode","aLine","aColumn","aChunks","sourceContents","fromStringWithSourceMap","aGeneratedCode","aRelativePath","remainingLines","shiftNextLine","lastGeneratedLine","lastMapping","nextLine","addMappingWithCode","aChunk","isArray","chunk","prepend","unshift","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","walkSourceContents","toStringWithSourceMap","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent","process"],"mappings":"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","file":"js/163-8f3dfae0982812dc1660.chunk.js","sourcesContent":["var _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n  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}\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router = function (_React$Component) {\n  _inherits(Router, _React$Component);\n  function Router() {\n    var _temp, _this, _ret;\n    _classCallCheck(this, Router);\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n      match: _this.computeMatch(_this.props.history.location.pathname)\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  Router.prototype.getChildContext = function getChildContext() {\n    return {\n      router: _extends({}, this.context.router, {\n        history: this.props.history,\n        route: {\n          location: this.props.history.location,\n          match: this.state.match\n        }\n      })\n    };\n  };\n  Router.prototype.computeMatch = function computeMatch(pathname) {\n    return {\n      path: \"/\",\n      url: \"/\",\n      params: {},\n      isExact: pathname === \"/\"\n    };\n  };\n  Router.prototype.componentWillMount = function componentWillMount() {\n    var _this2 = this;\n    var _props = this.props,\n      children = _props.children,\n      history = _props.history;\n    invariant(children == null || React.Children.count(children) === 1, \"A <Router> may have only one child element\");\n\n    // Do this here so we can setState when a <Redirect> changes the\n    // location in componentWillMount. This happens e.g. when doing\n    // server rendering using a <StaticRouter>.\n    this.unlisten = history.listen(function () {\n      _this2.setState({\n        match: _this2.computeMatch(history.location.pathname)\n      });\n    });\n  };\n  Router.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    warning(this.props.history === nextProps.history, \"You cannot change <Router history>\");\n  };\n  Router.prototype.componentWillUnmount = function componentWillUnmount() {\n    this.unlisten();\n  };\n  Router.prototype.render = function render() {\n    var children = this.props.children;\n    return children ? React.Children.only(children) : null;\n  };\n  return Router;\n}(React.Component);\nRouter.propTypes = {\n  history: PropTypes.object.isRequired,\n  children: PropTypes.node\n};\nRouter.contextTypes = {\n  router: PropTypes.object\n};\nRouter.childContextTypes = {\n  router: PropTypes.object.isRequired\n};\nexport default Router;","// Written in this round about way for babel-transform-imports\nimport Router from \"react-router/es/Router\";\nexport default Router;","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n  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}\nimport warning from \"warning\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createBrowserHistory as createHistory } from \"history\";\nimport Router from \"./Router\";\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter = function (_React$Component) {\n  _inherits(BrowserRouter, _React$Component);\n  function BrowserRouter() {\n    var _temp, _this, _ret;\n    _classCallCheck(this, BrowserRouter);\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.history = createHistory(_this.props), _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  BrowserRouter.prototype.componentWillMount = function componentWillMount() {\n    warning(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\");\n  };\n  BrowserRouter.prototype.render = function render() {\n    return /*#__PURE__*/React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n  return BrowserRouter;\n}(React.Component);\nexport default BrowserRouter;","import pathToRegexp from \"path-to-regexp\";\nvar patternCache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\nvar compileGenerator = function compileGenerator(pattern) {\n  var cacheKey = pattern;\n  var cache = patternCache[cacheKey] || (patternCache[cacheKey] = {});\n  if (cache[pattern]) return cache[pattern];\n  var compiledGenerator = pathToRegexp.compile(pattern);\n  if (cacheCount < cacheLimit) {\n    cache[pattern] = compiledGenerator;\n    cacheCount++;\n  }\n  return compiledGenerator;\n};\n\n/**\n * Public API for generating a URL pathname from a pattern and parameters.\n */\nvar generatePath = function generatePath() {\n  var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (pattern === \"/\") {\n    return pattern;\n  }\n  var generator = compileGenerator(pattern);\n  return generator(params, {\n    pretty: true\n  });\n};\nexport default generatePath;","var _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n  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}\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport { createLocation, locationsAreEqual } from \"history\";\nimport generatePath from \"./generatePath\";\n\n/**\n * The public API for updating the location programmatically\n * with a component.\n */\n\nvar Redirect = function (_React$Component) {\n  _inherits(Redirect, _React$Component);\n  function Redirect() {\n    _classCallCheck(this, Redirect);\n    return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n  }\n  Redirect.prototype.isStatic = function isStatic() {\n    return this.context.router && this.context.router.staticContext;\n  };\n  Redirect.prototype.componentWillMount = function componentWillMount() {\n    invariant(this.context.router, \"You should not use <Redirect> outside a <Router>\");\n    if (this.isStatic()) this.perform();\n  };\n  Redirect.prototype.componentDidMount = function componentDidMount() {\n    if (!this.isStatic()) this.perform();\n  };\n  Redirect.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var prevTo = createLocation(prevProps.to);\n    var nextTo = createLocation(this.props.to);\n    if (locationsAreEqual(prevTo, nextTo)) {\n      warning(false, \"You tried to redirect to the same route you're currently on: \" + (\"\\\"\" + nextTo.pathname + nextTo.search + \"\\\"\"));\n      return;\n    }\n    this.perform();\n  };\n  Redirect.prototype.computeTo = function computeTo(_ref) {\n    var computedMatch = _ref.computedMatch,\n      to = _ref.to;\n    if (computedMatch) {\n      if (typeof to === \"string\") {\n        return generatePath(to, computedMatch.params);\n      } else {\n        return _extends({}, to, {\n          pathname: generatePath(to.pathname, computedMatch.params)\n        });\n      }\n    }\n    return to;\n  };\n  Redirect.prototype.perform = function perform() {\n    var history = this.context.router.history;\n    var push = this.props.push;\n    var to = this.computeTo(this.props);\n    if (push) {\n      history.push(to);\n    } else {\n      history.replace(to);\n    }\n  };\n  Redirect.prototype.render = function render() {\n    return null;\n  };\n  return Redirect;\n}(React.Component);\nRedirect.propTypes = {\n  computedMatch: PropTypes.object,\n  // private, from <Switch>\n  push: PropTypes.bool,\n  from: PropTypes.string,\n  to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n};\nRedirect.defaultProps = {\n  push: false\n};\nRedirect.contextTypes = {\n  router: PropTypes.shape({\n    history: PropTypes.shape({\n      push: PropTypes.func.isRequired,\n      replace: PropTypes.func.isRequired\n    }).isRequired,\n    staticContext: PropTypes.object\n  }).isRequired\n};\nexport default Redirect;","// Written in this round about way for babel-transform-imports\nimport Redirect from \"react-router/es/Redirect\";\nexport default Redirect;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Column from '../../../components/column';\nimport ColumnHeader from '../../../components/column_header';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nexport default class ColumnLoading extends ImmutablePureComponent {\n\n  static propTypes = {\n    title: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n    icon: PropTypes.string,\n    multiColumn: PropTypes.bool,\n  };\n\n  static defaultProps = {\n    title: '',\n    icon: '',\n  };\n\n  render() {\n    let { title, icon, multiColumn } = this.props;\n\n    return (\n      <Column>\n        <ColumnHeader icon={icon} title={title} multiColumn={multiColumn} focusable={false} placeholder />\n        <div className='scrollable' />\n      </Column>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport Column from 'mastodon/components/column';\nimport Button from 'mastodon/components/button';\nimport { Helmet } from 'react-helmet';\nimport { Link } from 'react-router-dom';\nimport classNames from 'classnames';\nimport { autoPlayGif } from 'mastodon/initial_state';\n\nclass GIF extends React.PureComponent {\n\n  static propTypes = {\n    src: PropTypes.string.isRequired,\n    staticSrc: PropTypes.string.isRequired,\n    className: PropTypes.string,\n    animate: PropTypes.bool,\n  };\n\n  static defaultProps = {\n    animate: autoPlayGif,\n  };\n\n  state = {\n    hovering: false,\n  };\n\n  handleMouseEnter = () => {\n    const { animate } = this.props;\n\n    if (!animate) {\n      this.setState({ hovering: true });\n    }\n  };\n\n  handleMouseLeave = () => {\n    const { animate } = this.props;\n\n    if (!animate) {\n      this.setState({ hovering: false });\n    }\n  };\n\n  render () {\n    const { src, staticSrc, className, animate } = this.props;\n    const { hovering } = this.state;\n\n    return (\n      <img\n        className={className}\n        src={(hovering || animate) ? src : staticSrc}\n        alt=''\n        role='presentation'\n        onMouseEnter={this.handleMouseEnter}\n        onMouseLeave={this.handleMouseLeave}\n      />\n    );\n  }\n\n}\n\nclass CopyButton extends React.PureComponent {\n\n  static propTypes = {\n    children: PropTypes.node.isRequired,\n    value: PropTypes.string.isRequired,\n  };\n\n  state = {\n    copied: false,\n  };\n\n  handleClick = () => {\n    const { value } = this.props;\n    navigator.clipboard.writeText(value);\n    this.setState({ copied: true });\n    this.timeout = setTimeout(() => this.setState({ copied: false }), 700);\n  };\n\n  componentWillUnmount () {\n    if (this.timeout) clearTimeout(this.timeout);\n  }\n\n  render () {\n    const { children } = this.props;\n    const { copied } = this.state;\n\n    return (\n      <Button onClick={this.handleClick} className={copied ? 'copied' : 'copyable'}>{copied ? <FormattedMessage id='copypaste.copied' defaultMessage='Copied' /> : children}</Button>\n    );\n  }\n\n}\n\nexport default @injectIntl\nclass BundleColumnError extends React.PureComponent {\n\n  static propTypes = {\n    errorType: PropTypes.oneOf(['routing', 'network', 'error']),\n    onRetry: PropTypes.func,\n    intl: PropTypes.object.isRequired,\n    multiColumn: PropTypes.bool,\n    stacktrace: PropTypes.string,\n  };\n\n  static defaultProps = {\n    errorType: 'routing',\n  };\n\n  handleRetry = () => {\n    const { onRetry } = this.props;\n\n    if (onRetry) {\n      onRetry();\n    }\n  };\n\n  render () {\n    const { errorType, multiColumn, stacktrace } = this.props;\n\n    let title, body;\n\n    switch(errorType) {\n    case 'routing':\n      title = <FormattedMessage id='bundle_column_error.routing.title' defaultMessage='404' />;\n      body = <FormattedMessage id='bundle_column_error.routing.body' defaultMessage='The requested page could not be found. Are you sure the URL in the address bar is correct?' />;\n      break;\n    case 'network':\n      title = <FormattedMessage id='bundle_column_error.network.title' defaultMessage='Network error' />;\n      body = <FormattedMessage id='bundle_column_error.network.body' defaultMessage='There was an error when trying to load this page. This could be due to a temporary problem with your internet connection or this server.' />;\n      break;\n    case 'error':\n      title = <FormattedMessage id='bundle_column_error.error.title' defaultMessage='Oh, no!' />;\n      body = <FormattedMessage id='bundle_column_error.error.body' defaultMessage='The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.' />;\n      break;\n    }\n\n    return (\n      <Column bindToDocument={!multiColumn}>\n        <div className='error-column'>\n          <GIF src='/oops.gif' staticSrc='/oops.png' className='error-column__image' />\n\n          <div className='error-column__message'>\n            <h1>{title}</h1>\n            <p>{body}</p>\n\n            <div className='error-column__message__actions'>\n              {errorType === 'network' && <Button onClick={this.handleRetry}><FormattedMessage id='bundle_column_error.retry' defaultMessage='Try again' /></Button>}\n              {errorType === 'error' && <CopyButton value={stacktrace}><FormattedMessage id='bundle_column_error.copy_stacktrace' defaultMessage='Copy error report' /></CopyButton>}\n              <Link to='/' className={classNames('button', { 'button-tertiary': errorType !== 'routing' })}><FormattedMessage id='bundle_column_error.return' defaultMessage='Go back home' /></Link>\n            </div>\n          </div>\n        </div>\n\n        <Helmet>\n          <meta name='robots' content='noindex' />\n        </Helmet>\n      </Column>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Switch, Route } from 'react-router-dom';\nimport StackTrace from 'stacktrace-js';\nimport ColumnLoading from '../components/column_loading';\nimport BundleColumnError from '../components/bundle_column_error';\nimport BundleContainer from '../containers/bundle_container';\n\n// Small wrapper to pass multiColumn to the route components\nexport class WrappedSwitch extends React.PureComponent {\n\n  render () {\n    const { multiColumn, children } = this.props;\n\n    return (\n      <Switch>\n        {React.Children.map(children, child => React.cloneElement(child, { multiColumn }))}\n      </Switch>\n    );\n  }\n\n}\n\nWrappedSwitch.propTypes = {\n  multiColumn: PropTypes.bool,\n  children: PropTypes.node,\n};\n\n// Small Wrapper to extract the params from the route and pass\n// them to the rendered component, together with the content to\n// be rendered inside (the children)\nexport class WrappedRoute extends React.Component {\n\n  static propTypes = {\n    component: PropTypes.func.isRequired,\n    content: PropTypes.node,\n    multiColumn: PropTypes.bool,\n    componentParams: PropTypes.object,\n  };\n\n  static defaultProps = {\n    componentParams: {},\n  };\n\n  static getDerivedStateFromError () {\n    return {\n      hasError: true,\n    };\n  }\n\n  state = {\n    hasError: false,\n    stacktrace: '',\n  };\n\n  componentDidCatch (error) {\n    StackTrace.fromError(error).then(stackframes => {\n      this.setState({ stacktrace: error.toString() + '\\n' + stackframes.map(frame => frame.toString()).join('\\n') });\n    }).catch(err => {\n      console.error(err);\n    });\n  }\n\n  renderComponent = ({ match }) => {\n    const { component, content, multiColumn, componentParams } = this.props;\n    const { hasError, stacktrace } = this.state;\n\n    if (hasError) {\n      return (\n        <BundleColumnError\n          stacktrace={stacktrace}\n          multiColumn={multiColumn}\n          errorType='error'\n        />\n      );\n    }\n\n    return (\n      <BundleContainer fetchComponent={component} loading={this.renderLoading} error={this.renderError}>\n        {Component => <Component params={match.params} multiColumn={multiColumn} {...componentParams}>{content}</Component>}\n      </BundleContainer>\n    );\n  };\n\n  renderLoading = () => {\n    const { multiColumn } = this.props;\n\n    return <ColumnLoading multiColumn={multiColumn} />;\n  };\n\n  renderError = (props) => {\n    return <BundleColumnError {...props} errorType='network' />;\n  };\n\n  render () {\n    const { component: Component, content, ...rest } = this.props;\n\n    return <Route {...rest} render={this.renderComponent} />;\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class UploadArea extends React.PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    onClose: PropTypes.func,\n  };\n\n  handleKeyUp = (e) => {\n    const keyCode = e.keyCode;\n    if (this.props.active) {\n      switch(keyCode) {\n      case 27:\n        e.preventDefault();\n        e.stopPropagation();\n        this.props.onClose();\n        break;\n      }\n    }\n  };\n\n  componentDidMount () {\n    window.addEventListener('keyup', this.handleKeyUp, false);\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('keyup', this.handleKeyUp);\n  }\n\n  render () {\n    const { active } = this.props;\n\n    return (\n      <Motion defaultStyle={{ backgroundOpacity: 0, backgroundScale: 0.95 }} style={{ backgroundOpacity: spring(active ? 1 : 0, { stiffness: 150, damping: 15 }), backgroundScale: spring(active ? 1 : 0.95, { stiffness: 200, damping: 3 }) }}>\n        {({ backgroundOpacity, backgroundScale }) => (\n          <div className='upload-area' style={{ visibility: active ? 'visible' : 'hidden', opacity: backgroundOpacity }}>\n            <div className='upload-area__drop'>\n              <div className='upload-area__background' style={{ transform: `scale(${backgroundScale})` }} />\n              <div className='upload-area__content'><FormattedMessage id='upload_area.title' defaultMessage='Drag & drop to upload' /></div>\n            </div>\n          </div>\n        )}\n      </Motion>\n    );\n  }\n\n}\n","import React from 'react';\n\nconst DrawerLoading = () => (\n  <div className='drawer'>\n    <div className='drawer__pager'>\n      <div className='drawer__inner' />\n    </div>\n  </div>\n);\n\nexport default DrawerLoading;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { connect } from 'react-redux';\nimport { fetchServer } from 'mastodon/actions/server';\nimport ShortNumber from 'mastodon/components/short_number';\nimport Skeleton from 'mastodon/components/skeleton';\nimport Account from 'mastodon/containers/account_container';\nimport { domain } from 'mastodon/initial_state';\nimport Image from 'mastodon/components/image';\nimport { Link } from 'react-router-dom';\n\nconst messages = defineMessages({\n  aboutActiveUsers: { id: 'server_banner.about_active_users', defaultMessage: 'People using this server during the last 30 days (Monthly Active Users)' },\n});\n\nconst mapStateToProps = state => ({\n  server: state.getIn(['server', 'server']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass ServerBanner extends React.PureComponent {\n\n  static propTypes = {\n    server: PropTypes.object,\n    dispatch: PropTypes.func,\n    intl: PropTypes.object,\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n    dispatch(fetchServer());\n  }\n\n  render () {\n    const { server, intl } = this.props;\n    const isLoading = server.get('isLoading');\n\n    return (\n      <div className='server-banner'>\n        <div className='server-banner__introduction'>\n          <FormattedMessage id='server_banner.introduction' defaultMessage='{domain} is part of the decentralized social network powered by {mastodon}.' values={{ domain: <strong>{domain}</strong>, mastodon: <a href='https://joinmastodon.org' target='_blank'>Mastodon</a> }} />\n        </div>\n\n        <Image blurhash={server.getIn(['thumbnail', 'blurhash'])} src={server.getIn(['thumbnail', 'url'])} className='server-banner__hero' />\n\n        <div className='server-banner__description'>\n          {isLoading ? (\n            <>\n              <Skeleton width='100%' />\n              <br />\n              <Skeleton width='100%' />\n              <br />\n              <Skeleton width='70%' />\n            </>\n          ) : server.get('description')}\n        </div>\n\n        <div className='server-banner__meta'>\n          <div className='server-banner__meta__column'>\n            <h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4>\n\n            <Account id={server.getIn(['contact', 'account', 'id'])} size={36} />\n          </div>\n\n          <div className='server-banner__meta__column'>\n            <h4><FormattedMessage id='server_banner.server_stats' defaultMessage='Server stats:' /></h4>\n\n            {isLoading ? (\n              <>\n                <strong className='server-banner__number'><Skeleton width='10ch' /></strong>\n                <br />\n                <span className='server-banner__number-label'><Skeleton width='5ch' /></span>\n              </>\n            ) : (\n              <>\n                <strong className='server-banner__number'><ShortNumber value={server.getIn(['usage', 'users', 'active_month'])} /></strong>\n                <br />\n                <span className='server-banner__number-label' title={intl.formatMessage(messages.aboutActiveUsers)}><FormattedMessage id='server_banner.active_users' defaultMessage='active users' /></span>\n              </>\n            )}\n          </div>\n        </div>\n\n        <hr className='spacer' />\n\n        <Link className='button button--block button-secondary' to='/about'><FormattedMessage id='server_banner.learn_more' defaultMessage='Learn more' /></Link>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport SearchContainer from 'mastodon/features/compose/containers/search_container';\nimport ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';\nimport NavigationContainer from 'mastodon/features/compose/containers/navigation_container';\nimport LinkFooter from './link_footer';\nimport ServerBanner from 'mastodon/components/server_banner';\nimport { changeComposing, mountCompose, unmountCompose } from 'mastodon/actions/compose';\n\nexport default @connect()\nclass ComposePanel extends React.PureComponent {\n\n  static contextTypes = {\n    identity: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n  };\n\n  onFocus = () => {\n    const { dispatch } = this.props;\n    dispatch(changeComposing(true));\n  };\n\n  onBlur = () => {\n    const { dispatch } = this.props;\n    dispatch(changeComposing(false));\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n    dispatch(mountCompose());\n  }\n\n  componentWillUnmount () {\n    const { dispatch } = this.props;\n    dispatch(unmountCompose());\n  }\n\n  render() {\n    const { signedIn } = this.context.identity;\n\n    return (\n      <div className='compose-panel' onFocus={this.onFocus}>\n        <SearchContainer openInRoute />\n\n        {!signedIn && (\n          <React.Fragment>\n            <ServerBanner />\n            <div className='flex-spacer' />\n          </React.Fragment>\n        )}\n\n        {signedIn && (\n          <React.Fragment>\n            <NavigationContainer onClose={this.onBlur} />\n            <ComposeFormContainer singleColumn />\n          </React.Fragment>\n        )}\n\n        <LinkFooter />\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\n\nconst Logo = () => (\n  <svg viewBox='0 0 261 66' className='logo' role='img'>\n    <title>Mastodon</title>\n    <use xlinkHref='#logo-symbol-wordmark' />\n  </svg>\n);\n\nexport default Logo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { disabledAccountId, movedToAccountId, domain } from 'mastodon/initial_state';\nimport { openModal } from 'mastodon/actions/modal';\nimport { logOut } from 'mastodon/utils/log_out';\n\nconst messages = defineMessages({\n  logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' },\n  logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' },\n});\n\nconst mapStateToProps = (state) => ({\n  disabledAcct: state.getIn(['accounts', disabledAccountId, 'acct']),\n  movedToAcct: movedToAccountId ? state.getIn(['accounts', movedToAccountId, 'acct']) : undefined,\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n  onLogout () {\n    dispatch(openModal('CONFIRM', {\n      message: intl.formatMessage(messages.logoutMessage),\n      confirm: intl.formatMessage(messages.logoutConfirm),\n      closeWhenConfirm: false,\n      onConfirm: () => logOut(),\n    }));\n  },\n});\n\nexport default @injectIntl\n@connect(mapStateToProps, mapDispatchToProps)\nclass DisabledAccountBanner extends React.PureComponent {\n\n  static propTypes = {\n    disabledAcct: PropTypes.string.isRequired,\n    movedToAcct: PropTypes.string,\n    onLogout: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  handleLogOutClick = e => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.props.onLogout();\n\n    return false;\n  };\n\n  render () {\n    const { disabledAcct, movedToAcct } = this.props;\n\n    const disabledAccountLink = (\n      <Link to={`/@${disabledAcct}`}>\n        {disabledAcct}@{domain}\n      </Link>\n    );\n\n    return (\n      <div className='sign-in-banner'>\n        <p>\n          {movedToAcct ? (\n            <FormattedMessage\n              id='moved_to_account_banner.text'\n              defaultMessage='Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.'\n              values={{\n                disabledAccount: disabledAccountLink,\n                movedToAccount: <Link to={`/@${movedToAcct}`}>{movedToAcct.includes('@') ? movedToAcct : `${movedToAcct}@${domain}`}</Link>,\n              }}\n            />\n          ) : (\n            <FormattedMessage\n              id='disabled_account_banner.text'\n              defaultMessage='Your account {disabledAccount} is currently disabled.'\n              values={{\n                disabledAccount: disabledAccountLink,\n              }}\n            />\n          )}\n        </p>\n        <a href='/auth/edit' className='button button--block'>\n          <FormattedMessage id='disabled_account_banner.account_settings' defaultMessage='Account settings' />\n        </a>\n        <button type='button' className='button button--block button-tertiary' onClick={this.handleLogOutClick}>\n          <FormattedMessage id='confirmations.logout.confirm' defaultMessage='Log out' />\n        </button>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { fetchFollowRequests } from 'mastodon/actions/accounts';\nimport { connect } from 'react-redux';\nimport ColumnLink from 'mastodon/features/ui/components/column_link';\nimport IconWithBadge from 'mastodon/components/icon_with_badge';\nimport { List as ImmutableList } from 'immutable';\nimport { injectIntl, defineMessages } from 'react-intl';\n\nconst messages = defineMessages({\n  text: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },\n});\n\nconst mapStateToProps = state => ({\n  count: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,\n});\n\nexport default @injectIntl\n@connect(mapStateToProps)\nclass FollowRequestsColumnLink extends React.Component {\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    count: PropTypes.number.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n\n    dispatch(fetchFollowRequests());\n  }\n\n  render () {\n    const { count, intl } = this.props;\n\n    if (count === 0) {\n      return null;\n    }\n\n    return (\n      <ColumnLink\n        transparent\n        to='/follow_requests'\n        icon={<IconWithBadge className='column-link__icon' id='user-plus' count={count} />}\n        text={intl.formatMessage(messages.text)}\n      />\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { createSelector } from 'reselect';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { fetchLists } from 'mastodon/actions/lists';\nimport ColumnLink from './column_link';\n\nconst getOrderedLists = createSelector([state => state.get('lists')], lists => {\n  if (!lists) {\n    return lists;\n  }\n\n  return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title'))).take(4);\n});\n\nconst mapStateToProps = state => ({\n  lists: getOrderedLists(state),\n});\n\nexport default @withRouter\n@connect(mapStateToProps)\nclass ListPanel extends ImmutablePureComponent {\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    lists: ImmutablePropTypes.list,\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n    dispatch(fetchLists());\n  }\n\n  render () {\n    const { lists } = this.props;\n\n    if (!lists || lists.isEmpty()) {\n      return null;\n    }\n\n    return (\n      <div className='list-panel'>\n        <hr />\n\n        {lists.map(list => (\n          <ColumnLink icon='list-ul' key={list.get('id')} strict text={list.get('title')} to={`/lists/${list.get('id')}`} transparent />\n        ))}\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport IconWithBadge from 'mastodon/components/icon_with_badge';\n\nconst mapStateToProps = state => ({\n  count: state.getIn(['notifications', 'unread']),\n  id: 'bell',\n});\n\nexport default connect(mapStateToProps)(IconWithBadge);\n","import React, { useCallback } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport { registrationsOpen } from 'mastodon/initial_state';\nimport { openModal } from 'mastodon/actions/modal';\n\nconst SignInBanner = () => {\n  const dispatch = useDispatch();\n\n  const openClosedRegistrationsModal = useCallback(\n    () => dispatch(openModal('CLOSED_REGISTRATIONS')),\n    [dispatch],\n  );\n\n  let signupButton;\n\n  if (registrationsOpen) {\n    signupButton = (\n      <a href='/auth/sign_up' className='button button--block button-tertiary'>\n        <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n      </a>\n    );\n  } else {\n    signupButton = (\n      <button className='button button--block button-tertiary' onClick={openClosedRegistrationsModal}>\n        <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n      </button>\n    );\n  }\n\n  return (\n    <div className='sign-in-banner'>\n      <p><FormattedMessage id='sign_in_banner.text' defaultMessage='Sign in to follow profiles or hashtags, favourite, share and reply to posts. You can also interact from your account on a different server.' /></p>\n      <a href='/auth/sign_in' className='button button--block'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Sign in' /></a>\n      {signupButton}\n    </div>\n  );\n};\n\nexport default SignInBanner;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Hashtag from 'mastodon/components/hashtag';\n\nconst messages = defineMessages({\n  lastStatusAt: { id: 'account.featured_tags.last_status_at', defaultMessage: 'Last post on {date}' },\n  empty: { id: 'account.featured_tags.last_status_never', defaultMessage: 'No posts' },\n});\n\nexport default @injectIntl\nclass FeaturedTags extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    account: ImmutablePropTypes.map,\n    featuredTags: ImmutablePropTypes.list,\n    tagged: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n  };\n\n  render () {\n    const { account, featuredTags, intl } = this.props;\n\n    if (!account || account.get('suspended') || featuredTags.isEmpty()) {\n      return null;\n    }\n\n    return (\n      <div className='getting-started__trends'>\n        <h4><FormattedMessage id='account.featured_tags.title' defaultMessage=\"{name}'s featured hashtags\" values={{ name: <bdi dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }} /> }} /></h4>\n\n        {featuredTags.take(3).map(featuredTag => (\n          <Hashtag\n            key={featuredTag.get('name')}\n            name={featuredTag.get('name')}\n            to={`/@${account.get('acct')}/tagged/${featuredTag.get('name')}`}\n            uses={featuredTag.get('statuses_count') * 1}\n            withGraph={false}\n            description={((featuredTag.get('statuses_count') * 1) > 0) ? intl.formatMessage(messages.lastStatusAt, { date: intl.formatDate(featuredTag.get('last_status_at'), { month: 'short', day: '2-digit' }) }) : intl.formatMessage(messages.empty)}\n          />\n        ))}\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport FeaturedTags from '../components/featured_tags';\nimport { makeGetAccount } from 'mastodon/selectors';\nimport { List as ImmutableList } from 'immutable';\n\nconst mapStateToProps = () => {\n  const getAccount = makeGetAccount();\n\n  return (state, { accountId }) => ({\n    account: getAccount(state, accountId),\n    featuredTags: state.getIn(['user_lists', 'featured_tags', accountId, 'items'], ImmutableList()),\n  });\n};\n\nexport default connect(mapStateToProps)(FeaturedTags);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport FeaturedTags from 'mastodon/features/account/containers/featured_tags_container';\nimport { normalizeForLookup } from 'mastodon/reducers/accounts_map';\n\nconst mapStateToProps = (state, { match: { params: { acct } } }) => {\n  const accountId = state.getIn(['accounts_map', normalizeForLookup(acct)]);\n\n  if (!accountId) {\n    return {\n      isLoading: true,\n    };\n  }\n\n  return {\n    accountId,\n    isLoading: false,\n  };\n};\n\nexport default @connect(mapStateToProps)\nclass AccountNavigation extends React.PureComponent {\n\n  static propTypes = {\n    match: PropTypes.shape({\n      params: PropTypes.shape({\n        acct: PropTypes.string,\n        tagged: PropTypes.string,\n      }).isRequired,\n    }).isRequired,\n\n    accountId: PropTypes.string,\n    isLoading: PropTypes.bool,\n  };\n\n  render () {\n    const { accountId, isLoading, match: { params: { tagged } } } = this.props;\n\n    if (isLoading) {\n      return null;\n    }\n\n    return (\n      <>\n        <div className='flex-spacer' />\n        <FeaturedTags accountId={accountId} tagged={tagged} />\n      </>\n    );\n  }\n\n}\n","import React from 'react';\nimport { Switch, Route, withRouter } from 'react-router-dom';\nimport { showTrends } from 'mastodon/initial_state';\nimport Trends from 'mastodon/features/getting_started/containers/trends_container';\nimport AccountNavigation from 'mastodon/features/account/navigation';\n\nconst DefaultNavigation = () => (\n  <>\n    {showTrends && (\n      <>\n        <div className='flex-spacer' />\n        <Trends />\n      </>\n    )}\n  </>\n);\n\nexport default @withRouter\nclass NavigationPortal extends React.PureComponent {\n\n  render () {\n    return (\n      <Switch>\n        <Route path='/@:acct' exact component={AccountNavigation} />\n        <Route path='/@:acct/tagged/:tagged?' exact component={AccountNavigation} />\n        <Route path='/@:acct/with_replies' exact component={AccountNavigation} />\n        <Route path='/@:acct/followers' exact component={AccountNavigation} />\n        <Route path='/@:acct/following' exact component={AccountNavigation} />\n        <Route path='/@:acct/media' exact component={AccountNavigation} />\n        <Route component={DefaultNavigation} />\n      </Switch>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport Logo from 'mastodon/components/logo';\nimport { timelinePreview, showTrends } from 'mastodon/initial_state';\nimport ColumnLink from './column_link';\nimport DisabledAccountBanner from './disabled_account_banner';\nimport FollowRequestsColumnLink from './follow_requests_column_link';\nimport ListPanel from './list_panel';\nimport NotificationsCounterIcon from './notifications_counter_icon';\nimport SignInBanner from './sign_in_banner';\nimport NavigationPortal from 'mastodon/components/navigation_portal';\n\nconst messages = defineMessages({\n  home: { id: 'tabs_bar.home', defaultMessage: 'Home' },\n  notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' },\n  explore: { id: 'explore.title', defaultMessage: 'Explore' },\n  local: { id: 'tabs_bar.local_timeline', defaultMessage: 'Local' },\n  federated: { id: 'tabs_bar.federated_timeline', defaultMessage: 'Federated' },\n  direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },\n  favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },\n  bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },\n  lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n  preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n  followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' },\n  about: { id: 'navigation_bar.about', defaultMessage: 'About' },\n  search: { id: 'navigation_bar.search', defaultMessage: 'Search' },\n});\n\nexport default @injectIntl\nclass NavigationPanel extends React.Component {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n    identity: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    intl: PropTypes.object.isRequired,\n  };\n\n  render () {\n    const { intl } = this.props;\n    const { signedIn, disabledAccountId } = this.context.identity;\n\n    return (\n      <div className='navigation-panel'>\n        <div className='navigation-panel__logo'>\n          <Link to='/' className='column-link column-link--logo'><Logo /></Link>\n          <hr />\n        </div>\n\n        {signedIn && (\n          <React.Fragment>\n            <ColumnLink transparent to='/home' icon='home' text={intl.formatMessage(messages.home)} />\n            <ColumnLink transparent to='/notifications' icon={<NotificationsCounterIcon className='column-link__icon' />} text={intl.formatMessage(messages.notifications)} />\n            <FollowRequestsColumnLink />\n          </React.Fragment>\n        )}\n\n        {showTrends ? (\n          <ColumnLink transparent to='/explore' icon='hashtag' text={intl.formatMessage(messages.explore)} />\n        ) : (\n          <ColumnLink transparent to='/search' icon='search' text={intl.formatMessage(messages.search)} />\n        )}\n\n        {(signedIn || timelinePreview) && (\n          <>\n            <ColumnLink transparent to='/public/local' icon='users' text={intl.formatMessage(messages.local)} />\n            <ColumnLink transparent exact to='/public' icon='globe' text={intl.formatMessage(messages.federated)} />\n          </>\n        )}\n\n        {!signedIn && (\n          <div className='navigation-panel__sign-in-banner'>\n            <hr />\n            { disabledAccountId ? <DisabledAccountBanner /> : <SignInBanner /> }\n          </div>\n        )}\n\n        {signedIn && (\n          <React.Fragment>\n            <ColumnLink transparent to='/conversations' icon='at' text={intl.formatMessage(messages.direct)} />\n            <ColumnLink transparent to='/bookmarks' icon='bookmark' text={intl.formatMessage(messages.bookmarks)} />\n            <ColumnLink transparent to='/favourites' icon='star' text={intl.formatMessage(messages.favourites)} />\n            <ColumnLink transparent to='/lists' icon='list-ul' text={intl.formatMessage(messages.lists)} />\n\n            <ListPanel />\n\n            <hr />\n\n            <ColumnLink transparent href='/settings/preferences' icon='cog' text={intl.formatMessage(messages.preferences)} />\n          </React.Fragment>\n        )}\n\n        <div className='navigation-panel__legal'>\n          <hr />\n          <ColumnLink transparent to='/about' icon='ellipsis-h' text={intl.formatMessage(messages.about)} />\n        </div>\n\n        <NavigationPortal />\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport BundleContainer from '../containers/bundle_container';\nimport ColumnLoading from './column_loading';\nimport DrawerLoading from './drawer_loading';\nimport BundleColumnError from './bundle_column_error';\nimport {\n  Compose,\n  Notifications,\n  HomeTimeline,\n  CommunityTimeline,\n  PublicTimeline,\n  HashtagTimeline,\n  DirectTimeline,\n  FavouritedStatuses,\n  BookmarkedStatuses,\n  ListTimeline,\n  Directory,\n} from '../../ui/util/async-components';\nimport ComposePanel from './compose_panel';\nimport NavigationPanel from './navigation_panel';\nimport { supportsPassiveEvents } from 'detect-passive-events';\nimport { scrollRight } from '../../../scroll';\n\nconst componentMap = {\n  'COMPOSE': Compose,\n  'HOME': HomeTimeline,\n  'NOTIFICATIONS': Notifications,\n  'PUBLIC': PublicTimeline,\n  'REMOTE': PublicTimeline,\n  'COMMUNITY': CommunityTimeline,\n  'HASHTAG': HashtagTimeline,\n  'DIRECT': DirectTimeline,\n  'FAVOURITES': FavouritedStatuses,\n  'BOOKMARKS': BookmarkedStatuses,\n  'LIST': ListTimeline,\n  'DIRECTORY': Directory,\n};\n\nexport default class ColumnsArea extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    columns: ImmutablePropTypes.list.isRequired,\n    isModalOpen: PropTypes.bool.isRequired,\n    singleColumn: PropTypes.bool,\n    children: PropTypes.node,\n  };\n\n  // Corresponds to (max-width: $no-gap-breakpoint + 285px - 1px) in SCSS\n  mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 1174px)');\n\n  state = {\n    renderComposePanel: !(this.mediaQuery && this.mediaQuery.matches),\n  };\n\n  componentDidMount() {\n    if (!this.props.singleColumn) {\n      this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);\n    }\n\n    if (this.mediaQuery) {\n      if (this.mediaQuery.addEventListener) {\n        this.mediaQuery.addEventListener('change', this.handleLayoutChange);\n      } else {\n        this.mediaQuery.addListener(this.handleLayoutChange);\n      }\n      this.setState({ renderComposePanel: !this.mediaQuery.matches });\n    }\n\n    this.isRtlLayout = document.getElementsByTagName('body')[0].classList.contains('rtl');\n  }\n\n  componentWillUpdate(nextProps) {\n    if (this.props.singleColumn !== nextProps.singleColumn && nextProps.singleColumn) {\n      this.node.removeEventListener('wheel', this.handleWheel);\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) {\n      this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);\n    }\n  }\n\n  componentWillUnmount () {\n    if (!this.props.singleColumn) {\n      this.node.removeEventListener('wheel', this.handleWheel);\n    }\n\n    if (this.mediaQuery) {\n      if (this.mediaQuery.removeEventListener) {\n        this.mediaQuery.removeEventListener('change', this.handleLayoutChange);\n      } else {\n        this.mediaQuery.removeListener(this.handleLayoutChange);\n      }\n    }\n  }\n\n  handleChildrenContentChange() {\n    if (!this.props.singleColumn) {\n      const modifier = this.isRtlLayout ? -1 : 1;\n      this._interruptScrollAnimation = scrollRight(this.node, (this.node.scrollWidth - window.innerWidth) * modifier);\n    }\n  }\n\n  handleLayoutChange = (e) => {\n    this.setState({ renderComposePanel: !e.matches });\n  };\n\n  handleWheel = () => {\n    if (typeof this._interruptScrollAnimation !== 'function') {\n      return;\n    }\n\n    this._interruptScrollAnimation();\n  };\n\n  setRef = (node) => {\n    this.node = node;\n  };\n\n  renderLoading = columnId => () => {\n    return columnId === 'COMPOSE' ? <DrawerLoading /> : <ColumnLoading multiColumn />;\n  };\n\n  renderError = (props) => {\n    return <BundleColumnError multiColumn errorType='network' {...props} />;\n  };\n\n  render () {\n    const { columns, children, singleColumn, isModalOpen } = this.props;\n    const { renderComposePanel } = this.state;\n\n    if (singleColumn) {\n      return (\n        <div className='columns-area__panels'>\n          <div className='columns-area__panels__pane columns-area__panels__pane--compositional'>\n            <div className='columns-area__panels__pane__inner'>\n              {renderComposePanel && <ComposePanel />}\n            </div>\n          </div>\n\n          <div className='columns-area__panels__main'>\n            <div className='tabs-bar__wrapper'><div id='tabs-bar__portal' /></div>\n            <div className='columns-area columns-area--mobile'>{children}</div>\n          </div>\n\n          <div className='columns-area__panels__pane columns-area__panels__pane--start columns-area__panels__pane--navigational'>\n            <div className='columns-area__panels__pane__inner'>\n              <NavigationPanel />\n            </div>\n          </div>\n        </div>\n      );\n    }\n\n    return (\n      <div className={`columns-area ${ isModalOpen ? 'unscrollable' : '' }`} ref={this.setRef}>\n        {columns.map(column => {\n          const params = column.get('params', null) === null ? null : column.get('params').toJS();\n          const other  = params && params.other ? params.other : {};\n\n          return (\n            <BundleContainer key={column.get('uuid')} fetchComponent={componentMap[column.get('id')]} loading={this.renderLoading(column.get('id'))} error={this.renderError}>\n              {SpecificComponent => <SpecificComponent columnId={column.get('uuid')} params={params} multiColumn {...other} />}\n            </BundleContainer>\n          );\n        })}\n\n        {React.Children.map(children, child => React.cloneElement(child, { multiColumn: true }))}\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnsArea from '../components/columns_area';\n\nconst mapStateToProps = state => ({\n  columns: state.getIn(['settings', 'columns']),\n  isModalOpen: !!state.get('modal').modalType,\n});\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(ColumnsArea);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport IconButton from 'mastodon/components/icon_button';\nimport { Link } from 'react-router-dom';\nimport Avatar from 'mastodon/components/avatar';\nimport DisplayName from 'mastodon/components/display_name';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n  close: { id: 'lightbox.close', defaultMessage: 'Close' },\n});\n\nconst mapStateToProps = (state, { accountId }) => ({\n  account: state.getIn(['accounts', accountId]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Header extends ImmutablePureComponent {\n\n  static propTypes = {\n    accountId: PropTypes.string.isRequired,\n    statusId: PropTypes.string.isRequired,\n    account: ImmutablePropTypes.map.isRequired,\n    onClose: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  render () {\n    const { account, statusId, onClose, intl } = this.props;\n\n    return (\n      <div className='picture-in-picture__header'>\n        <Link to={`/@${account.get('acct')}/${statusId}`} className='picture-in-picture__header__account'>\n          <Avatar account={account} size={36} />\n          <DisplayName account={account} />\n        </Link>\n\n        <IconButton icon='times' onClick={onClose} title={intl.formatMessage(messages.close)} />\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport Video from 'mastodon/features/video';\nimport Audio from 'mastodon/features/audio';\nimport { removePictureInPicture } from 'mastodon/actions/picture_in_picture';\nimport Header from './components/header';\nimport Footer from './components/footer';\n\nconst mapStateToProps = state => ({\n  ...state.get('picture_in_picture'),\n});\n\nexport default @connect(mapStateToProps)\nclass PictureInPicture extends React.Component {\n\n  static propTypes = {\n    statusId: PropTypes.string,\n    accountId: PropTypes.string,\n    type: PropTypes.string,\n    src: PropTypes.string,\n    muted: PropTypes.bool,\n    volume: PropTypes.number,\n    currentTime: PropTypes.number,\n    poster: PropTypes.string,\n    backgroundColor: PropTypes.string,\n    foregroundColor: PropTypes.string,\n    accentColor: PropTypes.string,\n    dispatch: PropTypes.func.isRequired,\n  };\n\n  handleClose = () => {\n    const { dispatch } = this.props;\n    dispatch(removePictureInPicture());\n  };\n\n  render () {\n    const { type, src, currentTime, accountId, statusId } = this.props;\n\n    if (!currentTime) {\n      return null;\n    }\n\n    let player;\n\n    if (type === 'video') {\n      player = (\n        <Video\n          src={src}\n          currentTime={this.props.currentTime}\n          volume={this.props.volume}\n          muted={this.props.muted}\n          autoPlay\n          inline\n          alwaysVisible\n        />\n      );\n    } else if (type === 'audio') {\n      player = (\n        <Audio\n          src={src}\n          currentTime={this.props.currentTime}\n          volume={this.props.volume}\n          muted={this.props.muted}\n          poster={this.props.poster}\n          backgroundColor={this.props.backgroundColor}\n          foregroundColor={this.props.foregroundColor}\n          accentColor={this.props.accentColor}\n          autoPlay\n        />\n      );\n    }\n\n    return (\n      <div className='picture-in-picture'>\n        <Header accountId={accountId} statusId={statusId} onClose={this.handleClose} />\n\n        {player}\n\n        <Footer statusId={statusId} />\n      </div>\n    );\n  }\n\n}\n","import { changeSetting, saveSettings } from './settings';\n\nexport const INTRODUCTION_VERSION = 20181216044202;\n\nexport const closeOnboarding = () => dispatch => {\n  dispatch(changeSetting(['introductionVersion'], INTRODUCTION_VERSION));\n  dispatch(saveSettings());\n};\n","import React from 'react';\nimport Logo from 'mastodon/components/logo';\nimport { Link, withRouter } from 'react-router-dom';\nimport { FormattedMessage } from 'react-intl';\nimport { registrationsOpen, me } from 'mastodon/initial_state';\nimport Avatar from 'mastodon/components/avatar';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { openModal } from 'mastodon/actions/modal';\n\nconst Account = connect(state => ({\n  account: state.getIn(['accounts', me]),\n}))(({ account }) => (\n  <Link to={`/@${account.get('acct')}`} title={account.get('acct')}>\n    <Avatar account={account} size={35} />\n  </Link>\n));\n\nconst mapDispatchToProps = (dispatch) => ({\n  openClosedRegistrationsModal() {\n    dispatch(openModal('CLOSED_REGISTRATIONS'));\n  },\n});\n\nexport default @withRouter\n@connect(null, mapDispatchToProps)\nclass Header extends React.PureComponent {\n\n  static contextTypes = {\n    identity: PropTypes.object,\n  };\n\n  static propTypes = {\n    openClosedRegistrationsModal: PropTypes.func,\n    location: PropTypes.object,\n  };\n\n  render () {\n    const { signedIn } = this.context.identity;\n    const { location, openClosedRegistrationsModal } = this.props;\n\n    let content;\n\n    if (signedIn) {\n      content = (\n        <>\n          {location.pathname !== '/publish' && <Link to='/publish' className='button'><FormattedMessage id='compose_form.publish_form' defaultMessage='Publish' /></Link>}\n          <Account />\n        </>\n      );\n    } else {\n      let signupButton;\n\n      if (registrationsOpen) {\n        signupButton = (\n          <a href='/auth/sign_up' className='button button-tertiary'>\n            <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n          </a>\n        );\n      } else {\n        signupButton = (\n          <button className='button button-tertiary' onClick={openClosedRegistrationsModal}>\n            <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n          </button>\n        );\n      }\n\n      content = (\n        <>\n          <a href='/auth/sign_in' className='button'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Sign in' /></a>\n          {signupButton}\n        </>\n      );\n    }\n\n    return (\n      <div className='ui__header'>\n        <Link to='/' className='ui__header__logo'><Logo /></Link>\n\n        <div className='ui__header__links'>\n          {content}\n        </div>\n      </div>\n    );\n  }\n\n}\n","import classNames from 'classnames';\nimport React from 'react';\nimport { HotKeys } from 'react-hotkeys';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { connect } from 'react-redux';\nimport { Redirect, Route, withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport NotificationsContainer from './containers/notifications_container';\nimport LoadingBarContainer from './containers/loading_bar_container';\nimport ModalContainer from './containers/modal_container';\nimport { layoutFromWindow } from 'mastodon/is_mobile';\nimport { debounce } from 'lodash';\nimport { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../actions/compose';\nimport { expandHomeTimeline } from '../../actions/timelines';\nimport { expandNotifications } from '../../actions/notifications';\nimport { fetchServer } from '../../actions/server';\nimport { clearHeight } from '../../actions/height_cache';\nimport { focusApp, unfocusApp, changeLayout } from 'mastodon/actions/app';\nimport { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers';\nimport { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';\nimport BundleColumnError from './components/bundle_column_error';\nimport UploadArea from './components/upload_area';\nimport ColumnsAreaContainer from './containers/columns_area_container';\nimport PictureInPicture from 'mastodon/features/picture_in_picture';\nimport {\n  Compose,\n  Status,\n  GettingStarted,\n  KeyboardShortcuts,\n  PublicTimeline,\n  CommunityTimeline,\n  AccountTimeline,\n  AccountGallery,\n  HomeTimeline,\n  Followers,\n  Following,\n  Reblogs,\n  Favourites,\n  DirectTimeline,\n  HashtagTimeline,\n  Notifications,\n  FollowRequests,\n  FavouritedStatuses,\n  BookmarkedStatuses,\n  FollowedTags,\n  ListTimeline,\n  Blocks,\n  DomainBlocks,\n  Mutes,\n  PinnedStatuses,\n  Lists,\n  Directory,\n  Explore,\n  FollowRecommendations,\n  About,\n  PrivacyPolicy,\n} from './util/async-components';\nimport initialState, { me, owner, singleUserMode, showTrends, trendsAsLanding } from '../../initial_state';\nimport { closeOnboarding, INTRODUCTION_VERSION } from 'mastodon/actions/onboarding';\nimport Header from './components/header';\n\n// Dummy import, to make sure that <Status /> ends up in the application bundle.\n// Without this it ends up in ~8 very commonly used bundles.\nimport '../../components/status';\n\nconst messages = defineMessages({\n  beforeUnload: { id: 'ui.beforeunload', defaultMessage: 'Your draft will be lost if you leave Mastodon.' },\n});\n\nconst mapStateToProps = state => ({\n  layout: state.getIn(['meta', 'layout']),\n  isComposing: state.getIn(['compose', 'is_composing']),\n  hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0,\n  hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,\n  canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4,\n  dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,\n  firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION,\n  username: state.getIn(['accounts', me, 'username']),\n});\n\nconst keyMap = {\n  help: '?',\n  new: 'n',\n  search: 's',\n  forceNew: 'option+n',\n  toggleComposeSpoilers: 'option+x',\n  focusColumn: ['1', '2', '3', '4', '5', '6', '7', '8', '9'],\n  reply: 'r',\n  favourite: 'f',\n  boost: 'b',\n  mention: 'm',\n  open: ['enter', 'o'],\n  openProfile: 'p',\n  moveDown: ['down', 'j'],\n  moveUp: ['up', 'k'],\n  back: 'backspace',\n  goToHome: 'g h',\n  goToNotifications: 'g n',\n  goToLocal: 'g l',\n  goToFederated: 'g t',\n  goToDirect: 'g d',\n  goToStart: 'g s',\n  goToFavourites: 'g f',\n  goToPinned: 'g p',\n  goToProfile: 'g u',\n  goToBlocked: 'g b',\n  goToMuted: 'g m',\n  goToRequests: 'g r',\n  toggleHidden: 'x',\n  toggleSensitive: 'h',\n  openMedia: 'e',\n};\n\nclass SwitchingColumnsArea extends React.PureComponent {\n\n  static contextTypes = {\n    identity: PropTypes.object,\n  };\n\n  static propTypes = {\n    children: PropTypes.node,\n    location: PropTypes.object,\n    mobile: PropTypes.bool,\n  };\n\n  componentWillMount () {\n    if (this.props.mobile) {\n      document.body.classList.toggle('layout-single-column', true);\n      document.body.classList.toggle('layout-multiple-columns', false);\n    } else {\n      document.body.classList.toggle('layout-single-column', false);\n      document.body.classList.toggle('layout-multiple-columns', true);\n    }\n  }\n\n  componentDidUpdate (prevProps) {\n    if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) {\n      this.node.handleChildrenContentChange();\n    }\n\n    if (prevProps.mobile !== this.props.mobile) {\n      document.body.classList.toggle('layout-single-column', this.props.mobile);\n      document.body.classList.toggle('layout-multiple-columns', !this.props.mobile);\n    }\n  }\n\n  setRef = c => {\n    if (c) {\n      this.node = c;\n    }\n  };\n\n  render () {\n    const { children, mobile } = this.props;\n    const { signedIn } = this.context.identity;\n\n    let redirect;\n\n    if (signedIn) {\n      if (mobile) {\n        redirect = <Redirect from='/' to='/home' exact />;\n      } else {\n        redirect = <Redirect from='/' to='/getting-started' exact />;\n      }\n    } else if (singleUserMode && owner && initialState?.accounts[owner]) {\n      redirect = <Redirect from='/' to={`/@${initialState.accounts[owner].username}`} exact />;\n    } else if (showTrends && trendsAsLanding) {\n      redirect = <Redirect from='/' to='/explore' exact />;\n    } else {\n      redirect = <Redirect from='/' to='/about' exact />;\n    }\n\n    return (\n      <ColumnsAreaContainer ref={this.setRef} singleColumn={mobile}>\n        <WrappedSwitch>\n          {redirect}\n\n          <WrappedRoute path='/getting-started' component={GettingStarted} content={children} />\n          <WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} />\n          <WrappedRoute path='/about' component={About} content={children} />\n          <WrappedRoute path='/privacy-policy' component={PrivacyPolicy} content={children} />\n\n          <WrappedRoute path={['/home', '/timelines/home']} component={HomeTimeline} content={children} />\n          <WrappedRoute path={['/public', '/timelines/public']} exact component={PublicTimeline} content={children} />\n          <WrappedRoute path={['/public/local', '/timelines/public/local']} exact component={CommunityTimeline} content={children} />\n          <WrappedRoute path={['/conversations', '/timelines/direct']} component={DirectTimeline} content={children} />\n          <WrappedRoute path='/tags/:id' component={HashtagTimeline} content={children} />\n          <WrappedRoute path='/lists/:id' component={ListTimeline} content={children} />\n          <WrappedRoute path='/notifications' component={Notifications} content={children} />\n          <WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} />\n\n          <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} />\n          <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} />\n\n          <WrappedRoute path='/start' component={FollowRecommendations} content={children} />\n          <WrappedRoute path='/directory' component={Directory} content={children} />\n          <WrappedRoute path={['/explore', '/search']} component={Explore} content={children} />\n          <WrappedRoute path={['/publish', '/statuses/new']} component={Compose} content={children} />\n\n          <WrappedRoute path={['/@:acct', '/accounts/:id']} exact component={AccountTimeline} content={children} />\n          <WrappedRoute path='/@:acct/tagged/:tagged?' exact component={AccountTimeline} content={children} />\n          <WrappedRoute path={['/@:acct/with_replies', '/accounts/:id/with_replies']} component={AccountTimeline} content={children} componentParams={{ withReplies: true }} />\n          <WrappedRoute path={['/accounts/:id/followers', '/users/:acct/followers', '/@:acct/followers']} component={Followers} content={children} />\n          <WrappedRoute path={['/accounts/:id/following', '/users/:acct/following', '/@:acct/following']} component={Following} content={children} />\n          <WrappedRoute path={['/@:acct/media', '/accounts/:id/media']} component={AccountGallery} content={children} />\n          <WrappedRoute path='/@:acct/:statusId' exact component={Status} content={children} />\n          <WrappedRoute path='/@:acct/:statusId/reblogs' component={Reblogs} content={children} />\n          <WrappedRoute path='/@:acct/:statusId/favourites' component={Favourites} content={children} />\n\n          {/* Legacy routes, cannot be easily factored with other routes because they share a param name */}\n          <WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} />\n          <WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} />\n          <WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} />\n          <WrappedRoute path='/statuses/:statusId/reblogs' component={Reblogs} content={children} />\n          <WrappedRoute path='/statuses/:statusId/favourites' component={Favourites} content={children} />\n\n          <WrappedRoute path='/follow_requests' component={FollowRequests} content={children} />\n          <WrappedRoute path='/blocks' component={Blocks} content={children} />\n          <WrappedRoute path='/domain_blocks' component={DomainBlocks} content={children} />\n          <WrappedRoute path='/followed_tags' component={FollowedTags} content={children} />\n          <WrappedRoute path='/mutes' component={Mutes} content={children} />\n          <WrappedRoute path='/lists' component={Lists} content={children} />\n\n          <Route component={BundleColumnError} />\n        </WrappedSwitch>\n      </ColumnsAreaContainer>\n    );\n  }\n\n}\n\nexport default @connect(mapStateToProps)\n@injectIntl\n@withRouter\nclass UI extends React.PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n    identity: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    children: PropTypes.node,\n    isComposing: PropTypes.bool,\n    hasComposingText: PropTypes.bool,\n    hasMediaAttachments: PropTypes.bool,\n    canUploadMore: PropTypes.bool,\n    location: PropTypes.object,\n    intl: PropTypes.object.isRequired,\n    dropdownMenuIsOpen: PropTypes.bool,\n    layout: PropTypes.string.isRequired,\n    firstLaunch: PropTypes.bool,\n    username: PropTypes.string,\n  };\n\n  state = {\n    draggingOver: false,\n  };\n\n  handleBeforeUnload = e => {\n    const { intl, dispatch, isComposing, hasComposingText, hasMediaAttachments } = this.props;\n\n    dispatch(synchronouslySubmitMarkers());\n\n    if (isComposing && (hasComposingText || hasMediaAttachments)) {\n      e.preventDefault();\n      // Setting returnValue to any string causes confirmation dialog.\n      // Many browsers no longer display this text to users,\n      // but we set user-friendly message for other browsers, e.g. Edge.\n      e.returnValue = intl.formatMessage(messages.beforeUnload);\n    }\n  };\n\n  handleWindowFocus = () => {\n    this.props.dispatch(focusApp());\n    this.props.dispatch(submitMarkers({ immediate: true }));\n  };\n\n  handleWindowBlur = () => {\n    this.props.dispatch(unfocusApp());\n  };\n\n  handleDragEnter = (e) => {\n    e.preventDefault();\n\n    if (!this.dragTargets) {\n      this.dragTargets = [];\n    }\n\n    if (this.dragTargets.indexOf(e.target) === -1) {\n      this.dragTargets.push(e.target);\n    }\n\n    if (e.dataTransfer && Array.from(e.dataTransfer.types).includes('Files') && this.props.canUploadMore && this.context.identity.signedIn) {\n      this.setState({ draggingOver: true });\n    }\n  };\n\n  handleDragOver = (e) => {\n    if (this.dataTransferIsText(e.dataTransfer)) return false;\n\n    e.preventDefault();\n    e.stopPropagation();\n\n    try {\n      e.dataTransfer.dropEffect = 'copy';\n    } catch (err) {\n\n    }\n\n    return false;\n  };\n\n  handleDrop = (e) => {\n    if (this.dataTransferIsText(e.dataTransfer)) return;\n\n    e.preventDefault();\n\n    this.setState({ draggingOver: false });\n    this.dragTargets = [];\n\n    if (e.dataTransfer && e.dataTransfer.files.length >= 1 && this.props.canUploadMore && this.context.identity.signedIn) {\n      this.props.dispatch(uploadCompose(e.dataTransfer.files));\n    }\n  };\n\n  handleDragLeave = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.dragTargets = this.dragTargets.filter(el => el !== e.target && this.node.contains(el));\n\n    if (this.dragTargets.length > 0) {\n      return;\n    }\n\n    this.setState({ draggingOver: false });\n  };\n\n  dataTransferIsText = (dataTransfer) => {\n    return (dataTransfer && Array.from(dataTransfer.types).filter((type) => type === 'text/plain').length === 1);\n  };\n\n  closeUploadModal = () => {\n    this.setState({ draggingOver: false });\n  };\n\n  handleServiceWorkerPostMessage = ({ data }) => {\n    if (data.type === 'navigate') {\n      this.context.router.history.push(data.path);\n    } else {\n      console.warn('Unknown message type:', data.type);\n    }\n  };\n\n  handleLayoutChange = debounce(() => {\n    this.props.dispatch(clearHeight()); // The cached heights are no longer accurate, invalidate\n  }, 500, {\n    trailing: true,\n  });\n\n  handleResize = () => {\n    const layout = layoutFromWindow();\n\n    if (layout !== this.props.layout) {\n      this.handleLayoutChange.cancel();\n      this.props.dispatch(changeLayout(layout));\n    } else {\n      this.handleLayoutChange();\n    }\n  };\n\n  componentDidMount () {\n    const { signedIn } = this.context.identity;\n\n    window.addEventListener('focus', this.handleWindowFocus, false);\n    window.addEventListener('blur', this.handleWindowBlur, false);\n    window.addEventListener('beforeunload', this.handleBeforeUnload, false);\n    window.addEventListener('resize', this.handleResize, { passive: true });\n\n    document.addEventListener('dragenter', this.handleDragEnter, false);\n    document.addEventListener('dragover', this.handleDragOver, false);\n    document.addEventListener('drop', this.handleDrop, false);\n    document.addEventListener('dragleave', this.handleDragLeave, false);\n    document.addEventListener('dragend', this.handleDragEnd, false);\n\n    if ('serviceWorker' in  navigator) {\n      navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerPostMessage);\n    }\n\n    // On first launch, redirect to the follow recommendations page\n    if (signedIn && this.props.firstLaunch) {\n      this.context.router.history.replace('/start');\n      this.props.dispatch(closeOnboarding());\n    }\n\n    if (signedIn) {\n      this.props.dispatch(fetchMarkers());\n      this.props.dispatch(expandHomeTimeline());\n      this.props.dispatch(expandNotifications());\n\n      setTimeout(() => this.props.dispatch(fetchServer()), 3000);\n    }\n\n    this.hotkeys.__mousetrap__.stopCallback = (e, element) => {\n      return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);\n    };\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('focus', this.handleWindowFocus);\n    window.removeEventListener('blur', this.handleWindowBlur);\n    window.removeEventListener('beforeunload', this.handleBeforeUnload);\n    window.removeEventListener('resize', this.handleResize);\n\n    document.removeEventListener('dragenter', this.handleDragEnter);\n    document.removeEventListener('dragover', this.handleDragOver);\n    document.removeEventListener('drop', this.handleDrop);\n    document.removeEventListener('dragleave', this.handleDragLeave);\n    document.removeEventListener('dragend', this.handleDragEnd);\n  }\n\n  setRef = c => {\n    this.node = c;\n  };\n\n  handleHotkeyNew = e => {\n    e.preventDefault();\n\n    const element = this.node.querySelector('.compose-form__autosuggest-wrapper textarea');\n\n    if (element) {\n      element.focus();\n    }\n  };\n\n  handleHotkeySearch = e => {\n    e.preventDefault();\n\n    const element = this.node.querySelector('.search__input');\n\n    if (element) {\n      element.focus();\n    }\n  };\n\n  handleHotkeyForceNew = e => {\n    this.handleHotkeyNew(e);\n    this.props.dispatch(resetCompose());\n  };\n\n  handleHotkeyToggleComposeSpoilers = e => {\n    e.preventDefault();\n    this.props.dispatch(changeComposeSpoilerness());\n  };\n\n  handleHotkeyFocusColumn = e => {\n    const index  = (e.key * 1) + 1; // First child is drawer, skip that\n    const column = this.node.querySelector(`.column:nth-child(${index})`);\n    if (!column) return;\n    const container = column.querySelector('.scrollable');\n\n    if (container) {\n      const status = container.querySelector('.focusable');\n\n      if (status) {\n        if (container.scrollTop > status.offsetTop) {\n          status.scrollIntoView(true);\n        }\n        status.focus();\n      }\n    }\n  };\n\n  handleHotkeyBack = () => {\n    if (window.history && window.history.state) {\n      this.context.router.history.goBack();\n    } else {\n      this.context.router.history.push('/');\n    }\n  };\n\n  setHotkeysRef = c => {\n    this.hotkeys = c;\n  };\n\n  handleHotkeyToggleHelp = () => {\n    if (this.props.location.pathname === '/keyboard-shortcuts') {\n      this.context.router.history.goBack();\n    } else {\n      this.context.router.history.push('/keyboard-shortcuts');\n    }\n  };\n\n  handleHotkeyGoToHome = () => {\n    this.context.router.history.push('/home');\n  };\n\n  handleHotkeyGoToNotifications = () => {\n    this.context.router.history.push('/notifications');\n  };\n\n  handleHotkeyGoToLocal = () => {\n    this.context.router.history.push('/public/local');\n  };\n\n  handleHotkeyGoToFederated = () => {\n    this.context.router.history.push('/public');\n  };\n\n  handleHotkeyGoToDirect = () => {\n    this.context.router.history.push('/conversations');\n  };\n\n  handleHotkeyGoToStart = () => {\n    this.context.router.history.push('/getting-started');\n  };\n\n  handleHotkeyGoToFavourites = () => {\n    this.context.router.history.push('/favourites');\n  };\n\n  handleHotkeyGoToPinned = () => {\n    this.context.router.history.push('/pinned');\n  };\n\n  handleHotkeyGoToProfile = () => {\n    this.context.router.history.push(`/@${this.props.username}`);\n  };\n\n  handleHotkeyGoToBlocked = () => {\n    this.context.router.history.push('/blocks');\n  };\n\n  handleHotkeyGoToMuted = () => {\n    this.context.router.history.push('/mutes');\n  };\n\n  handleHotkeyGoToRequests = () => {\n    this.context.router.history.push('/follow_requests');\n  };\n\n  render () {\n    const { draggingOver } = this.state;\n    const { children, isComposing, location, dropdownMenuIsOpen, layout } = this.props;\n\n    const handlers = {\n      help: this.handleHotkeyToggleHelp,\n      new: this.handleHotkeyNew,\n      search: this.handleHotkeySearch,\n      forceNew: this.handleHotkeyForceNew,\n      toggleComposeSpoilers: this.handleHotkeyToggleComposeSpoilers,\n      focusColumn: this.handleHotkeyFocusColumn,\n      back: this.handleHotkeyBack,\n      goToHome: this.handleHotkeyGoToHome,\n      goToNotifications: this.handleHotkeyGoToNotifications,\n      goToLocal: this.handleHotkeyGoToLocal,\n      goToFederated: this.handleHotkeyGoToFederated,\n      goToDirect: this.handleHotkeyGoToDirect,\n      goToStart: this.handleHotkeyGoToStart,\n      goToFavourites: this.handleHotkeyGoToFavourites,\n      goToPinned: this.handleHotkeyGoToPinned,\n      goToProfile: this.handleHotkeyGoToProfile,\n      goToBlocked: this.handleHotkeyGoToBlocked,\n      goToMuted: this.handleHotkeyGoToMuted,\n      goToRequests: this.handleHotkeyGoToRequests,\n    };\n\n    return (\n      <HotKeys keyMap={keyMap} handlers={handlers} ref={this.setHotkeysRef} attach={window} focused>\n        <div className={classNames('ui', { 'is-composing': isComposing })} ref={this.setRef} style={{ pointerEvents: dropdownMenuIsOpen ? 'none' : null }}>\n          <Header />\n\n          <SwitchingColumnsArea location={location} mobile={layout === 'mobile' || layout === 'single-column'}>\n            {children}\n          </SwitchingColumnsArea>\n\n          {layout !== 'mobile' && <PictureInPicture />}\n          <NotificationsContainer />\n          <LoadingBarContainer className='loading-bar' />\n          <ModalContainer />\n          <UploadArea active={draggingOver} onClose={this.closeUploadModal} />\n        </div>\n      </HotKeys>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport { version, source_url } from 'mastodon/initial_state';\nimport StackTrace from 'stacktrace-js';\nimport { Helmet } from 'react-helmet';\n\nexport default class ErrorBoundary extends React.PureComponent {\n\n  static propTypes = {\n    children: PropTypes.node,\n  };\n\n  state = {\n    hasError: false,\n    errorMessage: undefined,\n    stackTrace: undefined,\n    mappedStackTrace: undefined,\n    componentStack: undefined,\n  };\n\n  componentDidCatch (error, info) {\n    this.setState({\n      hasError: true,\n      errorMessage: error.toString(),\n      stackTrace: error.stack,\n      componentStack: info && info.componentStack,\n      mappedStackTrace: undefined,\n    });\n\n    StackTrace.fromError(error).then((stackframes) => {\n      this.setState({\n        mappedStackTrace: stackframes.map((sf) => sf.toString()).join('\\n'),\n      });\n    }).catch(() => {\n      this.setState({\n        mappedStackTrace: undefined,\n      });\n    });\n  }\n\n  handleCopyStackTrace = () => {\n    const { errorMessage, stackTrace, mappedStackTrace } = this.state;\n    const textarea = document.createElement('textarea');\n\n    let contents = [errorMessage, stackTrace];\n    if (mappedStackTrace) {\n      contents.push(mappedStackTrace);\n    }\n\n    textarea.textContent    = contents.join('\\n\\n\\n');\n    textarea.style.position = 'fixed';\n\n    document.body.appendChild(textarea);\n\n    try {\n      textarea.select();\n      document.execCommand('copy');\n    } catch (e) {\n\n    } finally {\n      document.body.removeChild(textarea);\n    }\n\n    this.setState({ copied: true });\n    setTimeout(() => this.setState({ copied: false }), 700);\n  };\n\n  render() {\n    const { hasError, copied, errorMessage } = this.state;\n\n    if (!hasError) {\n      return this.props.children;\n    }\n\n    const likelyBrowserAddonIssue = errorMessage && errorMessage.includes('NotFoundError');\n\n    return (\n      <div className='error-boundary'>\n        <div>\n          <p className='error-boundary__error'>\n            { likelyBrowserAddonIssue ? (\n              <FormattedMessage id='error.unexpected_crash.explanation_addons' defaultMessage='This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.' />\n            ) : (\n              <FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' />\n            )}\n          </p>\n\n          <p>\n            { likelyBrowserAddonIssue ? (\n              <FormattedMessage id='error.unexpected_crash.next_steps_addons' defaultMessage='Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' />\n            ) : (\n              <FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' />\n            )}\n          </p>\n\n          <p className='error-boundary__footer'>Mastodon v{version} · <a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='errors.unexpected_crash.report_issue' defaultMessage='Report issue' /></a> · <button onClick={this.handleCopyStackTrace} className={copied ? 'copied' : ''}><FormattedMessage id='errors.unexpected_crash.copy_stacktrace' defaultMessage='Copy stacktrace to clipboard' /></button></p>\n        </div>\n\n        <Helmet>\n          <meta name='robots' content='noindex' />\n        </Helmet>\n      </div>\n    );\n  }\n\n}\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { Helmet } from 'react-helmet';\nimport { IntlProvider, addLocaleData } from 'react-intl';\nimport { Provider as ReduxProvider } from 'react-redux';\nimport { BrowserRouter, Route } from 'react-router-dom';\nimport { ScrollContext } from 'react-router-scroll-4';\nimport configureStore from 'mastodon/store/configureStore';\nimport UI from 'mastodon/features/ui';\nimport { fetchCustomEmojis } from 'mastodon/actions/custom_emojis';\nimport { hydrateStore } from 'mastodon/actions/store';\nimport { connectUserStream } from 'mastodon/actions/streaming';\nimport ErrorBoundary from 'mastodon/components/error_boundary';\nimport initialState, { title as siteTitle } from 'mastodon/initial_state';\nimport { getLocale } from 'mastodon/locales';\n\nconst { localeData, messages } = getLocale();\naddLocaleData(localeData);\n\nconst title = process.env.NODE_ENV === 'production' ? siteTitle : `${siteTitle} (Dev)`;\n\nexport const store = configureStore();\nconst hydrateAction = hydrateStore(initialState);\n\nstore.dispatch(hydrateAction);\nif (initialState.meta.me) {\n  store.dispatch(fetchCustomEmojis());\n}\n\nconst createIdentityContext = state => ({\n  signedIn: !!state.meta.me,\n  accountId: state.meta.me,\n  disabledAccountId: state.meta.disabled_account_id,\n  accessToken: state.meta.access_token,\n  permissions: state.role ? state.role.permissions : 0,\n});\n\nexport default class Mastodon extends React.PureComponent {\n\n  static propTypes = {\n    locale: PropTypes.string.isRequired,\n  };\n\n  static childContextTypes = {\n    identity: PropTypes.shape({\n      signedIn: PropTypes.bool.isRequired,\n      accountId: PropTypes.string,\n      disabledAccountId: PropTypes.string,\n      accessToken: PropTypes.string,\n    }).isRequired,\n  };\n\n  identity = createIdentityContext(initialState);\n\n  getChildContext() {\n    return {\n      identity: this.identity,\n    };\n  }\n\n  componentDidMount() {\n    if (this.identity.signedIn) {\n      this.disconnect = store.dispatch(connectUserStream());\n    }\n  }\n\n  componentWillUnmount () {\n    if (this.disconnect) {\n      this.disconnect();\n      this.disconnect = null;\n    }\n  }\n\n  shouldUpdateScroll (prevRouterProps, { location }) {\n    return !(location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey);\n  }\n\n  render () {\n    const { locale } = this.props;\n\n    return (\n      <IntlProvider locale={locale} messages={messages}>\n        <ReduxProvider store={store}>\n          <ErrorBoundary>\n            <BrowserRouter>\n              <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}>\n                <Route path='/' component={UI} />\n              </ScrollContext>\n            </BrowserRouter>\n\n            <Helmet defaultTitle={title} titleTemplate={`%s - ${title}`} />\n          </ErrorBoundary>\n        </ReduxProvider>\n      </IntlProvider>\n    );\n  }\n\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { setupBrowserNotifications } from 'mastodon/actions/notifications';\nimport Mastodon, { store } from 'mastodon/containers/mastodon';\nimport { me } from 'mastodon/initial_state';\nimport ready from 'mastodon/ready';\n\nconst perf = require('mastodon/performance');\n\n/**\n * @returns {Promise<void>}\n */\nfunction main() {\n  perf.start('main()');\n\n  return ready(async () => {\n    const mountNode = document.getElementById('mastodon');\n    const props = JSON.parse(mountNode.getAttribute('data-props'));\n\n    ReactDOM.render(<Mastodon {...props} />, mountNode);\n    store.dispatch(setupBrowserNotifications());\n\n    if (process.env.NODE_ENV === 'production' && me && 'serviceWorker' in navigator) {\n      const { Workbox } = await import('workbox-window');\n      const wb = new Workbox('/sw.js');\n      /** @type {ServiceWorkerRegistration} */\n      let registration;\n\n      try {\n        registration = await wb.register();\n      } catch (err) {\n        console.error(err);\n      }\n\n      if (registration) {\n        const registerPushNotifications = await import('mastodon/actions/push_notifications');\n\n        store.dispatch(registerPushNotifications.register());\n      }\n    }\n\n    perf.stop('main()');\n  });\n}\n\nexport default main;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port;\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n  var joined = aPath.charAt(0) === '/' ? aPath : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\nvar supportsNullProto = function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}();\nfunction identity(s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n  var length = s.length;\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n  if (s.charCodeAt(length - 1) !== 95 /* '_' */ || s.charCodeAt(length - 2) !== 95 /* '_' */ || s.charCodeAt(length - 3) !== 111 /* 'o' */ || s.charCodeAt(length - 4) !== 116 /* 't' */ || s.charCodeAt(length - 5) !== 111 /* 'o' */ || s.charCodeAt(length - 6) !== 114 /* 'r' */ || s.charCodeAt(length - 7) !== 112 /* 'p' */ || s.charCodeAt(length - 8) !== 95 /* '_' */ || s.charCodeAt(length - 9) !== 95 /* '_' */) {\n    return false;\n  }\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n  cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stackframe', [], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.StackFrame = factory();\n  }\n})(this, function () {\n  'use strict';\n\n  function _isNumber(n) {\n    return !isNaN(parseFloat(n)) && isFinite(n);\n  }\n  function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n  }\n  function _getter(p) {\n    return function () {\n      return this[p];\n    };\n  }\n  var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n  var numericProps = ['columnNumber', 'lineNumber'];\n  var stringProps = ['fileName', 'functionName', 'source'];\n  var arrayProps = ['args'];\n  var objectProps = ['evalOrigin'];\n  var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n  function StackFrame(obj) {\n    if (!obj) return;\n    for (var i = 0; i < props.length; i++) {\n      if (obj[props[i]] !== undefined) {\n        this['set' + _capitalize(props[i])](obj[props[i]]);\n      }\n    }\n  }\n  StackFrame.prototype = {\n    getArgs: function () {\n      return this.args;\n    },\n    setArgs: function (v) {\n      if (Object.prototype.toString.call(v) !== '[object Array]') {\n        throw new TypeError('Args must be an Array');\n      }\n      this.args = v;\n    },\n    getEvalOrigin: function () {\n      return this.evalOrigin;\n    },\n    setEvalOrigin: function (v) {\n      if (v instanceof StackFrame) {\n        this.evalOrigin = v;\n      } else if (v instanceof Object) {\n        this.evalOrigin = new StackFrame(v);\n      } else {\n        throw new TypeError('Eval Origin must be an Object or StackFrame');\n      }\n    },\n    toString: function () {\n      var fileName = this.getFileName() || '';\n      var lineNumber = this.getLineNumber() || '';\n      var columnNumber = this.getColumnNumber() || '';\n      var functionName = this.getFunctionName() || '';\n      if (this.getIsEval()) {\n        if (fileName) {\n          return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n        }\n        return '[eval]:' + lineNumber + ':' + columnNumber;\n      }\n      if (functionName) {\n        return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n      }\n      return fileName + ':' + lineNumber + ':' + columnNumber;\n    }\n  };\n  StackFrame.fromString = function StackFrame$$fromString(str) {\n    var argsStartIndex = str.indexOf('(');\n    var argsEndIndex = str.lastIndexOf(')');\n    var functionName = str.substring(0, argsStartIndex);\n    var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n    var locationString = str.substring(argsEndIndex + 1);\n    if (locationString.indexOf('@') === 0) {\n      var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n      var fileName = parts[1];\n      var lineNumber = parts[2];\n      var columnNumber = parts[3];\n    }\n    return new StackFrame({\n      functionName: functionName,\n      args: args || undefined,\n      fileName: fileName,\n      lineNumber: lineNumber || undefined,\n      columnNumber: columnNumber || undefined\n    });\n  };\n  for (var i = 0; i < booleanProps.length; i++) {\n    StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n    StackFrame.prototype['set' + _capitalize(booleanProps[i])] = function (p) {\n      return function (v) {\n        this[p] = Boolean(v);\n      };\n    }(booleanProps[i]);\n  }\n  for (var j = 0; j < numericProps.length; j++) {\n    StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n    StackFrame.prototype['set' + _capitalize(numericProps[j])] = function (p) {\n      return function (v) {\n        if (!_isNumber(v)) {\n          throw new TypeError(p + ' must be a Number');\n        }\n        this[p] = Number(v);\n      };\n    }(numericProps[j]);\n  }\n  for (var k = 0; k < stringProps.length; k++) {\n    StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n    StackFrame.prototype['set' + _capitalize(stringProps[k])] = function (p) {\n      return function (v) {\n        this[p] = String(v);\n      };\n    }(stringProps[k]);\n  }\n  return StackFrame;\n});","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n  } else {\n    root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n  }\n})(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n  var _options = {\n    filter: function (stackframe) {\n      // Filter out stackframes for this library by default\n      return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n    },\n    sourceCache: {}\n  };\n  var _generateError = function StackTrace$$GenerateError() {\n    try {\n      // Error must be thrown to get stack in IE\n      throw new Error();\n    } catch (err) {\n      return err;\n    }\n  };\n\n  /**\n   * Merge 2 given Objects. If a conflict occurs the second object wins.\n   * Does not do deep merges.\n   *\n   * @param {Object} first base object\n   * @param {Object} second overrides\n   * @returns {Object} merged first and second\n   * @private\n   */\n  function _merge(first, second) {\n    var target = {};\n    [first, second].forEach(function (obj) {\n      for (var prop in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n          target[prop] = obj[prop];\n        }\n      }\n      return target;\n    });\n    return target;\n  }\n  function _isShapedLikeParsableError(err) {\n    return err.stack || err['opera#sourceloc'];\n  }\n  function _filtered(stackframes, filter) {\n    if (typeof filter === 'function') {\n      return stackframes.filter(filter);\n    }\n    return stackframes;\n  }\n  return {\n    /**\n     * Get a backtrace from invocation point.\n     *\n     * @param {Object} opts\n     * @returns {Array} of StackFrame\n     */\n    get: function StackTrace$$get(opts) {\n      var err = _generateError();\n      return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n    },\n    /**\n     * Get a backtrace from invocation point.\n     * IMPORTANT: Does not handle source maps or guess function names!\n     *\n     * @param {Object} opts\n     * @returns {Array} of StackFrame\n     */\n    getSync: function StackTrace$$getSync(opts) {\n      opts = _merge(_options, opts);\n      var err = _generateError();\n      var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n      return _filtered(stack, opts.filter);\n    },\n    /**\n     * Given an error object, parse it.\n     *\n     * @param {Error} error object\n     * @param {Object} opts\n     * @returns {Promise} for Array[StackFrame}\n     */\n    fromError: function StackTrace$$fromError(error, opts) {\n      opts = _merge(_options, opts);\n      var gps = new StackTraceGPS(opts);\n      return new Promise(function (resolve) {\n        var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n        resolve(Promise.all(stackframes.map(function (sf) {\n          return new Promise(function (resolve) {\n            function resolveOriginal() {\n              resolve(sf);\n            }\n            gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n          });\n        })));\n      }.bind(this));\n    },\n    /**\n     * Use StackGenerator to generate a backtrace.\n     *\n     * @param {Object} opts\n     * @returns {Promise} of Array[StackFrame]\n     */\n    generateArtificially: function StackTrace$$generateArtificially(opts) {\n      opts = _merge(_options, opts);\n      var stackFrames = StackGenerator.backtrace(opts);\n      if (typeof opts.filter === 'function') {\n        stackFrames = stackFrames.filter(opts.filter);\n      }\n      return Promise.resolve(stackFrames);\n    },\n    /**\n     * Given a function, wrap it such that invocations trigger a callback that\n     * is called with a stack trace.\n     *\n     * @param {Function} fn to be instrumented\n     * @param {Function} callback function to call with a stack trace on invocation\n     * @param {Function} errback optional function to call with error if unable to get stack trace.\n     * @param {Object} thisArg optional context object (e.g. window)\n     */\n    instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n      if (typeof fn !== 'function') {\n        throw new Error('Cannot instrument non-function object');\n      } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n        // Already instrumented, return given Function\n        return fn;\n      }\n      var instrumented = function StackTrace$$instrumented() {\n        try {\n          this.get().then(callback, errback)['catch'](errback);\n          return fn.apply(thisArg || this, arguments);\n        } catch (e) {\n          if (_isShapedLikeParsableError(e)) {\n            this.fromError(e).then(callback, errback)['catch'](errback);\n          }\n          throw e;\n        }\n      }.bind(this);\n      instrumented.__stacktraceOriginalFn = fn;\n      return instrumented;\n    },\n    /**\n     * Given a function that has been instrumented,\n     * revert the function to it's original (non-instrumented) state.\n     *\n     * @param {Function} fn to de-instrument\n     */\n    deinstrument: function StackTrace$$deinstrument(fn) {\n      if (typeof fn !== 'function') {\n        throw new Error('Cannot de-instrument non-function object');\n      } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n        return fn.__stacktraceOriginalFn;\n      } else {\n        // Function not instrumented, return original\n        return fn;\n      }\n    },\n    /**\n     * Given an error message and Array of StackFrames, serialize and POST to given URL.\n     *\n     * @param {Array} stackframes\n     * @param {String} url\n     * @param {String} errorMsg\n     * @param {Object} requestOptions\n     */\n    report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) {\n      return new Promise(function (resolve, reject) {\n        var req = new XMLHttpRequest();\n        req.onerror = reject;\n        req.onreadystatechange = function onreadystatechange() {\n          if (req.readyState === 4) {\n            if (req.status >= 200 && req.status < 400) {\n              resolve(req.responseText);\n            } else {\n              reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n            }\n          }\n        };\n        req.open('post', url);\n\n        // Set request headers\n        req.setRequestHeader('Content-Type', 'application/json');\n        if (requestOptions && typeof requestOptions.headers === 'object') {\n          var headers = requestOptions.headers;\n          for (var header in headers) {\n            if (Object.prototype.hasOwnProperty.call(headers, header)) {\n              req.setRequestHeader(header, headers[header]);\n            }\n          }\n        }\n        var reportPayload = {\n          stack: stackframes\n        };\n        if (errorMsg !== undefined && errorMsg !== null) {\n          reportPayload.message = errorMsg;\n        }\n        req.send(JSON.stringify(reportPayload));\n      });\n    }\n  };\n});","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n  var sourceRoot = aSourceMapConsumer.sourceRoot;\n  var generator = new SourceMapGenerator({\n    file: aSourceMapConsumer.file,\n    sourceRoot: sourceRoot\n  });\n  aSourceMapConsumer.eachMapping(function (mapping) {\n    var newMapping = {\n      generated: {\n        line: mapping.generatedLine,\n        column: mapping.generatedColumn\n      }\n    };\n    if (mapping.source != null) {\n      newMapping.source = mapping.source;\n      if (sourceRoot != null) {\n        newMapping.source = util.relative(sourceRoot, newMapping.source);\n      }\n      newMapping.original = {\n        line: mapping.originalLine,\n        column: mapping.originalColumn\n      };\n      if (mapping.name != null) {\n        newMapping.name = mapping.name;\n      }\n    }\n    generator.addMapping(newMapping);\n  });\n  aSourceMapConsumer.sources.forEach(function (sourceFile) {\n    var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n    if (content != null) {\n      generator.setSourceContent(sourceFile, content);\n    }\n  });\n  return generator;\n};\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) {\n  var generated = util.getArg(aArgs, 'generated');\n  var original = util.getArg(aArgs, 'original', null);\n  var source = util.getArg(aArgs, 'source', null);\n  var name = util.getArg(aArgs, 'name', null);\n  if (!this._skipValidation) {\n    this._validateMapping(generated, original, source, name);\n  }\n  if (source != null) {\n    source = String(source);\n    if (!this._sources.has(source)) {\n      this._sources.add(source);\n    }\n  }\n  if (name != null) {\n    name = String(name);\n    if (!this._names.has(name)) {\n      this._names.add(name);\n    }\n  }\n  this._mappings.add({\n    generatedLine: generated.line,\n    generatedColumn: generated.column,\n    originalLine: original != null && original.line,\n    originalColumn: original != null && original.column,\n    source: source,\n    name: name\n  });\n};\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n  var source = aSourceFile;\n  if (this._sourceRoot != null) {\n    source = util.relative(this._sourceRoot, source);\n  }\n  if (aSourceContent != null) {\n    // Add the source content to the _sourcesContents map.\n    // Create a new _sourcesContents map if the property is null.\n    if (!this._sourcesContents) {\n      this._sourcesContents = Object.create(null);\n    }\n    this._sourcesContents[util.toSetString(source)] = aSourceContent;\n  } else if (this._sourcesContents) {\n    // Remove the source file from the _sourcesContents map.\n    // If the _sourcesContents map is empty, set the property to null.\n    delete this._sourcesContents[util.toSetString(source)];\n    if (Object.keys(this._sourcesContents).length === 0) {\n      this._sourcesContents = null;\n    }\n  }\n};\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n  var sourceFile = aSourceFile;\n  // If aSourceFile is omitted, we will use the file property of the SourceMap\n  if (aSourceFile == null) {\n    if (aSourceMapConsumer.file == null) {\n      throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 'or the source map\\'s \"file\" property. Both were omitted.');\n    }\n    sourceFile = aSourceMapConsumer.file;\n  }\n  var sourceRoot = this._sourceRoot;\n  // Make \"sourceFile\" relative if an absolute Url is passed.\n  if (sourceRoot != null) {\n    sourceFile = util.relative(sourceRoot, sourceFile);\n  }\n  // Applying the SourceMap can add and remove items from the sources and\n  // the names array.\n  var newSources = new ArraySet();\n  var newNames = new ArraySet();\n\n  // Find mappings for the \"sourceFile\"\n  this._mappings.unsortedForEach(function (mapping) {\n    if (mapping.source === sourceFile && mapping.originalLine != null) {\n      // Check if it can be mapped by the source map, then update the mapping.\n      var original = aSourceMapConsumer.originalPositionFor({\n        line: mapping.originalLine,\n        column: mapping.originalColumn\n      });\n      if (original.source != null) {\n        // Copy mapping\n        mapping.source = original.source;\n        if (aSourceMapPath != null) {\n          mapping.source = util.join(aSourceMapPath, mapping.source);\n        }\n        if (sourceRoot != null) {\n          mapping.source = util.relative(sourceRoot, mapping.source);\n        }\n        mapping.originalLine = original.line;\n        mapping.originalColumn = original.column;\n        if (original.name != null) {\n          mapping.name = original.name;\n        }\n      }\n    }\n    var source = mapping.source;\n    if (source != null && !newSources.has(source)) {\n      newSources.add(source);\n    }\n    var name = mapping.name;\n    if (name != null && !newNames.has(name)) {\n      newNames.add(name);\n    }\n  }, this);\n  this._sources = newSources;\n  this._names = newNames;\n\n  // Copy sourcesContents of applied map.\n  aSourceMapConsumer.sources.forEach(function (sourceFile) {\n    var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n    if (content != null) {\n      if (aSourceMapPath != null) {\n        sourceFile = util.join(aSourceMapPath, sourceFile);\n      }\n      if (sourceRoot != null) {\n        sourceFile = util.relative(sourceRoot, sourceFile);\n      }\n      this.setSourceContent(sourceFile, content);\n    }\n  }, this);\n};\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) {\n  if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) {\n    // Case 1.\n    return;\n  } else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aOriginal && 'line' in aOriginal && 'column' in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) {\n    // Cases 2 and 3.\n    return;\n  } else {\n    throw new Error('Invalid mapping: ' + JSON.stringify({\n      generated: aGenerated,\n      source: aSource,\n      original: aOriginal,\n      name: aName\n    }));\n  }\n};\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() {\n  var previousGeneratedColumn = 0;\n  var previousGeneratedLine = 1;\n  var previousOriginalColumn = 0;\n  var previousOriginalLine = 0;\n  var previousName = 0;\n  var previousSource = 0;\n  var result = '';\n  var next;\n  var mapping;\n  var nameIdx;\n  var sourceIdx;\n  var mappings = this._mappings.toArray();\n  for (var i = 0, len = mappings.length; i < len; i++) {\n    mapping = mappings[i];\n    next = '';\n    if (mapping.generatedLine !== previousGeneratedLine) {\n      previousGeneratedColumn = 0;\n      while (mapping.generatedLine !== previousGeneratedLine) {\n        next += ';';\n        previousGeneratedLine++;\n      }\n    } else {\n      if (i > 0) {\n        if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n          continue;\n        }\n        next += ',';\n      }\n    }\n    next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn);\n    previousGeneratedColumn = mapping.generatedColumn;\n    if (mapping.source != null) {\n      sourceIdx = this._sources.indexOf(mapping.source);\n      next += base64VLQ.encode(sourceIdx - previousSource);\n      previousSource = sourceIdx;\n\n      // lines are stored 0-based in SourceMap spec version 3\n      next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine);\n      previousOriginalLine = mapping.originalLine - 1;\n      next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn);\n      previousOriginalColumn = mapping.originalColumn;\n      if (mapping.name != null) {\n        nameIdx = this._names.indexOf(mapping.name);\n        next += base64VLQ.encode(nameIdx - previousName);\n        previousName = nameIdx;\n      }\n    }\n    result += next;\n  }\n  return result;\n};\nSourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n  return aSources.map(function (source) {\n    if (!this._sourcesContents) {\n      return null;\n    }\n    if (aSourceRoot != null) {\n      source = util.relative(aSourceRoot, source);\n    }\n    var key = util.toSetString(source);\n    return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null;\n  }, this);\n};\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() {\n  var map = {\n    version: this._version,\n    sources: this._sources.toArray(),\n    names: this._names.toArray(),\n    mappings: this._serializeMappings()\n  };\n  if (this._file != null) {\n    map.file = this._file;\n  }\n  if (this._sourceRoot != null) {\n    map.sourceRoot = this._sourceRoot;\n  }\n  if (this._sourcesContents) {\n    map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n  }\n  return map;\n};\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() {\n  return JSON.stringify(this.toJSON());\n};\nexports.SourceMapGenerator = SourceMapGenerator;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative ? -shifted : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n  var vlq = toVLQSigned(aValue);\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = util.toSetString(aStr);\n  var isDuplicate = has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    this._set[sStr] = idx;\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  var sStr = util.toSetString(aStr);\n  return has.call(this._set, sStr);\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  var sStr = util.toSetString(aStr);\n  if (has.call(this._set, sStr)) {\n    return this._set[sStr];\n  }\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\nexports.ArraySet = ArraySet;","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('error-stack-parser', ['stackframe'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('stackframe'));\n  } else {\n    root.ErrorStackParser = factory(root.StackFrame);\n  }\n})(this, function ErrorStackParser(StackFrame) {\n  'use strict';\n\n  var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n  var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n  var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n  return {\n    /**\n     * Given an Error object, extract the most information from it.\n     *\n     * @param {Error} error object\n     * @return {Array} of StackFrames\n     */\n    parse: function ErrorStackParser$$parse(error) {\n      if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n        return this.parseOpera(error);\n      } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n        return this.parseV8OrIE(error);\n      } else if (error.stack) {\n        return this.parseFFOrSafari(error);\n      } else {\n        throw new Error('Cannot parse given Error object');\n      }\n    },\n    // Separate line and column numbers from a string of the form: (URI:Line:Column)\n    extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n      // Fail-fast but return locations like \"(native)\"\n      if (urlLike.indexOf(':') === -1) {\n        return [urlLike];\n      }\n      var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n      var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n      return [parts[1], parts[2] || undefined, parts[3] || undefined];\n    },\n    parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !!line.match(CHROME_IE_STACK_REGEXP);\n      }, this);\n      return filtered.map(function (line) {\n        if (line.indexOf('(eval ') > -1) {\n          // Throw away eval information until we implement stacktrace.js/stackframe#8\n          line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(\\),.*$)/g, '');\n        }\n        var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(');\n\n        // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n        // case it has spaces in it, as the string is split on \\s+ later on\n        var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n\n        // remove the parenthesized location from the line, if it was matched\n        sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n        var tokens = sanitizedLine.split(/\\s+/).slice(1);\n        // if a location was matched, pass it to extractLocation() otherwise pop the last token\n        var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n        var functionName = tokens.join(' ') || undefined;\n        var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n        return new StackFrame({\n          functionName: functionName,\n          fileName: fileName,\n          lineNumber: locationParts[1],\n          columnNumber: locationParts[2],\n          source: line\n        });\n      }, this);\n    },\n    parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n      }, this);\n      return filtered.map(function (line) {\n        // Throw away eval information until we implement stacktrace.js/stackframe#8\n        if (line.indexOf(' > eval') > -1) {\n          line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n        }\n        if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n          // Safari eval frames only have function names and nothing else\n          return new StackFrame({\n            functionName: line\n          });\n        } else {\n          var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n          var matches = line.match(functionNameRegex);\n          var functionName = matches && matches[1] ? matches[1] : undefined;\n          var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n          return new StackFrame({\n            functionName: functionName,\n            fileName: locationParts[0],\n            lineNumber: locationParts[1],\n            columnNumber: locationParts[2],\n            source: line\n          });\n        }\n      }, this);\n    },\n    parseOpera: function ErrorStackParser$$parseOpera(e) {\n      if (!e.stacktrace || e.message.indexOf('\\n') > -1 && e.message.split('\\n').length > e.stacktrace.split('\\n').length) {\n        return this.parseOpera9(e);\n      } else if (!e.stack) {\n        return this.parseOpera10(e);\n      } else {\n        return this.parseOpera11(e);\n      }\n    },\n    parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n      var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n      var lines = e.message.split('\\n');\n      var result = [];\n      for (var i = 2, len = lines.length; i < len; i += 2) {\n        var match = lineRE.exec(lines[i]);\n        if (match) {\n          result.push(new StackFrame({\n            fileName: match[2],\n            lineNumber: match[1],\n            source: lines[i]\n          }));\n        }\n      }\n      return result;\n    },\n    parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n      var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n      var lines = e.stacktrace.split('\\n');\n      var result = [];\n      for (var i = 0, len = lines.length; i < len; i += 2) {\n        var match = lineRE.exec(lines[i]);\n        if (match) {\n          result.push(new StackFrame({\n            functionName: match[3] || undefined,\n            fileName: match[2],\n            lineNumber: match[1],\n            source: lines[i]\n          }));\n        }\n      }\n      return result;\n    },\n    // Opera 10.65+ Error.stack very similar to FF/Safari\n    parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n      }, this);\n      return filtered.map(function (line) {\n        var tokens = line.split('@');\n        var locationParts = this.extractLocation(tokens.pop());\n        var functionCall = tokens.shift() || '';\n        var functionName = functionCall.replace(/<anonymous function(: (\\w+))?>/, '$2').replace(/\\([^)]*\\)/g, '') || undefined;\n        var argsRaw;\n        if (functionCall.match(/\\(([^)]*)\\)/)) {\n          argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n        }\n        var args = argsRaw === undefined || argsRaw === '[arguments not available]' ? undefined : argsRaw.split(',');\n        return new StackFrame({\n          functionName: functionName,\n          args: args,\n          fileName: locationParts[0],\n          lineNumber: locationParts[1],\n          columnNumber: locationParts[2],\n          source: line\n        });\n      }, this);\n    }\n  };\n});","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stack-generator', ['stackframe'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('stackframe'));\n  } else {\n    root.StackGenerator = factory(root.StackFrame);\n  }\n})(this, function (StackFrame) {\n  return {\n    backtrace: function StackGenerator$$backtrace(opts) {\n      var stack = [];\n      var maxStackSize = 10;\n      if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n        maxStackSize = opts.maxStackSize;\n      }\n      var curr = arguments.callee;\n      while (curr && stack.length < maxStackSize && curr['arguments']) {\n        // Allow V8 optimizations\n        var args = new Array(curr['arguments'].length);\n        for (var i = 0; i < args.length; ++i) {\n          args[i] = curr['arguments'][i];\n        }\n        if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n          stack.push(new StackFrame({\n            functionName: RegExp.$1 || undefined,\n            args: args\n          }));\n        } else {\n          stack.push(new StackFrame({\n            args: args\n          }));\n        }\n        try {\n          curr = curr.caller;\n        } catch (e) {\n          break;\n        }\n      }\n      return stack;\n    }\n  };\n});","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stacktrace-gps', ['source-map', 'stackframe'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe'));\n  } else {\n    root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame);\n  }\n})(this, function (SourceMap, StackFrame) {\n  'use strict';\n\n  /**\n   * Make a X-Domain request to url and callback.\n   *\n   * @param {String} url\n   * @returns {Promise} with response text if fulfilled\n   */\n  function _xdr(url) {\n    return new Promise(function (resolve, reject) {\n      var req = new XMLHttpRequest();\n      req.open('get', url);\n      req.onerror = reject;\n      req.onreadystatechange = function onreadystatechange() {\n        if (req.readyState === 4) {\n          if (req.status >= 200 && req.status < 300 || url.substr(0, 7) === 'file://' && req.responseText) {\n            resolve(req.responseText);\n          } else {\n            reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url));\n          }\n        }\n      };\n      req.send();\n    });\n  }\n\n  /**\n   * Convert a Base64-encoded string into its original representation.\n   * Used for inline sourcemaps.\n   *\n   * @param {String} b64str Base-64 encoded string\n   * @returns {String} original representation of the base64-encoded string.\n   */\n  function _atob(b64str) {\n    if (typeof window !== 'undefined' && window.atob) {\n      return window.atob(b64str);\n    } else {\n      throw new Error('You must supply a polyfill for window.atob in this environment');\n    }\n  }\n  function _parseJson(string) {\n    if (typeof JSON !== 'undefined' && JSON.parse) {\n      return JSON.parse(string);\n    } else {\n      throw new Error('You must supply a polyfill for JSON.parse in this environment');\n    }\n  }\n  function _findFunctionName(source, lineNumber /*, columnNumber*/) {\n    var syntaxes = [\n    // {name} = function ({args}) TODO args capture\n    /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,\n    // function {name}({args}) m[1]=name m[2]=args\n    /function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,\n    // {name} = eval()\n    /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,\n    // fn_name() {\n    /\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,\n    // {name} = () => {\n    /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/];\n    var lines = source.split('\\n');\n\n    // Walk backwards in the source lines until we find the line which matches one of the patterns above\n    var code = '';\n    var maxLines = Math.min(lineNumber, 20);\n    for (var i = 0; i < maxLines; ++i) {\n      // lineNo is 1-based, source[] is 0-based\n      var line = lines[lineNumber - i - 1];\n      var commentPos = line.indexOf('//');\n      if (commentPos >= 0) {\n        line = line.substr(0, commentPos);\n      }\n      if (line) {\n        code = line + code;\n        var len = syntaxes.length;\n        for (var index = 0; index < len; index++) {\n          var m = syntaxes[index].exec(code);\n          if (m && m[1]) {\n            return m[1];\n          }\n        }\n      }\n    }\n    return undefined;\n  }\n  function _ensureSupportedEnvironment() {\n    if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') {\n      throw new Error('Unable to consume source maps in older browsers');\n    }\n  }\n  function _ensureStackFrameIsLegit(stackframe) {\n    if (typeof stackframe !== 'object') {\n      throw new TypeError('Given StackFrame is not an object');\n    } else if (typeof stackframe.fileName !== 'string') {\n      throw new TypeError('Given file name is not a String');\n    } else if (typeof stackframe.lineNumber !== 'number' || stackframe.lineNumber % 1 !== 0 || stackframe.lineNumber < 1) {\n      throw new TypeError('Given line number must be a positive integer');\n    } else if (typeof stackframe.columnNumber !== 'number' || stackframe.columnNumber % 1 !== 0 || stackframe.columnNumber < 0) {\n      throw new TypeError('Given column number must be a non-negative integer');\n    }\n    return true;\n  }\n  function _findSourceMappingURL(source) {\n    var sourceMappingUrlRegExp = /\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/mg;\n    var lastSourceMappingUrl;\n    var matchSourceMappingUrl;\n    // eslint-disable-next-line no-cond-assign\n    while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) {\n      lastSourceMappingUrl = matchSourceMappingUrl[1];\n    }\n    if (lastSourceMappingUrl) {\n      return lastSourceMappingUrl;\n    } else {\n      throw new Error('sourceMappingURL not found');\n    }\n  }\n  function _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) {\n    return new Promise(function (resolve, reject) {\n      var loc = sourceMapConsumer.originalPositionFor({\n        line: stackframe.lineNumber,\n        column: stackframe.columnNumber\n      });\n      if (loc.source) {\n        // cache mapped sources\n        var mappedSource = sourceMapConsumer.sourceContentFor(loc.source);\n        if (mappedSource) {\n          sourceCache[loc.source] = mappedSource;\n        }\n        resolve(\n        // given stackframe and source location, update stackframe\n        new StackFrame({\n          functionName: loc.name || stackframe.functionName,\n          args: stackframe.args,\n          fileName: loc.source,\n          lineNumber: loc.line,\n          columnNumber: loc.column\n        }));\n      } else {\n        reject(new Error('Could not get original source for given stackframe and source map'));\n      }\n    });\n  }\n\n  /**\n   * @constructor\n   * @param {Object} opts\n   *      opts.sourceCache = {url: \"Source String\"} => preload source cache\n   *      opts.sourceMapConsumerCache = {/path/file.js.map: SourceMapConsumer}\n   *      opts.offline = True to prevent network requests.\n   *              Best effort without sources or source maps.\n   *      opts.ajax = Promise returning function to make X-Domain requests\n   */\n  return function StackTraceGPS(opts) {\n    if (!(this instanceof StackTraceGPS)) {\n      return new StackTraceGPS(opts);\n    }\n    opts = opts || {};\n    this.sourceCache = opts.sourceCache || {};\n    this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {};\n    this.ajax = opts.ajax || _xdr;\n    this._atob = opts.atob || _atob;\n    this._get = function _get(location) {\n      return new Promise(function (resolve, reject) {\n        var isDataUrl = location.substr(0, 5) === 'data:';\n        if (this.sourceCache[location]) {\n          resolve(this.sourceCache[location]);\n        } else if (opts.offline && !isDataUrl) {\n          reject(new Error('Cannot make network requests in offline mode'));\n        } else {\n          if (isDataUrl) {\n            // data URLs can have parameters.\n            // see http://tools.ietf.org/html/rfc2397\n            var supportedEncodingRegexp = /^data:application\\/json;([\\w=:\"-]+;)*base64,/;\n            var match = location.match(supportedEncodingRegexp);\n            if (match) {\n              var sourceMapStart = match[0].length;\n              var encodedSource = location.substr(sourceMapStart);\n              var source = this._atob(encodedSource);\n              this.sourceCache[location] = source;\n              resolve(source);\n            } else {\n              reject(new Error('The encoding of the inline sourcemap is not supported'));\n            }\n          } else {\n            var xhrPromise = this.ajax(location, {\n              method: 'get'\n            });\n            // Cache the Promise to prevent duplicate in-flight requests\n            this.sourceCache[location] = xhrPromise;\n            xhrPromise.then(resolve, reject);\n          }\n        }\n      }.bind(this));\n    };\n\n    /**\n     * Creating SourceMapConsumers is expensive, so this wraps the creation of a\n     * SourceMapConsumer in a per-instance cache.\n     *\n     * @param {String} sourceMappingURL = URL to fetch source map from\n     * @param {String} defaultSourceRoot = Default source root for source map if undefined\n     * @returns {Promise} that resolves a SourceMapConsumer\n     */\n    this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) {\n      return new Promise(function (resolve) {\n        if (this.sourceMapConsumerCache[sourceMappingURL]) {\n          resolve(this.sourceMapConsumerCache[sourceMappingURL]);\n        } else {\n          var sourceMapConsumerPromise = new Promise(function (resolve, reject) {\n            return this._get(sourceMappingURL).then(function (sourceMapSource) {\n              if (typeof sourceMapSource === 'string') {\n                sourceMapSource = _parseJson(sourceMapSource.replace(/^\\)\\]\\}'/, ''));\n              }\n              if (typeof sourceMapSource.sourceRoot === 'undefined') {\n                sourceMapSource.sourceRoot = defaultSourceRoot;\n              }\n              resolve(new SourceMap.SourceMapConsumer(sourceMapSource));\n            }, reject);\n          }.bind(this));\n          this.sourceMapConsumerCache[sourceMappingURL] = sourceMapConsumerPromise;\n          resolve(sourceMapConsumerPromise);\n        }\n      }.bind(this));\n    };\n\n    /**\n     * Given a StackFrame, enhance function name and use source maps for a\n     * better StackFrame.\n     *\n     * @param {StackFrame} stackframe object\n     * @returns {Promise} that resolves with with source-mapped StackFrame\n     */\n    this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) {\n      return new Promise(function (resolve, reject) {\n        this.getMappedLocation(stackframe).then(function (mappedStackFrame) {\n          function resolveMappedStackFrame() {\n            resolve(mappedStackFrame);\n          }\n          this.findFunctionName(mappedStackFrame).then(resolve, resolveMappedStackFrame)\n          // eslint-disable-next-line no-unexpected-multiline\n          ['catch'](resolveMappedStackFrame);\n        }.bind(this), reject);\n      }.bind(this));\n    };\n\n    /**\n     * Given a StackFrame, guess function name from location information.\n     *\n     * @param {StackFrame} stackframe\n     * @returns {Promise} that resolves with enhanced StackFrame.\n     */\n    this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) {\n      return new Promise(function (resolve, reject) {\n        _ensureStackFrameIsLegit(stackframe);\n        this._get(stackframe.fileName).then(function getSourceCallback(source) {\n          var lineNumber = stackframe.lineNumber;\n          var columnNumber = stackframe.columnNumber;\n          var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber);\n          // Only replace functionName if we found something\n          if (guessedFunctionName) {\n            resolve(new StackFrame({\n              functionName: guessedFunctionName,\n              args: stackframe.args,\n              fileName: stackframe.fileName,\n              lineNumber: lineNumber,\n              columnNumber: columnNumber\n            }));\n          } else {\n            resolve(stackframe);\n          }\n        }, reject)['catch'](reject);\n      }.bind(this));\n    };\n\n    /**\n     * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame.\n     *\n     * @param {StackFrame} stackframe\n     * @returns {Promise} that resolves with enhanced StackFrame.\n     */\n    this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) {\n      return new Promise(function (resolve, reject) {\n        _ensureSupportedEnvironment();\n        _ensureStackFrameIsLegit(stackframe);\n        var sourceCache = this.sourceCache;\n        var fileName = stackframe.fileName;\n        this._get(fileName).then(function (source) {\n          var sourceMappingURL = _findSourceMappingURL(source);\n          var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:';\n          var defaultSourceRoot = fileName.substring(0, fileName.lastIndexOf('/') + 1);\n          if (sourceMappingURL[0] !== '/' && !isDataUrl && !/^https?:\\/\\/|^\\/\\//i.test(sourceMappingURL)) {\n            sourceMappingURL = defaultSourceRoot + sourceMappingURL;\n          }\n          return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot).then(function (sourceMapConsumer) {\n            return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache).then(resolve)['catch'](function () {\n              resolve(stackframe);\n            });\n          });\n        }.bind(this), reject)['catch'](reject);\n      }.bind(this));\n    };\n  };\n});","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65; // 'A'\n  var bigZ = 90; // 'Z'\n\n  var littleA = 97; // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48; // '0'\n  var nine = 57; // '9'\n\n  var plus = 43; // '+'\n  var slash = 47; // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return charCode - bigA;\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return charCode - littleA + littleOffset;\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return charCode - zero + numberOffset;\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {\n    generatedLine: -1,\n    generatedColumn: 0\n  };\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) {\n  this._array.forEach(aCallback, aThisArg);\n};\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\nexports.MappingList = MappingList;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\nfunction SourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n  return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap) : new BasicSourceMapConsumer(sourceMap);\n}\nSourceMapConsumer.fromSourceMap = function (aSourceMap) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n    return this.__generatedMappings;\n  }\n});\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n    return this.__originalMappings;\n  }\n});\nSourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n  var c = aStr.charAt(index);\n  return c === \";\" || c === \",\";\n};\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n  throw new Error(\"Subclasses must implement _parseMappings\");\n};\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n  var context = aContext || null;\n  var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n  var mappings;\n  switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n  }\n  var sourceRoot = this.sourceRoot;\n  mappings.map(function (mapping) {\n    var source = mapping.source === null ? null : this._sources.at(mapping.source);\n    if (source != null && sourceRoot != null) {\n      source = util.join(sourceRoot, source);\n    }\n    return {\n      source: source,\n      generatedLine: mapping.generatedLine,\n      generatedColumn: mapping.generatedColumn,\n      originalLine: mapping.originalLine,\n      originalColumn: mapping.originalColumn,\n      name: mapping.name === null ? null : this._names.at(mapping.name)\n    };\n  }, this).forEach(aCallback, context);\n};\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n  var line = util.getArg(aArgs, 'line');\n\n  // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n  // returns the index of the closest mapping less than the needle. By\n  // setting needle.originalColumn to 0, we thus find the last mapping for\n  // the given line, provided such a mapping exists.\n  var needle = {\n    source: util.getArg(aArgs, 'source'),\n    originalLine: line,\n    originalColumn: util.getArg(aArgs, 'column', 0)\n  };\n  if (this.sourceRoot != null) {\n    needle.source = util.relative(this.sourceRoot, needle.source);\n  }\n  if (!this._sources.has(needle.source)) {\n    return [];\n  }\n  needle.source = this._sources.indexOf(needle.source);\n  var mappings = [];\n  var index = this._findMapping(needle, this._originalMappings, \"originalLine\", \"originalColumn\", util.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND);\n  if (index >= 0) {\n    var mapping = this._originalMappings[index];\n    if (aArgs.column === undefined) {\n      var originalLine = mapping.originalLine;\n\n      // Iterate until either we run out of mappings, or we run into\n      // a mapping for a different line than the one we found. Since\n      // mappings are sorted, this is guaranteed to find all mappings for\n      // the line we found.\n      while (mapping && mapping.originalLine === originalLine) {\n        mappings.push({\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        });\n        mapping = this._originalMappings[++index];\n      }\n    } else {\n      var originalColumn = mapping.originalColumn;\n\n      // Iterate until either we run out of mappings, or we run into\n      // a mapping for a different line than the one we were searching for.\n      // Since mappings are sorted, this is guaranteed to find all mappings for\n      // the line we are searching for.\n      while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) {\n        mappings.push({\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        });\n        mapping = this._originalMappings[++index];\n      }\n    }\n  }\n  return mappings;\n};\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n  sources = sources.map(String)\n  // Some source maps produce relative source paths like \"./foo.js\" instead of\n  // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n  // See bugzil.la/1090768.\n  .map(util.normalize)\n  // Always ensure that absolute sources are internally stored relative to\n  // the source root, if the source root is absolute. Not doing this would\n  // be particularly problematic when the source root is a prefix of the\n  // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n  .map(function (source) {\n    return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source;\n  });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this.file = file;\n}\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap) {\n  var smc = Object.create(BasicSourceMapConsumer.prototype);\n  var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n  var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n  smc.sourceRoot = aSourceMap._sourceRoot;\n  smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot);\n  smc.file = aSourceMap._file;\n\n  // Because we are modifying the entries (by converting string sources and\n  // names to indices into the sources and names ArraySets), we have to make\n  // a copy of the entry or else bad things happen. Shared mutable state\n  // strikes again! See github issue #191.\n\n  var generatedMappings = aSourceMap._mappings.toArray().slice();\n  var destGeneratedMappings = smc.__generatedMappings = [];\n  var destOriginalMappings = smc.__originalMappings = [];\n  for (var i = 0, length = generatedMappings.length; i < length; i++) {\n    var srcMapping = generatedMappings[i];\n    var destMapping = new Mapping();\n    destMapping.generatedLine = srcMapping.generatedLine;\n    destMapping.generatedColumn = srcMapping.generatedColumn;\n    if (srcMapping.source) {\n      destMapping.source = sources.indexOf(srcMapping.source);\n      destMapping.originalLine = srcMapping.originalLine;\n      destMapping.originalColumn = srcMapping.originalColumn;\n      if (srcMapping.name) {\n        destMapping.name = names.indexOf(srcMapping.name);\n      }\n      destOriginalMappings.push(destMapping);\n    }\n    destGeneratedMappings.push(destMapping);\n  }\n  quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n  return smc;\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._sources.toArray().map(function (s) {\n      return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n    }, this);\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n  var generatedLine = 1;\n  var previousGeneratedColumn = 0;\n  var previousOriginalLine = 0;\n  var previousOriginalColumn = 0;\n  var previousSource = 0;\n  var previousName = 0;\n  var length = aStr.length;\n  var index = 0;\n  var cachedSegments = {};\n  var temp = {};\n  var originalMappings = [];\n  var generatedMappings = [];\n  var mapping, str, segment, end, value;\n  while (index < length) {\n    if (aStr.charAt(index) === ';') {\n      generatedLine++;\n      index++;\n      previousGeneratedColumn = 0;\n    } else if (aStr.charAt(index) === ',') {\n      index++;\n    } else {\n      mapping = new Mapping();\n      mapping.generatedLine = generatedLine;\n\n      // Because each offset is encoded relative to the previous one,\n      // many segments often have the same encoding. We can exploit this\n      // fact by caching the parsed variable length fields of each segment,\n      // allowing us to avoid a second parse if we encounter the same\n      // segment again.\n      for (end = index; end < length; end++) {\n        if (this._charIsMappingSeparator(aStr, end)) {\n          break;\n        }\n      }\n      str = aStr.slice(index, end);\n      segment = cachedSegments[str];\n      if (segment) {\n        index += str.length;\n      } else {\n        segment = [];\n        while (index < end) {\n          base64VLQ.decode(aStr, index, temp);\n          value = temp.value;\n          index = temp.rest;\n          segment.push(value);\n        }\n        if (segment.length === 2) {\n          throw new Error('Found a source, but no line and column');\n        }\n        if (segment.length === 3) {\n          throw new Error('Found a source and line, but no column');\n        }\n        cachedSegments[str] = segment;\n      }\n\n      // Generated column.\n      mapping.generatedColumn = previousGeneratedColumn + segment[0];\n      previousGeneratedColumn = mapping.generatedColumn;\n      if (segment.length > 1) {\n        // Original source.\n        mapping.source = previousSource + segment[1];\n        previousSource += segment[1];\n\n        // Original line.\n        mapping.originalLine = previousOriginalLine + segment[2];\n        previousOriginalLine = mapping.originalLine;\n        // Lines are stored 0-based\n        mapping.originalLine += 1;\n\n        // Original column.\n        mapping.originalColumn = previousOriginalColumn + segment[3];\n        previousOriginalColumn = mapping.originalColumn;\n        if (segment.length > 4) {\n          // Original name.\n          mapping.name = previousName + segment[4];\n          previousName += segment[4];\n        }\n      }\n      generatedMappings.push(mapping);\n      if (typeof mapping.originalLine === 'number') {\n        originalMappings.push(mapping);\n      }\n    }\n  }\n  quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n  this.__generatedMappings = generatedMappings;\n  quickSort(originalMappings, util.compareByOriginalPositions);\n  this.__originalMappings = originalMappings;\n};\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) {\n  // To return the position we are searching for, we must first find the\n  // mapping for the given position and then return the opposite position it\n  // points to. Because the mappings are sorted, we can use binary search to\n  // find the best mapping.\n\n  if (aNeedle[aLineName] <= 0) {\n    throw new TypeError('Line must be greater than or equal to 1, got ' + aNeedle[aLineName]);\n  }\n  if (aNeedle[aColumnName] < 0) {\n    throw new TypeError('Column must be greater than or equal to 0, got ' + aNeedle[aColumnName]);\n  }\n  return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n};\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() {\n  for (var index = 0; index < this._generatedMappings.length; ++index) {\n    var mapping = this._generatedMappings[index];\n\n    // Mappings do not contain a field for the last generated columnt. We\n    // can come up with an optimistic estimate, however, by assuming that\n    // mappings are contiguous (i.e. given two consecutive mappings, the\n    // first mapping ends where the second one starts).\n    if (index + 1 < this._generatedMappings.length) {\n      var nextMapping = this._generatedMappings[index + 1];\n      if (mapping.generatedLine === nextMapping.generatedLine) {\n        mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n        continue;\n      }\n    }\n\n    // The last mapping for each line spans the entire line.\n    mapping.lastGeneratedColumn = Infinity;\n  }\n};\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) {\n  var needle = {\n    generatedLine: util.getArg(aArgs, 'line'),\n    generatedColumn: util.getArg(aArgs, 'column')\n  };\n  var index = this._findMapping(needle, this._generatedMappings, \"generatedLine\", \"generatedColumn\", util.compareByGeneratedPositionsDeflated, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND));\n  if (index >= 0) {\n    var mapping = this._generatedMappings[index];\n    if (mapping.generatedLine === needle.generatedLine) {\n      var source = util.getArg(mapping, 'source', null);\n      if (source !== null) {\n        source = this._sources.at(source);\n        if (this.sourceRoot != null) {\n          source = util.join(this.sourceRoot, source);\n        }\n      }\n      var name = util.getArg(mapping, 'name', null);\n      if (name !== null) {\n        name = this._names.at(name);\n      }\n      return {\n        source: source,\n        line: util.getArg(mapping, 'originalLine', null),\n        column: util.getArg(mapping, 'originalColumn', null),\n        name: name\n      };\n    }\n  }\n  return {\n    source: null,\n    line: null,\n    column: null,\n    name: null\n  };\n};\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() {\n  if (!this.sourcesContent) {\n    return false;\n  }\n  return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function (sc) {\n    return sc == null;\n  });\n};\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n  if (!this.sourcesContent) {\n    return null;\n  }\n  if (this.sourceRoot != null) {\n    aSource = util.relative(this.sourceRoot, aSource);\n  }\n  if (this._sources.has(aSource)) {\n    return this.sourcesContent[this._sources.indexOf(aSource)];\n  }\n  var url;\n  if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) {\n    // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n    // many users. We can help them out when they expect file:// URIs to\n    // behave like it would if they were running a local HTTP server. See\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n    var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n    if (url.scheme == \"file\" && this._sources.has(fileUriAbsPath)) {\n      return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];\n    }\n    if ((!url.path || url.path == \"/\") && this._sources.has(\"/\" + aSource)) {\n      return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n    }\n  }\n\n  // This function is used recursively from\n  // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n  // don't want to throw if we can't find the source - we just want to\n  // return null, so we provide a flag to exit gracefully.\n  if (nullOnMissing) {\n    return null;\n  } else {\n    throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n  }\n};\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) {\n  var source = util.getArg(aArgs, 'source');\n  if (this.sourceRoot != null) {\n    source = util.relative(this.sourceRoot, source);\n  }\n  if (!this._sources.has(source)) {\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  }\n  source = this._sources.indexOf(source);\n  var needle = {\n    source: source,\n    originalLine: util.getArg(aArgs, 'line'),\n    originalColumn: util.getArg(aArgs, 'column')\n  };\n  var index = this._findMapping(needle, this._originalMappings, \"originalLine\", \"originalColumn\", util.compareByOriginalPositions, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND));\n  if (index >= 0) {\n    var mapping = this._originalMappings[index];\n    if (mapping.source === needle.source) {\n      return {\n        line: util.getArg(mapping, 'generatedLine', null),\n        column: util.getArg(mapping, 'generatedColumn', null),\n        lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n      };\n    }\n  }\n  return {\n    line: null,\n    column: null,\n    lastColumn: null\n  };\n};\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n    if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n    };\n  });\n}\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n  var needle = {\n    generatedLine: util.getArg(aArgs, 'line'),\n    generatedColumn: util.getArg(aArgs, 'column')\n  };\n\n  // Find the section containing the generated position we're trying to map\n  // to an original position.\n  var sectionIndex = binarySearch.search(needle, this._sections, function (needle, section) {\n    var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n    if (cmp) {\n      return cmp;\n    }\n    return needle.generatedColumn - section.generatedOffset.generatedColumn;\n  });\n  var section = this._sections[sectionIndex];\n  if (!section) {\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  }\n  return section.consumer.originalPositionFor({\n    line: needle.generatedLine - (section.generatedOffset.generatedLine - 1),\n    column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),\n    bias: aArgs.bias\n  });\n};\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n  return this._sections.every(function (s) {\n    return s.consumer.hasContentsOfAllSources();\n  });\n};\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n  for (var i = 0; i < this._sections.length; i++) {\n    var section = this._sections[i];\n    var content = section.consumer.sourceContentFor(aSource, true);\n    if (content) {\n      return content;\n    }\n  }\n  if (nullOnMissing) {\n    return null;\n  } else {\n    throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n  }\n};\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n  for (var i = 0; i < this._sections.length; i++) {\n    var section = this._sections[i];\n\n    // Only consider this section if the requested source is in the list of\n    // sources of the consumer.\n    if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n      continue;\n    }\n    var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n    if (generatedPosition) {\n      var ret = {\n        line: generatedPosition.line + (section.generatedOffset.generatedLine - 1),\n        column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0)\n      };\n      return ret;\n    }\n  }\n  return {\n    line: null,\n    column: null\n  };\n};\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n  this.__generatedMappings = [];\n  this.__originalMappings = [];\n  for (var i = 0; i < this._sections.length; i++) {\n    var section = this._sections[i];\n    var sectionMappings = section.consumer._generatedMappings;\n    for (var j = 0; j < sectionMappings.length; j++) {\n      var mapping = sectionMappings[j];\n      var source = section.consumer._sources.at(mapping.source);\n      if (section.consumer.sourceRoot !== null) {\n        source = util.join(section.consumer.sourceRoot, source);\n      }\n      this._sources.add(source);\n      source = this._sources.indexOf(source);\n      var name = section.consumer._names.at(mapping.name);\n      this._names.add(name);\n      name = this._names.indexOf(name);\n\n      // The mappings coming from the consumer for the section have\n      // generated positions relative to the start of the section, so we\n      // need to offset them to be relative to the start of the concatenated\n      // generated file.\n      var adjustedMapping = {\n        source: source,\n        generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1),\n        generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: name\n      };\n      this.__generatedMappings.push(adjustedMapping);\n      if (typeof adjustedMapping.originalLine === 'number') {\n        this.__originalMappings.push(adjustedMapping);\n      }\n    }\n  }\n  quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n  quickSort(this.__originalMappings, util.compareByOriginalPositions);\n};\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  } else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  } else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n  return index;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + Math.random() * (high - low));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n  // The SourceNode we want to fill with the generated code\n  // and the SourceMap\n  var node = new SourceNode();\n\n  // All even indices of this array are one line of the generated code,\n  // while all odd indices are the newlines between two adjacent lines\n  // (since `REGEX_NEWLINE` captures its match).\n  // Processed fragments are removed from this array, by calling `shiftNextLine`.\n  var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n  var shiftNextLine = function () {\n    var lineContents = remainingLines.shift();\n    // The last line of a file might not have a newline.\n    var newLine = remainingLines.shift() || \"\";\n    return lineContents + newLine;\n  };\n\n  // We need to remember the position of \"remainingLines\"\n  var lastGeneratedLine = 1,\n    lastGeneratedColumn = 0;\n\n  // The generate SourceNodes we need a code range.\n  // To extract it current and last mapping is used.\n  // Here we store the last mapping.\n  var lastMapping = null;\n  aSourceMapConsumer.eachMapping(function (mapping) {\n    if (lastMapping !== null) {\n      // We add the code from \"lastMapping\" to \"mapping\":\n      // First check if there is a new line in between.\n      if (lastGeneratedLine < mapping.generatedLine) {\n        // Associate first line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n        lastGeneratedLine++;\n        lastGeneratedColumn = 0;\n        // The remaining code is added without mapping\n      } else {\n        // There is no new line in between.\n        // Associate the code between \"lastGeneratedColumn\" and\n        // \"mapping.generatedColumn\" with \"lastMapping\"\n        var nextLine = remainingLines[0];\n        var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn);\n        remainingLines[0] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n        addMappingWithCode(lastMapping, code);\n        // No more remaining code, continue\n        lastMapping = mapping;\n        return;\n      }\n    }\n    // We add the generated code until the first mapping\n    // to the SourceNode without any mapping.\n    // Each line is added as separate string.\n    while (lastGeneratedLine < mapping.generatedLine) {\n      node.add(shiftNextLine());\n      lastGeneratedLine++;\n    }\n    if (lastGeneratedColumn < mapping.generatedColumn) {\n      var nextLine = remainingLines[0];\n      node.add(nextLine.substr(0, mapping.generatedColumn));\n      remainingLines[0] = nextLine.substr(mapping.generatedColumn);\n      lastGeneratedColumn = mapping.generatedColumn;\n    }\n    lastMapping = mapping;\n  }, this);\n  // We have processed all mappings.\n  if (remainingLines.length > 0) {\n    if (lastMapping) {\n      // Associate the remaining code in the current line with \"lastMapping\"\n      addMappingWithCode(lastMapping, shiftNextLine());\n    }\n    // and add the remaining lines without any mapping\n    node.add(remainingLines.join(\"\"));\n  }\n\n  // Copy sourcesContent into SourceNode\n  aSourceMapConsumer.sources.forEach(function (sourceFile) {\n    var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n    if (content != null) {\n      if (aRelativePath != null) {\n        sourceFile = util.join(aRelativePath, sourceFile);\n      }\n      node.setSourceContent(sourceFile, content);\n    }\n  });\n  return node;\n  function addMappingWithCode(mapping, code) {\n    if (mapping === null || mapping.source === undefined) {\n      node.add(code);\n    } else {\n      var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source;\n      node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name));\n    }\n  }\n};\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  } else {\n    throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length - 1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  } else {\n    throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    } else {\n      if (chunk !== '') {\n        aFn(chunk, {\n          source: this.source,\n          line: this.line,\n          column: this.column,\n          name: this.name\n        });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len - 1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  } else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  } else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n  this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n};\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) {\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    if (this.children[i][isSourceNode]) {\n      this.children[i].walkSourceContents(aFn);\n    }\n  }\n  var sources = Object.keys(this.sourceContents);\n  for (var i = 0, len = sources.length; i < len; i++) {\n    aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n  }\n};\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null && original.line !== null && original.column !== null) {\n      if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n  return {\n    code: generated.code,\n    map: map\n  };\n};\nexports.SourceNode = SourceNode;","//\n// Tools for performance debugging, only enabled in development mode.\n// Open up Chrome Dev Tools, then Timeline, then User Timing to see output.\n// Also see config/webpack/loaders/mark.js for the webpack loader marks.\n//\n\nlet marky;\n\nif (process.env.NODE_ENV === 'development') {\n  if (typeof performance !== 'undefined' && performance.setResourceTimingBufferSize) {\n    // Increase Firefox's performance entry limit; otherwise it's capped to 150.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1331135\n    performance.setResourceTimingBufferSize(Infinity);\n  }\n  marky = require('marky');\n  // allows us to easily do e.g. ReactPerf.printWasted() while debugging\n  //window.ReactPerf = require('react-addons-perf');\n  //window.ReactPerf.start();\n}\n\nexport function start(name) {\n  if (process.env.NODE_ENV === 'development') {\n    marky.mark(name);\n  }\n}\n\nexport function stop(name) {\n  if (process.env.NODE_ENV === 'development') {\n    marky.stop(name);\n  }\n}\n"],"sourceRoot":""}