{"version":3,"sources":["webpack://__ember_auto_import__/node_modules/@discourse/itsatrap/itsatrap.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/createPopper.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/debounce.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/enums.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/popper-lite.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/popper.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/math.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://__ember_auto_import__/node_modules/@popperjs/core/lib/utils/within.js","webpack://__ember_auto_import__/node_modules/@transloadit/prettier-bytes/prettierBytes.js","webpack://__ember_auto_import__/node_modules/browser-split/index.js","webpack://__ember_auto_import__/node_modules/cssfilter/lib/css.js","webpack://__ember_auto_import__/node_modules/cssfilter/lib/default.js","webpack://__ember_auto_import__/node_modules/cssfilter/lib/index.js","webpack://__ember_auto_import__/node_modules/cssfilter/lib/parser.js","webpack://__ember_auto_import__/node_modules/cssfilter/lib/util.js","webpack://__ember_auto_import__/node_modules/ev-store/index.js","webpack://__ember_auto_import__/node_modules/global/document.js","webpack://__ember_auto_import__/lib/handlebars.js","webpack://__ember_auto_import__/lib/handlebars.runtime.js","webpack://__ember_auto_import__/lib/handlebars/base.js","webpack://__ember_auto_import__/lib/handlebars/compiler/ast.js","webpack://__ember_auto_import__/lib/handlebars/compiler/base.js","webpack://__ember_auto_import__/lib/handlebars/compiler/code-gen.js","webpack://__ember_auto_import__/lib/handlebars/compiler/compiler.js","webpack://__ember_auto_import__/lib/handlebars/compiler/helpers.js","webpack://__ember_auto_import__/lib/handlebars/compiler/javascript-compiler.js","webpack://__ember_auto_import__/lib/handlebars/compiler/parser.js","webpack://__ember_auto_import__/lib/handlebars/compiler/visitor.js","webpack://__ember_auto_import__/lib/handlebars/compiler/whitespace-control.js","webpack://__ember_auto_import__/lib/handlebars/decorators.js","webpack://__ember_auto_import__/lib/handlebars/decorators/inline.js","webpack://__ember_auto_import__/lib/handlebars/exception.js","webpack://__ember_auto_import__/lib/handlebars/helpers.js","webpack://__ember_auto_import__/lib/handlebars/helpers/block-helper-missing.js","webpack://__ember_auto_import__/lib/handlebars/helpers/each.js","webpack://__ember_auto_import__/lib/handlebars/helpers/helper-missing.js","webpack://__ember_auto_import__/lib/handlebars/helpers/if.js","webpack://__ember_auto_import__/lib/handlebars/helpers/log.js","webpack://__ember_auto_import__/lib/handlebars/helpers/lookup.js","webpack://__ember_auto_import__/lib/handlebars/helpers/with.js","webpack://__ember_auto_import__/lib/handlebars/internal/create-new-lookup-object.js","webpack://__ember_auto_import__/lib/handlebars/internal/proto-access.js","webpack://__ember_auto_import__/lib/handlebars/internal/wrapHelper.js","webpack://__ember_auto_import__/lib/handlebars/logger.js","webpack://__ember_auto_import__/lib/handlebars/no-conflict.js","webpack://__ember_auto_import__/lib/handlebars/runtime.js","webpack://__ember_auto_import__/lib/handlebars/safe-string.js","webpack://__ember_auto_import__/lib/handlebars/utils.js","webpack://__ember_auto_import__/node_modules/individual/index.js","webpack://__ember_auto_import__/node_modules/individual/one-version.js","webpack://__ember_auto_import__/node_modules/is-object/index.js","webpack://__ember_auto_import__/node_modules/lodash.throttle/index.js","webpack://__ember_auto_import__/node_modules/message-bus-client/assets/message-bus.js","webpack://__ember_auto_import__/node_modules/mime-match/index.js","webpack://__ember_auto_import__/node_modules/namespace-emitter/index.js","webpack://__ember_auto_import__/src/constants.js","webpack://__ember_auto_import__/src/util.js","webpack://__ember_auto_import__/src/options.js","webpack://__ember_auto_import__/src/create-element.js","webpack://__ember_auto_import__/src/component.js","webpack://__ember_auto_import__/src/create-context.js","webpack://__ember_auto_import__/src/diff/children.js","webpack://__ember_auto_import__/src/diff/props.js","webpack://__ember_auto_import__/src/diff/index.js","webpack://__ember_auto_import__/src/render.js","webpack://__ember_auto_import__/src/clone-element.js","webpack://__ember_auto_import__/src/diff/catch-error.js","webpack://__ember_auto_import__/src/constants.ts","webpack://__ember_auto_import__/src/utils.ts","webpack://__ember_auto_import__/src/dom-utils.ts","webpack://__ember_auto_import__/src/bindGlobalEventListeners.ts","webpack://__ember_auto_import__/src/browser.ts","webpack://__ember_auto_import__/src/props.ts","webpack://__ember_auto_import__/src/template.ts","webpack://__ember_auto_import__/src/createTippy.ts","webpack://__ember_auto_import__/src/index.ts","webpack://__ember_auto_import__/src/addons/createSingleton.ts","webpack://__ember_auto_import__/src/addons/delegate.ts","webpack://__ember_auto_import__/src/plugins/animateFill.ts","webpack://__ember_auto_import__/src/plugins/followCursor.ts","webpack://__ember_auto_import__/src/plugins/inlinePositioning.ts","webpack://__ember_auto_import__/src/plugins/sticky.ts","webpack://__ember_auto_import__/build/base.js","webpack://__ember_auto_import__/node_modules/virtual-dom/create-element.js","webpack://__ember_auto_import__/node_modules/virtual-dom/diff.js","webpack://__ember_auto_import__/node_modules/virtual-dom/h.js","webpack://__ember_auto_import__/node_modules/virtual-dom/index.js","webpack://__ember_auto_import__/node_modules/virtual-dom/patch.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vdom/apply-properties.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vdom/create-element.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vdom/dom-index.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vdom/patch-op.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vdom/patch.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vdom/update-widget.js","webpack://__ember_auto_import__/node_modules/virtual-dom/virtual-hyperscript/hooks/ev-hook.js","webpack://__ember_auto_import__/node_modules/virtual-dom/virtual-hyperscript/hooks/soft-set-hook.js","webpack://__ember_auto_import__/node_modules/virtual-dom/virtual-hyperscript/index.js","webpack://__ember_auto_import__/node_modules/virtual-dom/virtual-hyperscript/parse-tag.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/handle-thunk.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/is-thunk.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/is-vhook.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/is-vnode.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/is-vtext.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/is-widget.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/version.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/vnode.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/vpatch.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vnode/vtext.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vtree/diff-props.js","webpack://__ember_auto_import__/node_modules/virtual-dom/vtree/diff.js","webpack://__ember_auto_import__/node_modules/wildcard/index.js","webpack://__ember_auto_import__/node_modules/x-is-array/index.js","webpack://__ember_auto_import__/node_modules/xss/lib/default.js","webpack://__ember_auto_import__/node_modules/xss/lib/index.js","webpack://__ember_auto_import__/node_modules/xss/lib/parser.js","webpack://__ember_auto_import__/node_modules/xss/lib/util.js","webpack://__ember_auto_import__/node_modules/xss/lib/xss.js","webpack://__ember_auto_import__/node_modules/@uppy/aws-s3-multipart/lib/MultipartUploader.js","webpack://__ember_auto_import__/node_modules/@uppy/aws-s3-multipart/lib/index.js","webpack://__ember_auto_import__/node_modules/@uppy/aws-s3/lib/MiniXHRUpload.js","webpack://__ember_auto_import__/node_modules/@uppy/aws-s3/lib/index.js","webpack://__ember_auto_import__/node_modules/@uppy/aws-s3/lib/isXml.js","webpack://__ember_auto_import__/node_modules/@uppy/aws-s3/lib/locale.js","webpack://__ember_auto_import__/node_modules/@uppy/companion-client/lib/AuthError.js","webpack://__ember_auto_import__/node_modules/@uppy/companion-client/lib/Provider.js","webpack://__ember_auto_import__/node_modules/@uppy/companion-client/lib/RequestClient.js","webpack://__ember_auto_import__/node_modules/@uppy/companion-client/lib/SearchProvider.js","webpack://__ember_auto_import__/node_modules/@uppy/companion-client/lib/Socket.js","webpack://__ember_auto_import__/node_modules/@uppy/companion-client/lib/index.js","webpack://__ember_auto_import__/node_modules/@uppy/companion-client/lib/tokenStorage.js","webpack://__ember_auto_import__/node_modules/@uppy/core/lib/BasePlugin.js","webpack://__ember_auto_import__/node_modules/@uppy/core/lib/Restricter.js","webpack://__ember_auto_import__/node_modules/@uppy/core/lib/UIPlugin.js","webpack://__ember_auto_import__/node_modules/@uppy/core/lib/Uppy.js","webpack://__ember_auto_import__/node_modules/@uppy/core/lib/getFileName.js","webpack://__ember_auto_import__/node_modules/@uppy/core/lib/index.js","webpack://__ember_auto_import__/node_modules/@uppy/core/lib/locale.js","webpack://__ember_auto_import__/node_modules/@uppy/core/lib/loggers.js","webpack://__ember_auto_import__/node_modules/@uppy/core/lib/supportsUploadProgress.js","webpack://__ember_auto_import__/node_modules/@uppy/drop-target/lib/index.js","webpack://__ember_auto_import__/node_modules/@uppy/store-default/lib/index.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/AbortController.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/ErrorWithCause.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/EventTracker.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/NetworkError.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/ProgressTimeout.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/RateLimitedQueue.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/Translator.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/delay.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/emitSocketProgress.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/fetchWithNetworkError.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/findDOMElement.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/generateFileID.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getDroppedFiles/index.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getRelativePath.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getFileNameAndExtension.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getFileType.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getSocketHost.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getTextDirection.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/getTimeStamp.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/hasProperty.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/isDOMElement.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/isNetworkError.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/mimeTypes.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/settle.js","webpack://__ember_auto_import__/node_modules/@uppy/utils/lib/toArray.js","webpack://__ember_auto_import__/node_modules/@uppy/xhr-upload/lib/index.js","webpack://__ember_auto_import__/node_modules/@uppy/xhr-upload/lib/locale.js","webpack://__ember_auto_import__/node_modules/nanoid/non-secure/index.cjs"],"names":["n","window","document","undefined","_REVERSE_MAP","_MAP","_KEYCODE_MAP","_SHIFT_MAP","$","_","_SPECIAL_ALIASES","option","command","return","escape","plus","mod","test","navigator","platform","_globalCallbacks","i","toString","ItsATrap","prototype","bind","keys","callback","action","self","this","Array","_bindMultiple","call","unbind","trigger","_directMap","reset","_callbacks","destroy","_removeEvent","target","_handleKeyEvent","stopCallback","e","element","combo","sequence","paused","className","indexOf","_belongsTo","composedPath","initialEventTarget","tagName","isContentEditable","handleKey","_handleKey","apply","arguments","addKeycodes","object","key","hasOwnProperty","pause","unpause","bindGlobal","length","module","exports","define","t","r","s","_addEvent","type","addEventListener","attachEvent","removeEventListener","detachEvent","_characterFromEvent","character","String","fromCharCode","which","shiftKey","toLowerCase","_isModifier","_pickBestAction","modifiers","_getKeyInfo","combination","replace","split","push","ancestor","parentNode","targetElement","_resetTimer","_sequenceLevels","_ignoreNextKeyup","_ignoreNextKeypress","_nextExpectedAction","_resetSequences","doNotReset","activeSequences","_getMatches","sequenceName","level","modifiers1","modifiers2","matches","seq","metaKey","ctrlKey","sort","join","deleteCombo","deleteSequence","splice","_fireCallback","srcElement","preventDefault","returnValue","stopPropagation","cancelBubble","_bindSingle","info","_increaseSequence","nextAction","clearTimeout","setTimeout","_callbackAndReset","wrappedCallback","callbacks","maxLevel","processedSequenceCallback","Math","max","ignoreThisKeypress","keyCode","altKey","combinations","d","fi","k","kZ","w","o","a","l","c","u","p","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","node","isOffsetParentAnElement","isHTMLElement","offsetParentIsScaled","rect","getBoundingClientRect","scaleX","round","width","offsetWidth","scaleY","height","offsetHeight","documentElement","getDocumentElement","scroll","scrollLeft","scrollTop","offsets","x","y","getNodeName","isScrollParent","getWindow","getWindowScroll","clientLeft","clientTop","getWindowScrollBarX","left","top","order","map","Map","visited","Set","result","modifier","add","name","concat","requires","requiresIfExists","forEach","dep","has","depModifier","get","set","DEFAULT_OPTIONS","placement","strategy","areValidElements","_len","args","_key","some","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","reference","popper","options","fn","pending","state","orderedModifiers","Object","assign","modifiersData","elements","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","isElement","listScrollParents","contextElement","merged","modifierPhases","acc","phase","filter","reduce","current","existing","data","m","enabled","_ref3","_ref3$options","effect","cleanupFn","update","forceUpdate","_state$elements","rects","getOffsetParent","getLayoutRect","index","_state$orderedModifie","_state$orderedModifie2","_options","Promise","resolve","then","onFirstUpdate","createPopper","contains","parent","child","rootNode","getRootNode","isShadowRoot","next","isSameNode","host","Z","includeScale","right","bottom","getComputedStyle","ownerDocument","clientRect","abs","offsetLeft","offsetTop","nodeName","isTableElement","getTrueOffsetParent","position","isFirefox","userAgent","currentNode","getParentNode","css","transform","perspective","contain","willChange","assignedSlot","defaultView","win","pageXOffset","pageYOffset","Element","HTMLElement","ShadowRoot","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","body","list","_element$ownerDocumen","scrollParent","isBody","visualViewport","updatedList","auto","basePlacements","start","end","clippingParents","viewport","variationPlacements","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","eventListeners","popperOffsets","computeStyles","applyStyles","_ref","style","value","removeAttribute","setAttribute","_ref2","initialStyles","margin","arrow","property","attribute","h","_state$modifiersData$","arrowElement","basePlacement","getBasePlacement","axis","getMainAxisFromPlacement","len","paddingObject","padding","mergePaddingObject","expandToHashMap","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","min","center","offset","within","axisProp","centerOffset","_options$element","querySelector","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","getVariation","passive","_options$scroll","_options$resize","resize","hash","getOppositePlacement","matched","getOppositeVariationPlacement","_skip","_options$mainAxis","mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","boundary","rootBoundary","altBoundary","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","detectOverflow","b","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","find","slice","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","preventOverflow","referenceOverflow","elementContext","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","_options$offset","invertDistance","skidding","distance","_data$state$placement","computeOffsets","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","getFreshSideObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","mathMin","mathMax","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","f","flip","hide","commonX","commonY","rectToClientRect","getClientRectFromMixedType","clippingParent","html","winScroll","scrollWidth","scrollHeight","direction","getDocumentRect","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","_options$altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","firstClippingParent","clippingRect","accRect","getClippingRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","hashMap","Fp","NM","VV","v","num","isNaN","TypeError","neg","units","exponent","floor","log","Number","pow","unit","toFixed","undef","nativeSplit","compliantExecNpcg","exec","str","separator","limit","separator2","match","lastIndex","lastLength","output","flags","ignoreCase","multiline","extended","sticky","lastLastIndex","RegExp","source","DEFAULT","require","parseStyle","isNull","obj","FilterCSS","ret","whiteList","onAttr","onIgnoreAttr","safeAttrValue","process","sourcePosition","isWhite","opts","REGEXP_URL_JAVASCRIPT","getDefaultWhiteList","filterCSS","trimRight","cssLength","isParenthesisOpen","lastPos","retCSS","addNewAttr","trim","j","arr","item","scope","hashKey","elem","doccy","topLevel","global","minDoc","_create","_handlebarsRuntime2","create","hb","compile","input","_handlebarsCompilerCompiler","precompile","AST","_handlebarsCompilerAst2","Compiler","JavaScriptCompiler","_handlebarsCompilerJavascriptCompiler2","Parser","_handlebarsCompilerBase","parse","parseWithoutProcessing","inst","_handlebarsNoConflict2","Visitor","_handlebarsCompilerVisitor2","default","base","Utils","runtime","HandlebarsEnvironment","extend","SafeString","_handlebarsSafeString2","Exception","_handlebarsException2","escapeExpression","VM","template","spec","VERSION","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","objectType","helpers","partials","decorators","_helpers","_decorators","constructor","logger","_logger2","registerHelper","_utils","unregisterHelper","registerPartial","partial","unregisterPartial","registerDecorator","unregisterDecorator","resetLoggedPropertyAccesses","_internalProtoAccess","createFrame","helperExpression","params","scopedId","path","original","simpleId","parts","depth","ast","accept","Helpers","parser","_parser2","yy","locInfo","SourceLocation","srcName","SourceNode","castChunk","chunk","codeGen","loc","wrap","CodeGen","srcFile","line","column","chunks","src","prepend","toStringWithSourceMap","code","isEmpty","unshift","merge","empty","each","iter","currentLocation","functionCall","generateList","quotedString","objectLiteral","pairs","_this","entries","generateArray","env","compat","useDepths","environment","compiled","compileInput","templateSpec","context","execOptions","_setup","setupOptions","_child","blockParams","depths","argEquals","transformLiteralToPath","sexpr","literal","compiler","equals","other","opcodes","opcode","otherOpcode","children","guid","program","sourceNode","stringParams","trackIds","knownHelpers","helperMissing","blockHelperMissing","if","unless","with","lookup","compileProgram","usePartial","shift","Program","bodyLength","isSimple","BlockStatement","block","inverse","classifySexpr","helperSexpr","simpleSexpr","ambiguousSexpr","DecoratorBlock","decorator","setupFullMustacheParams","useDecorators","PartialStatement","explicitPartialContext","partialName","isDynamic","indent","preventIndent","PartialBlockStatement","partialBlock","MustacheStatement","mustache","SubExpression","escaped","noEscape","Decorator","ContentStatement","content","CommentStatement","isBlock","strict","knownHelpersOnly","falsy","_ast2","PathExpression","addDepth","scoped","blockParamId","blockParamIndex","StringLiteral","string","NumberLiteral","number","BooleanLiteral","bool","UndefinedLiteral","NullLiteral","Hash","pushParam","isBlockParam","isHelper","isEligible","_name","pushParams","val","blockParamChild","omitEmpty","param","first_line","first_column","last_line","last_column","token","substring","open","close","charAt","stripComment","comment","preparePath","dig","part","isLiteral","strip","escapeFlag","openRawBlock","contents","validateClose","openStrip","inverseStrip","closeStrip","openBlock","inverseAndProgram","inverted","chain","statements","firstLoc","lastLoc","__esModule","errorNode","Literal","nameLookup","internalNameLookup","depthedLookup","aliasable","JSON","stringify","compilerInfo","revision","_base","appendToBuffer","location","explicit","initializeBuffer","lookupPropertyFunctionIsUsed","asObject","isChild","programs","environments","preamble","stackSlot","stackVars","aliases","registers","hashes","compileStack","inlineStack","compileChildren","useBlockParams","pushSource","lookupPropertyFunctionVarDeclaration","Function","createFunctionContext","main_d","useData","compilerOptions","file","destName","lastContext","varDeclarations","locals","aliasCount","alias","referenceCount","mergeSource","appendOnly","forceBuffer","appendFirst","sourceSeen","bufferStart","bufferEnd","blockValue","contextName","setupHelperArgs","blockName","popStack","ambiguousBlockValue","flushInline","topStack","lastHelper","appendContent","pendingContent","pendingLocation","append","isInline","replaceStack","local","appendEscaped","getContext","pushContext","pushStackLiteral","lookupOnContext","resolvePath","lookupBlockParam","lookupData","assumeObjects","requireTerminal","stack","_this2","resolvePossibleLambda","pushStringParam","pushString","emptyHash","pushHash","values","types","contexts","ids","popHash","pop","pushLiteral","pushProgram","programExpression","paramSize","foundDecorator","invokeHelper","nonHelper","helper","setupHelper","possibleFunctionCalls","functionLookupCode","itemsSeparatedBy","callParams","items","invokeKnownHelper","invokeAmbiguous","helperCall","useRegister","paramsInit","invokePartial","setupParams","assignToHash","id","pushId","matchExistingProgram","programParams","expr","prefix","createdStack","usedLiteral","incrStack","topStackName","entry","wrapped","inline","blockHelper","objectArgs","hashIds","hashTypes","hashContexts","reservedWords","compilerWords","RESERVED_WORDS","isValidJavaScriptVariableName","handlebars","trace","symbols_","error","root","EOF","program_repetition0","statement","rawBlock","COMMENT","CONTENT","rawBlock_repetition0","END_RAW_BLOCK","OPEN_RAW_BLOCK","helperName","openRawBlock_repetition0","openRawBlock_option0","CLOSE_RAW_BLOCK","block_option0","closeBlock","openInverse","block_option1","OPEN_BLOCK","openBlock_repetition0","openBlock_option0","openBlock_option1","CLOSE","OPEN_INVERSE","openInverse_repetition0","openInverse_option0","openInverse_option1","openInverseChain","OPEN_INVERSE_CHAIN","openInverseChain_repetition0","openInverseChain_option0","openInverseChain_option1","INVERSE","inverseChain","inverseChain_option0","OPEN_ENDBLOCK","OPEN","mustache_repetition0","mustache_option0","OPEN_UNESCAPED","mustache_repetition1","mustache_option1","CLOSE_UNESCAPED","OPEN_PARTIAL","partial_repetition0","partial_option0","openPartialBlock","OPEN_PARTIAL_BLOCK","openPartialBlock_repetition0","openPartialBlock_option0","OPEN_SEXPR","sexpr_repetition0","sexpr_option0","CLOSE_SEXPR","hash_repetition_plus0","hashSegment","ID","EQUALS","OPEN_BLOCK_PARAMS","blockParams_repetition_plus0","CLOSE_BLOCK_PARAMS","dataName","STRING","NUMBER","BOOLEAN","UNDEFINED","NULL","DATA","pathSegments","SEP","$accept","$end","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","prepareProgram","stripFlags","prepareRawBlock","prepareBlock","chained","prepareMustache","preparePartialBlock","table","defaultActions","parseError","Error","vstack","lstack","recovering","lexer","setInput","yylloc","yyloc","ranges","symbol","preErrorSymbol","newState","expected","yyval","lex","errStr","showPosition","text","range","_input","_more","_less","done","conditionStack","ch","unput","lines","substr","oldLines","more","less","pastInput","past","upcomingInput","pre","tempMatch","rules","_currentRules","flex","begin","condition","popState","conditions","topState","pushState","yy_","$avoiding_name_collisions","YY_START","mu","inclusive","emu","com","raw","INITIAL","parents","visitSubExpression","acceptRequired","acceptArray","acceptKey","visitBlock","visitPartial","mutating","array","HashPair","pair","WhitespaceControl","isPrevWhitespace","isRoot","prev","sibling","isNextWhitespace","omitRight","multiple","rightStripped","omitLeft","leftStripped","doStandalone","ignoreStandalone","isRootSeen","_isPrevWhitespace","_isNextWhitespace","openStandalone","closeStandalone","inlineStandalone","firstInverse","lastInverse","_decoratorsInline2","props","container","errorProps","message","endLineNumber","endColumn","tmp","idx","captureStackTrace","lineNumber","defineProperty","enumerable","nop","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","keepHelper","hooks","contextPath","priorKey","execIteration","field","last","first","Symbol","iterator","newContext","it","conditional","includeZero","lookupProperty","createNewLookupObject","sources","createProtoAccessControl","runtimeOptions","defaultMethodWhiteList","__defineGetter__","__defineSetter__","__lookupGetter__","defaultPropertyWhiteList","__proto__","properties","whitelist","_createNewLookupObject","allowedProtoProperties","defaultValue","allowProtoPropertiesByDefault","methods","allowedProtoMethods","allowProtoMethodsByDefault","protoAccessControl","propertyName","protoAccessControlForType","loggedProperties","wrapHelper","transformOptionsFn","methodMap","lookupLevel","levelMap","parseInt","console","method","Handlebars","$Handlebars","noConflict","checkRevision","compilerRevision","currentRevision","runtimeVersions","compilerVersions","templateWasPrecompiledWithCompilerV7","lambda","resolvePartial","extendedOptions","declaredBlockParams","programWrapper","wrapProgram","_parent","mergeIfNeeded","common","nullContext","seal","noop","initData","executeDecorators","isTop","mergedHelpers","_internalWrapHelper","keepHelperInHelpers","allowCallsToHelperMissing","currentPartialBlock","prog","currentDepths","toHTML","possible","badChars","escapeChar","isArray","frame","chr","isFunction","Individual","moduleName","version","versionValue","FUNC_ERROR_TEXT","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","objectToString","nativeMax","nativeMin","now","Date","isObject","toNumber","NaN","valueOf","isBinary","func","wait","leading","trailing","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","time","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","debounced","isInvoking","cancel","flush","MessageBus","me","delayPollTimeout","stopped","lastAjax","ajaxInProgress","started","clientId","random","failCount","later","chunkedBackoff","pollTimeout","totalAjaxFailures","totalAjaxCalls","isHidden","hiddenProperty","prefixes","hasFocus","hasLocalStorage","localStorage","setItem","removeItem","hasonprogress","XMLHttpRequest","onprogress","shouldLongPoll","alwaysLongPoll","shouldLongPollCallback","processMessages","messages","channel","last_id","message_id","global_id","reqSuccess","longPoller","poll","rateLimitedSeconds","gotData","aborted","rateLimited","__seq","longPoll","enableLongPolling","chunked","enableChunkedEncoding","headers","dataType","handle_progress","payload","endChunk","disableChunked","abort","ajax","url","baseUrl","async","messageBus","onProgressListener","xhr","chunkedTimeout","getResponseHeader","responseText","jQuery","ajaxSettings","success","textStatus","status","tryAfter","complete","interval","minPollInterval","callbackInterval","backgroundCallbackInterval","maxPollInterval","minHiddenPollInterval","diagnostics","resume","stop","onVisibilityChange","lastAjaxCall","getItem","deltaAjax","hidden","subscribe","lastId","unsubscribe","glob","removed","keep","wildcard","reMimePartSplit","pattern","emitter","_fns","emit","event","arg1","arg2","arg3","arg4","arg5","arg6","toEmit","out","fns","on","once","one","off","vnodeId","isValidElement","rerenderQueue","defer","prevDebounce","EMPTY_OBJ","EMPTY_ARR","IS_NON_DIMENSIONAL","removeNode","removeChild","createElement","ref","normalizedProps","defaultProps","createVNode","vnode","__","__b","__e","__d","__h","createRef","Fragment","Component","getDomSibling","childIndex","updateParentDomPointers","enqueueRender","debounceRendering","queue","component","commitQueue","oldVNode","oldDom","parentDom","diff","ownerSVGElement","commitRoot","diffChildren","renderResult","newParentVNode","oldParentVNode","globalContext","isSvg","excessDomChildren","isHydrating","childVNode","newDom","firstChildDom","refs","oldChildren","oldChildrenLength","reorderChildren","placeChild","unmount","applyRef","toChildArray","nextDom","sibDom","outer","appendChild","nextSibling","insertBefore","setStyle","setProperty","dom","oldValue","useCapture","cssText","_listeners","eventProxyCapture","eventProxy","newVNode","isNew","oldProps","oldState","snapshot","clearProcessingException","newProps","provider","componentContext","newType","contextType","render","doRender","sub","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","diffElementNodes","diffed","cb","oldHtml","newHtml","nodeType","localName","createTextNode","createElementNS","is","childNodes","dangerouslySetInnerHTML","innerHTML","hydrate","checked","parentVNode","skipRemove","componentWillUnmount","replaceNode","firstChild","cloneElement","createContext","contextId","__c","Consumer","contextValue","Provider","subs","ctx","_props","old","ctor","handled","getDerivedStateFromError","setState","componentDidCatch","__s","__v","animateFill","re","createSingleton","Q","ue","delegate","te","followCursor","se","hideAll","Y","inlinePositioning","ae","roundArrow","le","ROUND_ARROW","CONTENT_CLASS","BACKDROP_CLASS","ARROW_CLASS","SVG_ARROW_CLASS","TOUCH_OPTIONS","capture","TIPPY_DEFAULT_APPEND_TO","getValueAtIndexOrReturn","isType","invokeWithArgsOrReturn","debounce","ms","arg","timeout","removeProperties","clone","normalizeToArray","pushIfUnique","arrayFrom","removeUndefinedProps","div","isMouseEvent","isReferenceElement","_tippy","setTransitionDuration","els","el","transitionDuration","setVisibilityState","getOwnerDocument","elementOrElements","updateTransitionEndListener","box","listener","actualContains","_target$getRootNode","currentInput","isTouch","lastMouseMoveTime","onDocumentTouchStart","performance","onDocumentMouseMove","onWindowBlur","activeElement","blur","isVisible","isIE11","msCrypto","appendTo","aria","expanded","delay","duration","getReferenceClientRect","hideOnClick","ignoreAttributes","interactive","interactiveBorder","interactiveDebounce","moveTransition","onAfterUpdate","onBeforeUpdate","onCreate","onDestroy","onHidden","onHide","onMount","onShow","onShown","onTrigger","onUntrigger","onClickOutside","plugins","popperOptions","showOnCreate","touch","triggerTarget","allowHTML","animation","inertia","maxWidth","role","theme","zIndex","defaultKeys","getExtendedPassedProps","passedProps","pluginProps","plugin","evaluateProps","valueAsString","getAttribute","createArrowElement","setContent","textContent","getChildren","firstElementChild","boxChildren","classList","backdrop","onUpdate","prevProps","nextProps","$$tippy","idCounter","mouseMoveListeners","mountedInstances","createTippy","showTimeout","hideTimeout","scheduleHideAnimationFrame","lastTriggerEvent","currentTransitionEndListener","currentTarget","isVisibleFromClick","didHideDueToDocumentMouseDown","didTouchMove","ignoreOnFirstUpdate","listeners","debouncedOnMouseMove","onMouseMove","popperInstance","isEnabled","isMounted","isShown","clearDelayTimeouts","cancelAnimationFrame","setProps","partialProps","invokeHook","removeListeners","addListeners","cleanupInteractiveMouseListeners","handleAriaExpandedAttribute","handleStyles","createPopperInstance","getNestedPopperTree","nestedPopper","requestAnimationFrame","show","isAlreadyVisible","isDisabled","isTouchAndTouchDisabled","getCurrentTarget","hasAttribute","getIsDefaultRenderFn","visibility","addDocumentPress","transition","getDefaultTemplateChildren","handleAriaContentAttribute","onTransitionEnd","isAlreadyHidden","removeDocumentPress","hideWithInteractivity","getDocument","enable","disable","destroyPopperInstance","V","pluginsHooks","hasAriaExpanded","scheduleShow","getNormalizedTouchSettings","getIsCustomTouchBehavior","_instance$props$rende","getDelay","isShow","fromHide","pointerEvents","hook","shouldInvokePropsHook","pluginHooks","attr","currentValue","nextValue","onDocumentPress","actualTarget","onTouchMove","onTouchStart","doc","eventType","handler","onMouseLeave","Boolean","onBlurOrFocusOut","shouldScheduleClickHide","isEventListenerStopped","wasFocused","scheduleHide","isCursorOverReferenceOrPopper","popperTreeData","_instance$popperInsta","popperState","clientX","clientY","topDistance","bottomDistance","leftDistance","rightDistance","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","relatedTarget","computedReference","querySelectorAll","touchValue","touchDelay","tippy","targets","optionalProps","instances","setDefaultProps","excludedReferenceOrInstance","exclude","isExcluded","originalDuration","applyStylesModifier","tippyInstances","individualInstances","references","triggerTargets","overrides","interceptSetPropsCleanups","shownOnCreate","setTriggerTargets","setReferences","enableInstances","interceptSetProps","singleton","originalSetProps","prepareInstance","overrideProps","prop","_references$index","originalShow","showNext","showPrevious","setInstances","nextInstances","BUBBLING_EVENTS_MAP","mouseover","focusin","click","childTippyInstances","disabled","nativeProps","parentProps","childProps","targetNode","closest","originalDestroy","originalEnable","originalDisable","shouldDestroyChildInstances","transitionDelay","mouseCoords","activeInstances","storeMouseCoords","isInternalUpdate","wasFocusEvent","isUnmounted","getIsInitialBehavior","addListener","removeListener","unsetGetReferenceClientRect","isCursorOverReference","relativeX","relativeY","cursorRectIndex","triedPlacements","currentBasePlacement","boundingRect","clientRects","firstRect","lastRect","minLeft","maxRight","measureRects","getClientRects","addModifier","cursorRect","shouldCheck","prevRefRect","prevPopRect","updatePosition","currentRefRect","currentPopRect","areRectsDifferent","rectA","rectB","patch","VNode","VText","isHook","removeProperty","propName","propValue","previous","previousValue","unhook","attrName","patchObject","getPrototype","replacer","attrValue","getPrototypeOf","applyProperties","isVNode","isVText","isWidget","handleThunk","warn","init","namespace","childNode","noChild","recurse","tree","indices","nodes","rootIndex","indexInRange","vChildren","vChild","nextIndex","count","currentIndex","currentItem","minIndex","maxIndex","ascending","VPatch","updateWidget","destroyWidget","domNode","vpatch","renderOptions","oldRoot","newRoot","vNode","REMOVE","INSERT","newNode","VTEXT","leftVNode","vText","replaceData","replaceChild","WIDGET","widget","updating","VNODE","ORDER","moves","remove","insert","keyMap","removes","from","inserts","to","PROPS","THUNK","domIndex","patchOp","patchRecursive","patches","nodeIndex","applyPatch","patchList","EvStore","EvHook","SoftSetHook","isVThunk","parseTag","softSetHook","evHook","addChild","tag","foreignObject","parentVnode","err","errorString","classIdSplit","notClassId","classes","noId","tagParts","toUpperCase","isThunk","renderThunk","thunk","renderedThunk","renderedA","renderedB","isVHook","VirtualNode","noProperties","noChildren","descendants","hasWidgets","hasThunks","descendantHooks","VirtualPatch","NONE","VirtualText","diffProps","aKey","aValue","bValue","objectDiff","bKey","walk","applyClear","thunks","clearState","appendPatch","propsPatch","aChildren","orderedSet","bChildren","bChildIndex","keyIndex","bKeys","bFree","free","aChildIndex","aKeys","newChildren","freeIndex","freeCount","deletedItems","itemIndex","aItem","lastFreeIndex","newItem","simulateItem","simulate","simulateIndex","wantedItem","aLen","bLen","leftNode","rightNode","destroyWidgets","thunkPatch","WildcardMatcher","hasWild","ii","testParts","partsCount","matcher","nativeIsArray","getDefaultCSSWhiteList","defaultCSSFilter","escapeHtml","REGEXP_LT","REGEXP_GT","REGEXP_QUOTE","REGEXP_QUOTE_2","REGEXP_ATTR_VALUE_1","REGEXP_ATTR_VALUE_COLON","REGEXP_ATTR_VALUE_NEWLINE","REGEXP_DEFAULT_ON_TAG_ATTR_4","REGEXP_DEFAULT_ON_TAG_ATTR_7","REGEXP_DEFAULT_ON_TAG_ATTR_8","escapeQuote","unescapeQuote","escapeHtmlEntities","escapeDangerHtml5Entities","clearNonPrintableCharacter","str2","charCodeAt","friendlyAttrValue","escapeAttrValue","abbr","address","area","article","aside","audio","bdi","bdo","big","blockquote","br","caption","cite","col","colgroup","dd","del","details","dl","dt","em","figcaption","figure","font","footer","h1","h2","h3","h4","h5","h6","header","hr","img","ins","li","mark","nav","ol","section","small","span","summary","sup","strong","strike","tbody","td","tfoot","th","thead","tr","tt","ul","video","onTag","onIgnoreTag","onTagAttr","onIgnoreTagAttr","cssFilter","onIgnoreTagStripAll","StripTagBody","tags","isRemoveAllTag","removeList","posStart","isClosing","rethtml","pos","stripCommentTag","retHtml","stripBlankChar","chars","char","FilterXSS","filterXSS","DedicatedWorkerGlobalScope","getTagName","spaceIndex","REGEXP_ILLEGAL_ATTR_NAME","findNextEqual","findNextQuotationMark","findBeforeEqual","stripQuoteWrap","tagStart","quoteStart","currentPos","currentTagName","currentHtml","chariterator","ic","parseAttr","lastMarkPos","retAttrs","tmpName","addAttr","stripIgnoreTag","allowList","allowCommentTag","stripIgnoreTagBody","attrs","closing","whiteAttrList","attrsHtml","isWhiteAttr","_AbortController","_classPrivateFieldLooseBase","receiver","privateKey","_classPrivateFieldLooseKey","retryDelays","getChunkSize","ceil","size","onStart","onProgress","onPartComplete","onSuccess","onError","ensureInt","_aborted","_initChunks","_createUpload","_resumeUpload","_uploadParts","_retryable","_prepareUploadParts","_uploadPartRetryable","_uploadPart","_onPartProgress","_onPartComplete","_uploadPartBytes","_completeUpload","_abortUpload","_onError","_aborted2","abortController","signal","_initChunks2","desiredChunkSize","minChunkSize","chunkSize","chunkState","uploaded","busy","_createUpload2","createdPromise","createMultipartUpload","createAbortError","uploadId","catch","_resumeUpload2","listParts","PartNumber","Size","etag","ETag","_uploadParts2","isPaused","need","partsInProgress","completeChunks","remainingChunks","minNeeded","candidates","partNumber","prePreparedPart","presignedUrls","_retryable2","before","attempt","after","doAttempt","retryAttempt","_prepareUploadParts2","prepareUploadParts","partNumbers","candidate","_uploadPartRetryable2","_uploadPart2","_onPartProgress2","sent","totalUploaded","_onPartComplete2","_uploadPartBytes2","promise","reject","cleanup","onabort","setRequestHeader","responseType","upload","ev","lengthComputable","loaded","total","send","_completeUpload2","completeMultipartUpload","_abortUpload2","abortMultipartUpload","_onError2","AbortController","_opts","really","_companionClient","_RateLimitedQueue","_Symbol$for","BasePlugin","EventTracker","emitSocketProgress","getSocketHost","MultipartUploader","assertServerError","res","_queueRequestSocketToken","_client","_requestSocketToken","_setCompanionHeaders","for","AwsS3Multipart","uppy","super","writable","client","remote","providerOptions","RequestClient","tus","post","protocol","metadata","meta","setCompanionHeaders","companionHeaders","title","requests","RateLimitedQueue","uploaders","uploaderEvents","uploaderSockets","wrapPromiseFunction","resetUploaderReferences","fileID","assertHost","companionUrl","filename","encodeURIComponent","uploadIdEnc","delete","uploadFile","queuedRequest","cFile","getFile","setFileState","s3Multipart","bytesUploaded","bytesTotal","uploader","uploadObject","uploadResp","uploadURL","run","onFileRemove","onCancelAll","_temp","reason","onFilePause","onPauseAll","onResumeAll","progress","uploadStarted","isRestored","serverToken","connectToServerSocket","socket","Socket","_temp2","onRetry","isOpen","onRetryAll","progressData","errData","fileIDs","promises","isRemote","uploadRemote","all","targetFileID","eventHandler","_this3","install","capabilities","getState","resumableUploads","addPreProcessor","addUploader","uninstall","removePreProcessor","removeUploader","_nonSecure","ProgressTimeout","ErrorWithCause","NetworkError","isNetworkError","buildResponseError","cause","request","_getOptions","_addEventHandlerForFile","_addEventHandlerIfFileStillExists","_uploadLocalFile","_uploadRemoteFile","_getOptions2","_file$xhrUpload","xhrUpload","_addEventHandlerForFile2","eventName","_addEventHandlerIfFileStillExists2","_uploadLocalFile2","formData","formPost","FormData","metaFields","dataWithUpdatedType","fieldName","timer","i18n","seconds","nanoid","validateStatus","getResponseData","responseUrlFieldName","getResponseError","response","endpoint","withCredentials","priority","_uploadRemoteFile2","_uppy","fieldname","fromEntries","httpMethod","useFormData","internalRateLimitedQueue","resp","MiniXHRUpload","isXml","locale","getXmlValue","defaultGetResponseError","warnedSuccessActionStatus","_requests","_uploader","_handleUpload","AwsS3","paramsPromises","onremove","_paramsPromises$id","getUploadParameters","numberOfFiles","allSettled","fields","xhrOpts","finally","defaultLocale","i18nInit","query","URLSearchParams","xhrOptions","origin","responseURL","link","URL","bucket","rawContentType","contentType","mimeType","strings","timedOut","AuthError","isAuthError","tokenStorage","pluginId","tokenKey","companionKeysParams","preAuthToken","getAuthToken","authHeaders","btoa","onReceiveResponse","getPlugin","authenticated","getPluginState","setPluginState","setAuthToken","storage","fetchPreAuthToken","authUrl","queries","hostname","fileUrl","directory","logout","static","defaultOpts","files","serverUrl","serverPattern","companionAllowedHosts","fetchWithNetworkError","handleJSONResponse","jsonPromise","json","errMsg","statusText","requestId","_companionHeaders","_getPostResponseFunc","_getUrl","_errorHandler","_errorHandler2","_getUrl2","skip","allowedHeaders","preflightDone","companion","defaultHeaders","preflight","fetch","headerName","preflightAndHeaders","includes","skipPostResponse","credentials","companionCookiesRule","_err","Accept","search","_Symbol$for2","ee","_queued","_emitter","_isOpen","_socket","_handleMessage","autoOpen","WebSocket","onopen","onclose","onmessage","_classPrivateFieldLoo","SearchProvider","_0","_1","_2","_3","Translator","newOpts","translator","translate","i18nArray","translateArray","addTarget","afterUpdate","RestrictionError","Restricter","prettierBytes","maxFileSize","minFileSize","maxTotalFileSize","maxNumberOfFiles","minNumberOfFiles","allowedFileTypes","requiredMetaFields","isRestriction","AggregateError","globalThis","errors","getOpts","restrictions","validate","smart_count","extension","allowedFileTypesString","validateMinNumberOfFiles","getMissingRequiredMetaFields","fileName","own","missingFields","_preact","findDOMElement","getTextDirection","_updateUI","UIPlugin","mount","callerPluginName","isTargetDOMEl","uppyRootElement","calling","latestArgs","replaceTargetContent","dir","targetPlugin","Target","iteratePlugins","_classPrivateFieldLoo2","_this$el","onUnmount","_loggers","_Restricter","throttle","DefaultStore","getFileType","getFileNameAndExtension","generateFileID","supportsUploadProgress","getFileName","_plugins","_restricter","_storeUnsubscribe","_preProcessors","_uploaders","_postProcessors","_informAndEmit","_checkRequiredMetaFieldsOnFile","_checkRequiredMetaFields","_assertNewUploadAllowed","_checkAndCreateFileStateObject","_startIfAutoProceed","_addListeners","_updateOnlineStatus","_getUpload","_removeUpload","_runUpload","Uppy","_runUpload2","_removeUpload2","_getUpload2","_addListeners2","_startIfAutoProceed2","_checkAndCreateFileStateObject2","_assertNewUploadAllowed2","_checkRequiredMetaFields2","_checkRequiredMetaFieldsOnFile2","_informAndEmit2","updateOnlineStatus","autoProceed","allowMultipleUploads","allowMultipleUploadBatches","debug","onBeforeFileAdded","currentFile","onBeforeUpload","store","justErrorsLogger","infoTimeout","debugLogger","calculateProgress","currentUploads","allowNewUpload","uploadProgress","individualCancellation","totalProgress","recoveredState","prevState","nextState","updateAll","setMeta","resetProgress","defaultProgress","percentage","uploadComplete","updatedFiles","updatedFile","addPostProcessor","removePostProcessor","updatedMeta","setFileMeta","newMeta","getFiles","getObjectOfFilesPerState","filesObject","inProgressFiles","newFiles","startedFiles","preprocess","postprocess","uploadStartedFiles","pausedFiles","completeFiles","erroredFiles","inProgressNotPausedFiles","processingFiles","isUploadStarted","isAllComplete","isAllErrored","isAllPaused","isUploadInProgress","isSomeGhost","isGhost","validateRestrictions","checkIfFileAlreadyExists","addFile","newFile","addFiles","fileDescriptors","subError","removeFiles","updatedUploads","removedFiles","fileIsNotRemoved","uploadFileID","uploadID","newFileIDs","stateUpdate","calculateTotalProgress","removedFileIDs","removeFile","pauseResume","pauseAll","resumeAll","retryAll","filesToRetry","successful","failed","forceAllowNewUpload","cancelAll","retryUpload","canHavePercentage","isFinite","inProgress","sizedFiles","unsizedFiles","progressMax","currentProgress","totalSize","averageSize","uploadedSize","onLine","wasOffline","getID","use","Plugin","msg","existsPluginAlready","foundPlugin","flat","removePlugin","findIndex","updatedState","hideInfo","isComplexMessage","restore","addResultData","currentUpload","onBeforeUploadResult","currentlyUploadingFiles","flatMap","curr","waitingFileIDs","missingRequiredMetaFields","fileDescriptor","fileType","fileExtension","preview","onBeforeFileAddedResult","filesArray","scheduledAutoProceed","errorHandler","errorMsg","newError","mode","step","restoreStep","steps","updatedUpload","addBulkFilesFailed","youCanOnlyUploadX","youHaveToAtLeastSelectX","exceedsSize","missingRequiredMetaField","missingRequiredMetaFieldOnFile","inferiorSize","youCanOnlyUploadFileTypes","noMoreFilesAllowed","noDuplicates","companionError","authAborted","companionUnauthorizeHint","failedToUpload","noInternetConnection","connectedToInternet","noFilesFound","selectX","allFilesFromFolderNamed","openFolderNamed","logOut","resetFilter","loading","authenticateWithTitle","authenticateWith","signInWithGoogle","searchImages","enterTextToSearch","emptyFolderAdded","folderAlreadyAdded","folderAdded","getTimeStamp","_len2","_key2","_len3","_key3","_len4","_key4","edgeVersion","major","minor","getDroppedFiles","toArray","isFileTransfer","_event$dataTransfer$t","_event$dataTransfer$t2","dataTransfer","DropTarget","descriptors","relativePath","handleDrop","_this$opts$onDrop","_this$opts","removeDragOverClassTimeout","isDraggingOver","handleRootDrop","executedDropErrorOnce","logDropError","onDrop","handleDragOver","_this$opts$onDragOver","_this$opts2","dropEffect","onDragOver","handleDragLeave","_this$opts$onDragLeav","_this$opts3","onDragLeave","_publish","_publish2","AbortSignal","DOMException","hasProperty","_events","_aliveTimer","_isDone","_onTimedOut","_timeout","timeoutHandler","createCancelError","_activeRequests","_queuedHandlers","_paused","_pauseTimer","_downLimit","_upperLimit","_rateLimitingTimer","_call","_queueNext","_next","_queue","_dequeue","_resume","_increaseLimit","_call2","cancelActive","_queueNext2","queueMicrotask","_next2","_queue2","_dequeue2","Infinity","queueOptions","outerPromise","cancelError","innerPromise","rateLimit","insertReplacement","rx","replacement","newParts","interpolate","phrase","dollarRegex","interpolated","_apply","_apply2","prevLocale","pluralize","locales","_opts$signal","_opts$signal2","_opts$signal3","isDOMElement","encodeFilename","suffix","lastModified","webkitGetAsEntryApi","fallbackApi","_dataTransfer$items","getFilesAndDirectoriesFromDirectory","directoryReader","oldEntries","readEntries","newEntries","fileEntry","fullPath","getRelativePath","rootPromises","createPromiseToAddFileOrParseDirectory","isFile","isDirectory","createReader","webkitGetAsEntry","fullFileName","lastDot","lastIndexOf","mimeTypes","_getFileNameAndExtens","socketProtocol","_element","pad","date","hours","getHours","minutes","getMinutes","getSeconds","Node","ELEMENT_NODE","readyState","md","markdown","mp4","mp3","svg","jpg","png","gif","heic","heif","yaml","yml","csv","tsv","tab","avi","mks","mkv","mov","dicom","docm","docx","dot","dotm","dotx","xla","xlam","xlc","xlf","xlm","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xlw","txt","conf","pdf","zip","rar","tar","gz","dmg","resolutions","rejections","resolved","rejected","settle","setTypeInBlob","XHRUpload","bundle","parsedResponse","handleUpload","getOptions","addMetadata","createFormDataUpload","createBundledUpload","currentOpts","uploadBundle","optsFromState","emitError","uploadFiles","customAlphabet","alphabet"],"mappings":"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AI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAC1/VC,eAAgB,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAA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","file":"chunk.984.d8a97ab65164c049c47d.js","sourcesContent":["/*global define:false */\n/**\n * Copyright 2012-2017 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * ItsATrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 2.0.1\n * @url github.com/discourse/itsatrap\n */\n(function(window, document, undefined) {\n  // Check if itsatrap is used inside browser, if not, return\n  if (!window) {\n    return;\n  }\n\n  /**\n   * mapping of special keycodes to their corresponding keys\n   *\n   * everything in this dictionary cannot use keypress events\n   * so it has to be here to map to the correct keycodes for\n   * keyup/keydown events\n   *\n   * @type {Object}\n   */\n  var _MAP = {\n    8: \"backspace\",\n    9: \"tab\",\n    13: \"enter\",\n    16: \"shift\",\n    17: \"ctrl\",\n    18: \"alt\",\n    20: \"capslock\",\n    27: \"esc\",\n    32: \"space\",\n    33: \"pageup\",\n    34: \"pagedown\",\n    35: \"end\",\n    36: \"home\",\n    37: \"left\",\n    38: \"up\",\n    39: \"right\",\n    40: \"down\",\n    45: \"ins\",\n    46: \"del\",\n    91: \"meta\",\n    93: \"meta\",\n    224: \"meta\"\n  };\n\n  /**\n   * mapping for special characters so they can support\n   *\n   * this dictionary is only used incase you want to bind a\n   * keyup or keydown event to one of these keys\n   *\n   * @type {Object}\n   */\n  var _KEYCODE_MAP = {\n    106: \"*\",\n    107: \"+\",\n    109: \"-\",\n    110: \".\",\n    111: \"/\",\n    186: \";\",\n    187: \"=\",\n    188: \",\",\n    189: \"-\",\n    190: \".\",\n    191: \"/\",\n    192: \"`\",\n    219: \"[\",\n    220: \"\\\\\",\n    221: \"]\",\n    222: \"'\"\n  };\n\n  /**\n   * this is a mapping of keys that require shift on a US keypad\n   * back to the non shift equivelents\n   *\n   * this is so you can use keyup events with these keys\n   *\n   * note that this will only work reliably on US keyboards\n   *\n   * @type {Object}\n   */\n  var _SHIFT_MAP = {\n    \"~\": \"`\",\n    \"!\": \"1\",\n    \"@\": \"2\",\n    \"#\": \"3\",\n    $: \"4\",\n    \"%\": \"5\",\n    \"^\": \"6\",\n    \"&\": \"7\",\n    \"*\": \"8\",\n    \"(\": \"9\",\n    \")\": \"0\",\n    _: \"-\",\n    \"+\": \"=\",\n    \":\": \";\",\n    '\"': \"'\",\n    \"<\": \",\",\n    \">\": \".\",\n    \"?\": \"/\",\n    \"|\": \"\\\\\"\n  };\n\n  /**\n   * this is a list of special strings you can use to map\n   * to modifier keys when you specify your keyboard shortcuts\n   *\n   * @type {Object}\n   */\n  var _SPECIAL_ALIASES = {\n    option: \"alt\",\n    command: \"meta\",\n    return: \"enter\",\n    escape: \"esc\",\n    plus: \"+\",\n    mod: /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? \"meta\" : \"ctrl\"\n  };\n\n  /**\n   * variable to store the flipped version of _MAP from above\n   * needed to check if we should use keypress or not when no action\n   * is specified\n   *\n   * @type {Object|undefined}\n   */\n  var _REVERSE_MAP;\n\n  /**\n   * holds a reference to global bindings\n   *\n   * @type {Object|undefined}\n   */\n  var _globalCallbacks = {};\n\n  /**\n   * loop through the f keys, f1 to f19 and add them to the map\n   * programatically\n   */\n  for (var i = 1; i < 20; ++i) {\n    _MAP[111 + i] = \"f\" + i;\n  }\n\n  /**\n   * loop through to map numbers on the numeric keypad\n   */\n  for (i = 0; i <= 9; ++i) {\n    // This needs to use a string cause otherwise since 0 is falsey\n    // itsatrap will never fire for numpad 0 pressed as part of a keydown\n    // event.\n    //\n    // @see https://github.com/ccampbell/itsatrap/pull/258\n    _MAP[i + 96] = i.toString();\n  }\n\n  /**\n   * cross browser add event method\n   *\n   * @param {Element|HTMLDocument} object\n   * @param {string} type\n   * @param {EventListenerOrEventListenerObject} callback\n   * @returns void\n   */\n  function _addEvent(object, type, callback) {\n    if (object.addEventListener) {\n      object.addEventListener(type, callback, false);\n      return;\n    }\n\n    object.attachEvent(\"on\" + type, callback);\n  }\n\n  /**\n   * cross browser remove event method\n   *\n   * @param {Element|HTMLDocument} object\n   * @param {string} type\n   * @param {EventListenerOrEventListenerObject} callback\n   * @returns void\n   */\n  function _removeEvent(object, type, callback) {\n    if (object.removeEventListener) {\n      object.removeEventListener(type, callback, false);\n      return;\n    }\n    object.detachEvent(\"on\" + type, callback);\n  }\n\n  /**\n   * takes the event and returns the key character\n   *\n   * @param {Event} e\n   * @return {string}\n   */\n  function _characterFromEvent(e) {\n    // for keypress events we should return the character as is\n    if (e.type == \"keypress\") {\n      var character = String.fromCharCode(e.which);\n\n      // if the shift key is not pressed then it is safe to assume\n      // that we want the character to be lowercase.  this means if\n      // you accidentally have caps lock on then your key bindings\n      // will continue to work\n      //\n      // the only side effect that might not be desired is if you\n      // bind something like 'A' cause you want to trigger an\n      // event when capital A is pressed caps lock will no longer\n      // trigger the event.  shift+a will though.\n      if (!e.shiftKey) {\n        character = character.toLowerCase();\n      }\n\n      return character;\n    }\n\n    // for non keypress events the special maps are needed\n    if (_MAP[e.which]) {\n      return _MAP[e.which];\n    }\n\n    if (_KEYCODE_MAP[e.which]) {\n      return _KEYCODE_MAP[e.which];\n    }\n\n    // if it is not in the special map\n\n    // with keydown and keyup events the character seems to always\n    // come in as an uppercase character whether you are pressing shift\n    // or not.  we should make sure it is always lowercase for comparisons\n    return String.fromCharCode(e.which).toLowerCase();\n  }\n\n  /**\n   * checks if two arrays are equal\n   *\n   * @param {Array} modifiers1\n   * @param {Array} modifiers2\n   * @returns {boolean}\n   */\n  function _modifiersMatch(modifiers1, modifiers2) {\n    return modifiers1.sort().join(\",\") === modifiers2.sort().join(\",\");\n  }\n\n  /**\n   * takes a key event and figures out what the modifiers are\n   *\n   * @param {Event} e\n   * @returns {Array}\n   */\n  function _eventModifiers(e) {\n    var modifiers = [];\n\n    if (e.shiftKey) {\n      modifiers.push(\"shift\");\n    }\n\n    if (e.altKey) {\n      modifiers.push(\"alt\");\n    }\n\n    if (e.ctrlKey) {\n      modifiers.push(\"ctrl\");\n    }\n\n    if (e.metaKey) {\n      modifiers.push(\"meta\");\n    }\n\n    return modifiers;\n  }\n\n  /**\n   * prevents default for this event\n   *\n   * @param {Event} e\n   * @returns void\n   */\n  function _preventDefault(e) {\n    if (e.preventDefault) {\n      e.preventDefault();\n      return;\n    }\n\n    e.returnValue = false;\n  }\n\n  /**\n   * stops propogation for this event\n   *\n   * @param {Event} e\n   * @returns void\n   */\n  function _stopPropagation(e) {\n    if (e.stopPropagation) {\n      e.stopPropagation();\n      return;\n    }\n\n    e.cancelBubble = true;\n  }\n\n  /**\n   * determines if the keycode specified is a modifier key or not\n   *\n   * @param {string} key\n   * @returns {boolean}\n   */\n  function _isModifier(key) {\n    return key == \"shift\" || key == \"ctrl\" || key == \"alt\" || key == \"meta\";\n  }\n\n  /**\n   * reverses the map lookup so that we can look for specific keys\n   * to see what can and can't use keypress\n   *\n   * @return {Object}\n   */\n  function _getReverseMap() {\n    if (!_REVERSE_MAP) {\n      _REVERSE_MAP = {};\n      for (var key in _MAP) {\n        // pull out the numeric keypad from here cause keypress should\n        // be able to detect the keys from the character\n        if (key > 95 && key < 112) {\n          continue;\n        }\n\n        if (_MAP.hasOwnProperty(key)) {\n          _REVERSE_MAP[_MAP[key]] = key;\n        }\n      }\n    }\n    return _REVERSE_MAP;\n  }\n\n  /**\n   * picks the best action based on the key combination\n   *\n   * @param {string} key - character for key\n   * @param {Array} modifiers\n   * @param {string=} action passed in\n   */\n  function _pickBestAction(key, modifiers, action) {\n    // if no action was picked in we should try to pick the one\n    // that we think would work best for this key\n    if (!action) {\n      action = _getReverseMap()[key] ? \"keydown\" : \"keypress\";\n    }\n\n    // modifier keys don't work as expected with keypress,\n    // switch to keydown\n    if (action == \"keypress\" && modifiers.length) {\n      action = \"keydown\";\n    }\n\n    return action;\n  }\n\n  /**\n   * Converts from a string key combination to an array\n   *\n   * @param  {string} combination like \"command+shift+l\"\n   * @return {Array}\n   */\n  function _keysFromString(combination) {\n    if (combination === \"+\") {\n      return [\"+\"];\n    }\n\n    combination = combination.replace(/\\+{2}/g, \"+plus\");\n    return combination.split(\"+\");\n  }\n\n  /**\n   * Gets info for a specific key combination\n   *\n   * @param  {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n   * @param  {string=} action\n   * @returns {Object}\n   */\n  function _getKeyInfo(combination, action) {\n    var keys;\n    var key;\n    var i;\n    var modifiers = [];\n\n    // take the keys from this pattern and figure out what the actual\n    // pattern is all about\n    keys = _keysFromString(combination);\n\n    for (i = 0; i < keys.length; ++i) {\n      key = keys[i];\n\n      // normalize key names\n      if (_SPECIAL_ALIASES[key]) {\n        key = _SPECIAL_ALIASES[key];\n      }\n\n      // if this is not a keypress event then we should\n      // be smart about using shift keys\n      // this will only work for US keyboards however\n      if (action && action != \"keypress\" && _SHIFT_MAP[key]) {\n        key = _SHIFT_MAP[key];\n        modifiers.push(\"shift\");\n      }\n\n      // if this key is a modifier then add it to the list of modifiers\n      if (_isModifier(key)) {\n        modifiers.push(key);\n      }\n    }\n\n    // depending on what the key combination is\n    // we will try to pick the best event for it\n    action = _pickBestAction(key, modifiers, action);\n\n    return {\n      key: key,\n      modifiers: modifiers,\n      action: action\n    };\n  }\n\n  function _belongsTo(element, ancestor) {\n    if (element === null || element === document) {\n      return false;\n    }\n\n    if (element === ancestor) {\n      return true;\n    }\n\n    return _belongsTo(element.parentNode, ancestor);\n  }\n\n  function ItsATrap(targetElement) {\n    var self = this;\n\n    targetElement = targetElement || document;\n\n    if (!(self instanceof ItsATrap)) {\n      return new ItsATrap(targetElement);\n    }\n\n    /**\n     * element to attach key events to\n     *\n     * @type {Element}\n     */\n    self.target = targetElement;\n\n    /**\n     * a list of all the callbacks setup via ItsATrap.bind()\n     *\n     * @type {Object}\n     */\n    self._callbacks = {};\n\n    /**\n     * direct map of string combinations to callbacks used for trigger()\n     *\n     * @type {Object}\n     */\n    self._directMap = {};\n\n    /**\n     * keeps track of what level each sequence is at since multiple\n     * sequences can start out with the same sequence\n     *\n     * @type {Object}\n     */\n    var _sequenceLevels = {};\n\n    /**\n     * variable to store the setTimeout call\n     *\n     * @type {null|number}\n     */\n    var _resetTimer;\n\n    /**\n     * temporary state where we will ignore the next keyup\n     *\n     * @type {boolean|string}\n     */\n    var _ignoreNextKeyup = false;\n\n    /**\n     * temporary state where we will ignore the next keypress\n     *\n     * @type {boolean}\n     */\n    var _ignoreNextKeypress = false;\n\n    /**\n     * are we currently inside of a sequence?\n     * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n     *\n     * @type {boolean|string}\n     */\n    var _nextExpectedAction = false;\n\n    /**\n     * resets all sequence counters except for the ones passed in\n     *\n     * @param {Object} doNotReset\n     * @returns void\n     */\n    function _resetSequences(doNotReset) {\n      doNotReset = doNotReset || {};\n\n      var activeSequences = false,\n        key;\n\n      for (key in _sequenceLevels) {\n        if (doNotReset[key]) {\n          activeSequences = true;\n          continue;\n        }\n        _sequenceLevels[key] = 0;\n      }\n\n      if (!activeSequences) {\n        _nextExpectedAction = false;\n      }\n    }\n\n    /**\n     * finds all callbacks that match based on the keycode, modifiers,\n     * and action\n     *\n     * @param {string} character\n     * @param {Array} modifiers\n     * @param {Event|Object} e\n     * @param {string=} sequenceName - name of the sequence we are looking for\n     * @param {string=} combination\n     * @param {number=} level\n     * @returns {Array}\n     */\n    function _getMatches(\n      character,\n      modifiers,\n      e,\n      sequenceName,\n      combination,\n      level\n    ) {\n      var i;\n      var callback;\n      var matches = [];\n      var action = e.type;\n\n      // if there are no events related to this keycode\n      if (!self._callbacks[character]) {\n        return [];\n      }\n\n      // if a modifier key is coming up on its own we should allow it\n      if (action == \"keyup\" && _isModifier(character)) {\n        modifiers = [character];\n      }\n\n      // loop through all callbacks for the key that was pressed\n      // and see if any of them match\n      for (i = 0; i < self._callbacks[character].length; ++i) {\n        callback = self._callbacks[character][i];\n\n        // if a sequence name is not specified, but this is a sequence at\n        // the wrong level then move onto the next match\n        if (\n          !sequenceName &&\n          callback.seq &&\n          _sequenceLevels[callback.seq] != callback.level\n        ) {\n          continue;\n        }\n\n        // if the action we are looking for doesn't match the action we got\n        // then we should keep going\n        if (action != callback.action) {\n          continue;\n        }\n\n        // if this is a keypress event and the meta key and control key\n        // are not pressed that means that we need to only look at the\n        // character, otherwise check the modifiers as well\n        //\n        // chrome will not fire a keypress if meta or control is down\n        // safari will fire a keypress if meta or meta+shift is down\n        // firefox will fire a keypress if meta or control is down\n        if (\n          (action == \"keypress\" && !e.metaKey && !e.ctrlKey) ||\n          _modifiersMatch(modifiers, callback.modifiers)\n        ) {\n          // when you bind a combination or sequence a second time it\n          // should overwrite the first one.  if a sequenceName or\n          // combination is specified in this call it does just that\n          //\n          // @todo make deleting its own method?\n          var deleteCombo = !sequenceName && callback.combo == combination;\n          var deleteSequence =\n            sequenceName &&\n            callback.seq == sequenceName &&\n            callback.level == level;\n          if (deleteCombo || deleteSequence) {\n            self._callbacks[character].splice(i, 1);\n          }\n\n          matches.push(callback);\n        }\n      }\n\n      return matches;\n    }\n\n    /**\n     * actually calls the callback function\n     *\n     * if your callback function returns false this will use the jquery\n     * convention - prevent default and stop propogation on the event\n     *\n     * @param {Function} callback\n     * @param {Event} e\n     * @returns void\n     */\n    function _fireCallback(callback, e, combo, sequence) {\n      // if this event should not happen stop here\n      if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n        return;\n      }\n\n      if (callback(e, combo) === false) {\n        _preventDefault(e);\n        _stopPropagation(e);\n      }\n    }\n\n    /**\n     * handles a character key event\n     *\n     * @param {string} character\n     * @param {Array} modifiers\n     * @param {Event} e\n     * @returns void\n     */\n    self._handleKey = function(character, modifiers, e) {\n      var callbacks = _getMatches(character, modifiers, e);\n      var i;\n      var doNotReset = {};\n      var maxLevel = 0;\n      var processedSequenceCallback = false;\n\n      // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n      for (i = 0; i < callbacks.length; ++i) {\n        if (callbacks[i].seq) {\n          maxLevel = Math.max(maxLevel, callbacks[i].level);\n        }\n      }\n\n      // loop through matching callbacks for this key event\n      for (i = 0; i < callbacks.length; ++i) {\n        // fire for all sequence callbacks\n        // this is because if for example you have multiple sequences\n        // bound such as \"g i\" and \"g t\" they both need to fire the\n        // callback for matching g cause otherwise you can only ever\n        // match the first one\n        if (callbacks[i].seq) {\n          // only fire callbacks for the maxLevel to prevent\n          // subsequences from also firing\n          //\n          // for example 'a option b' should not cause 'option b' to fire\n          // even though 'option b' is part of the other sequence\n          //\n          // any sequences that do not match here will be discarded\n          // below by the _resetSequences call\n          if (callbacks[i].level != maxLevel) {\n            continue;\n          }\n\n          processedSequenceCallback = true;\n\n          // keep a list of which sequences were matches for later\n          doNotReset[callbacks[i].seq] = 1;\n          _fireCallback(\n            callbacks[i].callback,\n            e,\n            callbacks[i].combo,\n            callbacks[i].seq\n          );\n          continue;\n        }\n\n        // if there were no sequence matches but we are still here\n        // that means this is a regular match so we should fire that\n        if (!processedSequenceCallback) {\n          _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n        }\n      }\n\n      // if the key you pressed matches the type of sequence without\n      // being a modifier (ie \"keyup\" or \"keypress\") then we should\n      // reset all sequences that were not matched by this event\n      //\n      // this is so, for example, if you have the sequence \"h a t\" and you\n      // type \"h e a r t\" it does not match.  in this case the \"e\" will\n      // cause the sequence to reset\n      //\n      // modifier keys are ignored because you can have a sequence\n      // that contains modifiers such as \"enter ctrl+space\" and in most\n      // cases the modifier key will be pressed before the next key\n      //\n      // also if you have a sequence such as \"ctrl+b a\" then pressing the\n      // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n      //\n      // the \"keydown\" is expected when there is a modifier, but the\n      // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n      // after and that causes the sequence to reset\n      //\n      // we ignore keypresses in a sequence that directly follow a keydown\n      // for the same character\n      var ignoreThisKeypress = e.type == \"keypress\" && _ignoreNextKeypress;\n      if (\n        e.type == _nextExpectedAction &&\n        !_isModifier(character) &&\n        !ignoreThisKeypress\n      ) {\n        _resetSequences(doNotReset);\n      }\n\n      _ignoreNextKeypress = processedSequenceCallback && e.type == \"keydown\";\n    };\n\n    /**\n     * handles a keydown event\n     *\n     * @param {Event} e\n     * @returns void\n     */\n    self._handleKeyEvent = function(e) {\n      // normalize e.which for key events\n      // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n      if (typeof e.which !== \"number\") {\n        e.which = e.keyCode;\n      }\n\n      var character = _characterFromEvent(e);\n\n      // no character found then stop\n      if (!character) {\n        return;\n      }\n\n      // need to use === for the character check because the character can be 0\n      if (e.type == \"keyup\" && _ignoreNextKeyup === character) {\n        _ignoreNextKeyup = false;\n        return;\n      }\n\n      self.handleKey(character, _eventModifiers(e), e);\n    };\n\n    /**\n     * called to set a 1 second timeout on the specified sequence\n     *\n     * this is so after each key press in the sequence you have 1 second\n     * to press the next key before you have to start over\n     *\n     * @returns void\n     */\n    function _resetSequenceTimer() {\n      clearTimeout(_resetTimer);\n      _resetTimer = setTimeout(_resetSequences, 1000);\n    }\n\n    /**\n     * binds a key sequence to an event\n     *\n     * @param {string} combo - combo specified in bind call\n     * @param {Array} keys\n     * @param {Function} callback\n     * @param {string=} action\n     * @returns void\n     */\n    function _bindSequence(combo, keys, callback, action) {\n      // start off by adding a sequence level record for this combination\n      // and setting the level to 0\n      _sequenceLevels[combo] = 0;\n\n      /**\n       * callback to increase the sequence level for this sequence and reset\n       * all other sequences that were active\n       *\n       * @param {string} nextAction\n       * @returns {Function}\n       */\n      function _increaseSequence(nextAction) {\n        return function() {\n          _nextExpectedAction = nextAction;\n          ++_sequenceLevels[combo];\n          _resetSequenceTimer();\n        };\n      }\n\n      /**\n       * wraps the specified callback inside of another function in order\n       * to reset all sequence counters as soon as this sequence is done\n       *\n       * @param {Event} e\n       * @returns void\n       */\n      function _callbackAndReset(e) {\n        _fireCallback(callback, e, combo);\n\n        // we should ignore the next key up if the action is key down\n        // or keypress.  this is so if you finish a sequence and\n        // release the key the final key will not trigger a keyup\n        if (action !== \"keyup\") {\n          _ignoreNextKeyup = _characterFromEvent(e);\n        }\n\n        // weird race condition if a sequence ends with the key\n        // another sequence begins with\n        setTimeout(_resetSequences, 10);\n      }\n\n      // loop through keys one at a time and bind the appropriate callback\n      // function.  for any key leading up to the final one it should\n      // increase the sequence. after the final, it should reset all sequences\n      //\n      // if an action is specified in the original bind call then that will\n      // be used throughout.  otherwise we will pass the action that the\n      // next key in the sequence should match.  this allows a sequence\n      // to mix and match keypress and keydown events depending on which\n      // ones are better suited to the key provided\n      for (var i = 0; i < keys.length; ++i) {\n        var isFinal = i + 1 === keys.length;\n        var wrappedCallback = isFinal\n          ? _callbackAndReset\n          : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n        _bindSingle(keys[i], wrappedCallback, action, combo, i);\n      }\n    }\n\n    /**\n     * binds a single keyboard combination\n     *\n     * @param {string} combination\n     * @param {Function} callback\n     * @param {string=} action\n     * @param {string=} sequenceName - name of sequence if part of sequence\n     * @param {number=} level - what part of the sequence the command is\n     * @returns void\n     */\n    function _bindSingle(combination, callback, action, sequenceName, level) {\n      // store a direct mapped reference for use with ItsATrap.trigger\n      self._directMap[combination + \":\" + action] = callback;\n\n      // make sure multiple spaces in a row become a single space\n      combination = combination.replace(/\\s+/g, \" \");\n\n      var sequence = combination.split(\" \");\n      var info;\n\n      // if this pattern is a sequence of keys then run through this method\n      // to reprocess each pattern one key at a time\n      if (sequence.length > 1) {\n        _bindSequence(combination, sequence, callback, action);\n        return;\n      }\n\n      info = _getKeyInfo(combination, action);\n\n      // make sure to initialize array if this is the first time\n      // a callback is added for this key\n      self._callbacks[info.key] = self._callbacks[info.key] || [];\n\n      // remove an existing match if there is one\n      _getMatches(\n        info.key,\n        info.modifiers,\n        { type: info.action },\n        sequenceName,\n        combination,\n        level\n      );\n\n      // add this call back to the array\n      // if it is a sequence put it at the beginning\n      // if not put it at the end\n      //\n      // this is important because the way these are processed expects\n      // the sequence ones to come first\n      self._callbacks[info.key][sequenceName ? \"unshift\" : \"push\"]({\n        callback: callback,\n        modifiers: info.modifiers,\n        action: info.action,\n        seq: sequenceName,\n        level: level,\n        combo: combination\n      });\n    }\n\n    /**\n     * binds multiple combinations to the same callback\n     *\n     * @param {Array} combinations\n     * @param {Function} callback\n     * @param {string|undefined} action\n     * @returns void\n     */\n    self._bindMultiple = function(combinations, callback, action) {\n      for (var i = 0; i < combinations.length; ++i) {\n        _bindSingle(combinations[i], callback, action);\n      }\n    };\n\n    // start!\n    _addEvent(targetElement, \"keypress\", self._handleKeyEvent);\n    _addEvent(targetElement, \"keydown\", self._handleKeyEvent);\n    _addEvent(targetElement, \"keyup\", self._handleKeyEvent);\n  }\n\n  /**\n   * binds an event to itsatrap\n   *\n   * can be a single key, a combination of keys separated with +,\n   * an array of keys, or a sequence of keys separated by spaces\n   *\n   * be sure to list the modifier keys first to make sure that the\n   * correct key ends up getting bound (the last key in the pattern)\n   *\n   * @param {string|Array} keys\n   * @param {Function} callback\n   * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n   * @returns void\n   */\n  ItsATrap.prototype.bind = function(keys, callback, action) {\n    var self = this;\n    keys = keys instanceof Array ? keys : [keys];\n    self._bindMultiple.call(self, keys, callback, action);\n    return self;\n  };\n\n  /**\n   * unbinds an event to itsatrap\n   *\n   * the unbinding sets the callback function of the specified key combo\n   * to an empty function and deletes the corresponding key in the\n   * _directMap dict.\n   *\n   * TODO: actually remove this from the _callbacks dictionary instead\n   * of binding an empty function\n   *\n   * the keycombo+action has to be exactly the same as\n   * it was defined in the bind method\n   *\n   * @param {string|Array} keys\n   * @param {string} action\n   * @returns void\n   */\n  ItsATrap.prototype.unbind = function(keys, action) {\n    var self = this;\n    return self.bind.call(self, keys, function() {}, action);\n  };\n\n  /**\n   * triggers an event that has already been bound\n   *\n   * @param {string} keys\n   * @param {string=} action\n   * @returns void\n   */\n  ItsATrap.prototype.trigger = function(keys, action) {\n    var self = this;\n    if (self._directMap[keys + \":\" + action]) {\n      self._directMap[keys + \":\" + action]({}, keys);\n    }\n    return self;\n  };\n\n  /**\n   * resets the library back to its initial state.  this is useful\n   * if you want to clear out the current keyboard shortcuts and bind\n   * new ones - for example if you switch to another page\n   *\n   * @returns void\n   */\n  ItsATrap.prototype.reset = function() {\n    var self = this;\n    self._callbacks = {};\n    self._directMap = {};\n    return self;\n  };\n\n  /**\n   * destroy itsatrap object\n   *\n   * - call reset on the itsatrap object ( removing all binding )\n   * - remove all javascript event listener from target element or document\n   * - remove all reference to target\n   *\n   * @return void\n   */\n\n  ItsATrap.prototype.destroy = function() {\n    var self = this;\n\n    self.reset();\n\n    _removeEvent(self.target, \"keypress\", self._handleKeyEvent);\n    _removeEvent(self.target, \"keydown\", self._handleKeyEvent);\n    _removeEvent(self.target, \"keyup\", self._handleKeyEvent);\n\n    self.target = undefined;\n    self._handleKeyEvent = undefined;\n  };\n\n  /**\n   * should we stop this event before firing off callbacks\n   *\n   * @param {Event} e\n   * @param {Element} element\n   * @return {boolean}\n   */\n  ItsATrap.prototype.stopCallback = function(e, element, combo, sequence) {\n    var self = this;\n\n    if (self.paused) {\n      return true;\n    }\n\n    if (_globalCallbacks[combo] || _globalCallbacks[sequence]) {\n      return false;\n    }\n\n    // if the element has the class \"itsatrap\" then no need to stop\n    if ((\" \" + element.className + \" \").indexOf(\" itsatrap \") > -1) {\n      return false;\n    }\n\n    if (_belongsTo(element, self.target)) {\n      return false;\n    }\n\n    // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,\n    // not the initial event target in the shadow tree. Note that not all events cross the\n    // shadow boundary.\n    // For shadow trees with `mode: 'open'`, the initial event target is the first element in\n    // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event\n    // target cannot be obtained.\n    if (\"composedPath\" in e && typeof e.composedPath === \"function\") {\n      // For open shadow trees, update `element` so that the following check works.\n      var initialEventTarget = e.composedPath()[0];\n      if (initialEventTarget !== e.target) {\n        element = initialEventTarget;\n      }\n    }\n\n    // stop for input, select, and textarea\n    return (\n      element.tagName == \"INPUT\" ||\n      element.tagName == \"SELECT\" ||\n      element.tagName == \"TEXTAREA\" ||\n      element.isContentEditable\n    );\n  };\n\n  /**\n   * exposes _handleKey publicly so it can be overwritten by extensions\n   */\n  ItsATrap.prototype.handleKey = function() {\n    var self = this;\n    return self._handleKey.apply(self, arguments);\n  };\n\n  /**\n   * allow custom key mappings\n   */\n  ItsATrap.addKeycodes = function(object) {\n    for (var key in object) {\n      if (object.hasOwnProperty(key)) {\n        _MAP[key] = object[key];\n      }\n    }\n    _REVERSE_MAP = null;\n  };\n\n  /**\n   * adds a pause and unpause method to ItsATrap\n   * this allows you to enable or disable keyboard shortcuts\n   * without having to reset ItsATrap and rebind everything\n   */\n  ItsATrap.prototype.pause = function() {\n    var self = this;\n    self.paused = true;\n  };\n\n  ItsATrap.prototype.unpause = function() {\n    var self = this;\n    self.paused = false;\n  };\n\n  /**\n   * adds a bindGlobal method to ItsATrap that allows you to\n   * bind specific keyboard shortcuts that will still work\n   * inside a text input field\n   *\n   * usage:\n   * ItsATrap.bindGlobal('ctrl+s', _saveChanges);\n   */\n  ItsATrap.prototype.bindGlobal = function(keys, callback, action) {\n    var self = this;\n    self.bind(keys, callback, action);\n\n    if (keys instanceof Array) {\n      for (var i = 0; i < keys.length; i++) {\n        _globalCallbacks[keys[i]] = true;\n      }\n      return;\n    }\n\n    _globalCallbacks[keys] = true;\n  };\n\n  // expose itsatrap to the global object\n  window.ItsATrap = ItsATrap;\n\n  // expose as a common js module\n  if (typeof module !== \"undefined\" && module.exports) {\n    module.exports = ItsATrap;\n  }\n\n  // expose itsatrap as an AMD module\n  if (typeof define === \"function\" && define.amd) {\n    define(function() {\n      return ItsATrap;\n    });\n  }\n})(\n  typeof window !== \"undefined\" ? window : null,\n  typeof window !== \"undefined\" ? document : null\n);\n","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import { isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nexport default function getBoundingClientRect(element, includeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (isHTMLElement(element) && includeScale) {\n    var offsetHeight = element.offsetHeight;\n    var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n    // Fallback to 1 in case both values are `0`\n\n    if (offsetWidth > 0) {\n      scaleX = round(rect.width) / offsetWidth || 1;\n    }\n\n    if (offsetHeight > 0) {\n      scaleY = round(rect.height) / offsetHeight || 1;\n    }\n  }\n\n  return {\n    width: rect.width / scaleX,\n    height: rect.height / scaleY,\n    top: rect.top / scaleY,\n    right: rect.right / scaleX,\n    bottom: rect.bottom / scaleY,\n    left: rect.left / scaleX,\n    x: rect.left / scaleX,\n    y: rect.top / scaleY\n  };\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","// Adapted from https://github.com/Flet/prettier-bytes/\n// Changing 1000 bytes to 1024, so we can keep uppercase KB vs kB\n// ISC License (c) Dan Flettre https://github.com/Flet/prettier-bytes/blob/master/LICENSE\nmodule.exports = function prettierBytes (num) {\n  if (typeof num !== 'number' || isNaN(num)) {\n    throw new TypeError('Expected a number, got ' + typeof num)\n  }\n\n  var neg = num < 0\n  var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n\n  if (neg) {\n    num = -num\n  }\n\n  if (num < 1) {\n    return (neg ? '-' : '') + num + ' B'\n  }\n\n  var exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1)\n  num = Number(num / Math.pow(1024, exponent))\n  var unit = units[exponent]\n\n  if (num >= 10 || num % 1 === 0) {\n    // Do not show decimals when the number is two-digit, or if the number has no\n    // decimal component.\n    return (neg ? '-' : '') + num.toFixed(0) + ' ' + unit\n  } else {\n    return (neg ? '-' : '') + num.toFixed(1) + ' ' + unit\n  }\n}\n","/*!\n * Cross-Browser Split 1.1.1\n * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>\n * Available under the MIT License\n * ECMAScript compliant, uniform cross-browser split method\n */\n\n/**\n * Splits a string into an array of strings using a regex or string separator. Matches of the\n * separator are not included in the result array. However, if `separator` is a regex that contains\n * capturing groups, backreferences are spliced into the result each time `separator` is matched.\n * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably\n * cross-browser.\n * @param {String} str String to split.\n * @param {RegExp|String} separator Regex or string to use for separating the string.\n * @param {Number} [limit] Maximum number of items to include in the result array.\n * @returns {Array} Array of substrings.\n * @example\n *\n * // Basic use\n * split('a b c d', ' ');\n * // -> ['a', 'b', 'c', 'd']\n *\n * // With limit\n * split('a b c d', ' ', 2);\n * // -> ['a', 'b']\n *\n * // Backreferences in result array\n * split('..word1 word2..', /([a-z]+)(\\d+)/i);\n * // -> ['..', 'word', '1', ' ', 'word', '2', '..']\n */\nmodule.exports = (function split(undef) {\n\n  var nativeSplit = String.prototype.split,\n    compliantExecNpcg = /()??/.exec(\"\")[1] === undef,\n    // NPCG: nonparticipating capturing group\n    self;\n\n  self = function(str, separator, limit) {\n    // If `separator` is not a regex, use `nativeSplit`\n    if (Object.prototype.toString.call(separator) !== \"[object RegExp]\") {\n      return nativeSplit.call(str, separator, limit);\n    }\n    var output = [],\n      flags = (separator.ignoreCase ? \"i\" : \"\") + (separator.multiline ? \"m\" : \"\") + (separator.extended ? \"x\" : \"\") + // Proposed for ES6\n      (separator.sticky ? \"y\" : \"\"),\n      // Firefox 3+\n      lastLastIndex = 0,\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      separator = new RegExp(separator.source, flags + \"g\"),\n      separator2, match, lastIndex, lastLength;\n    str += \"\"; // Type-convert\n    if (!compliantExecNpcg) {\n      // Doesn't need flags gy, but they don't hurt\n      separator2 = new RegExp(\"^\" + separator.source + \"$(?!\\\\s)\", flags);\n    }\n    /* Values for `limit`, per the spec:\n     * If undefined: 4294967295 // Math.pow(2, 32) - 1\n     * If 0, Infinity, or NaN: 0\n     * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n     * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n     * If other: Type-convert, then use the above rules\n     */\n    limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1\n    limit >>> 0; // ToUint32(limit)\n    while (match = separator.exec(str)) {\n      // `separator.lastIndex` is not reliable cross-browser\n      lastIndex = match.index + match[0].length;\n      if (lastIndex > lastLastIndex) {\n        output.push(str.slice(lastLastIndex, match.index));\n        // Fix browsers whose `exec` methods don't consistently return `undefined` for\n        // nonparticipating capturing groups\n        if (!compliantExecNpcg && match.length > 1) {\n          match[0].replace(separator2, function() {\n            for (var i = 1; i < arguments.length - 2; i++) {\n              if (arguments[i] === undef) {\n                match[i] = undef;\n              }\n            }\n          });\n        }\n        if (match.length > 1 && match.index < str.length) {\n          Array.prototype.push.apply(output, match.slice(1));\n        }\n        lastLength = match[0].length;\n        lastLastIndex = lastIndex;\n        if (output.length >= limit) {\n          break;\n        }\n      }\n      if (separator.lastIndex === match.index) {\n        separator.lastIndex++; // Avoid an infinite loop\n      }\n    }\n    if (lastLastIndex === str.length) {\n      if (lastLength || !separator.test(\"\")) {\n        output.push(\"\");\n      }\n    } else {\n      output.push(str.slice(lastLastIndex));\n    }\n    return output.length > limit ? output.slice(0, limit) : output;\n  };\n\n  return self;\n})();\n","/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar DEFAULT = require('./default');\nvar parseStyle = require('./parser');\nvar _ = require('./util');\n\n\n/**\n * 返回值是否为空\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull (obj) {\n  return (obj === undefined || obj === null);\n}\n\n/**\n * 浅拷贝对象\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject (obj) {\n  var ret = {};\n  for (var i in obj) {\n    ret[i] = obj[i];\n  }\n  return ret;\n}\n\n/**\n * 创建CSS过滤器\n *\n * @param {Object} options\n *   - {Object} whiteList\n *   - {Function} onAttr\n *   - {Function} onIgnoreAttr\n *   - {Function} safeAttrValue\n */\nfunction FilterCSS (options) {\n  options = shallowCopyObject(options || {});\n  options.whiteList = options.whiteList || DEFAULT.whiteList;\n  options.onAttr = options.onAttr || DEFAULT.onAttr;\n  options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT.onIgnoreAttr;\n  options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n  this.options = options;\n}\n\nFilterCSS.prototype.process = function (css) {\n  // 兼容各种奇葩输入\n  css = css || '';\n  css = css.toString();\n  if (!css) return '';\n\n  var me = this;\n  var options = me.options;\n  var whiteList = options.whiteList;\n  var onAttr = options.onAttr;\n  var onIgnoreAttr = options.onIgnoreAttr;\n  var safeAttrValue = options.safeAttrValue;\n\n  var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) {\n\n    var check = whiteList[name];\n    var isWhite = false;\n    if (check === true) isWhite = check;\n    else if (typeof check === 'function') isWhite = check(value);\n    else if (check instanceof RegExp) isWhite = check.test(value);\n    if (isWhite !== true) isWhite = false;\n\n    // 如果过滤后 value 为空则直接忽略\n    value = safeAttrValue(name, value);\n    if (!value) return;\n\n    var opts = {\n      position: position,\n      sourcePosition: sourcePosition,\n      source: source,\n      isWhite: isWhite\n    };\n\n    if (isWhite) {\n\n      var ret = onAttr(name, value, opts);\n      if (isNull(ret)) {\n        return name + ':' + value;\n      } else {\n        return ret;\n      }\n\n    } else {\n\n      var ret = onIgnoreAttr(name, value, opts);\n      if (!isNull(ret)) {\n        return ret;\n      }\n\n    }\n  });\n\n  return retCSS;\n};\n\n\nmodule.exports = FilterCSS;\n","/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nfunction getDefaultWhiteList () {\n  // 白名单值说明：\n  // true: 允许该属性\n  // Function: function (val) { } 返回true表示允许该属性，其他值均表示不允许\n  // RegExp: regexp.test(val) 返回true表示允许该属性，其他值均表示不允许\n  // 除上面列出的值外均表示不允许\n  var whiteList = {};\n\n  whiteList['align-content'] = false; // default: auto\n  whiteList['align-items'] = false; // default: auto\n  whiteList['align-self'] = false; // default: auto\n  whiteList['alignment-adjust'] = false; // default: auto\n  whiteList['alignment-baseline'] = false; // default: baseline\n  whiteList['all'] = false; // default: depending on individual properties\n  whiteList['anchor-point'] = false; // default: none\n  whiteList['animation'] = false; // default: depending on individual properties\n  whiteList['animation-delay'] = false; // default: 0\n  whiteList['animation-direction'] = false; // default: normal\n  whiteList['animation-duration'] = false; // default: 0\n  whiteList['animation-fill-mode'] = false; // default: none\n  whiteList['animation-iteration-count'] = false; // default: 1\n  whiteList['animation-name'] = false; // default: none\n  whiteList['animation-play-state'] = false; // default: running\n  whiteList['animation-timing-function'] = false; // default: ease\n  whiteList['azimuth'] = false; // default: center\n  whiteList['backface-visibility'] = false; // default: visible\n  whiteList['background'] = true; // default: depending on individual properties\n  whiteList['background-attachment'] = true; // default: scroll\n  whiteList['background-clip'] = true; // default: border-box\n  whiteList['background-color'] = true; // default: transparent\n  whiteList['background-image'] = true; // default: none\n  whiteList['background-origin'] = true; // default: padding-box\n  whiteList['background-position'] = true; // default: 0% 0%\n  whiteList['background-repeat'] = true; // default: repeat\n  whiteList['background-size'] = true; // default: auto\n  whiteList['baseline-shift'] = false; // default: baseline\n  whiteList['binding'] = false; // default: none\n  whiteList['bleed'] = false; // default: 6pt\n  whiteList['bookmark-label'] = false; // default: content()\n  whiteList['bookmark-level'] = false; // default: none\n  whiteList['bookmark-state'] = false; // default: open\n  whiteList['border'] = true; // default: depending on individual properties\n  whiteList['border-bottom'] = true; // default: depending on individual properties\n  whiteList['border-bottom-color'] = true; // default: current color\n  whiteList['border-bottom-left-radius'] = true; // default: 0\n  whiteList['border-bottom-right-radius'] = true; // default: 0\n  whiteList['border-bottom-style'] = true; // default: none\n  whiteList['border-bottom-width'] = true; // default: medium\n  whiteList['border-collapse'] = true; // default: separate\n  whiteList['border-color'] = true; // default: depending on individual properties\n  whiteList['border-image'] = true; // default: none\n  whiteList['border-image-outset'] = true; // default: 0\n  whiteList['border-image-repeat'] = true; // default: stretch\n  whiteList['border-image-slice'] = true; // default: 100%\n  whiteList['border-image-source'] = true; // default: none\n  whiteList['border-image-width'] = true; // default: 1\n  whiteList['border-left'] = true; // default: depending on individual properties\n  whiteList['border-left-color'] = true; // default: current color\n  whiteList['border-left-style'] = true; // default: none\n  whiteList['border-left-width'] = true; // default: medium\n  whiteList['border-radius'] = true; // default: 0\n  whiteList['border-right'] = true; // default: depending on individual properties\n  whiteList['border-right-color'] = true; // default: current color\n  whiteList['border-right-style'] = true; // default: none\n  whiteList['border-right-width'] = true; // default: medium\n  whiteList['border-spacing'] = true; // default: 0\n  whiteList['border-style'] = true; // default: depending on individual properties\n  whiteList['border-top'] = true; // default: depending on individual properties\n  whiteList['border-top-color'] = true; // default: current color\n  whiteList['border-top-left-radius'] = true; // default: 0\n  whiteList['border-top-right-radius'] = true; // default: 0\n  whiteList['border-top-style'] = true; // default: none\n  whiteList['border-top-width'] = true; // default: medium\n  whiteList['border-width'] = true; // default: depending on individual properties\n  whiteList['bottom'] = false; // default: auto\n  whiteList['box-decoration-break'] = true; // default: slice\n  whiteList['box-shadow'] = true; // default: none\n  whiteList['box-sizing'] = true; // default: content-box\n  whiteList['box-snap'] = true; // default: none\n  whiteList['box-suppress'] = true; // default: show\n  whiteList['break-after'] = true; // default: auto\n  whiteList['break-before'] = true; // default: auto\n  whiteList['break-inside'] = true; // default: auto\n  whiteList['caption-side'] = false; // default: top\n  whiteList['chains'] = false; // default: none\n  whiteList['clear'] = true; // default: none\n  whiteList['clip'] = false; // default: auto\n  whiteList['clip-path'] = false; // default: none\n  whiteList['clip-rule'] = false; // default: nonzero\n  whiteList['color'] = true; // default: implementation dependent\n  whiteList['color-interpolation-filters'] = true; // default: auto\n  whiteList['column-count'] = false; // default: auto\n  whiteList['column-fill'] = false; // default: balance\n  whiteList['column-gap'] = false; // default: normal\n  whiteList['column-rule'] = false; // default: depending on individual properties\n  whiteList['column-rule-color'] = false; // default: current color\n  whiteList['column-rule-style'] = false; // default: medium\n  whiteList['column-rule-width'] = false; // default: medium\n  whiteList['column-span'] = false; // default: none\n  whiteList['column-width'] = false; // default: auto\n  whiteList['columns'] = false; // default: depending on individual properties\n  whiteList['contain'] = false; // default: none\n  whiteList['content'] = false; // default: normal\n  whiteList['counter-increment'] = false; // default: none\n  whiteList['counter-reset'] = false; // default: none\n  whiteList['counter-set'] = false; // default: none\n  whiteList['crop'] = false; // default: auto\n  whiteList['cue'] = false; // default: depending on individual properties\n  whiteList['cue-after'] = false; // default: none\n  whiteList['cue-before'] = false; // default: none\n  whiteList['cursor'] = false; // default: auto\n  whiteList['direction'] = false; // default: ltr\n  whiteList['display'] = true; // default: depending on individual properties\n  whiteList['display-inside'] = true; // default: auto\n  whiteList['display-list'] = true; // default: none\n  whiteList['display-outside'] = true; // default: inline-level\n  whiteList['dominant-baseline'] = false; // default: auto\n  whiteList['elevation'] = false; // default: level\n  whiteList['empty-cells'] = false; // default: show\n  whiteList['filter'] = false; // default: none\n  whiteList['flex'] = false; // default: depending on individual properties\n  whiteList['flex-basis'] = false; // default: auto\n  whiteList['flex-direction'] = false; // default: row\n  whiteList['flex-flow'] = false; // default: depending on individual properties\n  whiteList['flex-grow'] = false; // default: 0\n  whiteList['flex-shrink'] = false; // default: 1\n  whiteList['flex-wrap'] = false; // default: nowrap\n  whiteList['float'] = false; // default: none\n  whiteList['float-offset'] = false; // default: 0 0\n  whiteList['flood-color'] = false; // default: black\n  whiteList['flood-opacity'] = false; // default: 1\n  whiteList['flow-from'] = false; // default: none\n  whiteList['flow-into'] = false; // default: none\n  whiteList['font'] = true; // default: depending on individual properties\n  whiteList['font-family'] = true; // default: implementation dependent\n  whiteList['font-feature-settings'] = true; // default: normal\n  whiteList['font-kerning'] = true; // default: auto\n  whiteList['font-language-override'] = true; // default: normal\n  whiteList['font-size'] = true; // default: medium\n  whiteList['font-size-adjust'] = true; // default: none\n  whiteList['font-stretch'] = true; // default: normal\n  whiteList['font-style'] = true; // default: normal\n  whiteList['font-synthesis'] = true; // default: weight style\n  whiteList['font-variant'] = true; // default: normal\n  whiteList['font-variant-alternates'] = true; // default: normal\n  whiteList['font-variant-caps'] = true; // default: normal\n  whiteList['font-variant-east-asian'] = true; // default: normal\n  whiteList['font-variant-ligatures'] = true; // default: normal\n  whiteList['font-variant-numeric'] = true; // default: normal\n  whiteList['font-variant-position'] = true; // default: normal\n  whiteList['font-weight'] = true; // default: normal\n  whiteList['grid'] = false; // default: depending on individual properties\n  whiteList['grid-area'] = false; // default: depending on individual properties\n  whiteList['grid-auto-columns'] = false; // default: auto\n  whiteList['grid-auto-flow'] = false; // default: none\n  whiteList['grid-auto-rows'] = false; // default: auto\n  whiteList['grid-column'] = false; // default: depending on individual properties\n  whiteList['grid-column-end'] = false; // default: auto\n  whiteList['grid-column-start'] = false; // default: auto\n  whiteList['grid-row'] = false; // default: depending on individual properties\n  whiteList['grid-row-end'] = false; // default: auto\n  whiteList['grid-row-start'] = false; // default: auto\n  whiteList['grid-template'] = false; // default: depending on individual properties\n  whiteList['grid-template-areas'] = false; // default: none\n  whiteList['grid-template-columns'] = false; // default: none\n  whiteList['grid-template-rows'] = false; // default: none\n  whiteList['hanging-punctuation'] = false; // default: none\n  whiteList['height'] = true; // default: auto\n  whiteList['hyphens'] = false; // default: manual\n  whiteList['icon'] = false; // default: auto\n  whiteList['image-orientation'] = false; // default: auto\n  whiteList['image-resolution'] = false; // default: normal\n  whiteList['ime-mode'] = false; // default: auto\n  whiteList['initial-letters'] = false; // default: normal\n  whiteList['inline-box-align'] = false; // default: last\n  whiteList['justify-content'] = false; // default: auto\n  whiteList['justify-items'] = false; // default: auto\n  whiteList['justify-self'] = false; // default: auto\n  whiteList['left'] = false; // default: auto\n  whiteList['letter-spacing'] = true; // default: normal\n  whiteList['lighting-color'] = true; // default: white\n  whiteList['line-box-contain'] = false; // default: block inline replaced\n  whiteList['line-break'] = false; // default: auto\n  whiteList['line-grid'] = false; // default: match-parent\n  whiteList['line-height'] = false; // default: normal\n  whiteList['line-snap'] = false; // default: none\n  whiteList['line-stacking'] = false; // default: depending on individual properties\n  whiteList['line-stacking-ruby'] = false; // default: exclude-ruby\n  whiteList['line-stacking-shift'] = false; // default: consider-shifts\n  whiteList['line-stacking-strategy'] = false; // default: inline-line-height\n  whiteList['list-style'] = true; // default: depending on individual properties\n  whiteList['list-style-image'] = true; // default: none\n  whiteList['list-style-position'] = true; // default: outside\n  whiteList['list-style-type'] = true; // default: disc\n  whiteList['margin'] = true; // default: depending on individual properties\n  whiteList['margin-bottom'] = true; // default: 0\n  whiteList['margin-left'] = true; // default: 0\n  whiteList['margin-right'] = true; // default: 0\n  whiteList['margin-top'] = true; // default: 0\n  whiteList['marker-offset'] = false; // default: auto\n  whiteList['marker-side'] = false; // default: list-item\n  whiteList['marks'] = false; // default: none\n  whiteList['mask'] = false; // default: border-box\n  whiteList['mask-box'] = false; // default: see individual properties\n  whiteList['mask-box-outset'] = false; // default: 0\n  whiteList['mask-box-repeat'] = false; // default: stretch\n  whiteList['mask-box-slice'] = false; // default: 0 fill\n  whiteList['mask-box-source'] = false; // default: none\n  whiteList['mask-box-width'] = false; // default: auto\n  whiteList['mask-clip'] = false; // default: border-box\n  whiteList['mask-image'] = false; // default: none\n  whiteList['mask-origin'] = false; // default: border-box\n  whiteList['mask-position'] = false; // default: center\n  whiteList['mask-repeat'] = false; // default: no-repeat\n  whiteList['mask-size'] = false; // default: border-box\n  whiteList['mask-source-type'] = false; // default: auto\n  whiteList['mask-type'] = false; // default: luminance\n  whiteList['max-height'] = true; // default: none\n  whiteList['max-lines'] = false; // default: none\n  whiteList['max-width'] = true; // default: none\n  whiteList['min-height'] = true; // default: 0\n  whiteList['min-width'] = true; // default: 0\n  whiteList['move-to'] = false; // default: normal\n  whiteList['nav-down'] = false; // default: auto\n  whiteList['nav-index'] = false; // default: auto\n  whiteList['nav-left'] = false; // default: auto\n  whiteList['nav-right'] = false; // default: auto\n  whiteList['nav-up'] = false; // default: auto\n  whiteList['object-fit'] = false; // default: fill\n  whiteList['object-position'] = false; // default: 50% 50%\n  whiteList['opacity'] = false; // default: 1\n  whiteList['order'] = false; // default: 0\n  whiteList['orphans'] = false; // default: 2\n  whiteList['outline'] = false; // default: depending on individual properties\n  whiteList['outline-color'] = false; // default: invert\n  whiteList['outline-offset'] = false; // default: 0\n  whiteList['outline-style'] = false; // default: none\n  whiteList['outline-width'] = false; // default: medium\n  whiteList['overflow'] = false; // default: depending on individual properties\n  whiteList['overflow-wrap'] = false; // default: normal\n  whiteList['overflow-x'] = false; // default: visible\n  whiteList['overflow-y'] = false; // default: visible\n  whiteList['padding'] = true; // default: depending on individual properties\n  whiteList['padding-bottom'] = true; // default: 0\n  whiteList['padding-left'] = true; // default: 0\n  whiteList['padding-right'] = true; // default: 0\n  whiteList['padding-top'] = true; // default: 0\n  whiteList['page'] = false; // default: auto\n  whiteList['page-break-after'] = false; // default: auto\n  whiteList['page-break-before'] = false; // default: auto\n  whiteList['page-break-inside'] = false; // default: auto\n  whiteList['page-policy'] = false; // default: start\n  whiteList['pause'] = false; // default: implementation dependent\n  whiteList['pause-after'] = false; // default: implementation dependent\n  whiteList['pause-before'] = false; // default: implementation dependent\n  whiteList['perspective'] = false; // default: none\n  whiteList['perspective-origin'] = false; // default: 50% 50%\n  whiteList['pitch'] = false; // default: medium\n  whiteList['pitch-range'] = false; // default: 50\n  whiteList['play-during'] = false; // default: auto\n  whiteList['position'] = false; // default: static\n  whiteList['presentation-level'] = false; // default: 0\n  whiteList['quotes'] = false; // default: text\n  whiteList['region-fragment'] = false; // default: auto\n  whiteList['resize'] = false; // default: none\n  whiteList['rest'] = false; // default: depending on individual properties\n  whiteList['rest-after'] = false; // default: none\n  whiteList['rest-before'] = false; // default: none\n  whiteList['richness'] = false; // default: 50\n  whiteList['right'] = false; // default: auto\n  whiteList['rotation'] = false; // default: 0\n  whiteList['rotation-point'] = false; // default: 50% 50%\n  whiteList['ruby-align'] = false; // default: auto\n  whiteList['ruby-merge'] = false; // default: separate\n  whiteList['ruby-position'] = false; // default: before\n  whiteList['shape-image-threshold'] = false; // default: 0.0\n  whiteList['shape-outside'] = false; // default: none\n  whiteList['shape-margin'] = false; // default: 0\n  whiteList['size'] = false; // default: auto\n  whiteList['speak'] = false; // default: auto\n  whiteList['speak-as'] = false; // default: normal\n  whiteList['speak-header'] = false; // default: once\n  whiteList['speak-numeral'] = false; // default: continuous\n  whiteList['speak-punctuation'] = false; // default: none\n  whiteList['speech-rate'] = false; // default: medium\n  whiteList['stress'] = false; // default: 50\n  whiteList['string-set'] = false; // default: none\n  whiteList['tab-size'] = false; // default: 8\n  whiteList['table-layout'] = false; // default: auto\n  whiteList['text-align'] = true; // default: start\n  whiteList['text-align-last'] = true; // default: auto\n  whiteList['text-combine-upright'] = true; // default: none\n  whiteList['text-decoration'] = true; // default: none\n  whiteList['text-decoration-color'] = true; // default: currentColor\n  whiteList['text-decoration-line'] = true; // default: none\n  whiteList['text-decoration-skip'] = true; // default: objects\n  whiteList['text-decoration-style'] = true; // default: solid\n  whiteList['text-emphasis'] = true; // default: depending on individual properties\n  whiteList['text-emphasis-color'] = true; // default: currentColor\n  whiteList['text-emphasis-position'] = true; // default: over right\n  whiteList['text-emphasis-style'] = true; // default: none\n  whiteList['text-height'] = true; // default: auto\n  whiteList['text-indent'] = true; // default: 0\n  whiteList['text-justify'] = true; // default: auto\n  whiteList['text-orientation'] = true; // default: mixed\n  whiteList['text-overflow'] = true; // default: clip\n  whiteList['text-shadow'] = true; // default: none\n  whiteList['text-space-collapse'] = true; // default: collapse\n  whiteList['text-transform'] = true; // default: none\n  whiteList['text-underline-position'] = true; // default: auto\n  whiteList['text-wrap'] = true; // default: normal\n  whiteList['top'] = false; // default: auto\n  whiteList['transform'] = false; // default: none\n  whiteList['transform-origin'] = false; // default: 50% 50% 0\n  whiteList['transform-style'] = false; // default: flat\n  whiteList['transition'] = false; // default: depending on individual properties\n  whiteList['transition-delay'] = false; // default: 0s\n  whiteList['transition-duration'] = false; // default: 0s\n  whiteList['transition-property'] = false; // default: all\n  whiteList['transition-timing-function'] = false; // default: ease\n  whiteList['unicode-bidi'] = false; // default: normal\n  whiteList['vertical-align'] = false; // default: baseline\n  whiteList['visibility'] = false; // default: visible\n  whiteList['voice-balance'] = false; // default: center\n  whiteList['voice-duration'] = false; // default: auto\n  whiteList['voice-family'] = false; // default: implementation dependent\n  whiteList['voice-pitch'] = false; // default: medium\n  whiteList['voice-range'] = false; // default: medium\n  whiteList['voice-rate'] = false; // default: normal\n  whiteList['voice-stress'] = false; // default: normal\n  whiteList['voice-volume'] = false; // default: medium\n  whiteList['volume'] = false; // default: medium\n  whiteList['white-space'] = false; // default: normal\n  whiteList['widows'] = false; // default: 2\n  whiteList['width'] = true; // default: auto\n  whiteList['will-change'] = false; // default: auto\n  whiteList['word-break'] = true; // default: normal\n  whiteList['word-spacing'] = true; // default: normal\n  whiteList['word-wrap'] = true; // default: normal\n  whiteList['wrap-flow'] = false; // default: auto\n  whiteList['wrap-through'] = false; // default: wrap\n  whiteList['writing-mode'] = false; // default: horizontal-tb\n  whiteList['z-index'] = false; // default: auto\n\n  return whiteList;\n}\n\n\n/**\n * 匹配到白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onAttr (name, value, options) {\n  // do nothing\n}\n\n/**\n * 匹配到不在白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreAttr (name, value, options) {\n  // do nothing\n}\n\nvar REGEXP_URL_JAVASCRIPT = /javascript\\s*\\:/img;\n\n/**\n * 过滤属性值\n *\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction safeAttrValue(name, value) {\n  if (REGEXP_URL_JAVASCRIPT.test(value)) return '';\n  return value;\n}\n\n\nexports.whiteList = getDefaultWhiteList();\nexports.getDefaultWhiteList = getDefaultWhiteList;\nexports.onAttr = onAttr;\nexports.onIgnoreAttr = onIgnoreAttr;\nexports.safeAttrValue = safeAttrValue;\n","/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar DEFAULT = require('./default');\nvar FilterCSS = require('./css');\n\n\n/**\n * XSS过滤\n *\n * @param {String} css 要过滤的CSS代码\n * @param {Object} options 选项：whiteList, onAttr, onIgnoreAttr\n * @return {String}\n */\nfunction filterCSS (html, options) {\n  var xss = new FilterCSS(options);\n  return xss.process(html);\n}\n\n\n// 输出\nexports = module.exports = filterCSS;\nexports.FilterCSS = FilterCSS;\nfor (var i in DEFAULT) exports[i] = DEFAULT[i];\n\n// 在浏览器端使用\nif (typeof window !== 'undefined') {\n  window.filterCSS = module.exports;\n}\n","/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar _ = require('./util');\n\n\n/**\n * 解析style\n *\n * @param {String} css\n * @param {Function} onAttr 处理属性的函数\n *   参数格式： function (sourcePosition, position, name, value, source)\n * @return {String}\n */\nfunction parseStyle (css, onAttr) {\n  css = _.trimRight(css);\n  if (css[css.length - 1] !== ';') css += ';';\n  var cssLength = css.length;\n  var isParenthesisOpen = false;\n  var lastPos = 0;\n  var i = 0;\n  var retCSS = '';\n\n  function addNewAttr () {\n    // 如果没有正常的闭合圆括号，则直接忽略当前属性\n    if (!isParenthesisOpen) {\n      var source = _.trim(css.slice(lastPos, i));\n      var j = source.indexOf(':');\n      if (j !== -1) {\n        var name = _.trim(source.slice(0, j));\n        var value = _.trim(source.slice(j + 1));\n        // 必须有属性名称\n        if (name) {\n          var ret = onAttr(lastPos, retCSS.length, name, value, source);\n          if (ret) retCSS += ret + '; ';\n        }\n      }\n    }\n    lastPos = i + 1;\n  }\n\n  for (; i < cssLength; i++) {\n    var c = css[i];\n    if (c === '/' && css[i + 1] === '*') {\n      // 备注开始\n      var j = css.indexOf('*/', i + 2);\n      // 如果没有正常的备注结束，则后面的部分全部跳过\n      if (j === -1) break;\n      // 直接将当前位置调到备注结尾，并且初始化状态\n      i = j + 1;\n      lastPos = i + 1;\n      isParenthesisOpen = false;\n    } else if (c === '(') {\n      isParenthesisOpen = true;\n    } else if (c === ')') {\n      isParenthesisOpen = false;\n    } else if (c === ';') {\n      if (isParenthesisOpen) {\n        // 在圆括号里面，忽略\n      } else {\n        addNewAttr();\n      }\n    } else if (c === '\\n') {\n      addNewAttr();\n    }\n  }\n\n  return _.trim(retCSS);\n}\n\nmodule.exports = parseStyle;\n","module.exports = {\n  indexOf: function (arr, item) {\n    var i, j;\n    if (Array.prototype.indexOf) {\n      return arr.indexOf(item);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      if (arr[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  },\n  forEach: function (arr, fn, scope) {\n    var i, j;\n    if (Array.prototype.forEach) {\n      return arr.forEach(fn, scope);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      fn.call(scope, arr[i], i, arr);\n    }\n  },\n  trim: function (str) {\n    if (String.prototype.trim) {\n      return str.trim();\n    }\n    return str.replace(/(^\\s*)|(\\s*$)/g, '');\n  },\n  trimRight: function (str) {\n    if (String.prototype.trimRight) {\n      return str.trimRight();\n    }\n    return str.replace(/(\\s*$)/g, '');\n  }\n};\n","'use strict';\n\nvar OneVersionConstraint = require('individual/one-version');\n\nvar MY_VERSION = '7';\nOneVersionConstraint('ev-store', MY_VERSION);\n\nvar hashKey = '__EV_STORE_KEY@' + MY_VERSION;\n\nmodule.exports = EvStore;\n\nfunction EvStore(elem) {\n    var hash = elem[hashKey];\n\n    if (!hash) {\n        hash = elem[hashKey] = {};\n    }\n\n    return hash;\n}\n","var topLevel = typeof global !== 'undefined' ? global :\n    typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nvar doccy;\n\nif (typeof document !== 'undefined') {\n    doccy = document;\n} else {\n    doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n    if (!doccy) {\n        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n    }\n}\n\nmodule.exports = doccy;\n","import runtime from './handlebars.runtime';\n\n// Compiler imports\nimport AST from './handlebars/compiler/ast';\nimport {\n  parser as Parser,\n  parse,\n  parseWithoutProcessing\n} from './handlebars/compiler/base';\nimport { Compiler, compile, precompile } from './handlebars/compiler/compiler';\nimport JavaScriptCompiler from './handlebars/compiler/javascript-compiler';\nimport Visitor from './handlebars/compiler/visitor';\n\nimport noConflict from './handlebars/no-conflict';\n\nlet _create = runtime.create;\nfunction create() {\n  let hb = _create();\n\n  hb.compile = function(input, options) {\n    return compile(input, options, hb);\n  };\n  hb.precompile = function(input, options) {\n    return precompile(input, options, hb);\n  };\n\n  hb.AST = AST;\n  hb.Compiler = Compiler;\n  hb.JavaScriptCompiler = JavaScriptCompiler;\n  hb.Parser = Parser;\n  hb.parse = parse;\n  hb.parseWithoutProcessing = parseWithoutProcessing;\n\n  return hb;\n}\n\nlet inst = create();\ninst.create = create;\n\nnoConflict(inst);\n\ninst.Visitor = Visitor;\n\ninst['default'] = inst;\n\nexport default inst;\n","import * as base from './handlebars/base';\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\nimport SafeString from './handlebars/safe-string';\nimport Exception from './handlebars/exception';\nimport * as Utils from './handlebars/utils';\nimport * as runtime from './handlebars/runtime';\n\nimport noConflict from './handlebars/no-conflict';\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n  let hb = new base.HandlebarsEnvironment();\n\n  Utils.extend(hb, base);\n  hb.SafeString = SafeString;\n  hb.Exception = Exception;\n  hb.Utils = Utils;\n  hb.escapeExpression = Utils.escapeExpression;\n\n  hb.VM = runtime;\n  hb.template = function(spec) {\n    return runtime.template(spec, hb);\n  };\n\n  return hb;\n}\n\nlet inst = create();\ninst.create = create;\n\nnoConflict(inst);\n\ninst['default'] = inst;\n\nexport default inst;\n","import { createFrame, extend, toString } from './utils';\nimport Exception from './exception';\nimport { registerDefaultHelpers } from './helpers';\nimport { registerDefaultDecorators } from './decorators';\nimport logger from './logger';\nimport { resetLoggedProperties } from './internal/proto-access';\n\nexport const VERSION = '4.7.7';\nexport const COMPILER_REVISION = 8;\nexport const LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexport const REVISION_CHANGES = {\n  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n  2: '== 1.0.0-rc.3',\n  3: '== 1.0.0-rc.4',\n  4: '== 1.x.x',\n  5: '== 2.0.0-alpha.x',\n  6: '>= 2.0.0-beta.1',\n  7: '>= 4.0.0 <4.3.0',\n  8: '>= 4.3.0'\n};\n\nconst objectType = '[object Object]';\n\nexport function HandlebarsEnvironment(helpers, partials, decorators) {\n  this.helpers = helpers || {};\n  this.partials = partials || {};\n  this.decorators = decorators || {};\n\n  registerDefaultHelpers(this);\n  registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n  constructor: HandlebarsEnvironment,\n\n  logger: logger,\n  log: logger.log,\n\n  registerHelper: function(name, fn) {\n    if (toString.call(name) === objectType) {\n      if (fn) {\n        throw new Exception('Arg not supported with multiple helpers');\n      }\n      extend(this.helpers, name);\n    } else {\n      this.helpers[name] = fn;\n    }\n  },\n  unregisterHelper: function(name) {\n    delete this.helpers[name];\n  },\n\n  registerPartial: function(name, partial) {\n    if (toString.call(name) === objectType) {\n      extend(this.partials, name);\n    } else {\n      if (typeof partial === 'undefined') {\n        throw new Exception(\n          `Attempting to register a partial called \"${name}\" as undefined`\n        );\n      }\n      this.partials[name] = partial;\n    }\n  },\n  unregisterPartial: function(name) {\n    delete this.partials[name];\n  },\n\n  registerDecorator: function(name, fn) {\n    if (toString.call(name) === objectType) {\n      if (fn) {\n        throw new Exception('Arg not supported with multiple decorators');\n      }\n      extend(this.decorators, name);\n    } else {\n      this.decorators[name] = fn;\n    }\n  },\n  unregisterDecorator: function(name) {\n    delete this.decorators[name];\n  },\n  /**\n   * Reset the memory of illegal property accesses that have already been logged.\n   * @deprecated should only be used in handlebars test-cases\n   */\n  resetLoggedPropertyAccesses() {\n    resetLoggedProperties();\n  }\n};\n\nexport let log = logger.log;\n\nexport { createFrame, logger };\n","let AST = {\n  // Public API used to evaluate derived attributes regarding AST nodes\n  helpers: {\n    // a mustache is definitely a helper if:\n    // * it is an eligible helper, and\n    // * it has at least one parameter or hash segment\n    helperExpression: function(node) {\n      return (\n        node.type === 'SubExpression' ||\n        ((node.type === 'MustacheStatement' ||\n          node.type === 'BlockStatement') &&\n          !!((node.params && node.params.length) || node.hash))\n      );\n    },\n\n    scopedId: function(path) {\n      return /^\\.|this\\b/.test(path.original);\n    },\n\n    // an ID is simple if it only has one part, and that part is not\n    // `..` or `this`.\n    simpleId: function(path) {\n      return (\n        path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth\n      );\n    }\n  }\n};\n\n// Must be exported as an object rather than the root of the module as the jison lexer\n// must modify the object to operate properly.\nexport default AST;\n","import parser from './parser';\nimport WhitespaceControl from './whitespace-control';\nimport * as Helpers from './helpers';\nimport { extend } from '../utils';\n\nexport { parser };\n\nlet yy = {};\nextend(yy, Helpers);\n\nexport function parseWithoutProcessing(input, options) {\n  // Just return if an already-compiled AST was passed in.\n  if (input.type === 'Program') {\n    return input;\n  }\n\n  parser.yy = yy;\n\n  // Altering the shared object here, but this is ok as parser is a sync operation\n  yy.locInfo = function(locInfo) {\n    return new yy.SourceLocation(options && options.srcName, locInfo);\n  };\n\n  let ast = parser.parse(input);\n\n  return ast;\n}\n\nexport function parse(input, options) {\n  let ast = parseWithoutProcessing(input, options);\n  let strip = new WhitespaceControl(options);\n\n  return strip.accept(ast);\n}\n","/* global define */\nimport { isArray } from '../utils';\n\nlet SourceNode;\n\ntry {\n  /* istanbul ignore next */\n  if (typeof define !== 'function' || !define.amd) {\n    // We don't support this in AMD environments. For these environments, we asusme that\n    // they are running on the browser and thus have no need for the source-map library.\n    let SourceMap = require('source-map');\n    SourceNode = SourceMap.SourceNode;\n  }\n} catch (err) {\n  /* NOP */\n}\n\n/* istanbul ignore if: tested but not covered in istanbul due to dist build  */\nif (!SourceNode) {\n  SourceNode = function(line, column, srcFile, chunks) {\n    this.src = '';\n    if (chunks) {\n      this.add(chunks);\n    }\n  };\n  /* istanbul ignore next */\n  SourceNode.prototype = {\n    add: function(chunks) {\n      if (isArray(chunks)) {\n        chunks = chunks.join('');\n      }\n      this.src += chunks;\n    },\n    prepend: function(chunks) {\n      if (isArray(chunks)) {\n        chunks = chunks.join('');\n      }\n      this.src = chunks + this.src;\n    },\n    toStringWithSourceMap: function() {\n      return { code: this.toString() };\n    },\n    toString: function() {\n      return this.src;\n    }\n  };\n}\n\nfunction castChunk(chunk, codeGen, loc) {\n  if (isArray(chunk)) {\n    let ret = [];\n\n    for (let i = 0, len = chunk.length; i < len; i++) {\n      ret.push(codeGen.wrap(chunk[i], loc));\n    }\n    return ret;\n  } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {\n    // Handle primitives that the SourceNode will throw up on\n    return chunk + '';\n  }\n  return chunk;\n}\n\nfunction CodeGen(srcFile) {\n  this.srcFile = srcFile;\n  this.source = [];\n}\n\nCodeGen.prototype = {\n  isEmpty() {\n    return !this.source.length;\n  },\n  prepend: function(source, loc) {\n    this.source.unshift(this.wrap(source, loc));\n  },\n  push: function(source, loc) {\n    this.source.push(this.wrap(source, loc));\n  },\n\n  merge: function() {\n    let source = this.empty();\n    this.each(function(line) {\n      source.add(['  ', line, '\\n']);\n    });\n    return source;\n  },\n\n  each: function(iter) {\n    for (let i = 0, len = this.source.length; i < len; i++) {\n      iter(this.source[i]);\n    }\n  },\n\n  empty: function() {\n    let loc = this.currentLocation || { start: {} };\n    return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n  },\n  wrap: function(chunk, loc = this.currentLocation || { start: {} }) {\n    if (chunk instanceof SourceNode) {\n      return chunk;\n    }\n\n    chunk = castChunk(chunk, this, loc);\n\n    return new SourceNode(\n      loc.start.line,\n      loc.start.column,\n      this.srcFile,\n      chunk\n    );\n  },\n\n  functionCall: function(fn, type, params) {\n    params = this.generateList(params);\n    return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n  },\n\n  quotedString: function(str) {\n    return (\n      '\"' +\n      (str + '')\n        .replace(/\\\\/g, '\\\\\\\\')\n        .replace(/\"/g, '\\\\\"')\n        .replace(/\\n/g, '\\\\n')\n        .replace(/\\r/g, '\\\\r')\n        .replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n        .replace(/\\u2029/g, '\\\\u2029') +\n      '\"'\n    );\n  },\n\n  objectLiteral: function(obj) {\n    let pairs = [];\n\n    Object.keys(obj).forEach(key => {\n      let value = castChunk(obj[key], this);\n      if (value !== 'undefined') {\n        pairs.push([this.quotedString(key), ':', value]);\n      }\n    });\n\n    let ret = this.generateList(pairs);\n    ret.prepend('{');\n    ret.add('}');\n    return ret;\n  },\n\n  generateList: function(entries) {\n    let ret = this.empty();\n\n    for (let i = 0, len = entries.length; i < len; i++) {\n      if (i) {\n        ret.add(',');\n      }\n\n      ret.add(castChunk(entries[i], this));\n    }\n\n    return ret;\n  },\n\n  generateArray: function(entries) {\n    let ret = this.generateList(entries);\n    ret.prepend('[');\n    ret.add(']');\n\n    return ret;\n  }\n};\n\nexport default CodeGen;\n","/* eslint-disable new-cap */\n\nimport Exception from '../exception';\nimport { isArray, indexOf, extend } from '../utils';\nimport AST from './ast';\n\nconst slice = [].slice;\n\nexport function Compiler() {}\n\n// the foundHelper register will disambiguate helper lookup from finding a\n// function in a context. This is necessary for mustache compatibility, which\n// requires that context functions in blocks are evaluated by blockHelperMissing,\n// and then proceed as if the resulting value was provided to blockHelperMissing.\n\nCompiler.prototype = {\n  compiler: Compiler,\n\n  equals: function(other) {\n    let len = this.opcodes.length;\n    if (other.opcodes.length !== len) {\n      return false;\n    }\n\n    for (let i = 0; i < len; i++) {\n      let opcode = this.opcodes[i],\n        otherOpcode = other.opcodes[i];\n      if (\n        opcode.opcode !== otherOpcode.opcode ||\n        !argEquals(opcode.args, otherOpcode.args)\n      ) {\n        return false;\n      }\n    }\n\n    // We know that length is the same between the two arrays because they are directly tied\n    // to the opcode behavior above.\n    len = this.children.length;\n    for (let i = 0; i < len; i++) {\n      if (!this.children[i].equals(other.children[i])) {\n        return false;\n      }\n    }\n\n    return true;\n  },\n\n  guid: 0,\n\n  compile: function(program, options) {\n    this.sourceNode = [];\n    this.opcodes = [];\n    this.children = [];\n    this.options = options;\n    this.stringParams = options.stringParams;\n    this.trackIds = options.trackIds;\n\n    options.blockParams = options.blockParams || [];\n\n    options.knownHelpers = extend(\n      Object.create(null),\n      {\n        helperMissing: true,\n        blockHelperMissing: true,\n        each: true,\n        if: true,\n        unless: true,\n        with: true,\n        log: true,\n        lookup: true\n      },\n      options.knownHelpers\n    );\n\n    return this.accept(program);\n  },\n\n  compileProgram: function(program) {\n    let childCompiler = new this.compiler(), // eslint-disable-line new-cap\n      result = childCompiler.compile(program, this.options),\n      guid = this.guid++;\n\n    this.usePartial = this.usePartial || result.usePartial;\n\n    this.children[guid] = result;\n    this.useDepths = this.useDepths || result.useDepths;\n\n    return guid;\n  },\n\n  accept: function(node) {\n    /* istanbul ignore next: Sanity code */\n    if (!this[node.type]) {\n      throw new Exception('Unknown type: ' + node.type, node);\n    }\n\n    this.sourceNode.unshift(node);\n    let ret = this[node.type](node);\n    this.sourceNode.shift();\n    return ret;\n  },\n\n  Program: function(program) {\n    this.options.blockParams.unshift(program.blockParams);\n\n    let body = program.body,\n      bodyLength = body.length;\n    for (let i = 0; i < bodyLength; i++) {\n      this.accept(body[i]);\n    }\n\n    this.options.blockParams.shift();\n\n    this.isSimple = bodyLength === 1;\n    this.blockParams = program.blockParams ? program.blockParams.length : 0;\n\n    return this;\n  },\n\n  BlockStatement: function(block) {\n    transformLiteralToPath(block);\n\n    let program = block.program,\n      inverse = block.inverse;\n\n    program = program && this.compileProgram(program);\n    inverse = inverse && this.compileProgram(inverse);\n\n    let type = this.classifySexpr(block);\n\n    if (type === 'helper') {\n      this.helperSexpr(block, program, inverse);\n    } else if (type === 'simple') {\n      this.simpleSexpr(block);\n\n      // now that the simple mustache is resolved, we need to\n      // evaluate it by executing `blockHelperMissing`\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n      this.opcode('emptyHash');\n      this.opcode('blockValue', block.path.original);\n    } else {\n      this.ambiguousSexpr(block, program, inverse);\n\n      // now that the simple mustache is resolved, we need to\n      // evaluate it by executing `blockHelperMissing`\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n      this.opcode('emptyHash');\n      this.opcode('ambiguousBlockValue');\n    }\n\n    this.opcode('append');\n  },\n\n  DecoratorBlock(decorator) {\n    let program = decorator.program && this.compileProgram(decorator.program);\n    let params = this.setupFullMustacheParams(decorator, program, undefined),\n      path = decorator.path;\n\n    this.useDecorators = true;\n    this.opcode('registerDecorator', params.length, path.original);\n  },\n\n  PartialStatement: function(partial) {\n    this.usePartial = true;\n\n    let program = partial.program;\n    if (program) {\n      program = this.compileProgram(partial.program);\n    }\n\n    let params = partial.params;\n    if (params.length > 1) {\n      throw new Exception(\n        'Unsupported number of partial arguments: ' + params.length,\n        partial\n      );\n    } else if (!params.length) {\n      if (this.options.explicitPartialContext) {\n        this.opcode('pushLiteral', 'undefined');\n      } else {\n        params.push({ type: 'PathExpression', parts: [], depth: 0 });\n      }\n    }\n\n    let partialName = partial.name.original,\n      isDynamic = partial.name.type === 'SubExpression';\n    if (isDynamic) {\n      this.accept(partial.name);\n    }\n\n    this.setupFullMustacheParams(partial, program, undefined, true);\n\n    let indent = partial.indent || '';\n    if (this.options.preventIndent && indent) {\n      this.opcode('appendContent', indent);\n      indent = '';\n    }\n\n    this.opcode('invokePartial', isDynamic, partialName, indent);\n    this.opcode('append');\n  },\n  PartialBlockStatement: function(partialBlock) {\n    this.PartialStatement(partialBlock);\n  },\n\n  MustacheStatement: function(mustache) {\n    this.SubExpression(mustache);\n\n    if (mustache.escaped && !this.options.noEscape) {\n      this.opcode('appendEscaped');\n    } else {\n      this.opcode('append');\n    }\n  },\n  Decorator(decorator) {\n    this.DecoratorBlock(decorator);\n  },\n\n  ContentStatement: function(content) {\n    if (content.value) {\n      this.opcode('appendContent', content.value);\n    }\n  },\n\n  CommentStatement: function() {},\n\n  SubExpression: function(sexpr) {\n    transformLiteralToPath(sexpr);\n    let type = this.classifySexpr(sexpr);\n\n    if (type === 'simple') {\n      this.simpleSexpr(sexpr);\n    } else if (type === 'helper') {\n      this.helperSexpr(sexpr);\n    } else {\n      this.ambiguousSexpr(sexpr);\n    }\n  },\n  ambiguousSexpr: function(sexpr, program, inverse) {\n    let path = sexpr.path,\n      name = path.parts[0],\n      isBlock = program != null || inverse != null;\n\n    this.opcode('getContext', path.depth);\n\n    this.opcode('pushProgram', program);\n    this.opcode('pushProgram', inverse);\n\n    path.strict = true;\n    this.accept(path);\n\n    this.opcode('invokeAmbiguous', name, isBlock);\n  },\n\n  simpleSexpr: function(sexpr) {\n    let path = sexpr.path;\n    path.strict = true;\n    this.accept(path);\n    this.opcode('resolvePossibleLambda');\n  },\n\n  helperSexpr: function(sexpr, program, inverse) {\n    let params = this.setupFullMustacheParams(sexpr, program, inverse),\n      path = sexpr.path,\n      name = path.parts[0];\n\n    if (this.options.knownHelpers[name]) {\n      this.opcode('invokeKnownHelper', params.length, name);\n    } else if (this.options.knownHelpersOnly) {\n      throw new Exception(\n        'You specified knownHelpersOnly, but used the unknown helper ' + name,\n        sexpr\n      );\n    } else {\n      path.strict = true;\n      path.falsy = true;\n\n      this.accept(path);\n      this.opcode(\n        'invokeHelper',\n        params.length,\n        path.original,\n        AST.helpers.simpleId(path)\n      );\n    }\n  },\n\n  PathExpression: function(path) {\n    this.addDepth(path.depth);\n    this.opcode('getContext', path.depth);\n\n    let name = path.parts[0],\n      scoped = AST.helpers.scopedId(path),\n      blockParamId = !path.depth && !scoped && this.blockParamIndex(name);\n\n    if (blockParamId) {\n      this.opcode('lookupBlockParam', blockParamId, path.parts);\n    } else if (!name) {\n      // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`\n      this.opcode('pushContext');\n    } else if (path.data) {\n      this.options.data = true;\n      this.opcode('lookupData', path.depth, path.parts, path.strict);\n    } else {\n      this.opcode(\n        'lookupOnContext',\n        path.parts,\n        path.falsy,\n        path.strict,\n        scoped\n      );\n    }\n  },\n\n  StringLiteral: function(string) {\n    this.opcode('pushString', string.value);\n  },\n\n  NumberLiteral: function(number) {\n    this.opcode('pushLiteral', number.value);\n  },\n\n  BooleanLiteral: function(bool) {\n    this.opcode('pushLiteral', bool.value);\n  },\n\n  UndefinedLiteral: function() {\n    this.opcode('pushLiteral', 'undefined');\n  },\n\n  NullLiteral: function() {\n    this.opcode('pushLiteral', 'null');\n  },\n\n  Hash: function(hash) {\n    let pairs = hash.pairs,\n      i = 0,\n      l = pairs.length;\n\n    this.opcode('pushHash');\n\n    for (; i < l; i++) {\n      this.pushParam(pairs[i].value);\n    }\n    while (i--) {\n      this.opcode('assignToHash', pairs[i].key);\n    }\n    this.opcode('popHash');\n  },\n\n  // HELPERS\n  opcode: function(name) {\n    this.opcodes.push({\n      opcode: name,\n      args: slice.call(arguments, 1),\n      loc: this.sourceNode[0].loc\n    });\n  },\n\n  addDepth: function(depth) {\n    if (!depth) {\n      return;\n    }\n\n    this.useDepths = true;\n  },\n\n  classifySexpr: function(sexpr) {\n    let isSimple = AST.helpers.simpleId(sexpr.path);\n\n    let isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);\n\n    // a mustache is an eligible helper if:\n    // * its id is simple (a single part, not `this` or `..`)\n    let isHelper = !isBlockParam && AST.helpers.helperExpression(sexpr);\n\n    // if a mustache is an eligible helper but not a definite\n    // helper, it is ambiguous, and will be resolved in a later\n    // pass or at runtime.\n    let isEligible = !isBlockParam && (isHelper || isSimple);\n\n    // if ambiguous, we can possibly resolve the ambiguity now\n    // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n    if (isEligible && !isHelper) {\n      let name = sexpr.path.parts[0],\n        options = this.options;\n      if (options.knownHelpers[name]) {\n        isHelper = true;\n      } else if (options.knownHelpersOnly) {\n        isEligible = false;\n      }\n    }\n\n    if (isHelper) {\n      return 'helper';\n    } else if (isEligible) {\n      return 'ambiguous';\n    } else {\n      return 'simple';\n    }\n  },\n\n  pushParams: function(params) {\n    for (let i = 0, l = params.length; i < l; i++) {\n      this.pushParam(params[i]);\n    }\n  },\n\n  pushParam: function(val) {\n    let value = val.value != null ? val.value : val.original || '';\n\n    if (this.stringParams) {\n      if (value.replace) {\n        value = value.replace(/^(\\.?\\.\\/)*/g, '').replace(/\\//g, '.');\n      }\n\n      if (val.depth) {\n        this.addDepth(val.depth);\n      }\n      this.opcode('getContext', val.depth || 0);\n      this.opcode('pushStringParam', value, val.type);\n\n      if (val.type === 'SubExpression') {\n        // SubExpressions get evaluated and passed in\n        // in string params mode.\n        this.accept(val);\n      }\n    } else {\n      if (this.trackIds) {\n        let blockParamIndex;\n        if (val.parts && !AST.helpers.scopedId(val) && !val.depth) {\n          blockParamIndex = this.blockParamIndex(val.parts[0]);\n        }\n        if (blockParamIndex) {\n          let blockParamChild = val.parts.slice(1).join('.');\n          this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);\n        } else {\n          value = val.original || value;\n          if (value.replace) {\n            value = value\n              .replace(/^this(?:\\.|$)/, '')\n              .replace(/^\\.\\//, '')\n              .replace(/^\\.$/, '');\n          }\n\n          this.opcode('pushId', val.type, value);\n        }\n      }\n      this.accept(val);\n    }\n  },\n\n  setupFullMustacheParams: function(sexpr, program, inverse, omitEmpty) {\n    let params = sexpr.params;\n    this.pushParams(params);\n\n    this.opcode('pushProgram', program);\n    this.opcode('pushProgram', inverse);\n\n    if (sexpr.hash) {\n      this.accept(sexpr.hash);\n    } else {\n      this.opcode('emptyHash', omitEmpty);\n    }\n\n    return params;\n  },\n\n  blockParamIndex: function(name) {\n    for (\n      let depth = 0, len = this.options.blockParams.length;\n      depth < len;\n      depth++\n    ) {\n      let blockParams = this.options.blockParams[depth],\n        param = blockParams && indexOf(blockParams, name);\n      if (blockParams && param >= 0) {\n        return [depth, param];\n      }\n    }\n  }\n};\n\nexport function precompile(input, options, env) {\n  if (\n    input == null ||\n    (typeof input !== 'string' && input.type !== 'Program')\n  ) {\n    throw new Exception(\n      'You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' +\n        input\n    );\n  }\n\n  options = options || {};\n  if (!('data' in options)) {\n    options.data = true;\n  }\n  if (options.compat) {\n    options.useDepths = true;\n  }\n\n  let ast = env.parse(input, options),\n    environment = new env.Compiler().compile(ast, options);\n  return new env.JavaScriptCompiler().compile(environment, options);\n}\n\nexport function compile(input, options = {}, env) {\n  if (\n    input == null ||\n    (typeof input !== 'string' && input.type !== 'Program')\n  ) {\n    throw new Exception(\n      'You must pass a string or Handlebars AST to Handlebars.compile. You passed ' +\n        input\n    );\n  }\n\n  options = extend({}, options);\n  if (!('data' in options)) {\n    options.data = true;\n  }\n  if (options.compat) {\n    options.useDepths = true;\n  }\n\n  let compiled;\n\n  function compileInput() {\n    let ast = env.parse(input, options),\n      environment = new env.Compiler().compile(ast, options),\n      templateSpec = new env.JavaScriptCompiler().compile(\n        environment,\n        options,\n        undefined,\n        true\n      );\n    return env.template(templateSpec);\n  }\n\n  // Template is only compiled on first use and cached after that point.\n  function ret(context, execOptions) {\n    if (!compiled) {\n      compiled = compileInput();\n    }\n    return compiled.call(this, context, execOptions);\n  }\n  ret._setup = function(setupOptions) {\n    if (!compiled) {\n      compiled = compileInput();\n    }\n    return compiled._setup(setupOptions);\n  };\n  ret._child = function(i, data, blockParams, depths) {\n    if (!compiled) {\n      compiled = compileInput();\n    }\n    return compiled._child(i, data, blockParams, depths);\n  };\n  return ret;\n}\n\nfunction argEquals(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  if (isArray(a) && isArray(b) && a.length === b.length) {\n    for (let i = 0; i < a.length; i++) {\n      if (!argEquals(a[i], b[i])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nfunction transformLiteralToPath(sexpr) {\n  if (!sexpr.path.parts) {\n    let literal = sexpr.path;\n    // Casting to string here to make false and 0 literal values play nicely with the rest\n    // of the system.\n    sexpr.path = {\n      type: 'PathExpression',\n      data: false,\n      depth: 0,\n      parts: [literal.original + ''],\n      original: literal.original + '',\n      loc: literal.loc\n    };\n  }\n}\n","import Exception from '../exception';\n\nfunction validateClose(open, close) {\n  close = close.path ? close.path.original : close;\n\n  if (open.path.original !== close) {\n    let errorNode = { loc: open.path.loc };\n\n    throw new Exception(\n      open.path.original + \" doesn't match \" + close,\n      errorNode\n    );\n  }\n}\n\nexport function SourceLocation(source, locInfo) {\n  this.source = source;\n  this.start = {\n    line: locInfo.first_line,\n    column: locInfo.first_column\n  };\n  this.end = {\n    line: locInfo.last_line,\n    column: locInfo.last_column\n  };\n}\n\nexport function id(token) {\n  if (/^\\[.*\\]$/.test(token)) {\n    return token.substring(1, token.length - 1);\n  } else {\n    return token;\n  }\n}\n\nexport function stripFlags(open, close) {\n  return {\n    open: open.charAt(2) === '~',\n    close: close.charAt(close.length - 3) === '~'\n  };\n}\n\nexport function stripComment(comment) {\n  return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n}\n\nexport function preparePath(data, parts, loc) {\n  loc = this.locInfo(loc);\n\n  let original = data ? '@' : '',\n    dig = [],\n    depth = 0;\n\n  for (let i = 0, l = parts.length; i < l; i++) {\n    let part = parts[i].part,\n      // If we have [] syntax then we do not treat path references as operators,\n      // i.e. foo.[this] resolves to approximately context.foo['this']\n      isLiteral = parts[i].original !== part;\n    original += (parts[i].separator || '') + part;\n\n    if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n      if (dig.length > 0) {\n        throw new Exception('Invalid path: ' + original, { loc });\n      } else if (part === '..') {\n        depth++;\n      }\n    } else {\n      dig.push(part);\n    }\n  }\n\n  return {\n    type: 'PathExpression',\n    data,\n    depth,\n    parts: dig,\n    original,\n    loc\n  };\n}\n\nexport function prepareMustache(path, params, hash, open, strip, locInfo) {\n  // Must use charAt to support IE pre-10\n  let escapeFlag = open.charAt(3) || open.charAt(2),\n    escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n  let decorator = /\\*/.test(open);\n  return {\n    type: decorator ? 'Decorator' : 'MustacheStatement',\n    path,\n    params,\n    hash,\n    escaped,\n    strip,\n    loc: this.locInfo(locInfo)\n  };\n}\n\nexport function prepareRawBlock(openRawBlock, contents, close, locInfo) {\n  validateClose(openRawBlock, close);\n\n  locInfo = this.locInfo(locInfo);\n  let program = {\n    type: 'Program',\n    body: contents,\n    strip: {},\n    loc: locInfo\n  };\n\n  return {\n    type: 'BlockStatement',\n    path: openRawBlock.path,\n    params: openRawBlock.params,\n    hash: openRawBlock.hash,\n    program,\n    openStrip: {},\n    inverseStrip: {},\n    closeStrip: {},\n    loc: locInfo\n  };\n}\n\nexport function prepareBlock(\n  openBlock,\n  program,\n  inverseAndProgram,\n  close,\n  inverted,\n  locInfo\n) {\n  if (close && close.path) {\n    validateClose(openBlock, close);\n  }\n\n  let decorator = /\\*/.test(openBlock.open);\n\n  program.blockParams = openBlock.blockParams;\n\n  let inverse, inverseStrip;\n\n  if (inverseAndProgram) {\n    if (decorator) {\n      throw new Exception(\n        'Unexpected inverse block on decorator',\n        inverseAndProgram\n      );\n    }\n\n    if (inverseAndProgram.chain) {\n      inverseAndProgram.program.body[0].closeStrip = close.strip;\n    }\n\n    inverseStrip = inverseAndProgram.strip;\n    inverse = inverseAndProgram.program;\n  }\n\n  if (inverted) {\n    inverted = inverse;\n    inverse = program;\n    program = inverted;\n  }\n\n  return {\n    type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n    path: openBlock.path,\n    params: openBlock.params,\n    hash: openBlock.hash,\n    program,\n    inverse,\n    openStrip: openBlock.strip,\n    inverseStrip,\n    closeStrip: close && close.strip,\n    loc: this.locInfo(locInfo)\n  };\n}\n\nexport function prepareProgram(statements, loc) {\n  if (!loc && statements.length) {\n    const firstLoc = statements[0].loc,\n      lastLoc = statements[statements.length - 1].loc;\n\n    /* istanbul ignore else */\n    if (firstLoc && lastLoc) {\n      loc = {\n        source: firstLoc.source,\n        start: {\n          line: firstLoc.start.line,\n          column: firstLoc.start.column\n        },\n        end: {\n          line: lastLoc.end.line,\n          column: lastLoc.end.column\n        }\n      };\n    }\n  }\n\n  return {\n    type: 'Program',\n    body: statements,\n    strip: {},\n    loc: loc\n  };\n}\n\nexport function preparePartialBlock(open, program, close, locInfo) {\n  validateClose(open, close);\n\n  return {\n    type: 'PartialBlockStatement',\n    name: open.path,\n    params: open.params,\n    hash: open.hash,\n    program,\n    openStrip: open.strip,\n    closeStrip: close && close.strip,\n    loc: this.locInfo(locInfo)\n  };\n}\n","import { COMPILER_REVISION, REVISION_CHANGES } from '../base';\nimport Exception from '../exception';\nimport { isArray } from '../utils';\nimport CodeGen from './code-gen';\n\nfunction Literal(value) {\n  this.value = value;\n}\n\nfunction JavaScriptCompiler() {}\n\nJavaScriptCompiler.prototype = {\n  // PUBLIC API: You can override these methods in a subclass to provide\n  // alternative compiled forms for name lookup and buffering semantics\n  nameLookup: function(parent, name /*,  type */) {\n    return this.internalNameLookup(parent, name);\n  },\n  depthedLookup: function(name) {\n    return [\n      this.aliasable('container.lookup'),\n      '(depths, ',\n      JSON.stringify(name),\n      ')'\n    ];\n  },\n\n  compilerInfo: function() {\n    const revision = COMPILER_REVISION,\n      versions = REVISION_CHANGES[revision];\n    return [revision, versions];\n  },\n\n  appendToBuffer: function(source, location, explicit) {\n    // Force a source as this simplifies the merge logic.\n    if (!isArray(source)) {\n      source = [source];\n    }\n    source = this.source.wrap(source, location);\n\n    if (this.environment.isSimple) {\n      return ['return ', source, ';'];\n    } else if (explicit) {\n      // This is a case where the buffer operation occurs as a child of another\n      // construct, generally braces. We have to explicitly output these buffer\n      // operations to ensure that the emitted code goes in the correct location.\n      return ['buffer += ', source, ';'];\n    } else {\n      source.appendToBuffer = true;\n      return source;\n    }\n  },\n\n  initializeBuffer: function() {\n    return this.quotedString('');\n  },\n  // END PUBLIC API\n  internalNameLookup: function(parent, name) {\n    this.lookupPropertyFunctionIsUsed = true;\n    return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];\n  },\n\n  lookupPropertyFunctionIsUsed: false,\n\n  compile: function(environment, options, context, asObject) {\n    this.environment = environment;\n    this.options = options;\n    this.stringParams = this.options.stringParams;\n    this.trackIds = this.options.trackIds;\n    this.precompile = !asObject;\n\n    this.name = this.environment.name;\n    this.isChild = !!context;\n    this.context = context || {\n      decorators: [],\n      programs: [],\n      environments: []\n    };\n\n    this.preamble();\n\n    this.stackSlot = 0;\n    this.stackVars = [];\n    this.aliases = {};\n    this.registers = { list: [] };\n    this.hashes = [];\n    this.compileStack = [];\n    this.inlineStack = [];\n    this.blockParams = [];\n\n    this.compileChildren(environment, options);\n\n    this.useDepths =\n      this.useDepths ||\n      environment.useDepths ||\n      environment.useDecorators ||\n      this.options.compat;\n    this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\n    let opcodes = environment.opcodes,\n      opcode,\n      firstLoc,\n      i,\n      l;\n\n    for (i = 0, l = opcodes.length; i < l; i++) {\n      opcode = opcodes[i];\n\n      this.source.currentLocation = opcode.loc;\n      firstLoc = firstLoc || opcode.loc;\n      this[opcode.opcode].apply(this, opcode.args);\n    }\n\n    // Flush any trailing content that might be pending.\n    this.source.currentLocation = firstLoc;\n    this.pushSource('');\n\n    /* istanbul ignore next */\n    if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {\n      throw new Exception('Compile completed with content left on stack');\n    }\n\n    if (!this.decorators.isEmpty()) {\n      this.useDecorators = true;\n\n      this.decorators.prepend([\n        'var decorators = container.decorators, ',\n        this.lookupPropertyFunctionVarDeclaration(),\n        ';\\n'\n      ]);\n      this.decorators.push('return fn;');\n\n      if (asObject) {\n        this.decorators = Function.apply(this, [\n          'fn',\n          'props',\n          'container',\n          'depth0',\n          'data',\n          'blockParams',\n          'depths',\n          this.decorators.merge()\n        ]);\n      } else {\n        this.decorators.prepend(\n          'function(fn, props, container, depth0, data, blockParams, depths) {\\n'\n        );\n        this.decorators.push('}\\n');\n        this.decorators = this.decorators.merge();\n      }\n    } else {\n      this.decorators = undefined;\n    }\n\n    let fn = this.createFunctionContext(asObject);\n    if (!this.isChild) {\n      let ret = {\n        compiler: this.compilerInfo(),\n        main: fn\n      };\n\n      if (this.decorators) {\n        ret.main_d = this.decorators; // eslint-disable-line camelcase\n        ret.useDecorators = true;\n      }\n\n      let { programs, decorators } = this.context;\n      for (i = 0, l = programs.length; i < l; i++) {\n        if (programs[i]) {\n          ret[i] = programs[i];\n          if (decorators[i]) {\n            ret[i + '_d'] = decorators[i];\n            ret.useDecorators = true;\n          }\n        }\n      }\n\n      if (this.environment.usePartial) {\n        ret.usePartial = true;\n      }\n      if (this.options.data) {\n        ret.useData = true;\n      }\n      if (this.useDepths) {\n        ret.useDepths = true;\n      }\n      if (this.useBlockParams) {\n        ret.useBlockParams = true;\n      }\n      if (this.options.compat) {\n        ret.compat = true;\n      }\n\n      if (!asObject) {\n        ret.compiler = JSON.stringify(ret.compiler);\n\n        this.source.currentLocation = { start: { line: 1, column: 0 } };\n        ret = this.objectLiteral(ret);\n\n        if (options.srcName) {\n          ret = ret.toStringWithSourceMap({ file: options.destName });\n          ret.map = ret.map && ret.map.toString();\n        } else {\n          ret = ret.toString();\n        }\n      } else {\n        ret.compilerOptions = this.options;\n      }\n\n      return ret;\n    } else {\n      return fn;\n    }\n  },\n\n  preamble: function() {\n    // track the last context pushed into place to allow skipping the\n    // getContext opcode when it would be a noop\n    this.lastContext = 0;\n    this.source = new CodeGen(this.options.srcName);\n    this.decorators = new CodeGen(this.options.srcName);\n  },\n\n  createFunctionContext: function(asObject) {\n    let varDeclarations = '';\n\n    let locals = this.stackVars.concat(this.registers.list);\n    if (locals.length > 0) {\n      varDeclarations += ', ' + locals.join(', ');\n    }\n\n    // Generate minimizer alias mappings\n    //\n    // When using true SourceNodes, this will update all references to the given alias\n    // as the source nodes are reused in situ. For the non-source node compilation mode,\n    // aliases will not be used, but this case is already being run on the client and\n    // we aren't concern about minimizing the template size.\n    let aliasCount = 0;\n    Object.keys(this.aliases).forEach(alias => {\n      let node = this.aliases[alias];\n      if (node.children && node.referenceCount > 1) {\n        varDeclarations += ', alias' + ++aliasCount + '=' + alias;\n        node.children[0] = 'alias' + aliasCount;\n      }\n    });\n\n    if (this.lookupPropertyFunctionIsUsed) {\n      varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();\n    }\n\n    let params = ['container', 'depth0', 'helpers', 'partials', 'data'];\n\n    if (this.useBlockParams || this.useDepths) {\n      params.push('blockParams');\n    }\n    if (this.useDepths) {\n      params.push('depths');\n    }\n\n    // Perform a second pass over the output to merge content when possible\n    let source = this.mergeSource(varDeclarations);\n\n    if (asObject) {\n      params.push(source);\n\n      return Function.apply(this, params);\n    } else {\n      return this.source.wrap([\n        'function(',\n        params.join(','),\n        ') {\\n  ',\n        source,\n        '}'\n      ]);\n    }\n  },\n  mergeSource: function(varDeclarations) {\n    let isSimple = this.environment.isSimple,\n      appendOnly = !this.forceBuffer,\n      appendFirst,\n      sourceSeen,\n      bufferStart,\n      bufferEnd;\n    this.source.each(line => {\n      if (line.appendToBuffer) {\n        if (bufferStart) {\n          line.prepend('  + ');\n        } else {\n          bufferStart = line;\n        }\n        bufferEnd = line;\n      } else {\n        if (bufferStart) {\n          if (!sourceSeen) {\n            appendFirst = true;\n          } else {\n            bufferStart.prepend('buffer += ');\n          }\n          bufferEnd.add(';');\n          bufferStart = bufferEnd = undefined;\n        }\n\n        sourceSeen = true;\n        if (!isSimple) {\n          appendOnly = false;\n        }\n      }\n    });\n\n    if (appendOnly) {\n      if (bufferStart) {\n        bufferStart.prepend('return ');\n        bufferEnd.add(';');\n      } else if (!sourceSeen) {\n        this.source.push('return \"\";');\n      }\n    } else {\n      varDeclarations +=\n        ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());\n\n      if (bufferStart) {\n        bufferStart.prepend('return buffer + ');\n        bufferEnd.add(';');\n      } else {\n        this.source.push('return buffer;');\n      }\n    }\n\n    if (varDeclarations) {\n      this.source.prepend(\n        'var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n')\n      );\n    }\n\n    return this.source.merge();\n  },\n\n  lookupPropertyFunctionVarDeclaration: function() {\n    return `\n      lookupProperty = container.lookupProperty || function(parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n        return undefined\n    }\n    `.trim();\n  },\n\n  // [blockValue]\n  //\n  // On stack, before: hash, inverse, program, value\n  // On stack, after: return value of blockHelperMissing\n  //\n  // The purpose of this opcode is to take a block of the form\n  // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n  // replace it on the stack with the result of properly\n  // invoking blockHelperMissing.\n  blockValue: function(name) {\n    let blockHelperMissing = this.aliasable(\n        'container.hooks.blockHelperMissing'\n      ),\n      params = [this.contextName(0)];\n    this.setupHelperArgs(name, 0, params);\n\n    let blockName = this.popStack();\n    params.splice(1, 0, blockName);\n\n    this.push(this.source.functionCall(blockHelperMissing, 'call', params));\n  },\n\n  // [ambiguousBlockValue]\n  //\n  // On stack, before: hash, inverse, program, value\n  // Compiler value, before: lastHelper=value of last found helper, if any\n  // On stack, after, if no lastHelper: same as [blockValue]\n  // On stack, after, if lastHelper: value\n  ambiguousBlockValue: function() {\n    // We're being a bit cheeky and reusing the options value from the prior exec\n    let blockHelperMissing = this.aliasable(\n        'container.hooks.blockHelperMissing'\n      ),\n      params = [this.contextName(0)];\n    this.setupHelperArgs('', 0, params, true);\n\n    this.flushInline();\n\n    let current = this.topStack();\n    params.splice(1, 0, current);\n\n    this.pushSource([\n      'if (!',\n      this.lastHelper,\n      ') { ',\n      current,\n      ' = ',\n      this.source.functionCall(blockHelperMissing, 'call', params),\n      '}'\n    ]);\n  },\n\n  // [appendContent]\n  //\n  // On stack, before: ...\n  // On stack, after: ...\n  //\n  // Appends the string value of `content` to the current buffer\n  appendContent: function(content) {\n    if (this.pendingContent) {\n      content = this.pendingContent + content;\n    } else {\n      this.pendingLocation = this.source.currentLocation;\n    }\n\n    this.pendingContent = content;\n  },\n\n  // [append]\n  //\n  // On stack, before: value, ...\n  // On stack, after: ...\n  //\n  // Coerces `value` to a String and appends it to the current buffer.\n  //\n  // If `value` is truthy, or 0, it is coerced into a string and appended\n  // Otherwise, the empty string is appended\n  append: function() {\n    if (this.isInline()) {\n      this.replaceStack(current => [' != null ? ', current, ' : \"\"']);\n\n      this.pushSource(this.appendToBuffer(this.popStack()));\n    } else {\n      let local = this.popStack();\n      this.pushSource([\n        'if (',\n        local,\n        ' != null) { ',\n        this.appendToBuffer(local, undefined, true),\n        ' }'\n      ]);\n      if (this.environment.isSimple) {\n        this.pushSource([\n          'else { ',\n          this.appendToBuffer(\"''\", undefined, true),\n          ' }'\n        ]);\n      }\n    }\n  },\n\n  // [appendEscaped]\n  //\n  // On stack, before: value, ...\n  // On stack, after: ...\n  //\n  // Escape `value` and append it to the buffer\n  appendEscaped: function() {\n    this.pushSource(\n      this.appendToBuffer([\n        this.aliasable('container.escapeExpression'),\n        '(',\n        this.popStack(),\n        ')'\n      ])\n    );\n  },\n\n  // [getContext]\n  //\n  // On stack, before: ...\n  // On stack, after: ...\n  // Compiler value, after: lastContext=depth\n  //\n  // Set the value of the `lastContext` compiler value to the depth\n  getContext: function(depth) {\n    this.lastContext = depth;\n  },\n\n  // [pushContext]\n  //\n  // On stack, before: ...\n  // On stack, after: currentContext, ...\n  //\n  // Pushes the value of the current context onto the stack.\n  pushContext: function() {\n    this.pushStackLiteral(this.contextName(this.lastContext));\n  },\n\n  // [lookupOnContext]\n  //\n  // On stack, before: ...\n  // On stack, after: currentContext[name], ...\n  //\n  // Looks up the value of `name` on the current context and pushes\n  // it onto the stack.\n  lookupOnContext: function(parts, falsy, strict, scoped) {\n    let i = 0;\n\n    if (!scoped && this.options.compat && !this.lastContext) {\n      // The depthed query is expected to handle the undefined logic for the root level that\n      // is implemented below, so we evaluate that directly in compat mode\n      this.push(this.depthedLookup(parts[i++]));\n    } else {\n      this.pushContext();\n    }\n\n    this.resolvePath('context', parts, i, falsy, strict);\n  },\n\n  // [lookupBlockParam]\n  //\n  // On stack, before: ...\n  // On stack, after: blockParam[name], ...\n  //\n  // Looks up the value of `parts` on the given block param and pushes\n  // it onto the stack.\n  lookupBlockParam: function(blockParamId, parts) {\n    this.useBlockParams = true;\n\n    this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);\n    this.resolvePath('context', parts, 1);\n  },\n\n  // [lookupData]\n  //\n  // On stack, before: ...\n  // On stack, after: data, ...\n  //\n  // Push the data lookup operator\n  lookupData: function(depth, parts, strict) {\n    if (!depth) {\n      this.pushStackLiteral('data');\n    } else {\n      this.pushStackLiteral('container.data(data, ' + depth + ')');\n    }\n\n    this.resolvePath('data', parts, 0, true, strict);\n  },\n\n  resolvePath: function(type, parts, i, falsy, strict) {\n    if (this.options.strict || this.options.assumeObjects) {\n      this.push(strictLookup(this.options.strict && strict, this, parts, type));\n      return;\n    }\n\n    let len = parts.length;\n    for (; i < len; i++) {\n      /* eslint-disable no-loop-func */\n      this.replaceStack(current => {\n        let lookup = this.nameLookup(current, parts[i], type);\n        // We want to ensure that zero and false are handled properly if the context (falsy flag)\n        // needs to have the special handling for these values.\n        if (!falsy) {\n          return [' != null ? ', lookup, ' : ', current];\n        } else {\n          // Otherwise we can use generic falsy handling\n          return [' && ', lookup];\n        }\n      });\n      /* eslint-enable no-loop-func */\n    }\n  },\n\n  // [resolvePossibleLambda]\n  //\n  // On stack, before: value, ...\n  // On stack, after: resolved value, ...\n  //\n  // If the `value` is a lambda, replace it on the stack by\n  // the return value of the lambda\n  resolvePossibleLambda: function() {\n    this.push([\n      this.aliasable('container.lambda'),\n      '(',\n      this.popStack(),\n      ', ',\n      this.contextName(0),\n      ')'\n    ]);\n  },\n\n  // [pushStringParam]\n  //\n  // On stack, before: ...\n  // On stack, after: string, currentContext, ...\n  //\n  // This opcode is designed for use in string mode, which\n  // provides the string value of a parameter along with its\n  // depth rather than resolving it immediately.\n  pushStringParam: function(string, type) {\n    this.pushContext();\n    this.pushString(type);\n\n    // If it's a subexpression, the string result\n    // will be pushed after this opcode.\n    if (type !== 'SubExpression') {\n      if (typeof string === 'string') {\n        this.pushString(string);\n      } else {\n        this.pushStackLiteral(string);\n      }\n    }\n  },\n\n  emptyHash: function(omitEmpty) {\n    if (this.trackIds) {\n      this.push('{}'); // hashIds\n    }\n    if (this.stringParams) {\n      this.push('{}'); // hashContexts\n      this.push('{}'); // hashTypes\n    }\n    this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');\n  },\n  pushHash: function() {\n    if (this.hash) {\n      this.hashes.push(this.hash);\n    }\n    this.hash = { values: {}, types: [], contexts: [], ids: [] };\n  },\n  popHash: function() {\n    let hash = this.hash;\n    this.hash = this.hashes.pop();\n\n    if (this.trackIds) {\n      this.push(this.objectLiteral(hash.ids));\n    }\n    if (this.stringParams) {\n      this.push(this.objectLiteral(hash.contexts));\n      this.push(this.objectLiteral(hash.types));\n    }\n\n    this.push(this.objectLiteral(hash.values));\n  },\n\n  // [pushString]\n  //\n  // On stack, before: ...\n  // On stack, after: quotedString(string), ...\n  //\n  // Push a quoted version of `string` onto the stack\n  pushString: function(string) {\n    this.pushStackLiteral(this.quotedString(string));\n  },\n\n  // [pushLiteral]\n  //\n  // On stack, before: ...\n  // On stack, after: value, ...\n  //\n  // Pushes a value onto the stack. This operation prevents\n  // the compiler from creating a temporary variable to hold\n  // it.\n  pushLiteral: function(value) {\n    this.pushStackLiteral(value);\n  },\n\n  // [pushProgram]\n  //\n  // On stack, before: ...\n  // On stack, after: program(guid), ...\n  //\n  // Push a program expression onto the stack. This takes\n  // a compile-time guid and converts it into a runtime-accessible\n  // expression.\n  pushProgram: function(guid) {\n    if (guid != null) {\n      this.pushStackLiteral(this.programExpression(guid));\n    } else {\n      this.pushStackLiteral(null);\n    }\n  },\n\n  // [registerDecorator]\n  //\n  // On stack, before: hash, program, params..., ...\n  // On stack, after: ...\n  //\n  // Pops off the decorator's parameters, invokes the decorator,\n  // and inserts the decorator into the decorators list.\n  registerDecorator(paramSize, name) {\n    let foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n      options = this.setupHelperArgs(name, paramSize);\n\n    this.decorators.push([\n      'fn = ',\n      this.decorators.functionCall(foundDecorator, '', [\n        'fn',\n        'props',\n        'container',\n        options\n      ]),\n      ' || fn;'\n    ]);\n  },\n\n  // [invokeHelper]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of helper invocation\n  //\n  // Pops off the helper's parameters, invokes the helper,\n  // and pushes the helper's return value onto the stack.\n  //\n  // If the helper is not found, `helperMissing` is called.\n  invokeHelper: function(paramSize, name, isSimple) {\n    let nonHelper = this.popStack(),\n      helper = this.setupHelper(paramSize, name);\n\n    let possibleFunctionCalls = [];\n\n    if (isSimple) {\n      // direct call to helper\n      possibleFunctionCalls.push(helper.name);\n    }\n    // call a function from the input object\n    possibleFunctionCalls.push(nonHelper);\n    if (!this.options.strict) {\n      possibleFunctionCalls.push(\n        this.aliasable('container.hooks.helperMissing')\n      );\n    }\n\n    let functionLookupCode = [\n      '(',\n      this.itemsSeparatedBy(possibleFunctionCalls, '||'),\n      ')'\n    ];\n    let functionCall = this.source.functionCall(\n      functionLookupCode,\n      'call',\n      helper.callParams\n    );\n    this.push(functionCall);\n  },\n\n  itemsSeparatedBy: function(items, separator) {\n    let result = [];\n    result.push(items[0]);\n    for (let i = 1; i < items.length; i++) {\n      result.push(separator, items[i]);\n    }\n    return result;\n  },\n  // [invokeKnownHelper]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of helper invocation\n  //\n  // This operation is used when the helper is known to exist,\n  // so a `helperMissing` fallback is not required.\n  invokeKnownHelper: function(paramSize, name) {\n    let helper = this.setupHelper(paramSize, name);\n    this.push(this.source.functionCall(helper.name, 'call', helper.callParams));\n  },\n\n  // [invokeAmbiguous]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of disambiguation\n  //\n  // This operation is used when an expression like `{{foo}}`\n  // is provided, but we don't know at compile-time whether it\n  // is a helper or a path.\n  //\n  // This operation emits more code than the other options,\n  // and can be avoided by passing the `knownHelpers` and\n  // `knownHelpersOnly` flags at compile-time.\n  invokeAmbiguous: function(name, helperCall) {\n    this.useRegister('helper');\n\n    let nonHelper = this.popStack();\n\n    this.emptyHash();\n    let helper = this.setupHelper(0, name, helperCall);\n\n    let helperName = (this.lastHelper = this.nameLookup(\n      'helpers',\n      name,\n      'helper'\n    ));\n\n    let lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n    if (!this.options.strict) {\n      lookup[0] = '(helper = ';\n      lookup.push(\n        ' != null ? helper : ',\n        this.aliasable('container.hooks.helperMissing')\n      );\n    }\n\n    this.push([\n      '(',\n      lookup,\n      helper.paramsInit ? ['),(', helper.paramsInit] : [],\n      '),',\n      '(typeof helper === ',\n      this.aliasable('\"function\"'),\n      ' ? ',\n      this.source.functionCall('helper', 'call', helper.callParams),\n      ' : helper))'\n    ]);\n  },\n\n  // [invokePartial]\n  //\n  // On stack, before: context, ...\n  // On stack after: result of partial invocation\n  //\n  // This operation pops off a context, invokes a partial with that context,\n  // and pushes the result of the invocation back.\n  invokePartial: function(isDynamic, name, indent) {\n    let params = [],\n      options = this.setupParams(name, 1, params);\n\n    if (isDynamic) {\n      name = this.popStack();\n      delete options.name;\n    }\n\n    if (indent) {\n      options.indent = JSON.stringify(indent);\n    }\n    options.helpers = 'helpers';\n    options.partials = 'partials';\n    options.decorators = 'container.decorators';\n\n    if (!isDynamic) {\n      params.unshift(this.nameLookup('partials', name, 'partial'));\n    } else {\n      params.unshift(name);\n    }\n\n    if (this.options.compat) {\n      options.depths = 'depths';\n    }\n    options = this.objectLiteral(options);\n    params.push(options);\n\n    this.push(this.source.functionCall('container.invokePartial', '', params));\n  },\n\n  // [assignToHash]\n  //\n  // On stack, before: value, ..., hash, ...\n  // On stack, after: ..., hash, ...\n  //\n  // Pops a value off the stack and assigns it to the current hash\n  assignToHash: function(key) {\n    let value = this.popStack(),\n      context,\n      type,\n      id;\n\n    if (this.trackIds) {\n      id = this.popStack();\n    }\n    if (this.stringParams) {\n      type = this.popStack();\n      context = this.popStack();\n    }\n\n    let hash = this.hash;\n    if (context) {\n      hash.contexts[key] = context;\n    }\n    if (type) {\n      hash.types[key] = type;\n    }\n    if (id) {\n      hash.ids[key] = id;\n    }\n    hash.values[key] = value;\n  },\n\n  pushId: function(type, name, child) {\n    if (type === 'BlockParam') {\n      this.pushStackLiteral(\n        'blockParams[' +\n          name[0] +\n          '].path[' +\n          name[1] +\n          ']' +\n          (child ? ' + ' + JSON.stringify('.' + child) : '')\n      );\n    } else if (type === 'PathExpression') {\n      this.pushString(name);\n    } else if (type === 'SubExpression') {\n      this.pushStackLiteral('true');\n    } else {\n      this.pushStackLiteral('null');\n    }\n  },\n\n  // HELPERS\n\n  compiler: JavaScriptCompiler,\n\n  compileChildren: function(environment, options) {\n    let children = environment.children,\n      child,\n      compiler;\n\n    for (let i = 0, l = children.length; i < l; i++) {\n      child = children[i];\n      compiler = new this.compiler(); // eslint-disable-line new-cap\n\n      let existing = this.matchExistingProgram(child);\n\n      if (existing == null) {\n        this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children\n        let index = this.context.programs.length;\n        child.index = index;\n        child.name = 'program' + index;\n        this.context.programs[index] = compiler.compile(\n          child,\n          options,\n          this.context,\n          !this.precompile\n        );\n        this.context.decorators[index] = compiler.decorators;\n        this.context.environments[index] = child;\n\n        this.useDepths = this.useDepths || compiler.useDepths;\n        this.useBlockParams = this.useBlockParams || compiler.useBlockParams;\n        child.useDepths = this.useDepths;\n        child.useBlockParams = this.useBlockParams;\n      } else {\n        child.index = existing.index;\n        child.name = 'program' + existing.index;\n\n        this.useDepths = this.useDepths || existing.useDepths;\n        this.useBlockParams = this.useBlockParams || existing.useBlockParams;\n      }\n    }\n  },\n  matchExistingProgram: function(child) {\n    for (let i = 0, len = this.context.environments.length; i < len; i++) {\n      let environment = this.context.environments[i];\n      if (environment && environment.equals(child)) {\n        return environment;\n      }\n    }\n  },\n\n  programExpression: function(guid) {\n    let child = this.environment.children[guid],\n      programParams = [child.index, 'data', child.blockParams];\n\n    if (this.useBlockParams || this.useDepths) {\n      programParams.push('blockParams');\n    }\n    if (this.useDepths) {\n      programParams.push('depths');\n    }\n\n    return 'container.program(' + programParams.join(', ') + ')';\n  },\n\n  useRegister: function(name) {\n    if (!this.registers[name]) {\n      this.registers[name] = true;\n      this.registers.list.push(name);\n    }\n  },\n\n  push: function(expr) {\n    if (!(expr instanceof Literal)) {\n      expr = this.source.wrap(expr);\n    }\n\n    this.inlineStack.push(expr);\n    return expr;\n  },\n\n  pushStackLiteral: function(item) {\n    this.push(new Literal(item));\n  },\n\n  pushSource: function(source) {\n    if (this.pendingContent) {\n      this.source.push(\n        this.appendToBuffer(\n          this.source.quotedString(this.pendingContent),\n          this.pendingLocation\n        )\n      );\n      this.pendingContent = undefined;\n    }\n\n    if (source) {\n      this.source.push(source);\n    }\n  },\n\n  replaceStack: function(callback) {\n    let prefix = ['('],\n      stack,\n      createdStack,\n      usedLiteral;\n\n    /* istanbul ignore next */\n    if (!this.isInline()) {\n      throw new Exception('replaceStack on non-inline');\n    }\n\n    // We want to merge the inline statement into the replacement statement via ','\n    let top = this.popStack(true);\n\n    if (top instanceof Literal) {\n      // Literals do not need to be inlined\n      stack = [top.value];\n      prefix = ['(', stack];\n      usedLiteral = true;\n    } else {\n      // Get or create the current stack name for use by the inline\n      createdStack = true;\n      let name = this.incrStack();\n\n      prefix = ['((', this.push(name), ' = ', top, ')'];\n      stack = this.topStack();\n    }\n\n    let item = callback.call(this, stack);\n\n    if (!usedLiteral) {\n      this.popStack();\n    }\n    if (createdStack) {\n      this.stackSlot--;\n    }\n    this.push(prefix.concat(item, ')'));\n  },\n\n  incrStack: function() {\n    this.stackSlot++;\n    if (this.stackSlot > this.stackVars.length) {\n      this.stackVars.push('stack' + this.stackSlot);\n    }\n    return this.topStackName();\n  },\n  topStackName: function() {\n    return 'stack' + this.stackSlot;\n  },\n  flushInline: function() {\n    let inlineStack = this.inlineStack;\n    this.inlineStack = [];\n    for (let i = 0, len = inlineStack.length; i < len; i++) {\n      let entry = inlineStack[i];\n      /* istanbul ignore if */\n      if (entry instanceof Literal) {\n        this.compileStack.push(entry);\n      } else {\n        let stack = this.incrStack();\n        this.pushSource([stack, ' = ', entry, ';']);\n        this.compileStack.push(stack);\n      }\n    }\n  },\n  isInline: function() {\n    return this.inlineStack.length;\n  },\n\n  popStack: function(wrapped) {\n    let inline = this.isInline(),\n      item = (inline ? this.inlineStack : this.compileStack).pop();\n\n    if (!wrapped && item instanceof Literal) {\n      return item.value;\n    } else {\n      if (!inline) {\n        /* istanbul ignore next */\n        if (!this.stackSlot) {\n          throw new Exception('Invalid stack pop');\n        }\n        this.stackSlot--;\n      }\n      return item;\n    }\n  },\n\n  topStack: function() {\n    let stack = this.isInline() ? this.inlineStack : this.compileStack,\n      item = stack[stack.length - 1];\n\n    /* istanbul ignore if */\n    if (item instanceof Literal) {\n      return item.value;\n    } else {\n      return item;\n    }\n  },\n\n  contextName: function(context) {\n    if (this.useDepths && context) {\n      return 'depths[' + context + ']';\n    } else {\n      return 'depth' + context;\n    }\n  },\n\n  quotedString: function(str) {\n    return this.source.quotedString(str);\n  },\n\n  objectLiteral: function(obj) {\n    return this.source.objectLiteral(obj);\n  },\n\n  aliasable: function(name) {\n    let ret = this.aliases[name];\n    if (ret) {\n      ret.referenceCount++;\n      return ret;\n    }\n\n    ret = this.aliases[name] = this.source.wrap(name);\n    ret.aliasable = true;\n    ret.referenceCount = 1;\n\n    return ret;\n  },\n\n  setupHelper: function(paramSize, name, blockHelper) {\n    let params = [],\n      paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n    let foundHelper = this.nameLookup('helpers', name, 'helper'),\n      callContext = this.aliasable(\n        `${this.contextName(0)} != null ? ${this.contextName(\n          0\n        )} : (container.nullContext || {})`\n      );\n\n    return {\n      params: params,\n      paramsInit: paramsInit,\n      name: foundHelper,\n      callParams: [callContext].concat(params)\n    };\n  },\n\n  setupParams: function(helper, paramSize, params) {\n    let options = {},\n      contexts = [],\n      types = [],\n      ids = [],\n      objectArgs = !params,\n      param;\n\n    if (objectArgs) {\n      params = [];\n    }\n\n    options.name = this.quotedString(helper);\n    options.hash = this.popStack();\n\n    if (this.trackIds) {\n      options.hashIds = this.popStack();\n    }\n    if (this.stringParams) {\n      options.hashTypes = this.popStack();\n      options.hashContexts = this.popStack();\n    }\n\n    let inverse = this.popStack(),\n      program = this.popStack();\n\n    // Avoid setting fn and inverse if neither are set. This allows\n    // helpers to do a check for `if (options.fn)`\n    if (program || inverse) {\n      options.fn = program || 'container.noop';\n      options.inverse = inverse || 'container.noop';\n    }\n\n    // The parameters go on to the stack in order (making sure that they are evaluated in order)\n    // so we need to pop them off the stack in reverse order\n    let i = paramSize;\n    while (i--) {\n      param = this.popStack();\n      params[i] = param;\n\n      if (this.trackIds) {\n        ids[i] = this.popStack();\n      }\n      if (this.stringParams) {\n        types[i] = this.popStack();\n        contexts[i] = this.popStack();\n      }\n    }\n\n    if (objectArgs) {\n      options.args = this.source.generateArray(params);\n    }\n\n    if (this.trackIds) {\n      options.ids = this.source.generateArray(ids);\n    }\n    if (this.stringParams) {\n      options.types = this.source.generateArray(types);\n      options.contexts = this.source.generateArray(contexts);\n    }\n\n    if (this.options.data) {\n      options.data = 'data';\n    }\n    if (this.useBlockParams) {\n      options.blockParams = 'blockParams';\n    }\n    return options;\n  },\n\n  setupHelperArgs: function(helper, paramSize, params, useRegister) {\n    let options = this.setupParams(helper, paramSize, params);\n    options.loc = JSON.stringify(this.source.currentLocation);\n    options = this.objectLiteral(options);\n    if (useRegister) {\n      this.useRegister('options');\n      params.push('options');\n      return ['options=', options];\n    } else if (params) {\n      params.push(options);\n      return '';\n    } else {\n      return options;\n    }\n  }\n};\n\n(function() {\n  const reservedWords = (\n    'break else new var' +\n    ' case finally return void' +\n    ' catch for switch while' +\n    ' continue function this with' +\n    ' default if throw' +\n    ' delete in try' +\n    ' do instanceof typeof' +\n    ' abstract enum int short' +\n    ' boolean export interface static' +\n    ' byte extends long super' +\n    ' char final native synchronized' +\n    ' class float package throws' +\n    ' const goto private transient' +\n    ' debugger implements protected volatile' +\n    ' double import public let yield await' +\n    ' null true false'\n  ).split(' ');\n\n  const compilerWords = (JavaScriptCompiler.RESERVED_WORDS = {});\n\n  for (let i = 0, l = reservedWords.length; i < l; i++) {\n    compilerWords[reservedWords[i]] = true;\n  }\n})();\n\n/**\n * @deprecated May be removed in the next major version\n */\nJavaScriptCompiler.isValidJavaScriptVariableName = function(name) {\n  return (\n    !JavaScriptCompiler.RESERVED_WORDS[name] &&\n    /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)\n  );\n};\n\nfunction strictLookup(requireTerminal, compiler, parts, type) {\n  let stack = compiler.popStack(),\n    i = 0,\n    len = parts.length;\n  if (requireTerminal) {\n    len--;\n  }\n\n  for (; i < len; i++) {\n    stack = compiler.nameLookup(stack, parts[i], type);\n  }\n\n  if (requireTerminal) {\n    return [\n      compiler.aliasable('container.strict'),\n      '(',\n      stack,\n      ', ',\n      compiler.quotedString(parts[i]),\n      ', ',\n      JSON.stringify(compiler.source.currentLocation),\n      ' )'\n    ];\n  } else {\n    return stack;\n  }\n}\n\nexport default JavaScriptCompiler;\n","// File ignored in coverage tests via setting in .istanbul.yml\n/* Jison generated parser */\nvar handlebars = (function(){\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"root\":3,\"program\":4,\"EOF\":5,\"program_repetition0\":6,\"statement\":7,\"mustache\":8,\"block\":9,\"rawBlock\":10,\"partial\":11,\"partialBlock\":12,\"content\":13,\"COMMENT\":14,\"CONTENT\":15,\"openRawBlock\":16,\"rawBlock_repetition0\":17,\"END_RAW_BLOCK\":18,\"OPEN_RAW_BLOCK\":19,\"helperName\":20,\"openRawBlock_repetition0\":21,\"openRawBlock_option0\":22,\"CLOSE_RAW_BLOCK\":23,\"openBlock\":24,\"block_option0\":25,\"closeBlock\":26,\"openInverse\":27,\"block_option1\":28,\"OPEN_BLOCK\":29,\"openBlock_repetition0\":30,\"openBlock_option0\":31,\"openBlock_option1\":32,\"CLOSE\":33,\"OPEN_INVERSE\":34,\"openInverse_repetition0\":35,\"openInverse_option0\":36,\"openInverse_option1\":37,\"openInverseChain\":38,\"OPEN_INVERSE_CHAIN\":39,\"openInverseChain_repetition0\":40,\"openInverseChain_option0\":41,\"openInverseChain_option1\":42,\"inverseAndProgram\":43,\"INVERSE\":44,\"inverseChain\":45,\"inverseChain_option0\":46,\"OPEN_ENDBLOCK\":47,\"OPEN\":48,\"mustache_repetition0\":49,\"mustache_option0\":50,\"OPEN_UNESCAPED\":51,\"mustache_repetition1\":52,\"mustache_option1\":53,\"CLOSE_UNESCAPED\":54,\"OPEN_PARTIAL\":55,\"partialName\":56,\"partial_repetition0\":57,\"partial_option0\":58,\"openPartialBlock\":59,\"OPEN_PARTIAL_BLOCK\":60,\"openPartialBlock_repetition0\":61,\"openPartialBlock_option0\":62,\"param\":63,\"sexpr\":64,\"OPEN_SEXPR\":65,\"sexpr_repetition0\":66,\"sexpr_option0\":67,\"CLOSE_SEXPR\":68,\"hash\":69,\"hash_repetition_plus0\":70,\"hashSegment\":71,\"ID\":72,\"EQUALS\":73,\"blockParams\":74,\"OPEN_BLOCK_PARAMS\":75,\"blockParams_repetition_plus0\":76,\"CLOSE_BLOCK_PARAMS\":77,\"path\":78,\"dataName\":79,\"STRING\":80,\"NUMBER\":81,\"BOOLEAN\":82,\"UNDEFINED\":83,\"NULL\":84,\"DATA\":85,\"pathSegments\":86,\"SEP\":87,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",14:\"COMMENT\",15:\"CONTENT\",18:\"END_RAW_BLOCK\",19:\"OPEN_RAW_BLOCK\",23:\"CLOSE_RAW_BLOCK\",29:\"OPEN_BLOCK\",33:\"CLOSE\",34:\"OPEN_INVERSE\",39:\"OPEN_INVERSE_CHAIN\",44:\"INVERSE\",47:\"OPEN_ENDBLOCK\",48:\"OPEN\",51:\"OPEN_UNESCAPED\",54:\"CLOSE_UNESCAPED\",55:\"OPEN_PARTIAL\",60:\"OPEN_PARTIAL_BLOCK\",65:\"OPEN_SEXPR\",68:\"CLOSE_SEXPR\",72:\"ID\",73:\"EQUALS\",75:\"OPEN_BLOCK_PARAMS\",77:\"CLOSE_BLOCK_PARAMS\",80:\"STRING\",81:\"NUMBER\",82:\"BOOLEAN\",83:\"UNDEFINED\",84:\"NULL\",85:\"DATA\",87:\"SEP\"},\nproductions_: [0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,0],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$\n) {\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1: return $$[$0-1]; \nbreak;\ncase 2:this.$ = yy.prepareProgram($$[$0]);\nbreak;\ncase 3:this.$ = $$[$0];\nbreak;\ncase 4:this.$ = $$[$0];\nbreak;\ncase 5:this.$ = $$[$0];\nbreak;\ncase 6:this.$ = $$[$0];\nbreak;\ncase 7:this.$ = $$[$0];\nbreak;\ncase 8:this.$ = $$[$0];\nbreak;\ncase 9:\n    this.$ = {\n      type: 'CommentStatement',\n      value: yy.stripComment($$[$0]),\n      strip: yy.stripFlags($$[$0], $$[$0]),\n      loc: yy.locInfo(this._$)\n    };\n  \nbreak;\ncase 10:\n    this.$ = {\n      type: 'ContentStatement',\n      original: $$[$0],\n      value: $$[$0],\n      loc: yy.locInfo(this._$)\n    };\n  \nbreak;\ncase 11:this.$ = yy.prepareRawBlock($$[$0-2], $$[$0-1], $$[$0], this._$);\nbreak;\ncase 12:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1] };\nbreak;\ncase 13:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], false, this._$);\nbreak;\ncase 14:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], true, this._$);\nbreak;\ncase 15:this.$ = { open: $$[$0-5], path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };\nbreak;\ncase 16:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };\nbreak;\ncase 17:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };\nbreak;\ncase 18:this.$ = { strip: yy.stripFlags($$[$0-1], $$[$0-1]), program: $$[$0] };\nbreak;\ncase 19:\n    var inverse = yy.prepareBlock($$[$0-2], $$[$0-1], $$[$0], $$[$0], false, this._$),\n        program = yy.prepareProgram([inverse], $$[$0-1].loc);\n    program.chained = true;\n\n    this.$ = { strip: $$[$0-2].strip, program: program, chain: true };\n  \nbreak;\ncase 20:this.$ = $$[$0];\nbreak;\ncase 21:this.$ = {path: $$[$0-1], strip: yy.stripFlags($$[$0-2], $$[$0])};\nbreak;\ncase 22:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);\nbreak;\ncase 23:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);\nbreak;\ncase 24:\n    this.$ = {\n      type: 'PartialStatement',\n      name: $$[$0-3],\n      params: $$[$0-2],\n      hash: $$[$0-1],\n      indent: '',\n      strip: yy.stripFlags($$[$0-4], $$[$0]),\n      loc: yy.locInfo(this._$)\n    };\n  \nbreak;\ncase 25:this.$ = yy.preparePartialBlock($$[$0-2], $$[$0-1], $$[$0], this._$);\nbreak;\ncase 26:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1], strip: yy.stripFlags($$[$0-4], $$[$0]) };\nbreak;\ncase 27:this.$ = $$[$0];\nbreak;\ncase 28:this.$ = $$[$0];\nbreak;\ncase 29:\n    this.$ = {\n      type: 'SubExpression',\n      path: $$[$0-3],\n      params: $$[$0-2],\n      hash: $$[$0-1],\n      loc: yy.locInfo(this._$)\n    };\n  \nbreak;\ncase 30:this.$ = {type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$)};\nbreak;\ncase 31:this.$ = {type: 'HashPair', key: yy.id($$[$0-2]), value: $$[$0], loc: yy.locInfo(this._$)};\nbreak;\ncase 32:this.$ = yy.id($$[$0-1]);\nbreak;\ncase 33:this.$ = $$[$0];\nbreak;\ncase 34:this.$ = $$[$0];\nbreak;\ncase 35:this.$ = {type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$)};\nbreak;\ncase 36:this.$ = {type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$)};\nbreak;\ncase 37:this.$ = {type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$)};\nbreak;\ncase 38:this.$ = {type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$)};\nbreak;\ncase 39:this.$ = {type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$)};\nbreak;\ncase 40:this.$ = $$[$0];\nbreak;\ncase 41:this.$ = $$[$0];\nbreak;\ncase 42:this.$ = yy.preparePath(true, $$[$0], this._$);\nbreak;\ncase 43:this.$ = yy.preparePath(false, $$[$0], this._$);\nbreak;\ncase 44: $$[$0-2].push({part: yy.id($$[$0]), original: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2]; \nbreak;\ncase 45:this.$ = [{part: yy.id($$[$0]), original: $$[$0]}];\nbreak;\ncase 46:this.$ = [];\nbreak;\ncase 47:$$[$0-1].push($$[$0]);\nbreak;\ncase 48:this.$ = [];\nbreak;\ncase 49:$$[$0-1].push($$[$0]);\nbreak;\ncase 50:this.$ = [];\nbreak;\ncase 51:$$[$0-1].push($$[$0]);\nbreak;\ncase 58:this.$ = [];\nbreak;\ncase 59:$$[$0-1].push($$[$0]);\nbreak;\ncase 64:this.$ = [];\nbreak;\ncase 65:$$[$0-1].push($$[$0]);\nbreak;\ncase 70:this.$ = [];\nbreak;\ncase 71:$$[$0-1].push($$[$0]);\nbreak;\ncase 78:this.$ = [];\nbreak;\ncase 79:$$[$0-1].push($$[$0]);\nbreak;\ncase 82:this.$ = [];\nbreak;\ncase 83:$$[$0-1].push($$[$0]);\nbreak;\ncase 86:this.$ = [];\nbreak;\ncase 87:$$[$0-1].push($$[$0]);\nbreak;\ncase 90:this.$ = [];\nbreak;\ncase 91:$$[$0-1].push($$[$0]);\nbreak;\ncase 94:this.$ = [];\nbreak;\ncase 95:$$[$0-1].push($$[$0]);\nbreak;\ncase 98:this.$ = [$$[$0]];\nbreak;\ncase 99:$$[$0-1].push($$[$0]);\nbreak;\ncase 100:this.$ = [$$[$0]];\nbreak;\ncase 101:$$[$0-1].push($$[$0]);\nbreak;\n}\n},\ntable: [{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{15:[2,48],17:39,18:[2,48]},{20:41,56:40,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:44,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:45,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:41,56:48,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:49,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,50]},{72:[1,35],86:51},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:52,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:53,38:55,39:[1,57],43:56,44:[1,58],45:54,47:[2,54]},{28:59,43:60,44:[1,58],47:[2,56]},{13:62,15:[1,20],18:[1,61]},{33:[2,86],57:63,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:64,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:65,47:[1,66]},{30:67,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:68,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:69,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:70,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:74,33:[2,80],50:71,63:72,64:75,65:[1,43],69:73,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,79]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,50]},{20:74,53:80,54:[2,84],63:81,64:75,65:[1,43],69:82,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:83,47:[1,66]},{47:[2,55]},{4:84,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:85,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:86,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:87,47:[1,66]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:74,33:[2,88],58:88,63:89,64:75,65:[1,43],69:90,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:91,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:92,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,31:93,33:[2,60],63:94,64:75,65:[1,43],69:95,70:76,71:77,72:[1,78],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,66],36:96,63:97,64:75,65:[1,43],69:98,70:76,71:77,72:[1,78],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,22:99,23:[2,52],63:100,64:75,65:[1,43],69:101,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,92],62:102,63:103,64:75,65:[1,43],69:104,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,105]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:106,72:[1,107],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,108],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,109]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:55,39:[1,57],43:56,44:[1,58],45:111,46:110,47:[2,76]},{33:[2,70],40:112,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,113]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:74,63:115,64:75,65:[1,43],67:114,68:[2,96],69:116,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,117]},{32:118,33:[2,62],74:119,75:[1,120]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:121,74:122,75:[1,120]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,123]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,124]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,108]},{20:74,63:125,64:75,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:74,33:[2,72],41:126,63:127,64:75,65:[1,43],69:128,70:76,71:77,72:[1,78],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,129]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,130]},{33:[2,63]},{72:[1,132],76:131},{33:[1,133]},{33:[2,69]},{15:[2,12],18:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:134,74:135,75:[1,120]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,137],77:[1,136]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,138]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],\ndefaultActions: {4:[2,1],54:[2,55],56:[2,20],60:[2,57],73:[2,81],82:[2,85],86:[2,18],90:[2,89],101:[2,53],104:[2,93],110:[2,19],111:[2,77],116:[2,97],119:[2,63],122:[2,69],135:[2,75],136:[2,32]},\nparseError: function parseError (str, hash) {\n    throw new Error(str);\n},\nparse: function parse(input) {\n    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    this.lexer.setInput(input);\n    this.lexer.yy = this.yy;\n    this.yy.lexer = this.lexer;\n    this.yy.parser = this;\n    if (typeof this.lexer.yylloc == \"undefined\")\n        this.lexer.yylloc = {};\n    var yyloc = this.lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = this.lexer.options && this.lexer.options.ranges;\n    if (typeof this.yy.parseError === \"function\")\n        this.parseError = this.yy.parseError;\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n    function lex() {\n        var token;\n        token = self.lexer.lex() || 1;\n        if (typeof token !== \"number\") {\n            token = self.symbols_[token] || token;\n        }\n        return token;\n    }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == \"undefined\") {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === \"undefined\" || !action.length || !action[0]) {\n            var errStr = \"\";\n            if (!recovering) {\n                expected = [];\n                for (p in table[state])\n                    if (this.terminals_[p] && p > 2) {\n                        expected.push(\"'\" + this.terminals_[p] + \"'\");\n                    }\n                if (this.lexer.showPosition) {\n                    errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n                } else {\n                    errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1?\"end of input\":\"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n                }\n                this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n            }\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(this.lexer.yytext);\n            lstack.push(this.lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = this.lexer.yyleng;\n                yytext = this.lexer.yytext;\n                yylineno = this.lexer.yylineno;\n                yyloc = this.lexer.yylloc;\n                if (recovering > 0)\n                    recovering--;\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};\n            if (ranges) {\n                yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n            }\n            r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n            if (typeof r !== \"undefined\") {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}\n};\n/* Jison generated lexer */\nvar lexer = (function(){\nvar lexer = ({EOF:1,\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\nsetInput:function (input) {\n        this._input = input;\n        this._more = this._less = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n        if (this.options.ranges) this.yylloc.range = [0,0];\n        this.offset = 0;\n        return this;\n    },\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) this.yylloc.range[1]++;\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length-len-1);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length-1);\n        this.matched = this.matched.substr(0, this.matched.length-1);\n\n        if (lines.length-1) this.yylineno -= lines.length-1;\n        var r = this.yylloc.range;\n\n        this.yylloc = {first_line: this.yylloc.first_line,\n          last_line: this.yylineno+1,\n          first_column: this.yylloc.first_column,\n          last_column: lines ?\n              (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:\n              this.yylloc.first_column - len\n          };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        return this;\n    },\nmore:function () {\n        this._more = true;\n        return this;\n    },\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n    },\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n    },\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) this.done = true;\n\n        var token,\n            match,\n            tempMatch,\n            index,\n            col,\n            lines;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i=0;i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (!this.options.flex) break;\n            }\n        }\n        if (match) {\n            lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n            if (lines) this.yylineno += lines.length;\n            this.yylloc = {first_line: this.yylloc.last_line,\n                           last_line: this.yylineno+1,\n                           first_column: this.yylloc.last_column,\n                           last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length};\n            this.yytext += match[0];\n            this.match += match[0];\n            this.matches = match;\n            this.yyleng = this.yytext.length;\n            if (this.options.ranges) {\n                this.yylloc.range = [this.offset, this.offset += this.yyleng];\n            }\n            this._more = false;\n            this._input = this._input.slice(match[0].length);\n            this.matched += match[0];\n            token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\n            if (this.done && this._input) this.done = false;\n            if (token) return token;\n            else return;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n                    {text: \"\", token: null, line: this.yylineno});\n        }\n    },\nlex:function lex () {\n        var r = this.next();\n        if (typeof r !== 'undefined') {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\npopState:function popState () {\n        return this.conditionStack.pop();\n    },\n_currentRules:function _currentRules () {\n        return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n    },\ntopState:function () {\n        return this.conditionStack[this.conditionStack.length-2];\n    },\npushState:function begin (condition) {\n        this.begin(condition);\n    }});\nlexer.options = {};\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START\n) {\n\n\nfunction strip(start, end) {\n  return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n}\n\n\nvar YYSTATE=YY_START\nswitch($avoiding_name_collisions) {\ncase 0:\n                                   if(yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n                                     strip(0,1);\n                                     this.begin(\"mu\");\n                                   } else if(yy_.yytext.slice(-1) === \"\\\\\") {\n                                     strip(0,1);\n                                     this.begin(\"emu\");\n                                   } else {\n                                     this.begin(\"mu\");\n                                   }\n                                   if(yy_.yytext) return 15;\n                                 \nbreak;\ncase 1:return 15;\nbreak;\ncase 2:\n                                   this.popState();\n                                   return 15;\n                                 \nbreak;\ncase 3:this.begin('raw'); return 15;\nbreak;\ncase 4:\n                                  this.popState();\n                                  // Should be using `this.topState()` below, but it currently\n                                  // returns the second top instead of the first top. Opened an\n                                  // issue about it at https://github.com/zaach/jison/issues/291\n                                  if (this.conditionStack[this.conditionStack.length-1] === 'raw') {\n                                    return 15;\n                                  } else {\n                                    strip(5, 9);\n                                    return 'END_RAW_BLOCK';\n                                  }\n                                 \nbreak;\ncase 5: return 15; \nbreak;\ncase 6:\n  this.popState();\n  return 14;\n\nbreak;\ncase 7:return 65;\nbreak;\ncase 8:return 68;\nbreak;\ncase 9: return 19; \nbreak;\ncase 10:\n                                  this.popState();\n                                  this.begin('raw');\n                                  return 23;\n                                 \nbreak;\ncase 11:return 55;\nbreak;\ncase 12:return 60;\nbreak;\ncase 13:return 29;\nbreak;\ncase 14:return 47;\nbreak;\ncase 15:this.popState(); return 44;\nbreak;\ncase 16:this.popState(); return 44;\nbreak;\ncase 17:return 34;\nbreak;\ncase 18:return 39;\nbreak;\ncase 19:return 51;\nbreak;\ncase 20:return 48;\nbreak;\ncase 21:\n  this.unput(yy_.yytext);\n  this.popState();\n  this.begin('com');\n\nbreak;\ncase 22:\n  this.popState();\n  return 14;\n\nbreak;\ncase 23:return 48;\nbreak;\ncase 24:return 73;\nbreak;\ncase 25:return 72;\nbreak;\ncase 26:return 72;\nbreak;\ncase 27:return 87;\nbreak;\ncase 28:// ignore whitespace\nbreak;\ncase 29:this.popState(); return 54;\nbreak;\ncase 30:this.popState(); return 33;\nbreak;\ncase 31:yy_.yytext = strip(1,2).replace(/\\\\\"/g,'\"'); return 80;\nbreak;\ncase 32:yy_.yytext = strip(1,2).replace(/\\\\'/g,\"'\"); return 80;\nbreak;\ncase 33:return 85;\nbreak;\ncase 34:return 82;\nbreak;\ncase 35:return 82;\nbreak;\ncase 36:return 83;\nbreak;\ncase 37:return 84;\nbreak;\ncase 38:return 81;\nbreak;\ncase 39:return 75;\nbreak;\ncase 40:return 77;\nbreak;\ncase 41:return 72;\nbreak;\ncase 42:yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g,'$1'); return 72;\nbreak;\ncase 43:return 'INVALID';\nbreak;\ncase 44:return 5;\nbreak;\n}\n};\nlexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/,/^(?:[^\\x00]+)/,/^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/,/^(?:\\{\\{\\{\\{(?=[^\\/]))/,/^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/,/^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/,/^(?:[\\s\\S]*?--(~)?\\}\\})/,/^(?:\\()/,/^(?:\\))/,/^(?:\\{\\{\\{\\{)/,/^(?:\\}\\}\\}\\})/,/^(?:\\{\\{(~)?>)/,/^(?:\\{\\{(~)?#>)/,/^(?:\\{\\{(~)?#\\*?)/,/^(?:\\{\\{(~)?\\/)/,/^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/,/^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/,/^(?:\\{\\{(~)?\\^)/,/^(?:\\{\\{(~)?\\s*else\\b)/,/^(?:\\{\\{(~)?\\{)/,/^(?:\\{\\{(~)?&)/,/^(?:\\{\\{(~)?!--)/,/^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/,/^(?:\\{\\{(~)?\\*?)/,/^(?:=)/,/^(?:\\.\\.)/,/^(?:\\.(?=([=~}\\s\\/.)|])))/,/^(?:[\\/.])/,/^(?:\\s+)/,/^(?:\\}(~)?\\}\\})/,/^(?:(~)?\\}\\})/,/^(?:\"(\\\\[\"]|[^\"])*\")/,/^(?:'(\\\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\\s)])))/,/^(?:false(?=([~}\\s)])))/,/^(?:undefined(?=([~}\\s)])))/,/^(?:null(?=([~}\\s)])))/,/^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/,/^(?:as\\s+\\|)/,/^(?:\\|)/,/^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/,/^(?:\\[(\\\\\\]|[^\\]])*\\])/,/^(?:.)/,/^(?:$)/];\nlexer.conditions = {\"mu\":{\"rules\":[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],\"inclusive\":false},\"emu\":{\"rules\":[2],\"inclusive\":false},\"com\":{\"rules\":[6],\"inclusive\":false},\"raw\":{\"rules\":[3,4,5],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,44],\"inclusive\":true}};\nreturn lexer;})()\nparser.lexer = lexer;\nfunction Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();export default handlebars;\n","import Exception from '../exception';\n\nfunction Visitor() {\n  this.parents = [];\n}\n\nVisitor.prototype = {\n  constructor: Visitor,\n  mutating: false,\n\n  // Visits a given value. If mutating, will replace the value if necessary.\n  acceptKey: function(node, name) {\n    let value = this.accept(node[name]);\n    if (this.mutating) {\n      // Hacky sanity check: This may have a few false positives for type for the helper\n      // methods but will generally do the right thing without a lot of overhead.\n      if (value && !Visitor.prototype[value.type]) {\n        throw new Exception(\n          'Unexpected node type \"' +\n            value.type +\n            '\" found when accepting ' +\n            name +\n            ' on ' +\n            node.type\n        );\n      }\n      node[name] = value;\n    }\n  },\n\n  // Performs an accept operation with added sanity check to ensure\n  // required keys are not removed.\n  acceptRequired: function(node, name) {\n    this.acceptKey(node, name);\n\n    if (!node[name]) {\n      throw new Exception(node.type + ' requires ' + name);\n    }\n  },\n\n  // Traverses a given array. If mutating, empty respnses will be removed\n  // for child elements.\n  acceptArray: function(array) {\n    for (let i = 0, l = array.length; i < l; i++) {\n      this.acceptKey(array, i);\n\n      if (!array[i]) {\n        array.splice(i, 1);\n        i--;\n        l--;\n      }\n    }\n  },\n\n  accept: function(object) {\n    if (!object) {\n      return;\n    }\n\n    /* istanbul ignore next: Sanity code */\n    if (!this[object.type]) {\n      throw new Exception('Unknown type: ' + object.type, object);\n    }\n\n    if (this.current) {\n      this.parents.unshift(this.current);\n    }\n    this.current = object;\n\n    let ret = this[object.type](object);\n\n    this.current = this.parents.shift();\n\n    if (!this.mutating || ret) {\n      return ret;\n    } else if (ret !== false) {\n      return object;\n    }\n  },\n\n  Program: function(program) {\n    this.acceptArray(program.body);\n  },\n\n  MustacheStatement: visitSubExpression,\n  Decorator: visitSubExpression,\n\n  BlockStatement: visitBlock,\n  DecoratorBlock: visitBlock,\n\n  PartialStatement: visitPartial,\n  PartialBlockStatement: function(partial) {\n    visitPartial.call(this, partial);\n\n    this.acceptKey(partial, 'program');\n  },\n\n  ContentStatement: function(/* content */) {},\n  CommentStatement: function(/* comment */) {},\n\n  SubExpression: visitSubExpression,\n\n  PathExpression: function(/* path */) {},\n\n  StringLiteral: function(/* string */) {},\n  NumberLiteral: function(/* number */) {},\n  BooleanLiteral: function(/* bool */) {},\n  UndefinedLiteral: function(/* literal */) {},\n  NullLiteral: function(/* literal */) {},\n\n  Hash: function(hash) {\n    this.acceptArray(hash.pairs);\n  },\n  HashPair: function(pair) {\n    this.acceptRequired(pair, 'value');\n  }\n};\n\nfunction visitSubExpression(mustache) {\n  this.acceptRequired(mustache, 'path');\n  this.acceptArray(mustache.params);\n  this.acceptKey(mustache, 'hash');\n}\nfunction visitBlock(block) {\n  visitSubExpression.call(this, block);\n\n  this.acceptKey(block, 'program');\n  this.acceptKey(block, 'inverse');\n}\nfunction visitPartial(partial) {\n  this.acceptRequired(partial, 'name');\n  this.acceptArray(partial.params);\n  this.acceptKey(partial, 'hash');\n}\n\nexport default Visitor;\n","import Visitor from './visitor';\n\nfunction WhitespaceControl(options = {}) {\n  this.options = options;\n}\nWhitespaceControl.prototype = new Visitor();\n\nWhitespaceControl.prototype.Program = function(program) {\n  const doStandalone = !this.options.ignoreStandalone;\n\n  let isRoot = !this.isRootSeen;\n  this.isRootSeen = true;\n\n  let body = program.body;\n  for (let i = 0, l = body.length; i < l; i++) {\n    let current = body[i],\n      strip = this.accept(current);\n\n    if (!strip) {\n      continue;\n    }\n\n    let _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n      _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n      openStandalone = strip.openStandalone && _isPrevWhitespace,\n      closeStandalone = strip.closeStandalone && _isNextWhitespace,\n      inlineStandalone =\n        strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\n    if (strip.close) {\n      omitRight(body, i, true);\n    }\n    if (strip.open) {\n      omitLeft(body, i, true);\n    }\n\n    if (doStandalone && inlineStandalone) {\n      omitRight(body, i);\n\n      if (omitLeft(body, i)) {\n        // If we are on a standalone node, save the indent info for partials\n        if (current.type === 'PartialStatement') {\n          // Pull out the whitespace from the final line\n          current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n        }\n      }\n    }\n    if (doStandalone && openStandalone) {\n      omitRight((current.program || current.inverse).body);\n\n      // Strip out the previous content node if it's whitespace only\n      omitLeft(body, i);\n    }\n    if (doStandalone && closeStandalone) {\n      // Always strip the next node\n      omitRight(body, i);\n\n      omitLeft((current.inverse || current.program).body);\n    }\n  }\n\n  return program;\n};\n\nWhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function(\n  block\n) {\n  this.accept(block.program);\n  this.accept(block.inverse);\n\n  // Find the inverse program that is involed with whitespace stripping.\n  let program = block.program || block.inverse,\n    inverse = block.program && block.inverse,\n    firstInverse = inverse,\n    lastInverse = inverse;\n\n  if (inverse && inverse.chained) {\n    firstInverse = inverse.body[0].program;\n\n    // Walk the inverse chain to find the last inverse that is actually in the chain.\n    while (lastInverse.chained) {\n      lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n    }\n  }\n\n  let strip = {\n    open: block.openStrip.open,\n    close: block.closeStrip.close,\n\n    // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n    // so our parent can determine if we actually are standalone\n    openStandalone: isNextWhitespace(program.body),\n    closeStandalone: isPrevWhitespace((firstInverse || program).body)\n  };\n\n  if (block.openStrip.close) {\n    omitRight(program.body, null, true);\n  }\n\n  if (inverse) {\n    let inverseStrip = block.inverseStrip;\n\n    if (inverseStrip.open) {\n      omitLeft(program.body, null, true);\n    }\n\n    if (inverseStrip.close) {\n      omitRight(firstInverse.body, null, true);\n    }\n    if (block.closeStrip.open) {\n      omitLeft(lastInverse.body, null, true);\n    }\n\n    // Find standalone else statments\n    if (\n      !this.options.ignoreStandalone &&\n      isPrevWhitespace(program.body) &&\n      isNextWhitespace(firstInverse.body)\n    ) {\n      omitLeft(program.body);\n      omitRight(firstInverse.body);\n    }\n  } else if (block.closeStrip.open) {\n    omitLeft(program.body, null, true);\n  }\n\n  return strip;\n};\n\nWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function(\n  mustache\n) {\n  return mustache.strip;\n};\n\nWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function(\n  node\n) {\n  /* istanbul ignore next */\n  let strip = node.strip || {};\n  return {\n    inlineStandalone: true,\n    open: strip.open,\n    close: strip.close\n  };\n};\n\nfunction isPrevWhitespace(body, i, isRoot) {\n  if (i === undefined) {\n    i = body.length;\n  }\n\n  // Nodes that end with newlines are considered whitespace (but are special\n  // cased for strip operations)\n  let prev = body[i - 1],\n    sibling = body[i - 2];\n  if (!prev) {\n    return isRoot;\n  }\n\n  if (prev.type === 'ContentStatement') {\n    return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(\n      prev.original\n    );\n  }\n}\nfunction isNextWhitespace(body, i, isRoot) {\n  if (i === undefined) {\n    i = -1;\n  }\n\n  let next = body[i + 1],\n    sibling = body[i + 2];\n  if (!next) {\n    return isRoot;\n  }\n\n  if (next.type === 'ContentStatement') {\n    return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(\n      next.original\n    );\n  }\n}\n\n// Marks the node to the right of the position as omitted.\n// I.e. {{foo}}' ' will mark the ' ' node as omitted.\n//\n// If i is undefined, then the first child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitRight(body, i, multiple) {\n  let current = body[i == null ? 0 : i + 1];\n  if (\n    !current ||\n    current.type !== 'ContentStatement' ||\n    (!multiple && current.rightStripped)\n  ) {\n    return;\n  }\n\n  let original = current.value;\n  current.value = current.value.replace(\n    multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/,\n    ''\n  );\n  current.rightStripped = current.value !== original;\n}\n\n// Marks the node to the left of the position as omitted.\n// I.e. ' '{{foo}} will mark the ' ' node as omitted.\n//\n// If i is undefined then the last child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitLeft(body, i, multiple) {\n  let current = body[i == null ? body.length - 1 : i - 1];\n  if (\n    !current ||\n    current.type !== 'ContentStatement' ||\n    (!multiple && current.leftStripped)\n  ) {\n    return;\n  }\n\n  // We omit the last node if it's whitespace only and not preceded by a non-content node.\n  let original = current.value;\n  current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n  current.leftStripped = current.value !== original;\n  return current.leftStripped;\n}\n\nexport default WhitespaceControl;\n","import registerInline from './decorators/inline';\n\nexport function registerDefaultDecorators(instance) {\n  registerInline(instance);\n}\n","import { extend } from '../utils';\n\nexport default function(instance) {\n  instance.registerDecorator('inline', function(fn, props, container, options) {\n    let ret = fn;\n    if (!props.partials) {\n      props.partials = {};\n      ret = function(context, options) {\n        // Create a new partials stack frame prior to exec.\n        let original = container.partials;\n        container.partials = extend({}, original, props.partials);\n        let ret = fn(context, options);\n        container.partials = original;\n        return ret;\n      };\n    }\n\n    props.partials[options.args[0]] = options.fn;\n\n    return ret;\n  });\n}\n","const errorProps = [\n  'description',\n  'fileName',\n  'lineNumber',\n  'endLineNumber',\n  'message',\n  'name',\n  'number',\n  'stack'\n];\n\nfunction Exception(message, node) {\n  let loc = node && node.loc,\n    line,\n    endLineNumber,\n    column,\n    endColumn;\n\n  if (loc) {\n    line = loc.start.line;\n    endLineNumber = loc.end.line;\n    column = loc.start.column;\n    endColumn = loc.end.column;\n\n    message += ' - ' + line + ':' + column;\n  }\n\n  let tmp = Error.prototype.constructor.call(this, message);\n\n  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n  for (let idx = 0; idx < errorProps.length; idx++) {\n    this[errorProps[idx]] = tmp[errorProps[idx]];\n  }\n\n  /* istanbul ignore else */\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, Exception);\n  }\n\n  try {\n    if (loc) {\n      this.lineNumber = line;\n      this.endLineNumber = endLineNumber;\n\n      // Work around issue under safari where we can't directly set the column value\n      /* istanbul ignore next */\n      if (Object.defineProperty) {\n        Object.defineProperty(this, 'column', {\n          value: column,\n          enumerable: true\n        });\n        Object.defineProperty(this, 'endColumn', {\n          value: endColumn,\n          enumerable: true\n        });\n      } else {\n        this.column = column;\n        this.endColumn = endColumn;\n      }\n    }\n  } catch (nop) {\n    /* Ignore if the browser is very particular */\n  }\n}\n\nException.prototype = new Error();\n\nexport default Exception;\n","import registerBlockHelperMissing from './helpers/block-helper-missing';\nimport registerEach from './helpers/each';\nimport registerHelperMissing from './helpers/helper-missing';\nimport registerIf from './helpers/if';\nimport registerLog from './helpers/log';\nimport registerLookup from './helpers/lookup';\nimport registerWith from './helpers/with';\n\nexport function registerDefaultHelpers(instance) {\n  registerBlockHelperMissing(instance);\n  registerEach(instance);\n  registerHelperMissing(instance);\n  registerIf(instance);\n  registerLog(instance);\n  registerLookup(instance);\n  registerWith(instance);\n}\n\nexport function moveHelperToHooks(instance, helperName, keepHelper) {\n  if (instance.helpers[helperName]) {\n    instance.hooks[helperName] = instance.helpers[helperName];\n    if (!keepHelper) {\n      delete instance.helpers[helperName];\n    }\n  }\n}\n","import { appendContextPath, createFrame, isArray } from '../utils';\n\nexport default function(instance) {\n  instance.registerHelper('blockHelperMissing', function(context, options) {\n    let inverse = options.inverse,\n      fn = options.fn;\n\n    if (context === true) {\n      return fn(this);\n    } else if (context === false || context == null) {\n      return inverse(this);\n    } else if (isArray(context)) {\n      if (context.length > 0) {\n        if (options.ids) {\n          options.ids = [options.name];\n        }\n\n        return instance.helpers.each(context, options);\n      } else {\n        return inverse(this);\n      }\n    } else {\n      if (options.data && options.ids) {\n        let data = createFrame(options.data);\n        data.contextPath = appendContextPath(\n          options.data.contextPath,\n          options.name\n        );\n        options = { data: data };\n      }\n\n      return fn(context, options);\n    }\n  });\n}\n","import {\n  appendContextPath,\n  blockParams,\n  createFrame,\n  isArray,\n  isFunction\n} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('each', function(context, options) {\n    if (!options) {\n      throw new Exception('Must pass iterator to #each');\n    }\n\n    let fn = options.fn,\n      inverse = options.inverse,\n      i = 0,\n      ret = '',\n      data,\n      contextPath;\n\n    if (options.data && options.ids) {\n      contextPath =\n        appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n    }\n\n    if (isFunction(context)) {\n      context = context.call(this);\n    }\n\n    if (options.data) {\n      data = createFrame(options.data);\n    }\n\n    function execIteration(field, index, last) {\n      if (data) {\n        data.key = field;\n        data.index = index;\n        data.first = index === 0;\n        data.last = !!last;\n\n        if (contextPath) {\n          data.contextPath = contextPath + field;\n        }\n      }\n\n      ret =\n        ret +\n        fn(context[field], {\n          data: data,\n          blockParams: blockParams(\n            [context[field], field],\n            [contextPath + field, null]\n          )\n        });\n    }\n\n    if (context && typeof context === 'object') {\n      if (isArray(context)) {\n        for (let j = context.length; i < j; i++) {\n          if (i in context) {\n            execIteration(i, i, i === context.length - 1);\n          }\n        }\n      } else if (global.Symbol && context[global.Symbol.iterator]) {\n        const newContext = [];\n        const iterator = context[global.Symbol.iterator]();\n        for (let it = iterator.next(); !it.done; it = iterator.next()) {\n          newContext.push(it.value);\n        }\n        context = newContext;\n        for (let j = context.length; i < j; i++) {\n          execIteration(i, i, i === context.length - 1);\n        }\n      } else {\n        let priorKey;\n\n        Object.keys(context).forEach(key => {\n          // We're running the iterations one step out of sync so we can detect\n          // the last iteration without have to scan the object twice and create\n          // an itermediate keys array.\n          if (priorKey !== undefined) {\n            execIteration(priorKey, i - 1);\n          }\n          priorKey = key;\n          i++;\n        });\n        if (priorKey !== undefined) {\n          execIteration(priorKey, i - 1, true);\n        }\n      }\n    }\n\n    if (i === 0) {\n      ret = inverse(this);\n    }\n\n    return ret;\n  });\n}\n","import Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('helperMissing', function(/* [args, ]options */) {\n    if (arguments.length === 1) {\n      // A missing field in a {{foo}} construct.\n      return undefined;\n    } else {\n      // Someone is actually trying to call something, blow up.\n      throw new Exception(\n        'Missing helper: \"' + arguments[arguments.length - 1].name + '\"'\n      );\n    }\n  });\n}\n","import { isEmpty, isFunction } from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('if', function(conditional, options) {\n    if (arguments.length != 2) {\n      throw new Exception('#if requires exactly one argument');\n    }\n    if (isFunction(conditional)) {\n      conditional = conditional.call(this);\n    }\n\n    // Default behavior is to render the positive path if the value is truthy and not empty.\n    // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n    // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n    if ((!options.hash.includeZero && !conditional) || isEmpty(conditional)) {\n      return options.inverse(this);\n    } else {\n      return options.fn(this);\n    }\n  });\n\n  instance.registerHelper('unless', function(conditional, options) {\n    if (arguments.length != 2) {\n      throw new Exception('#unless requires exactly one argument');\n    }\n    return instance.helpers['if'].call(this, conditional, {\n      fn: options.inverse,\n      inverse: options.fn,\n      hash: options.hash\n    });\n  });\n}\n","export default function(instance) {\n  instance.registerHelper('log', function(/* message, options */) {\n    let args = [undefined],\n      options = arguments[arguments.length - 1];\n    for (let i = 0; i < arguments.length - 1; i++) {\n      args.push(arguments[i]);\n    }\n\n    let level = 1;\n    if (options.hash.level != null) {\n      level = options.hash.level;\n    } else if (options.data && options.data.level != null) {\n      level = options.data.level;\n    }\n    args[0] = level;\n\n    instance.log(...args);\n  });\n}\n","export default function(instance) {\n  instance.registerHelper('lookup', function(obj, field, options) {\n    if (!obj) {\n      // Note for 5.0: Change to \"obj == null\" in 5.0\n      return obj;\n    }\n    return options.lookupProperty(obj, field);\n  });\n}\n","import {\n  appendContextPath,\n  blockParams,\n  createFrame,\n  isEmpty,\n  isFunction\n} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('with', function(context, options) {\n    if (arguments.length != 2) {\n      throw new Exception('#with requires exactly one argument');\n    }\n    if (isFunction(context)) {\n      context = context.call(this);\n    }\n\n    let fn = options.fn;\n\n    if (!isEmpty(context)) {\n      let data = options.data;\n      if (options.data && options.ids) {\n        data = createFrame(options.data);\n        data.contextPath = appendContextPath(\n          options.data.contextPath,\n          options.ids[0]\n        );\n      }\n\n      return fn(context, {\n        data: data,\n        blockParams: blockParams([context], [data && data.contextPath])\n      });\n    } else {\n      return options.inverse(this);\n    }\n  });\n}\n","import { extend } from '../utils';\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\nexport function createNewLookupObject(...sources) {\n  return extend(Object.create(null), ...sources);\n}\n","import { createNewLookupObject } from './create-new-lookup-object';\nimport * as logger from '../logger';\n\nconst loggedProperties = Object.create(null);\n\nexport function createProtoAccessControl(runtimeOptions) {\n  let defaultMethodWhiteList = Object.create(null);\n  defaultMethodWhiteList['constructor'] = false;\n  defaultMethodWhiteList['__defineGetter__'] = false;\n  defaultMethodWhiteList['__defineSetter__'] = false;\n  defaultMethodWhiteList['__lookupGetter__'] = false;\n\n  let defaultPropertyWhiteList = Object.create(null);\n  // eslint-disable-next-line no-proto\n  defaultPropertyWhiteList['__proto__'] = false;\n\n  return {\n    properties: {\n      whitelist: createNewLookupObject(\n        defaultPropertyWhiteList,\n        runtimeOptions.allowedProtoProperties\n      ),\n      defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n    },\n    methods: {\n      whitelist: createNewLookupObject(\n        defaultMethodWhiteList,\n        runtimeOptions.allowedProtoMethods\n      ),\n      defaultValue: runtimeOptions.allowProtoMethodsByDefault\n    }\n  };\n}\n\nexport function resultIsAllowed(result, protoAccessControl, propertyName) {\n  if (typeof result === 'function') {\n    return checkWhiteList(protoAccessControl.methods, propertyName);\n  } else {\n    return checkWhiteList(protoAccessControl.properties, propertyName);\n  }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n  if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n    return protoAccessControlForType.whitelist[propertyName] === true;\n  }\n  if (protoAccessControlForType.defaultValue !== undefined) {\n    return protoAccessControlForType.defaultValue;\n  }\n  logUnexpecedPropertyAccessOnce(propertyName);\n  return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n  if (loggedProperties[propertyName] !== true) {\n    loggedProperties[propertyName] = true;\n    logger.log(\n      'error',\n      `Handlebars: Access has been denied to resolve the property \"${propertyName}\" because it is not an \"own property\" of its parent.\\n` +\n        `You can add a runtime option to disable the check or this warning:\\n` +\n        `See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details`\n    );\n  }\n}\n\nexport function resetLoggedProperties() {\n  Object.keys(loggedProperties).forEach(propertyName => {\n    delete loggedProperties[propertyName];\n  });\n}\n","export function wrapHelper(helper, transformOptionsFn) {\n  if (typeof helper !== 'function') {\n    // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n    // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n    return helper;\n  }\n  let wrapper = function(/* dynamic arguments */) {\n    const options = arguments[arguments.length - 1];\n    arguments[arguments.length - 1] = transformOptionsFn(options);\n    return helper.apply(this, arguments);\n  };\n  return wrapper;\n}\n","import { indexOf } from './utils';\n\nlet logger = {\n  methodMap: ['debug', 'info', 'warn', 'error'],\n  level: 'info',\n\n  // Maps a given level value to the `methodMap` indexes above.\n  lookupLevel: function(level) {\n    if (typeof level === 'string') {\n      let levelMap = indexOf(logger.methodMap, level.toLowerCase());\n      if (levelMap >= 0) {\n        level = levelMap;\n      } else {\n        level = parseInt(level, 10);\n      }\n    }\n\n    return level;\n  },\n\n  // Can be overridden in the host environment\n  log: function(level, ...message) {\n    level = logger.lookupLevel(level);\n\n    if (\n      typeof console !== 'undefined' &&\n      logger.lookupLevel(logger.level) <= level\n    ) {\n      let method = logger.methodMap[level];\n      // eslint-disable-next-line no-console\n      if (!console[method]) {\n        method = 'log';\n      }\n      console[method](...message); // eslint-disable-line no-console\n    }\n  }\n};\n\nexport default logger;\n","export default function(Handlebars) {\n  /* istanbul ignore next */\n  let root = typeof global !== 'undefined' ? global : window,\n    $Handlebars = root.Handlebars;\n  /* istanbul ignore next */\n  Handlebars.noConflict = function() {\n    if (root.Handlebars === Handlebars) {\n      root.Handlebars = $Handlebars;\n    }\n    return Handlebars;\n  };\n}\n","import * as Utils from './utils';\nimport Exception from './exception';\nimport {\n  COMPILER_REVISION,\n  createFrame,\n  LAST_COMPATIBLE_COMPILER_REVISION,\n  REVISION_CHANGES\n} from './base';\nimport { moveHelperToHooks } from './helpers';\nimport { wrapHelper } from './internal/wrapHelper';\nimport {\n  createProtoAccessControl,\n  resultIsAllowed\n} from './internal/proto-access';\n\nexport function checkRevision(compilerInfo) {\n  const compilerRevision = (compilerInfo && compilerInfo[0]) || 1,\n    currentRevision = COMPILER_REVISION;\n\n  if (\n    compilerRevision >= LAST_COMPATIBLE_COMPILER_REVISION &&\n    compilerRevision <= COMPILER_REVISION\n  ) {\n    return;\n  }\n\n  if (compilerRevision < LAST_COMPATIBLE_COMPILER_REVISION) {\n    const runtimeVersions = REVISION_CHANGES[currentRevision],\n      compilerVersions = REVISION_CHANGES[compilerRevision];\n    throw new Exception(\n      'Template was precompiled with an older version of Handlebars than the current runtime. ' +\n        'Please update your precompiler to a newer version (' +\n        runtimeVersions +\n        ') or downgrade your runtime to an older version (' +\n        compilerVersions +\n        ').'\n    );\n  } else {\n    // Use the embedded version info since the runtime doesn't know about this revision yet\n    throw new Exception(\n      'Template was precompiled with a newer version of Handlebars than the current runtime. ' +\n        'Please update your runtime to a newer version (' +\n        compilerInfo[1] +\n        ').'\n    );\n  }\n}\n\nexport function template(templateSpec, env) {\n  /* istanbul ignore next */\n  if (!env) {\n    throw new Exception('No environment passed to template');\n  }\n  if (!templateSpec || !templateSpec.main) {\n    throw new Exception('Unknown template object: ' + typeof templateSpec);\n  }\n\n  templateSpec.main.decorator = templateSpec.main_d;\n\n  // Note: Using env.VM references rather than local var references throughout this section to allow\n  // for external users to override these as pseudo-supported APIs.\n  env.VM.checkRevision(templateSpec.compiler);\n\n  // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n  const templateWasPrecompiledWithCompilerV7 =\n    templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n  function invokePartialWrapper(partial, context, options) {\n    if (options.hash) {\n      context = Utils.extend({}, context, options.hash);\n      if (options.ids) {\n        options.ids[0] = true;\n      }\n    }\n    partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n    let extendedOptions = Utils.extend({}, options, {\n      hooks: this.hooks,\n      protoAccessControl: this.protoAccessControl\n    });\n\n    let result = env.VM.invokePartial.call(\n      this,\n      partial,\n      context,\n      extendedOptions\n    );\n\n    if (result == null && env.compile) {\n      options.partials[options.name] = env.compile(\n        partial,\n        templateSpec.compilerOptions,\n        env\n      );\n      result = options.partials[options.name](context, extendedOptions);\n    }\n    if (result != null) {\n      if (options.indent) {\n        let lines = result.split('\\n');\n        for (let i = 0, l = lines.length; i < l; i++) {\n          if (!lines[i] && i + 1 === l) {\n            break;\n          }\n\n          lines[i] = options.indent + lines[i];\n        }\n        result = lines.join('\\n');\n      }\n      return result;\n    } else {\n      throw new Exception(\n        'The partial ' +\n          options.name +\n          ' could not be compiled when running in runtime-only mode'\n      );\n    }\n  }\n\n  // Just add water\n  let container = {\n    strict: function(obj, name, loc) {\n      if (!obj || !(name in obj)) {\n        throw new Exception('\"' + name + '\" not defined in ' + obj, {\n          loc: loc\n        });\n      }\n      return container.lookupProperty(obj, name);\n    },\n    lookupProperty: function(parent, propertyName) {\n      let result = parent[propertyName];\n      if (result == null) {\n        return result;\n      }\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return result;\n      }\n\n      if (resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n        return result;\n      }\n      return undefined;\n    },\n    lookup: function(depths, name) {\n      const len = depths.length;\n      for (let i = 0; i < len; i++) {\n        let result = depths[i] && container.lookupProperty(depths[i], name);\n        if (result != null) {\n          return depths[i][name];\n        }\n      }\n    },\n    lambda: function(current, context) {\n      return typeof current === 'function' ? current.call(context) : current;\n    },\n\n    escapeExpression: Utils.escapeExpression,\n    invokePartial: invokePartialWrapper,\n\n    fn: function(i) {\n      let ret = templateSpec[i];\n      ret.decorator = templateSpec[i + '_d'];\n      return ret;\n    },\n\n    programs: [],\n    program: function(i, data, declaredBlockParams, blockParams, depths) {\n      let programWrapper = this.programs[i],\n        fn = this.fn(i);\n      if (data || depths || blockParams || declaredBlockParams) {\n        programWrapper = wrapProgram(\n          this,\n          i,\n          fn,\n          data,\n          declaredBlockParams,\n          blockParams,\n          depths\n        );\n      } else if (!programWrapper) {\n        programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n      }\n      return programWrapper;\n    },\n\n    data: function(value, depth) {\n      while (value && depth--) {\n        value = value._parent;\n      }\n      return value;\n    },\n    mergeIfNeeded: function(param, common) {\n      let obj = param || common;\n\n      if (param && common && param !== common) {\n        obj = Utils.extend({}, common, param);\n      }\n\n      return obj;\n    },\n    // An empty object to use as replacement for null-contexts\n    nullContext: Object.seal({}),\n\n    noop: env.VM.noop,\n    compilerInfo: templateSpec.compiler\n  };\n\n  function ret(context, options = {}) {\n    let data = options.data;\n\n    ret._setup(options);\n    if (!options.partial && templateSpec.useData) {\n      data = initData(context, data);\n    }\n    let depths,\n      blockParams = templateSpec.useBlockParams ? [] : undefined;\n    if (templateSpec.useDepths) {\n      if (options.depths) {\n        depths =\n          context != options.depths[0]\n            ? [context].concat(options.depths)\n            : options.depths;\n      } else {\n        depths = [context];\n      }\n    }\n\n    function main(context /*, options*/) {\n      return (\n        '' +\n        templateSpec.main(\n          container,\n          context,\n          container.helpers,\n          container.partials,\n          data,\n          blockParams,\n          depths\n        )\n      );\n    }\n\n    main = executeDecorators(\n      templateSpec.main,\n      main,\n      container,\n      options.depths || [],\n      data,\n      blockParams\n    );\n    return main(context, options);\n  }\n\n  ret.isTop = true;\n\n  ret._setup = function(options) {\n    if (!options.partial) {\n      let mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n      wrapHelpersToPassLookupProperty(mergedHelpers, container);\n      container.helpers = mergedHelpers;\n\n      if (templateSpec.usePartial) {\n        // Use mergeIfNeeded here to prevent compiling global partials multiple times\n        container.partials = container.mergeIfNeeded(\n          options.partials,\n          env.partials\n        );\n      }\n      if (templateSpec.usePartial || templateSpec.useDecorators) {\n        container.decorators = Utils.extend(\n          {},\n          env.decorators,\n          options.decorators\n        );\n      }\n\n      container.hooks = {};\n      container.protoAccessControl = createProtoAccessControl(options);\n\n      let keepHelperInHelpers =\n        options.allowCallsToHelperMissing ||\n        templateWasPrecompiledWithCompilerV7;\n      moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n      moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n    } else {\n      container.protoAccessControl = options.protoAccessControl; // internal option\n      container.helpers = options.helpers;\n      container.partials = options.partials;\n      container.decorators = options.decorators;\n      container.hooks = options.hooks;\n    }\n  };\n\n  ret._child = function(i, data, blockParams, depths) {\n    if (templateSpec.useBlockParams && !blockParams) {\n      throw new Exception('must pass block params');\n    }\n    if (templateSpec.useDepths && !depths) {\n      throw new Exception('must pass parent depths');\n    }\n\n    return wrapProgram(\n      container,\n      i,\n      templateSpec[i],\n      data,\n      0,\n      blockParams,\n      depths\n    );\n  };\n  return ret;\n}\n\nexport function wrapProgram(\n  container,\n  i,\n  fn,\n  data,\n  declaredBlockParams,\n  blockParams,\n  depths\n) {\n  function prog(context, options = {}) {\n    let currentDepths = depths;\n    if (\n      depths &&\n      context != depths[0] &&\n      !(context === container.nullContext && depths[0] === null)\n    ) {\n      currentDepths = [context].concat(depths);\n    }\n\n    return fn(\n      container,\n      context,\n      container.helpers,\n      container.partials,\n      options.data || data,\n      blockParams && [options.blockParams].concat(blockParams),\n      currentDepths\n    );\n  }\n\n  prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n  prog.program = i;\n  prog.depth = depths ? depths.length : 0;\n  prog.blockParams = declaredBlockParams || 0;\n  return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\nexport function resolvePartial(partial, context, options) {\n  if (!partial) {\n    if (options.name === '@partial-block') {\n      partial = options.data['partial-block'];\n    } else {\n      partial = options.partials[options.name];\n    }\n  } else if (!partial.call && !options.name) {\n    // This is a dynamic partial that returned a string\n    options.name = partial;\n    partial = options.partials[partial];\n  }\n  return partial;\n}\n\nexport function invokePartial(partial, context, options) {\n  // Use the current closure context to save the partial-block if this partial\n  const currentPartialBlock = options.data && options.data['partial-block'];\n  options.partial = true;\n  if (options.ids) {\n    options.data.contextPath = options.ids[0] || options.data.contextPath;\n  }\n\n  let partialBlock;\n  if (options.fn && options.fn !== noop) {\n    options.data = createFrame(options.data);\n    // Wrapper function to get access to currentPartialBlock from the closure\n    let fn = options.fn;\n    partialBlock = options.data['partial-block'] = function partialBlockWrapper(\n      context,\n      options = {}\n    ) {\n      // Restore the partial-block from the closure for the execution of the block\n      // i.e. the part inside the block of the partial call.\n      options.data = createFrame(options.data);\n      options.data['partial-block'] = currentPartialBlock;\n      return fn(context, options);\n    };\n    if (fn.partials) {\n      options.partials = Utils.extend({}, options.partials, fn.partials);\n    }\n  }\n\n  if (partial === undefined && partialBlock) {\n    partial = partialBlock;\n  }\n\n  if (partial === undefined) {\n    throw new Exception('The partial ' + options.name + ' could not be found');\n  } else if (partial instanceof Function) {\n    return partial(context, options);\n  }\n}\n\nexport function noop() {\n  return '';\n}\n\nfunction initData(context, data) {\n  if (!data || !('root' in data)) {\n    data = data ? createFrame(data) : {};\n    data.root = context;\n  }\n  return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n  if (fn.decorator) {\n    let props = {};\n    prog = fn.decorator(\n      prog,\n      props,\n      container,\n      depths && depths[0],\n      data,\n      blockParams,\n      depths\n    );\n    Utils.extend(prog, props);\n  }\n  return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n  Object.keys(mergedHelpers).forEach(helperName => {\n    let helper = mergedHelpers[helperName];\n    mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n  });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n  const lookupProperty = container.lookupProperty;\n  return wrapHelper(helper, options => {\n    return Utils.extend({ lookupProperty }, options);\n  });\n}\n","// Build out our basic SafeString type\nfunction SafeString(string) {\n  this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function() {\n  return '' + this.string;\n};\n\nexport default SafeString;\n","const escape = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;',\n  '=': '&#x3D;'\n};\n\nconst badChars = /[&<>\"'`=]/g,\n  possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n  return escape[chr];\n}\n\nexport function extend(obj /* , ...source */) {\n  for (let i = 1; i < arguments.length; i++) {\n    for (let key in arguments[i]) {\n      if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n        obj[key] = arguments[i][key];\n      }\n    }\n  }\n\n  return obj;\n}\n\nexport let toString = Object.prototype.toString;\n\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nlet isFunction = function(value) {\n  return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n  isFunction = function(value) {\n    return (\n      typeof value === 'function' &&\n      toString.call(value) === '[object Function]'\n    );\n  };\n}\nexport { isFunction };\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nexport const isArray =\n  Array.isArray ||\n  function(value) {\n    return value && typeof value === 'object'\n      ? toString.call(value) === '[object Array]'\n      : false;\n  };\n\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\nexport function indexOf(array, value) {\n  for (let i = 0, len = array.length; i < len; i++) {\n    if (array[i] === value) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nexport function escapeExpression(string) {\n  if (typeof string !== 'string') {\n    // don't escape SafeStrings, since they're already safe\n    if (string && string.toHTML) {\n      return string.toHTML();\n    } else if (string == null) {\n      return '';\n    } else if (!string) {\n      return string + '';\n    }\n\n    // Force a string conversion as this will be done by the append regardless and\n    // the regex test will do this transparently behind the scenes, causing issues if\n    // an object's to string has escaped characters in it.\n    string = '' + string;\n  }\n\n  if (!possible.test(string)) {\n    return string;\n  }\n  return string.replace(badChars, escapeChar);\n}\n\nexport function isEmpty(value) {\n  if (!value && value !== 0) {\n    return true;\n  } else if (isArray(value) && value.length === 0) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nexport function createFrame(object) {\n  let frame = extend({}, object);\n  frame._parent = object;\n  return frame;\n}\n\nexport function blockParams(params, ids) {\n  params.path = ids;\n  return params;\n}\n\nexport function appendContextPath(contextPath, id) {\n  return (contextPath ? contextPath + '.' : '') + id;\n}\n","'use strict';\n\n/*global window, global*/\n\nvar root = typeof window !== 'undefined' ?\n    window : typeof global !== 'undefined' ?\n    global : {};\n\nmodule.exports = Individual;\n\nfunction Individual(key, value) {\n    if (key in root) {\n        return root[key];\n    }\n\n    root[key] = value;\n\n    return value;\n}\n","'use strict';\n\nvar Individual = require('./index.js');\n\nmodule.exports = OneVersion;\n\nfunction OneVersion(moduleName, version, defaultValue) {\n    var key = '__INDIVIDUAL_ONE_VERSION_' + moduleName;\n    var enforceKey = key + '_ENFORCE_SINGLETON';\n\n    var versionValue = Individual(enforceKey, version);\n\n    if (versionValue !== version) {\n        throw new Error('Can only have one copy of ' +\n            moduleName + '.\\n' +\n            'You already have version ' + versionValue +\n            ' installed.\\n' +\n            'This means you cannot install version ' + version);\n    }\n\n    return Individual(key, defaultValue);\n}\n","'use strict';\n\nmodule.exports = function isObject(x) {\n\treturn typeof x === 'object' && x !== null;\n};\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","/*global define, jQuery*/\n\n(function (root, factory) {\n  if (typeof define === \"function\" && define.amd) {\n    // AMD. Register as an anonymous module.\n    define([], function () {\n      // Also create a global in case some scripts\n      // that are loaded still are looking for\n      // a global even when an AMD loader is in use.\n      return (root.MessageBus = factory());\n    });\n  } else {\n    // Browser globals\n    root.MessageBus = factory();\n  }\n})(typeof self !== \"undefined\" ? self : this, function () {\n  \"use strict\";\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\n  var uniqueId = function () {\n    return \"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n      var r = (Math.random() * 16) | 0;\n      var v = c === \"x\" ? r : (r & 0x3) | 0x8;\n      return v.toString(16);\n    });\n  };\n\n  var me;\n  var delayPollTimeout;\n  var ajaxInProgress = false;\n  var started = false;\n  var clientId = uniqueId();\n  var callbacks = [];\n  var failCount = 0;\n  var baseUrl = \"/\";\n  var paused = false;\n  var later = [];\n  var chunkedBackoff = 0;\n  var stopped;\n  var pollTimeout = null;\n  var totalAjaxFailures = 0;\n  var totalAjaxCalls = 0;\n  var lastAjax;\n\n  var isHidden = (function () {\n    var prefixes = [\"\", \"webkit\", \"ms\", \"moz\"];\n    var hiddenProperty;\n    for (var i = 0; i < prefixes.length; i++) {\n      var prefix = prefixes[i];\n      var check = prefix + (prefix === \"\" ? \"hidden\" : \"Hidden\");\n      if (document[check] !== undefined) {\n        hiddenProperty = check;\n      }\n    }\n\n    return function () {\n      if (hiddenProperty !== undefined) {\n        return document[hiddenProperty];\n      } else {\n        return !document.hasFocus;\n      }\n    };\n  })();\n\n  var hasLocalStorage = (function () {\n    try {\n      localStorage.setItem(\"mbTestLocalStorage\", Date.now());\n      localStorage.removeItem(\"mbTestLocalStorage\");\n      return true;\n    } catch (e) {\n      return false;\n    }\n  })();\n\n  var updateLastAjax = function () {\n    if (hasLocalStorage) {\n      localStorage.setItem(\"__mbLastAjax\", Date.now());\n    }\n  };\n\n  var hiddenTabShouldWait = function () {\n    if (hasLocalStorage && isHidden()) {\n      var lastAjaxCall = parseInt(localStorage.getItem(\"__mbLastAjax\"), 10);\n      var deltaAjax = Date.now() - lastAjaxCall;\n\n      return deltaAjax >= 0 && deltaAjax < me.minHiddenPollInterval;\n    }\n    return false;\n  };\n\n  var hasonprogress = new XMLHttpRequest().onprogress === null;\n  var allowChunked = function () {\n    return me.enableChunkedEncoding && hasonprogress;\n  };\n\n  var shouldLongPoll = function () {\n    return (\n      me.alwaysLongPoll ||\n      (me.shouldLongPollCallback ? me.shouldLongPollCallback() : !isHidden())\n    );\n  };\n\n  var processMessages = function (messages) {\n    if (!messages || messages.length === 0) {\n      return false;\n    }\n\n    for (var i = 0; i < messages.length; i++) {\n      var message = messages[i];\n      for (var j = 0; j < callbacks.length; j++) {\n        var callback = callbacks[j];\n        if (callback.channel === message.channel) {\n          callback.last_id = message.message_id;\n          try {\n            callback.func(message.data, message.global_id, message.message_id);\n          } catch (e) {\n            if (console.log) {\n              console.log(\n                \"MESSAGE BUS FAIL: callback \" +\n                  callback.channel +\n                  \" caused exception \" +\n                  e.stack\n              );\n            }\n          }\n        }\n        if (message.channel === \"/__status\") {\n          if (message.data[callback.channel] !== undefined) {\n            callback.last_id = message.data[callback.channel];\n          }\n        }\n      }\n    }\n\n    return true;\n  };\n\n  var reqSuccess = function (messages) {\n    failCount = 0;\n    if (paused) {\n      if (messages) {\n        for (var i = 0; i < messages.length; i++) {\n          later.push(messages[i]);\n        }\n      }\n    } else {\n      return processMessages(messages);\n    }\n    return false;\n  };\n\n  var longPoller = function (poll, data) {\n    if (ajaxInProgress) {\n      // never allow concurrent ajax reqs\n      return;\n    }\n\n    var gotData = false;\n    var aborted = false;\n    var rateLimited = false;\n    var rateLimitedSeconds;\n\n    lastAjax = new Date();\n    totalAjaxCalls += 1;\n    data.__seq = totalAjaxCalls;\n\n    var longPoll = shouldLongPoll() && me.enableLongPolling;\n    var chunked = longPoll && allowChunked();\n    if (chunkedBackoff > 0) {\n      chunkedBackoff--;\n      chunked = false;\n    }\n\n    var headers = { \"X-SILENCE-LOGGER\": \"true\" };\n    for (var name in me.headers) {\n      headers[name] = me.headers[name];\n    }\n\n    if (!chunked) {\n      headers[\"Dont-Chunk\"] = \"true\";\n    }\n\n    var dataType = chunked ? \"text\" : \"json\";\n\n    var handle_progress = function (payload, position) {\n      var separator = \"\\r\\n|\\r\\n\";\n      var endChunk = payload.indexOf(separator, position);\n\n      if (endChunk === -1) {\n        return position;\n      }\n\n      var chunk = payload.substring(position, endChunk);\n      chunk = chunk.replace(/\\r\\n\\|\\|\\r\\n/g, separator);\n\n      try {\n        reqSuccess(JSON.parse(chunk));\n      } catch (e) {\n        if (console.log) {\n          console.log(\"FAILED TO PARSE CHUNKED REPLY\");\n          console.log(data);\n        }\n      }\n\n      return handle_progress(payload, endChunk + separator.length);\n    };\n\n    var disableChunked = function () {\n      if (me.longPoll) {\n        me.longPoll.abort();\n        chunkedBackoff = 30;\n      }\n    };\n\n    if (!me.ajax) {\n      throw new Error(\"Either jQuery or the ajax adapter must be loaded\");\n    }\n\n    updateLastAjax();\n\n    ajaxInProgress = true;\n    var req = me.ajax({\n      url:\n        me.baseUrl +\n        \"message-bus/\" +\n        me.clientId +\n        \"/poll\" +\n        (!longPoll ? \"?dlp=t\" : \"\"),\n      data: data,\n      async: true,\n      dataType: dataType,\n      type: \"POST\",\n      headers: headers,\n      messageBus: {\n        chunked: chunked,\n        onProgressListener: function (xhr) {\n          var position = 0;\n          // if it takes longer than 3000 ms to get first chunk, we have some proxy\n          // this is messing with us, so just backoff from using chunked for now\n          var chunkedTimeout = setTimeout(disableChunked, 3000);\n          return (xhr.onprogress = function () {\n            clearTimeout(chunkedTimeout);\n            if (\n              xhr.getResponseHeader(\"Content-Type\") ===\n              \"application/json; charset=utf-8\"\n            ) {\n              chunked = false; // not chunked, we are sending json back\n            } else {\n              position = handle_progress(xhr.responseText, position);\n            }\n          });\n        },\n      },\n      xhr: function () {\n        var xhr = jQuery.ajaxSettings.xhr();\n        if (!chunked) {\n          return xhr;\n        }\n        this.messageBus.onProgressListener(xhr);\n        return xhr;\n      },\n      success: function (messages) {\n        if (!chunked) {\n          // we may have requested text so jQuery will not parse\n          if (typeof messages === \"string\") {\n            messages = JSON.parse(messages);\n          }\n          gotData = reqSuccess(messages);\n        }\n      },\n      error: function (xhr, textStatus) {\n        if (xhr.status === 429) {\n          var tryAfter =\n            parseInt(\n              xhr.getResponseHeader && xhr.getResponseHeader(\"Retry-After\")\n            ) || 0;\n          tryAfter = tryAfter || 0;\n          if (tryAfter < 15) {\n            tryAfter = 15;\n          }\n          rateLimitedSeconds = tryAfter;\n          rateLimited = true;\n        } else if (textStatus === \"abort\") {\n          aborted = true;\n        } else {\n          failCount += 1;\n          totalAjaxFailures += 1;\n        }\n      },\n      complete: function () {\n        ajaxInProgress = false;\n\n        var interval;\n        try {\n          if (rateLimited) {\n            interval = Math.max(me.minPollInterval, rateLimitedSeconds * 1000);\n          } else if (gotData || aborted) {\n            interval = me.minPollInterval;\n          } else {\n            interval = me.callbackInterval;\n            if (failCount > 2) {\n              interval = interval * failCount;\n            } else if (!shouldLongPoll()) {\n              interval = me.backgroundCallbackInterval;\n            }\n            if (interval > me.maxPollInterval) {\n              interval = me.maxPollInterval;\n            }\n\n            interval -= new Date() - lastAjax;\n\n            if (interval < 100) {\n              interval = 100;\n            }\n          }\n        } catch (e) {\n          if (console.log && e.message) {\n            console.log(\"MESSAGE BUS FAIL: \" + e.message);\n          }\n        }\n\n        if (pollTimeout) {\n          clearTimeout(pollTimeout);\n          pollTimeout = null;\n        }\n\n        if (started) {\n          pollTimeout = setTimeout(function () {\n            pollTimeout = null;\n            poll();\n          }, interval);\n        }\n\n        me.longPoll = null;\n      },\n    });\n\n    return req;\n  };\n\n  me = {\n    /* shared between all tabs */\n    minHiddenPollInterval: 1500,\n    enableChunkedEncoding: true,\n    enableLongPolling: true,\n    callbackInterval: 15000,\n    backgroundCallbackInterval: 60000,\n    minPollInterval: 100,\n    maxPollInterval: 3 * 60 * 1000,\n    callbacks: callbacks,\n    clientId: clientId,\n    alwaysLongPoll: false,\n    shouldLongPollCallback: undefined,\n    baseUrl: baseUrl,\n    headers: {},\n    ajax: typeof jQuery !== \"undefined\" && jQuery.ajax,\n    diagnostics: function () {\n      console.log(\"Stopped: \" + stopped + \" Started: \" + started);\n      console.log(\"Current callbacks\");\n      console.log(callbacks);\n      console.log(\n        \"Total ajax calls: \" +\n          totalAjaxCalls +\n          \" Recent failure count: \" +\n          failCount +\n          \" Total failures: \" +\n          totalAjaxFailures\n      );\n      console.log(\n        \"Last ajax call: \" + (new Date() - lastAjax) / 1000 + \" seconds ago\"\n      );\n    },\n\n    pause: function () {\n      paused = true;\n    },\n\n    resume: function () {\n      paused = false;\n      processMessages(later);\n      later = [];\n    },\n\n    stop: function () {\n      stopped = true;\n      started = false;\n      if (delayPollTimeout) {\n        clearTimeout(delayPollTimeout);\n        delayPollTimeout = null;\n      }\n      if (pollTimeout) {\n        clearTimeout(pollTimeout);\n        pollTimeout = null;\n      }\n      if (me.longPoll) {\n        me.longPoll.abort();\n      }\n      if (me.onVisibilityChange) {\n        document.removeEventListener(\"visibilitychange\", me.onVisibilityChange);\n        me.onVisibilityChange = null;\n      }\n    },\n\n    // Start polling\n    start: function () {\n      if (started) return;\n      started = true;\n      stopped = false;\n\n      var poll = function () {\n        if (stopped) {\n          return;\n        }\n\n        if (callbacks.length === 0 || hiddenTabShouldWait()) {\n          if (!delayPollTimeout) {\n            delayPollTimeout = setTimeout(function () {\n              delayPollTimeout = null;\n              poll();\n            }, parseInt(500 + Math.random() * 500));\n          }\n          return;\n        }\n\n        var data = {};\n        for (var i = 0; i < callbacks.length; i++) {\n          data[callbacks[i].channel] = callbacks[i].last_id;\n        }\n\n        // could possibly already be started\n        // notice the delay timeout above\n        if (!me.longPoll) {\n          me.longPoll = longPoller(poll, data);\n        }\n      };\n\n      // monitor visibility, issue a new long poll when the page shows\n      if (document.addEventListener && \"hidden\" in document) {\n        me.onVisibilityChange = function () {\n          if (\n            !document.hidden &&\n            !me.longPoll &&\n            (pollTimeout || delayPollTimeout)\n          ) {\n            clearTimeout(pollTimeout);\n            clearTimeout(delayPollTimeout);\n\n            delayPollTimeout = null;\n            pollTimeout = null;\n            poll();\n          }\n        };\n\n        document.addEventListener(\"visibilitychange\", me.onVisibilityChange);\n      }\n\n      poll();\n    },\n\n    status: function () {\n      if (paused) {\n        return \"paused\";\n      } else if (started) {\n        return \"started\";\n      } else if (stopped) {\n        return \"stopped\";\n      } else {\n        throw \"Cannot determine current status\";\n      }\n    },\n\n    // Subscribe to a channel\n    // if lastId is 0 or larger, it will recieve messages AFTER that id\n    // if lastId is negative it will perform lookbehind\n    // -1 will subscribe to all new messages\n    // -2 will recieve last message + all new messages\n    // -3 will recieve last 2 messages + all new messages\n    // if undefined will default to -1\n    subscribe: function (channel, func, lastId) {\n      if (!started && !stopped) {\n        me.start();\n      }\n\n      if (lastId === null || typeof lastId === \"undefined\") {\n        lastId = -1;\n      } else if (typeof lastId !== \"number\") {\n        throw (\n          \"lastId has type \" + typeof lastId + \" but a number was expected.\"\n        );\n      }\n\n      if (typeof channel !== \"string\") {\n        throw \"Channel name must be a string!\";\n      }\n\n      callbacks.push({\n        channel: channel,\n        func: func,\n        last_id: lastId,\n      });\n      if (me.longPoll) {\n        me.longPoll.abort();\n      }\n\n      return func;\n    },\n\n    // Unsubscribe from a channel\n    unsubscribe: function (channel, func) {\n      // TODO allow for globbing in the middle of a channel name\n      // like /something/*/something\n      // at the moment we only support globbing /something/*\n      var glob = false;\n      if (channel.indexOf(\"*\", channel.length - 1) !== -1) {\n        channel = channel.substr(0, channel.length - 1);\n        glob = true;\n      }\n\n      var removed = false;\n\n      for (var i = callbacks.length - 1; i >= 0; i--) {\n        var callback = callbacks[i];\n        var keep;\n\n        if (glob) {\n          keep = callback.channel.substr(0, channel.length) !== channel;\n        } else {\n          keep = callback.channel !== channel;\n        }\n\n        if (!keep && func && callback.func !== func) {\n          keep = true;\n        }\n\n        if (!keep) {\n          callbacks.splice(i, 1);\n          removed = true;\n        }\n      }\n\n      if (removed && me.longPoll) {\n        me.longPoll.abort();\n      }\n\n      return removed;\n    },\n  };\n  return me;\n});\n","var wildcard = require('wildcard');\nvar reMimePartSplit = /[\\/\\+\\.]/;\n\n/**\n  # mime-match\n\n  A simple function to checker whether a target mime type matches a mime-type\n  pattern (e.g. image/jpeg matches image/jpeg OR image/*).\n\n  ## Example Usage\n\n  <<< example.js\n\n**/\nmodule.exports = function(target, pattern) {\n  function test(pattern) {\n    var result = wildcard(pattern, target, reMimePartSplit);\n\n    // ensure that we have a valid mime type (should have two parts)\n    return result && result.length >= 2;\n  }\n\n  return pattern ? test(pattern.split(';')[0]) : test;\n};\n","/**\n* Create an event emitter with namespaces\n* @name createNamespaceEmitter\n* @example\n* var emitter = require('./index')()\n*\n* emitter.on('*', function () {\n*   console.log('all events emitted', this.event)\n* })\n*\n* emitter.on('example', function () {\n*   console.log('example event emitted')\n* })\n*/\nmodule.exports = function createNamespaceEmitter () {\n  var emitter = {}\n  var _fns = emitter._fns = {}\n\n  /**\n  * Emit an event. Optionally namespace the event. Handlers are fired in the order in which they were added with exact matches taking precedence. Separate the namespace and event with a `:`\n  * @name emit\n  * @param {String} event – the name of the event, with optional namespace\n  * @param {...*} data – up to 6 arguments that are passed to the event listener\n  * @example\n  * emitter.emit('example')\n  * emitter.emit('demo:test')\n  * emitter.emit('data', { example: true}, 'a string', 1)\n  */\n  emitter.emit = function emit (event, arg1, arg2, arg3, arg4, arg5, arg6) {\n    var toEmit = getListeners(event)\n\n    if (toEmit.length) {\n      emitAll(event, toEmit, [arg1, arg2, arg3, arg4, arg5, arg6])\n    }\n  }\n\n  /**\n  * Create en event listener.\n  * @name on\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.on('example', function () {})\n  * emitter.on('demo', function () {})\n  */\n  emitter.on = function on (event, fn) {\n    if (!_fns[event]) {\n      _fns[event] = []\n    }\n\n    _fns[event].push(fn)\n  }\n\n  /**\n  * Create en event listener that fires once.\n  * @name once\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.once('example', function () {})\n  * emitter.once('demo', function () {})\n  */\n  emitter.once = function once (event, fn) {\n    function one () {\n      fn.apply(this, arguments)\n      emitter.off(event, one)\n    }\n    this.on(event, one)\n  }\n\n  /**\n  * Stop listening to an event. Stop all listeners on an event by only passing the event name. Stop a single listener by passing that event handler as a callback.\n  * You must be explicit about what will be unsubscribed: `emitter.off('demo')` will unsubscribe an `emitter.on('demo')` listener,\n  * `emitter.off('demo:example')` will unsubscribe an `emitter.on('demo:example')` listener\n  * @name off\n  * @param {String} event\n  * @param {Function} [fn] – the specific handler\n  * @example\n  * emitter.off('example')\n  * emitter.off('demo', function () {})\n  */\n  emitter.off = function off (event, fn) {\n    var keep = []\n\n    if (event && fn) {\n      var fns = this._fns[event]\n      var i = 0\n      var l = fns ? fns.length : 0\n\n      for (i; i < l; i++) {\n        if (fns[i] !== fn) {\n          keep.push(fns[i])\n        }\n      }\n    }\n\n    keep.length ? this._fns[event] = keep : delete this._fns[event]\n  }\n\n  function getListeners (e) {\n    var out = _fns[e] ? _fns[e] : []\n    var idx = e.indexOf(':')\n    var args = (idx === -1) ? [e] : [e.substring(0, idx), e.substring(idx + 1)]\n\n    var keys = Object.keys(_fns)\n    var i = 0\n    var l = keys.length\n\n    for (i; i < l; i++) {\n      var key = keys[i]\n      if (key === '*') {\n        out = out.concat(_fns[key])\n      }\n\n      if (args.length === 2 && args[0] === key) {\n        out = out.concat(_fns[key])\n        break\n      }\n    }\n\n    return out\n  }\n\n  function emitAll (e, fns, args) {\n    var i = 0\n    var l = fns.length\n\n    for (i; i < l; i++) {\n      if (!fns[i]) break\n      fns[i].event = e\n      fns[i].apply(fns[i], args)\n    }\n  }\n\n  return emitter\n}\n","export const EMPTY_OBJ = {};\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n","import { EMPTY_ARR } from \"./constants\";\n\n/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\t// @ts-ignore We change the type of `obj` to be `O & P`\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Remove a child node from its parent if attached. This is a workaround for\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\n * is smaller than including a dedicated polyfill.\n * @param {Node} node The node to remove\n */\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nexport const slice = EMPTY_ARR.slice;\n","import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {import('./internal').Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n","import { slice } from './util';\nimport options from './options';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * constructor for this virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array<import('.').ComponentChildren>} [children] The children of the virtual node\n * @returns {import('./internal').VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != null) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, null);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {import('./internal').VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {import('./internal').VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\n\t\t// be set to dom.nextSibling which can return `null` and it is important\n\t\t// to be able to distinguish between an uninitialized _nextDom and\n\t\t// a _nextDom that has been set to `null`\n\t\t_nextDom: undefined,\n\t\t_component: null,\n\t\t_hydrating: null,\n\t\tconstructor: undefined,\n\t\t_original: original == null ? ++vnodeId : original\n\t};\n\n\tif (options.vnode != null) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: null };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is import('./internal').VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != null && vnode.constructor === undefined;\n","import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function Component(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {import('./internal').Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nComponent.prototype.setState = function(update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != null && this._nextState !== this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == null) return;\n\n\tif (this._vnode) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {import('./internal').Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nComponent.prototype.forceUpdate = function(callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {import('./index').ComponentChildren | void}\n */\nComponent.prototype.render = Fragment;\n\n/**\n * @param {import('./internal').VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == null) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._parent._children.indexOf(vnode) + 1)\n\t\t\t: null;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != null && sibling._dom != null) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {import('./internal').Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tlet vnode = component._vnode,\n\t\toldDom = vnode._dom,\n\t\tparentDom = component._parentDom;\n\n\tif (parentDom) {\n\t\tlet commitQueue = [];\n\t\tconst oldVNode = assign({}, vnode);\n\t\toldVNode._original = vnode._original + 1;\n\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tvnode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tparentDom.ownerSVGElement !== undefined,\n\t\t\tvnode._hydrating != null ? [oldDom] : null,\n\t\t\tcommitQueue,\n\t\t\toldDom == null ? getDomSibling(vnode) : oldDom,\n\t\t\tvnode._hydrating\n\t\t);\n\t\tcommitRoot(commitQueue, vnode);\n\n\t\tif (vnode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(vnode);\n\t\t}\n\t}\n}\n\n/**\n * @param {import('./internal').VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\n\t\tvnode._dom = vnode._component.base = null;\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != null && child._dom != null) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array<import('./internal').Component>}\n */\nlet rerenderQueue = [];\n\n/**\n * Asynchronously schedule a callback\n * @type {(cb: () => void) => void}\n */\n/* istanbul ignore next */\n// Note the following line isn't tree-shaken by rollup cuz of rollup/rollup#2566\nconst defer =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./internal').Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce !== options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\tlet queue;\n\twhile ((process._rerenderCount = rerenderQueue.length)) {\n\t\tqueue = rerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);\n\t\trerenderQueue = [];\n\t\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t\t// process() calls from getting scheduled while `queue` is still being consumed.\n\t\tqueue.some(c => {\n\t\t\tif (c._dirty) renderComponent(c);\n\t\t});\n\t}\n}\nprocess._rerenderCount = 0;\n","import { enqueueRender } from './component';\n\nexport let i = 0;\n\nexport function createContext(defaultValue, contextId) {\n\tcontextId = '__cC' + i++;\n\n\tconst context = {\n\t\t_id: contextId,\n\t\t_defaultValue: defaultValue,\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tConsumer(props, contextValue) {\n\t\t\t// return props.children(\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\n\t\t\t// );\n\t\t\treturn props.children(contextValue);\n\t\t},\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tProvider(props) {\n\t\t\tif (!this.getChildContext) {\n\t\t\t\tlet subs = [];\n\t\t\t\tlet ctx = {};\n\t\t\t\tctx[contextId] = this;\n\n\t\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\t\tthis.shouldComponentUpdate = function(_props) {\n\t\t\t\t\tif (this.props.value !== _props.value) {\n\t\t\t\t\t\t// I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:\n\t\t\t\t\t\t// https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358\n\t\t\t\t\t\t// In those cases though, even with the value corrected, we're double-rendering all nodes.\n\t\t\t\t\t\t// It might be better to just tell folks not to use force-sync mode.\n\t\t\t\t\t\t// Currently, using `useContext()` in a class component will overwrite its `this.context` value.\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context[contextId] = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\t\t\t\t\t\tsubs.some(enqueueRender);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.sub = c => {\n\t\t\t\t\tsubs.push(c);\n\t\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\n\t\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn props.children;\n\t\t}\n\t};\n\n\t// Devtools needs access to the context object when it\n\t// encounters a Provider. This is necessary to support\n\t// setting `displayName` on the context object instead\n\t// of on the component itself. See:\n\t// https://reactjs.org/docs/context.html#contextdisplayname\n\n\treturn (context.Provider._contextRef = context.Consumer.contextType = context);\n}\n","import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport { EMPTY_OBJ, EMPTY_ARR } from '../constants';\nimport { getDomSibling } from '../component';\n\n/**\n * Diff the children of a virtual node\n * @param {import('../internal').PreactElement} parentDom The DOM element whose\n * children are being diffed\n * @param {import('../internal').ComponentChildren[]} renderResult\n * @param {import('../internal').VNode} newParentVNode The new virtual\n * node whose children should be diff'ed against oldParentVNode\n * @param {import('../internal').VNode} oldParentVNode The old virtual\n * node whose children should be diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by getChildContext\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet i, j, oldVNode, childVNode, newDom, firstChildDom, refs;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet oldChildrenLength = oldChildren.length;\n\n\tnewParentVNode._children = [];\n\tfor (i = 0; i < renderResult.length; i++) {\n\t\tchildVNode = renderResult[i];\n\n\t\tif (childVNode == null || typeof childVNode == 'boolean') {\n\t\t\tchildVNode = newParentVNode._children[i] = null;\n\t\t}\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint'\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tnull,\n\t\t\t\tchildVNode,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t} else if (Array.isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t//   const reuse = <div />\n\t\t\t//   <div>{reuse}<span />{reuse}</div>\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tnull,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\t// Terser removes the `continue` here and wraps the loop body\n\t\t// in a `if (childVNode) { ... } condition\n\t\tif (childVNode == null) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\t// Check if we find a corresponding element in oldChildren.\n\t\t// If found, delete the array item by setting to `undefined`.\n\t\t// We use `undefined`, as `null` is reserved for empty placeholders\n\t\t// (holes).\n\t\toldVNode = oldChildren[i];\n\n\t\tif (\n\t\t\toldVNode === null ||\n\t\t\t(oldVNode &&\n\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\tchildVNode.type === oldVNode.type)\n\t\t) {\n\t\t\toldChildren[i] = undefined;\n\t\t} else {\n\t\t\t// Either oldVNode === undefined or oldChildrenLength > 0,\n\t\t\t// so after this loop oldVNode == null or oldVNode is a valid value.\n\t\t\tfor (j = 0; j < oldChildrenLength; j++) {\n\t\t\t\toldVNode = oldChildren[j];\n\t\t\t\t// If childVNode is unkeyed, we only match similarly unkeyed nodes, otherwise we match by key.\n\t\t\t\t// We always match by type (in either case).\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\t\tchildVNode.type === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\toldChildren[j] = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toldVNode = null;\n\t\t\t}\n\t\t}\n\n\t\toldVNode = oldVNode || EMPTY_OBJ;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tisSvg,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating\n\t\t);\n\n\t\tnewDom = childVNode._dom;\n\n\t\tif ((j = childVNode.ref) && oldVNode.ref != j) {\n\t\t\tif (!refs) refs = [];\n\t\t\tif (oldVNode.ref) refs.push(oldVNode.ref, null, childVNode);\n\t\t\trefs.push(j, childVNode._component || newDom, childVNode);\n\t\t}\n\n\t\tif (newDom != null) {\n\t\t\tif (firstChildDom == null) {\n\t\t\t\tfirstChildDom = newDom;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof childVNode.type == 'function' &&\n\t\t\t\tchildVNode._children != null && // Can be null if childVNode suspended\n\t\t\t\tchildVNode._children === oldVNode._children\n\t\t\t) {\n\t\t\t\tchildVNode._nextDom = oldDom = reorderChildren(\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldDom,\n\t\t\t\t\tparentDom\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(\n\t\t\t\t\tparentDom,\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldVNode,\n\t\t\t\t\toldChildren,\n\t\t\t\t\tnewDom,\n\t\t\t\t\toldDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Browsers will infer an option's `value` from `textContent` when\n\t\t\t// no value is present. This essentially bypasses our code to set it\n\t\t\t// later in `diff()`. It works fine in all browsers except for IE11\n\t\t\t// where it breaks setting `select.value`. There it will be always set\n\t\t\t// to an empty string. Re-applying an options value will fix that, so\n\t\t\t// there are probably some internal data structures that aren't\n\t\t\t// updated properly.\n\t\t\t//\n\t\t\t// To fix it we make sure to reset the inferred value, so that our own\n\t\t\t// value check in `diff()` won't be skipped.\n\t\t\tif (!isHydrating && newParentVNode.type === 'option') {\n\t\t\t\t// @ts-ignore We have validated that the type of parentDOM is 'option'\n\t\t\t\t// in the above check\n\t\t\t\tparentDom.value = '';\n\t\t\t} else if (typeof newParentVNode.type == 'function') {\n\t\t\t\t// Because the newParentVNode is Fragment-like, we need to set it's\n\t\t\t\t// _nextDom property to the nextSibling of its last child DOM node.\n\t\t\t\t//\n\t\t\t\t// `oldDom` contains the correct value here because if the last child\n\t\t\t\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\n\t\t\t\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\n\t\t\t\t// node's nextSibling.\n\t\t\t\tnewParentVNode._nextDom = oldDom;\n\t\t\t}\n\t\t} else if (\n\t\t\toldDom &&\n\t\t\toldVNode._dom == oldDom &&\n\t\t\toldDom.parentNode != parentDom\n\t\t) {\n\t\t\t// The above condition is to handle null placeholders. See test in placeholder.test.js:\n\t\t\t// `efficiently replace null placeholders in parent rerenders`\n\t\t\toldDom = getDomSibling(oldVNode);\n\t\t}\n\t}\n\n\tnewParentVNode._dom = firstChildDom;\n\n\t// Remove remaining oldChildren if there are any.\n\tfor (i = oldChildrenLength; i--; ) {\n\t\tif (oldChildren[i] != null) {\n\t\t\tif (\n\t\t\t\ttypeof newParentVNode.type == 'function' &&\n\t\t\t\toldChildren[i]._dom != null &&\n\t\t\t\toldChildren[i]._dom == newParentVNode._nextDom\n\t\t\t) {\n\t\t\t\t// If the newParentVNode.__nextDom points to a dom node that is about to\n\t\t\t\t// be unmounted, then get the next sibling of that vnode and set\n\t\t\t\t// _nextDom to it\n\t\t\t\tnewParentVNode._nextDom = getDomSibling(oldParentVNode, i + 1);\n\t\t\t}\n\n\t\t\tunmount(oldChildren[i], oldChildren[i]);\n\t\t}\n\t}\n\n\t// Set refs only after unmount\n\tif (refs) {\n\t\tfor (i = 0; i < refs.length; i++) {\n\t\t\tapplyRef(refs[i], refs[++i], refs[++i]);\n\t\t}\n\t}\n}\n\nfunction reorderChildren(childVNode, oldDom, parentDom) {\n\tfor (let tmp = 0; tmp < childVNode._children.length; tmp++) {\n\t\tlet vnode = childVNode._children[tmp];\n\t\tif (vnode) {\n\t\t\t// We typically enter this code path on sCU bailout, where we copy\n\t\t\t// oldVNode._children to newVNode._children. If that is the case, we need\n\t\t\t// to update the old children's _parent pointer to point to the newVNode\n\t\t\t// (childVNode here).\n\t\t\tvnode._parent = childVNode;\n\n\t\t\tif (typeof vnode.type == 'function') {\n\t\t\t\toldDom = reorderChildren(vnode, oldDom, parentDom);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(\n\t\t\t\t\tparentDom,\n\t\t\t\t\tvnode,\n\t\t\t\t\tvnode,\n\t\t\t\t\tchildVNode._children,\n\t\t\t\t\tvnode._dom,\n\t\t\t\t\toldDom\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {import('../index').ComponentChildren} children The unflattened\n * children of a virtual node\n * @returns {import('../internal').VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == null || typeof children == 'boolean') {\n\t} else if (Array.isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\nfunction placeChild(\n\tparentDom,\n\tchildVNode,\n\toldVNode,\n\toldChildren,\n\tnewDom,\n\toldDom\n) {\n\tlet nextDom;\n\tif (childVNode._nextDom !== undefined) {\n\t\t// Only Fragments or components that return Fragment like VNodes will\n\t\t// have a non-undefined _nextDom. Continue the diff from the sibling\n\t\t// of last DOM child of this child VNode\n\t\tnextDom = childVNode._nextDom;\n\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because\n\t\t// it is only used by `diffChildren` to determine where to resume the diff after\n\t\t// diffing Components and Fragments. Once we store it the nextDOM local var, we\n\t\t// can clean up the property\n\t\tchildVNode._nextDom = undefined;\n\t} else if (\n\t\toldVNode == null ||\n\t\tnewDom != oldDom ||\n\t\tnewDom.parentNode == null\n\t) {\n\t\touter: if (oldDom == null || oldDom.parentNode !== parentDom) {\n\t\t\tparentDom.appendChild(newDom);\n\t\t\tnextDom = null;\n\t\t} else {\n\t\t\t// `j<oldChildrenLength; j+=2` is an alternative to `j++<oldChildrenLength/2`\n\t\t\tfor (\n\t\t\t\tlet sibDom = oldDom, j = 0;\n\t\t\t\t(sibDom = sibDom.nextSibling) && j < oldChildren.length;\n\t\t\t\tj += 2\n\t\t\t) {\n\t\t\t\tif (sibDom == newDom) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\tparentDom.insertBefore(newDom, oldDom);\n\t\t\tnextDom = oldDom;\n\t\t}\n\t}\n\n\t// If we have pre-calculated the nextDOM node, use it. Else calculate it now\n\t// Strictly check for `undefined` here cuz `null` is a valid value of `nextDom`.\n\t// See more detail in create-element.js:createVNode\n\tif (nextDom !== undefined) {\n\t\toldDom = nextDom;\n\t} else {\n\t\toldDom = newDom.nextSibling;\n\t}\n\n\treturn oldDom;\n}\n","import { IS_NON_DIMENSIONAL } from '../constants';\nimport options from '../options';\n\n/**\n * Diff the old and new properties of a VNode and apply changes to the DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to apply\n * changes to\n * @param {object} newProps The new props\n * @param {object} oldProps The old props\n * @param {boolean} isSvg Whether or not this node is an SVG node\n * @param {boolean} hydrate Whether or not we are in hydration mode\n */\nexport function diffProps(dom, newProps, oldProps, isSvg, hydrate) {\n\tlet i;\n\n\tfor (i in oldProps) {\n\t\tif (i !== 'children' && i !== 'key' && !(i in newProps)) {\n\t\t\tsetProperty(dom, i, null, oldProps[i], isSvg);\n\t\t}\n\t}\n\n\tfor (i in newProps) {\n\t\tif (\n\t\t\t(!hydrate || typeof newProps[i] == 'function') &&\n\t\t\ti !== 'children' &&\n\t\t\ti !== 'key' &&\n\t\t\ti !== 'value' &&\n\t\t\ti !== 'checked' &&\n\t\t\toldProps[i] !== newProps[i]\n\t\t) {\n\t\t\tsetProperty(dom, i, newProps[i], oldProps[i], isSvg);\n\t\t}\n\t}\n}\n\nfunction setStyle(style, key, value) {\n\tif (key[0] === '-') {\n\t\tstyle.setProperty(key, value);\n\t} else if (value == null) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\n/**\n * Set a property value on a DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, isSvg) {\n\tlet useCapture;\n\n\to: if (name === 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] === 'o' && name[1] === 'n') {\n\t\tuseCapture = name !== (name = name.replace(/Capture$/, ''));\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (name.toLowerCase() in dom) name = name.toLowerCase().slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\t\tdom.addEventListener(name, handler, useCapture);\n\t\t\t}\n\t\t} else {\n\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\tdom.removeEventListener(name, handler, useCapture);\n\t\t}\n\t} else if (name !== 'dangerouslySetInnerHTML') {\n\t\tif (isSvg) {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink[H:h]/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname !== 'href' &&\n\t\t\tname !== 'list' &&\n\t\t\tname !== 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname !== 'tabIndex' &&\n\t\t\tname !== 'download' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == null ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// ARIA-attributes have a different notion of boolean values.\n\t\t// The value `false` is different from the attribute not\n\t\t// existing on the DOM, so we can't remove it. For non-boolean\n\t\t// ARIA-attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost us too many bytes. On top of\n\t\t// that other VDOM frameworks also always stringify `false`.\n\n\t\tif (typeof value === 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (\n\t\t\tvalue != null &&\n\t\t\t(value !== false || (name[0] === 'a' && name[1] === 'r'))\n\t\t) {\n\t\t\tdom.setAttribute(name, value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Proxy an event to hooked event handlers\n * @param {Event} e The event object from the browser\n * @private\n */\nfunction eventProxy(e) {\n\tthis._listeners[e.type + false](options.event ? options.event(e) : e);\n}\n\nfunction eventProxyCapture(e) {\n\tthis._listeners[e.type + true](options.event ? options.event(e) : e);\n}\n","import { EMPTY_OBJ } from '../constants';\nimport { Component, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { diffProps, setProperty } from './props';\nimport { assign, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {import('../internal').PreactElement} parentDom The parent of the DOM element\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by getChildContext\n * @param {boolean} isSvg Whether or not this element is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} [isHydrating] Whether or not we are in hydration\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor !== undefined) return null;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._hydrating != null) {\n\t\tisHydrating = oldVNode._hydrating;\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\t// if we resume, we want the tree to be \"unlocked\"\n\t\tnewVNode._hydrating = null;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\ttry {\n\t\touter: if (typeof newType == 'function') {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\t\t// @ts-ignore The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-ignore Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new Component(newProps, componentContext);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tc.props = newProps;\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc.context = componentContext;\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (c._nextState == null) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\t\t\tif (newType.getDerivedStateFromProps != null) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tc.componentWillMount != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidMount != null) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(!c._force &&\n\t\t\t\t\t\tc.shouldComponentUpdate != null &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false) ||\n\t\t\t\t\tnewVNode._original === oldVNode._original\n\t\t\t\t) {\n\t\t\t\t\tc.props = newProps;\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) c._dirty = false;\n\t\t\t\t\tc._vnode = newVNode;\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != null) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidUpdate != null) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc.state = c._nextState;\n\n\t\t\tif ((tmp = options._render)) tmp(newVNode);\n\n\t\t\tc._dirty = false;\n\t\t\tc._vnode = newVNode;\n\t\t\tc._parentDom = parentDom;\n\n\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != null) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (!isNew && c.getSnapshotBeforeUpdate != null) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet isTopLevelFragment =\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\n\n\t\t\tdiffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tArray.isArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._hydrating = null;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = null;\n\t\t\t}\n\n\t\t\tc._force = false;\n\t\t} else if (\n\t\t\texcessDomChildren == null &&\n\t\t\tnewVNode._original === oldVNode._original\n\t\t) {\n\t\t\tnewVNode._children = oldVNode._children;\n\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t} else {\n\t\t\tnewVNode._dom = diffElementNodes(\n\t\t\t\toldVNode._dom,\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\tisHydrating\n\t\t\t);\n\t\t}\n\n\t\tif ((tmp = options.diffed)) tmp(newVNode);\n\t} catch (e) {\n\t\tnewVNode._original = null;\n\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\tif (isHydrating || excessDomChildren != null) {\n\t\t\tnewVNode._dom = oldDom;\n\t\t\tnewVNode._hydrating = !!isHydrating;\n\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\n\t\t\t// ^ could possibly be simplified to:\n\t\t\t// excessDomChildren.length = 0;\n\t\t}\n\t\toptions._catchError(e, newVNode, oldVNode);\n\t}\n}\n\n/**\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').VNode} root\n */\nexport function commitRoot(commitQueue, root) {\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-ignore Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-ignore See above ts-ignore on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {import('../internal').PreactElement} dom The DOM element representing\n * the virtual nodes being diffed\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {*} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @returns {import('../internal').PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating\n) {\n\tlet oldProps = oldVNode.props;\n\tlet newProps = newVNode.props;\n\tlet nodeType = newVNode.type;\n\tlet i = 0;\n\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\n\tif (nodeType === 'svg') isSvg = true;\n\n\tif (excessDomChildren != null) {\n\t\tfor (; i < excessDomChildren.length; i++) {\n\t\t\tconst child = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tchild &&\n\t\t\t\t(child === dom ||\n\t\t\t\t\t(nodeType ? child.localName == nodeType : child.nodeType == 3))\n\t\t\t) {\n\t\t\t\tdom = child;\n\t\t\t\texcessDomChildren[i] = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == null) {\n\t\tif (nodeType === null) {\n\t\t\t// @ts-ignore createTextNode returns Text, we expect PreactElement\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tif (isSvg) {\n\t\t\tdom = document.createElementNS(\n\t\t\t\t'http://www.w3.org/2000/svg',\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType\n\t\t\t);\n\t\t} else {\n\t\t\tdom = document.createElement(\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType,\n\t\t\t\tnewProps.is && newProps\n\t\t\t);\n\t\t}\n\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = null;\n\t\t// we are creating a new node, so we can assume this is a new subtree (in case we are hydrating), this deopts the hydrate\n\t\tisHydrating = false;\n\t}\n\n\tif (nodeType === null) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\n\n\t\tlet oldHtml = oldProps.dangerouslySetInnerHTML;\n\t\tlet newHtml = newProps.dangerouslySetInnerHTML;\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tif (!isHydrating) {\n\t\t\t// But, if we are in a situation where we are using existing DOM (e.g. replaceNode)\n\t\t\t// we should read the existing DOM attributes to diff them\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\toldProps = {};\n\t\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\t\toldProps[dom.attributes[i].name] = dom.attributes[i].value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newHtml || oldHtml) {\n\t\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\t\tif (\n\t\t\t\t\t!newHtml ||\n\t\t\t\t\t((!oldHtml || newHtml.__html != oldHtml.__html) &&\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML)\n\t\t\t\t) {\n\t\t\t\t\tdom.innerHTML = (newHtml && newHtml.__html) || '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdiffProps(dom, newProps, oldProps, isSvg, isHydrating);\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\ti = newVNode.props.children;\n\t\t\tdiffChildren(\n\t\t\t\tdom,\n\t\t\t\tArray.isArray(i) ? i : [i],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg && nodeType !== 'foreignObject',\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (as above, don't diff props during hydration)\n\t\tif (!isHydrating) {\n\t\t\tif (\n\t\t\t\t'value' in newProps &&\n\t\t\t\t(i = newProps.value) !== undefined &&\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(i !== dom.value || (nodeType === 'progress' && !i))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'value', i, oldProps.value, false);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t'checked' in newProps &&\n\t\t\t\t(i = newProps.checked) !== undefined &&\n\t\t\t\ti !== dom.checked\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'checked', i, oldProps.checked, false);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {object|function} ref\n * @param {any} value\n * @param {import('../internal').VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') ref(value);\n\t\telse ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {import('../internal').VNode} vnode The virtual node to unmount\n * @param {import('../internal').VNode} parentVNode The parent of the VNode that\n * initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current === vnode._dom) applyRef(r, null, parentVNode);\n\t}\n\n\tif ((r = vnode._component) != null) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = null;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(r[i], parentVNode, typeof vnode.type != 'function');\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove && vnode._dom != null) removeNode(vnode._dom);\n\n\t// Must be set to `undefined` to properly clean up `_nextDom`\n\t// for which `null` is a valid value. See comment in `create-element.js`\n\tvnode._dom = vnode._nextDom = undefined;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n","import { EMPTY_OBJ } from './constants';\nimport { commitRoot, diff } from './diff/index';\nimport { createElement, Fragment } from './create-element';\nimport options from './options';\nimport { slice } from './util';\n\n/**\n * Render a Preact virtual node into a DOM element\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * render into\n * @param {import('./internal').PreactElement | object} [replaceNode] Optional: Attempt to re-use an\n * existing DOM tree rooted at `replaceNode`\n */\nexport function render(vnode, parentDom, replaceNode) {\n\tif (options._root) options._root(vnode, parentDom);\n\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\n\t// element..\n\tlet isHydrating = typeof replaceNode === 'function';\n\n\t// To be able to support calling `render()` multiple times on the same\n\t// DOM node, we need to obtain a reference to the previous tree. We do\n\t// this by assigning a new `_children` property to DOM nodes which points\n\t// to the last rendered tree. By default this property is not present, which\n\t// means that we are mounting a new tree for the first time.\n\tlet oldVNode = isHydrating\n\t\t? null\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\n\n\tvnode = (\n\t\t(!isHydrating && replaceNode) ||\n\t\tparentDom\n\t)._children = createElement(Fragment, null, [vnode]);\n\n\t// List of effects that need to be called after diffing.\n\tlet commitQueue = [];\n\tdiff(\n\t\tparentDom,\n\t\t// Determine the new vnode tree and store it on the DOM element on\n\t\t// our custom `_children` property.\n\t\tvnode,\n\t\toldVNode || EMPTY_OBJ,\n\t\tEMPTY_OBJ,\n\t\tparentDom.ownerSVGElement !== undefined,\n\t\t!isHydrating && replaceNode\n\t\t\t? [replaceNode]\n\t\t\t: oldVNode\n\t\t\t? null\n\t\t\t: parentDom.firstChild\n\t\t\t? slice.call(parentDom.childNodes)\n\t\t\t: null,\n\t\tcommitQueue,\n\t\t!isHydrating && replaceNode\n\t\t\t? replaceNode\n\t\t\t: oldVNode\n\t\t\t? oldVNode._dom\n\t\t\t: parentDom.firstChild,\n\t\tisHydrating\n\t);\n\n\t// Flush all queued effects\n\tcommitRoot(commitQueue, vnode);\n}\n\n/**\n * Update an existing DOM element with data from a Preact virtual node\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * update\n */\nexport function hydrate(vnode, parentDom) {\n\trender(vnode, parentDom, hydrate);\n}\n","import { assign, slice } from './util';\nimport { createVNode } from './create-element';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\n * @param {import('./internal').VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used as replacement children.\n * @returns {import('./internal').VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tnull\n\t);\n}\n","/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {import('../internal').VNode} vnode The vnode that threw\n * the error that was caught (except for unmounting when this parameter\n * is the highest parent that was being unmounted)\n */\nexport function _catchError(error, vnode) {\n\t/** @type {import('../internal').Component} */\n\tlet component, ctor, handled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != null) {\n\t\t\t\t\tcomponent.componentDidCatch(error);\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n","export const ROUND_ARROW =\n  '<svg width=\"16\" height=\"6\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z\"></svg>';\n\nexport const BOX_CLASS = `__NAMESPACE_PREFIX__-box`;\nexport const CONTENT_CLASS = `__NAMESPACE_PREFIX__-content`;\nexport const BACKDROP_CLASS = `__NAMESPACE_PREFIX__-backdrop`;\nexport const ARROW_CLASS = `__NAMESPACE_PREFIX__-arrow`;\nexport const SVG_ARROW_CLASS = `__NAMESPACE_PREFIX__-svg-arrow`;\n\nexport const TOUCH_OPTIONS = {passive: true, capture: true};\n\nexport const TIPPY_DEFAULT_APPEND_TO = () => document.body;\n","import {BasePlacement, Placement} from './types';\n\nexport function hasOwnProperty(\n  obj: Record<string, unknown>,\n  key: string\n): boolean {\n  return {}.hasOwnProperty.call(obj, key);\n}\n\nexport function getValueAtIndexOrReturn<T>(\n  value: T | [T | null, T | null],\n  index: number,\n  defaultValue: T | [T, T]\n): T {\n  if (Array.isArray(value)) {\n    const v = value[index];\n    return v == null\n      ? Array.isArray(defaultValue)\n        ? defaultValue[index]\n        : defaultValue\n      : v;\n  }\n\n  return value;\n}\n\nexport function isType(value: any, type: string): boolean {\n  const str = {}.toString.call(value);\n  return str.indexOf('[object') === 0 && str.indexOf(`${type}]`) > -1;\n}\n\nexport function invokeWithArgsOrReturn(value: any, args: any[]): any {\n  return typeof value === 'function' ? value(...args) : value;\n}\n\nexport function debounce<T>(\n  fn: (arg: T) => void,\n  ms: number\n): (arg: T) => void {\n  // Avoid wrapping in `setTimeout` if ms is 0 anyway\n  if (ms === 0) {\n    return fn;\n  }\n\n  let timeout: any;\n\n  return (arg): void => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => {\n      fn(arg);\n    }, ms);\n  };\n}\n\nexport function removeProperties<T>(obj: T, keys: string[]): Partial<T> {\n  const clone = {...obj};\n  keys.forEach((key) => {\n    delete (clone as any)[key];\n  });\n  return clone;\n}\n\nexport function splitBySpaces(value: string): string[] {\n  return value.split(/\\s+/).filter(Boolean);\n}\n\nexport function normalizeToArray<T>(value: T | T[]): T[] {\n  return ([] as T[]).concat(value);\n}\n\nexport function pushIfUnique<T>(arr: T[], value: T): void {\n  if (arr.indexOf(value) === -1) {\n    arr.push(value);\n  }\n}\n\nexport function appendPxIfNumber(value: string | number): string {\n  return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function unique<T>(arr: T[]): T[] {\n  return arr.filter((item, index) => arr.indexOf(item) === index);\n}\n\nexport function getNumber(value: string | number): number {\n  return typeof value === 'number' ? value : parseFloat(value);\n}\n\nexport function getBasePlacement(placement: Placement): BasePlacement {\n  return placement.split('-')[0] as BasePlacement;\n}\n\nexport function arrayFrom(value: ArrayLike<any>): any[] {\n  return [].slice.call(value);\n}\n\nexport function removeUndefinedProps(\n  obj: Record<string, unknown>\n): Partial<Record<string, unknown>> {\n  return Object.keys(obj).reduce((acc, key) => {\n    if (obj[key] !== undefined) {\n      (acc as any)[key] = obj[key];\n    }\n\n    return acc;\n  }, {});\n}\n","import {ReferenceElement, Targets} from './types';\nimport {PopperTreeData} from './types-internal';\nimport {arrayFrom, isType, normalizeToArray, getBasePlacement} from './utils';\n\nexport function div(): HTMLDivElement {\n  return document.createElement('div');\n}\n\nexport function isElement(value: unknown): value is Element | DocumentFragment {\n  return ['Element', 'Fragment'].some((type) => isType(value, type));\n}\n\nexport function isNodeList(value: unknown): value is NodeList {\n  return isType(value, 'NodeList');\n}\n\nexport function isMouseEvent(value: unknown): value is MouseEvent {\n  return isType(value, 'MouseEvent');\n}\n\nexport function isReferenceElement(value: any): value is ReferenceElement {\n  return !!(value && value._tippy && value._tippy.reference === value);\n}\n\nexport function getArrayOfElements(value: Targets): Element[] {\n  if (isElement(value)) {\n    return [value];\n  }\n\n  if (isNodeList(value)) {\n    return arrayFrom(value);\n  }\n\n  if (Array.isArray(value)) {\n    return value;\n  }\n\n  return arrayFrom(document.querySelectorAll(value));\n}\n\nexport function setTransitionDuration(\n  els: (HTMLDivElement | null)[],\n  value: number\n): void {\n  els.forEach((el) => {\n    if (el) {\n      el.style.transitionDuration = `${value}ms`;\n    }\n  });\n}\n\nexport function setVisibilityState(\n  els: (HTMLDivElement | null)[],\n  state: 'visible' | 'hidden'\n): void {\n  els.forEach((el) => {\n    if (el) {\n      el.setAttribute('data-state', state);\n    }\n  });\n}\n\nexport function getOwnerDocument(\n  elementOrElements: Element | Element[]\n): Document {\n  const [element] = normalizeToArray(elementOrElements);\n\n  // Elements created via a <template> have an ownerDocument with no reference to the body\n  return element?.ownerDocument?.body ? element.ownerDocument : document;\n}\n\nexport function isCursorOutsideInteractiveBorder(\n  popperTreeData: PopperTreeData[],\n  event: MouseEvent\n): boolean {\n  const {clientX, clientY} = event;\n\n  return popperTreeData.every(({popperRect, popperState, props}) => {\n    const {interactiveBorder} = props;\n    const basePlacement = getBasePlacement(popperState.placement);\n    const offsetData = popperState.modifiersData.offset;\n\n    if (!offsetData) {\n      return true;\n    }\n\n    const topDistance = basePlacement === 'bottom' ? offsetData.top!.y : 0;\n    const bottomDistance = basePlacement === 'top' ? offsetData.bottom!.y : 0;\n    const leftDistance = basePlacement === 'right' ? offsetData.left!.x : 0;\n    const rightDistance = basePlacement === 'left' ? offsetData.right!.x : 0;\n\n    const exceedsTop =\n      popperRect.top - clientY + topDistance > interactiveBorder;\n    const exceedsBottom =\n      clientY - popperRect.bottom - bottomDistance > interactiveBorder;\n    const exceedsLeft =\n      popperRect.left - clientX + leftDistance > interactiveBorder;\n    const exceedsRight =\n      clientX - popperRect.right - rightDistance > interactiveBorder;\n\n    return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n  });\n}\n\nexport function updateTransitionEndListener(\n  box: HTMLDivElement,\n  action: 'add' | 'remove',\n  listener: (event: TransitionEvent) => void\n): void {\n  const method = `${action}EventListener` as\n    | 'addEventListener'\n    | 'removeEventListener';\n\n  // some browsers apparently support `transition` (unprefixed) but only fire\n  // `webkitTransitionEnd`...\n  ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n    box[method](event, listener as EventListener);\n  });\n}\n\n/**\n * Compared to xxx.contains, this function works for dom structures with shadow\n * dom\n */\nexport function actualContains(parent: Element, child: Element): boolean {\n  let target = child;\n  while (target) {\n    if (parent.contains(target)) {\n      return true;\n    }\n    target = (target.getRootNode?.() as any)?.host;\n  }\n  return false;\n}\n","import {TOUCH_OPTIONS} from './constants';\nimport {isReferenceElement} from './dom-utils';\n\nexport const currentInput = {isTouch: false};\nlet lastMouseMoveTime = 0;\n\n/**\n * When a `touchstart` event is fired, it's assumed the user is using touch\n * input. We'll bind a `mousemove` event listener to listen for mouse input in\n * the future. This way, the `isTouch` property is fully dynamic and will handle\n * hybrid devices that use a mix of touch + mouse input.\n */\nexport function onDocumentTouchStart(): void {\n  if (currentInput.isTouch) {\n    return;\n  }\n\n  currentInput.isTouch = true;\n\n  if (window.performance) {\n    document.addEventListener('mousemove', onDocumentMouseMove);\n  }\n}\n\n/**\n * When two `mousemove` event are fired consecutively within 20ms, it's assumed\n * the user is using mouse input again. `mousemove` can fire on touch devices as\n * well, but very rarely that quickly.\n */\nexport function onDocumentMouseMove(): void {\n  const now = performance.now();\n\n  if (now - lastMouseMoveTime < 20) {\n    currentInput.isTouch = false;\n\n    document.removeEventListener('mousemove', onDocumentMouseMove);\n  }\n\n  lastMouseMoveTime = now;\n}\n\n/**\n * When an element is in focus and has a tippy, leaving the tab/window and\n * returning causes it to show again. For mouse users this is unexpected, but\n * for keyboard use it makes sense.\n * TODO: find a better technique to solve this problem\n */\nexport function onWindowBlur(): void {\n  const activeElement = document.activeElement as HTMLElement | null;\n\n  if (isReferenceElement(activeElement)) {\n    const instance = activeElement._tippy!;\n\n    if (activeElement.blur && !instance.state.isVisible) {\n      activeElement.blur();\n    }\n  }\n}\n\nexport default function bindGlobalEventListeners(): void {\n  document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);\n  window.addEventListener('blur', onWindowBlur);\n}\n","export const isBrowser =\n  typeof window !== 'undefined' && typeof document !== 'undefined';\n\nexport const isIE11 = isBrowser\n  ? // @ts-ignore\n    !!window.msCrypto\n  : false;\n","import {DefaultProps, Plugin, Props, ReferenceElement, Tippy} from './types';\nimport {\n  hasOwnProperty,\n  removeProperties,\n  invokeWithArgsOrReturn,\n} from './utils';\nimport {warnWhen} from './validation';\nimport {TIPPY_DEFAULT_APPEND_TO} from './constants';\n\nconst pluginProps = {\n  animateFill: false,\n  followCursor: false,\n  inlinePositioning: false,\n  sticky: false,\n};\n\nconst renderProps = {\n  allowHTML: false,\n  animation: 'fade',\n  arrow: true,\n  content: '',\n  inertia: false,\n  maxWidth: 350,\n  role: 'tooltip',\n  theme: '',\n  zIndex: 9999,\n};\n\nexport const defaultProps: DefaultProps = {\n  appendTo: TIPPY_DEFAULT_APPEND_TO,\n  aria: {\n    content: 'auto',\n    expanded: 'auto',\n  },\n  delay: 0,\n  duration: [300, 250],\n  getReferenceClientRect: null,\n  hideOnClick: true,\n  ignoreAttributes: false,\n  interactive: false,\n  interactiveBorder: 2,\n  interactiveDebounce: 0,\n  moveTransition: '',\n  offset: [0, 10],\n  onAfterUpdate() {},\n  onBeforeUpdate() {},\n  onCreate() {},\n  onDestroy() {},\n  onHidden() {},\n  onHide() {},\n  onMount() {},\n  onShow() {},\n  onShown() {},\n  onTrigger() {},\n  onUntrigger() {},\n  onClickOutside() {},\n  placement: 'top',\n  plugins: [],\n  popperOptions: {},\n  render: null,\n  showOnCreate: false,\n  touch: true,\n  trigger: 'mouseenter focus',\n  triggerTarget: null,\n  ...pluginProps,\n  ...renderProps,\n};\n\nconst defaultKeys = Object.keys(defaultProps);\n\nexport const setDefaultProps: Tippy['setDefaultProps'] = (partialProps) => {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    validateProps(partialProps, []);\n  }\n\n  const keys = Object.keys(partialProps) as Array<keyof DefaultProps>;\n  keys.forEach((key) => {\n    (defaultProps as any)[key] = partialProps[key];\n  });\n};\n\nexport function getExtendedPassedProps(\n  passedProps: Partial<Props> & Record<string, unknown>\n): Partial<Props> {\n  const plugins = passedProps.plugins || [];\n  const pluginProps = plugins.reduce<Record<string, unknown>>((acc, plugin) => {\n    const {name, defaultValue} = plugin;\n\n    if (name) {\n      acc[name] =\n        passedProps[name] !== undefined\n          ? passedProps[name]\n          : (defaultProps as any)[name] ?? defaultValue;\n    }\n\n    return acc;\n  }, {});\n\n  return {\n    ...passedProps,\n    ...pluginProps,\n  };\n}\n\nexport function getDataAttributeProps(\n  reference: ReferenceElement,\n  plugins: Plugin[]\n): Record<string, unknown> {\n  const propKeys = plugins\n    ? Object.keys(getExtendedPassedProps({...defaultProps, plugins}))\n    : defaultKeys;\n\n  const props = propKeys.reduce(\n    (acc: Partial<Props> & Record<string, unknown>, key) => {\n      const valueAsString = (\n        reference.getAttribute(`data-tippy-${key}`) || ''\n      ).trim();\n\n      if (!valueAsString) {\n        return acc;\n      }\n\n      if (key === 'content') {\n        acc[key] = valueAsString;\n      } else {\n        try {\n          acc[key] = JSON.parse(valueAsString);\n        } catch (e) {\n          acc[key] = valueAsString;\n        }\n      }\n\n      return acc;\n    },\n    {}\n  );\n\n  return props;\n}\n\nexport function evaluateProps(\n  reference: ReferenceElement,\n  props: Props\n): Props {\n  const out = {\n    ...props,\n    content: invokeWithArgsOrReturn(props.content, [reference]),\n    ...(props.ignoreAttributes\n      ? {}\n      : getDataAttributeProps(reference, props.plugins)),\n  };\n\n  out.aria = {\n    ...defaultProps.aria,\n    ...out.aria,\n  };\n\n  out.aria = {\n    expanded:\n      out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,\n    content:\n      out.aria.content === 'auto'\n        ? props.interactive\n          ? null\n          : 'describedby'\n        : out.aria.content,\n  };\n\n  return out;\n}\n\nexport function validateProps(\n  partialProps: Partial<Props> = {},\n  plugins: Plugin[] = []\n): void {\n  const keys = Object.keys(partialProps) as Array<keyof Props>;\n  keys.forEach((prop) => {\n    const nonPluginProps = removeProperties(\n      defaultProps,\n      Object.keys(pluginProps)\n    );\n\n    let didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop);\n\n    // Check if the prop exists in `plugins`\n    if (didPassUnknownProp) {\n      didPassUnknownProp =\n        plugins.filter((plugin) => plugin.name === prop).length === 0;\n    }\n\n    warnWhen(\n      didPassUnknownProp,\n      [\n        `\\`${prop}\\``,\n        \"is not a valid prop. You may have spelled it incorrectly, or if it's\",\n        'a plugin, forgot to pass it in an array as props.plugins.',\n        '\\n\\n',\n        'All props: https://atomiks.github.io/tippyjs/v6/all-props/\\n',\n        'Plugins: https://atomiks.github.io/tippyjs/v6/plugins/',\n      ].join(' ')\n    );\n  });\n}\n","import {\n  ARROW_CLASS,\n  BACKDROP_CLASS,\n  BOX_CLASS,\n  CONTENT_CLASS,\n  SVG_ARROW_CLASS,\n} from './constants';\nimport {div, isElement} from './dom-utils';\nimport {Instance, PopperElement, Props} from './types';\nimport {PopperChildren} from './types-internal';\nimport {arrayFrom} from './utils';\n\n// Firefox extensions don't allow .innerHTML = \"...\" property. This tricks it.\nconst innerHTML = (): 'innerHTML' => 'innerHTML';\n\nfunction dangerouslySetInnerHTML(element: Element, html: string): void {\n  element[innerHTML()] = html;\n}\n\nfunction createArrowElement(value: Props['arrow']): HTMLDivElement {\n  const arrow = div();\n\n  if (value === true) {\n    arrow.className = ARROW_CLASS;\n  } else {\n    arrow.className = SVG_ARROW_CLASS;\n\n    if (isElement(value)) {\n      arrow.appendChild(value);\n    } else {\n      dangerouslySetInnerHTML(arrow, value as string);\n    }\n  }\n\n  return arrow;\n}\n\nexport function setContent(content: HTMLDivElement, props: Props): void {\n  if (isElement(props.content)) {\n    dangerouslySetInnerHTML(content, '');\n    content.appendChild(props.content);\n  } else if (typeof props.content !== 'function') {\n    if (props.allowHTML) {\n      dangerouslySetInnerHTML(content, props.content);\n    } else {\n      content.textContent = props.content;\n    }\n  }\n}\n\nexport function getChildren(popper: PopperElement): PopperChildren {\n  const box = popper.firstElementChild as HTMLDivElement;\n  const boxChildren = arrayFrom(box.children);\n\n  return {\n    box,\n    content: boxChildren.find((node) => node.classList.contains(CONTENT_CLASS)),\n    arrow: boxChildren.find(\n      (node) =>\n        node.classList.contains(ARROW_CLASS) ||\n        node.classList.contains(SVG_ARROW_CLASS)\n    ),\n    backdrop: boxChildren.find((node) =>\n      node.classList.contains(BACKDROP_CLASS)\n    ),\n  };\n}\n\nexport function render(\n  instance: Instance\n): {\n  popper: PopperElement;\n  onUpdate?: (prevProps: Props, nextProps: Props) => void;\n} {\n  const popper = div();\n\n  const box = div();\n  box.className = BOX_CLASS;\n  box.setAttribute('data-state', 'hidden');\n  box.setAttribute('tabindex', '-1');\n\n  const content = div();\n  content.className = CONTENT_CLASS;\n  content.setAttribute('data-state', 'hidden');\n\n  setContent(content, instance.props);\n\n  popper.appendChild(box);\n  box.appendChild(content);\n\n  onUpdate(instance.props, instance.props);\n\n  function onUpdate(prevProps: Props, nextProps: Props): void {\n    const {box, content, arrow} = getChildren(popper);\n\n    if (nextProps.theme) {\n      box.setAttribute('data-theme', nextProps.theme);\n    } else {\n      box.removeAttribute('data-theme');\n    }\n\n    if (typeof nextProps.animation === 'string') {\n      box.setAttribute('data-animation', nextProps.animation);\n    } else {\n      box.removeAttribute('data-animation');\n    }\n\n    if (nextProps.inertia) {\n      box.setAttribute('data-inertia', '');\n    } else {\n      box.removeAttribute('data-inertia');\n    }\n\n    box.style.maxWidth =\n      typeof nextProps.maxWidth === 'number'\n        ? `${nextProps.maxWidth}px`\n        : nextProps.maxWidth;\n\n    if (nextProps.role) {\n      box.setAttribute('role', nextProps.role);\n    } else {\n      box.removeAttribute('role');\n    }\n\n    if (\n      prevProps.content !== nextProps.content ||\n      prevProps.allowHTML !== nextProps.allowHTML\n    ) {\n      setContent(content, instance.props);\n    }\n\n    if (nextProps.arrow) {\n      if (!arrow) {\n        box.appendChild(createArrowElement(nextProps.arrow));\n      } else if (prevProps.arrow !== nextProps.arrow) {\n        box.removeChild(arrow);\n        box.appendChild(createArrowElement(nextProps.arrow));\n      }\n    } else if (arrow) {\n      box.removeChild(arrow!);\n    }\n  }\n\n  return {\n    popper,\n    onUpdate,\n  };\n}\n\n// Runtime check to identify if the render function is the default one; this\n// way we can apply default CSS transitions logic and it can be tree-shaken away\nrender.$$tippy = true;\n","import {createPopper, StrictModifiers, Modifier} from '@popperjs/core';\nimport {currentInput} from './bindGlobalEventListeners';\nimport {isIE11} from './browser';\nimport {TIPPY_DEFAULT_APPEND_TO, TOUCH_OPTIONS} from './constants';\nimport {\n  actualContains,\n  div,\n  getOwnerDocument,\n  isCursorOutsideInteractiveBorder,\n  isMouseEvent,\n  setTransitionDuration,\n  setVisibilityState,\n  updateTransitionEndListener,\n} from './dom-utils';\nimport {defaultProps, evaluateProps, getExtendedPassedProps} from './props';\nimport {getChildren} from './template';\nimport {\n  Content,\n  Instance,\n  LifecycleHooks,\n  PopperElement,\n  Props,\n  ReferenceElement,\n} from './types';\nimport {ListenerObject, PopperTreeData, PopperChildren} from './types-internal';\nimport {\n  arrayFrom,\n  debounce,\n  getValueAtIndexOrReturn,\n  invokeWithArgsOrReturn,\n  normalizeToArray,\n  pushIfUnique,\n  splitBySpaces,\n  unique,\n  removeUndefinedProps,\n} from './utils';\nimport {createMemoryLeakWarning, errorWhen, warnWhen} from './validation';\n\nlet idCounter = 1;\nlet mouseMoveListeners: ((event: MouseEvent) => void)[] = [];\n\n// Used by `hideAll()`\nexport let mountedInstances: Instance[] = [];\n\nexport default function createTippy(\n  reference: ReferenceElement,\n  passedProps: Partial<Props>\n): Instance {\n  const props = evaluateProps(reference, {\n    ...defaultProps,\n    ...getExtendedPassedProps(removeUndefinedProps(passedProps)),\n  });\n\n  // ===========================================================================\n  // 🔒 Private members\n  // ===========================================================================\n  let showTimeout: any;\n  let hideTimeout: any;\n  let scheduleHideAnimationFrame: number;\n  let isVisibleFromClick = false;\n  let didHideDueToDocumentMouseDown = false;\n  let didTouchMove = false;\n  let ignoreOnFirstUpdate = false;\n  let lastTriggerEvent: Event | undefined;\n  let currentTransitionEndListener: (event: TransitionEvent) => void;\n  let onFirstUpdate: () => void;\n  let listeners: ListenerObject[] = [];\n  let debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n  let currentTarget: Element;\n\n  // ===========================================================================\n  // 🔑 Public members\n  // ===========================================================================\n  const id = idCounter++;\n  const popperInstance = null;\n  const plugins = unique(props.plugins);\n\n  const state = {\n    // Is the instance currently enabled?\n    isEnabled: true,\n    // Is the tippy currently showing and not transitioning out?\n    isVisible: false,\n    // Has the instance been destroyed?\n    isDestroyed: false,\n    // Is the tippy currently mounted to the DOM?\n    isMounted: false,\n    // Has the tippy finished transitioning in?\n    isShown: false,\n  };\n\n  const instance: Instance = {\n    // properties\n    id,\n    reference,\n    popper: div(),\n    popperInstance,\n    props,\n    state,\n    plugins,\n    // methods\n    clearDelayTimeouts,\n    setProps,\n    setContent,\n    show,\n    hide,\n    hideWithInteractivity,\n    enable,\n    disable,\n    unmount,\n    destroy,\n  };\n\n  // TODO: Investigate why this early return causes a TDZ error in the tests —\n  // it doesn't seem to happen in the browser\n  /* istanbul ignore if */\n  if (!props.render) {\n    if (__DEV__) {\n      errorWhen(true, 'render() function has not been supplied.');\n    }\n\n    return instance;\n  }\n\n  // ===========================================================================\n  // Initial mutations\n  // ===========================================================================\n  const {popper, onUpdate} = props.render(instance);\n\n  popper.setAttribute('data-__NAMESPACE_PREFIX__-root', '');\n  popper.id = `__NAMESPACE_PREFIX__-${instance.id}`;\n\n  instance.popper = popper;\n  reference._tippy = instance;\n  popper._tippy = instance;\n\n  const pluginsHooks = plugins.map((plugin) => plugin.fn(instance));\n  const hasAriaExpanded = reference.hasAttribute('aria-expanded');\n\n  addListeners();\n  handleAriaExpandedAttribute();\n  handleStyles();\n\n  invokeHook('onCreate', [instance]);\n\n  if (props.showOnCreate) {\n    scheduleShow();\n  }\n\n  // Prevent a tippy with a delay from hiding if the cursor left then returned\n  // before it started hiding\n  popper.addEventListener('mouseenter', () => {\n    if (instance.props.interactive && instance.state.isVisible) {\n      instance.clearDelayTimeouts();\n    }\n  });\n\n  popper.addEventListener('mouseleave', () => {\n    if (\n      instance.props.interactive &&\n      instance.props.trigger.indexOf('mouseenter') >= 0\n    ) {\n      getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    }\n  });\n\n  return instance;\n\n  // ===========================================================================\n  // 🔒 Private methods\n  // ===========================================================================\n  function getNormalizedTouchSettings(): [string | boolean, number] {\n    const {touch} = instance.props;\n    return Array.isArray(touch) ? touch : [touch, 0];\n  }\n\n  function getIsCustomTouchBehavior(): boolean {\n    return getNormalizedTouchSettings()[0] === 'hold';\n  }\n\n  function getIsDefaultRenderFn(): boolean {\n    // @ts-ignore\n    return !!instance.props.render?.$$tippy;\n  }\n\n  function getCurrentTarget(): Element {\n    return currentTarget || reference;\n  }\n\n  function getDocument(): Document {\n    const parent = getCurrentTarget().parentNode as Element;\n    return parent ? getOwnerDocument(parent) : document;\n  }\n\n  function getDefaultTemplateChildren(): PopperChildren {\n    return getChildren(popper);\n  }\n\n  function getDelay(isShow: boolean): number {\n    // For touch or keyboard input, force `0` delay for UX reasons\n    // Also if the instance is mounted but not visible (transitioning out),\n    // ignore delay\n    if (\n      (instance.state.isMounted && !instance.state.isVisible) ||\n      currentInput.isTouch ||\n      (lastTriggerEvent && lastTriggerEvent.type === 'focus')\n    ) {\n      return 0;\n    }\n\n    return getValueAtIndexOrReturn(\n      instance.props.delay,\n      isShow ? 0 : 1,\n      defaultProps.delay\n    );\n  }\n\n  function handleStyles(fromHide = false): void {\n    popper.style.pointerEvents =\n      instance.props.interactive && !fromHide ? '' : 'none';\n    popper.style.zIndex = `${instance.props.zIndex}`;\n  }\n\n  function invokeHook(\n    hook: keyof LifecycleHooks,\n    args: [Instance, any?],\n    shouldInvokePropsHook = true\n  ): void {\n    pluginsHooks.forEach((pluginHooks) => {\n      if (pluginHooks[hook]) {\n        pluginHooks[hook]!(...args);\n      }\n    });\n\n    if (shouldInvokePropsHook) {\n      instance.props[hook](...args);\n    }\n  }\n\n  function handleAriaContentAttribute(): void {\n    const {aria} = instance.props;\n\n    if (!aria.content) {\n      return;\n    }\n\n    const attr = `aria-${aria.content}`;\n    const id = popper.id;\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n    nodes.forEach((node) => {\n      const currentValue = node.getAttribute(attr);\n\n      if (instance.state.isVisible) {\n        node.setAttribute(attr, currentValue ? `${currentValue} ${id}` : id);\n      } else {\n        const nextValue = currentValue && currentValue.replace(id, '').trim();\n\n        if (nextValue) {\n          node.setAttribute(attr, nextValue);\n        } else {\n          node.removeAttribute(attr);\n        }\n      }\n    });\n  }\n\n  function handleAriaExpandedAttribute(): void {\n    if (hasAriaExpanded || !instance.props.aria.expanded) {\n      return;\n    }\n\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n    nodes.forEach((node) => {\n      if (instance.props.interactive) {\n        node.setAttribute(\n          'aria-expanded',\n          instance.state.isVisible && node === getCurrentTarget()\n            ? 'true'\n            : 'false'\n        );\n      } else {\n        node.removeAttribute('aria-expanded');\n      }\n    });\n  }\n\n  function cleanupInteractiveMouseListeners(): void {\n    getDocument().removeEventListener('mousemove', debouncedOnMouseMove);\n    mouseMoveListeners = mouseMoveListeners.filter(\n      (listener) => listener !== debouncedOnMouseMove\n    );\n  }\n\n  function onDocumentPress(event: MouseEvent | TouchEvent): void {\n    // Moved finger to scroll instead of an intentional tap outside\n    if (currentInput.isTouch) {\n      if (didTouchMove || event.type === 'mousedown') {\n        return;\n      }\n    }\n\n    const actualTarget =\n      (event.composedPath && event.composedPath()[0]) || event.target;\n\n    // Clicked on interactive popper\n    if (\n      instance.props.interactive &&\n      actualContains(popper, actualTarget as Element)\n    ) {\n      return;\n    }\n\n    // Clicked on the event listeners target\n    if (\n      normalizeToArray(instance.props.triggerTarget || reference).some((el) =>\n        actualContains(el, actualTarget as Element)\n      )\n    ) {\n      if (currentInput.isTouch) {\n        return;\n      }\n\n      if (\n        instance.state.isVisible &&\n        instance.props.trigger.indexOf('click') >= 0\n      ) {\n        return;\n      }\n    } else {\n      invokeHook('onClickOutside', [instance, event]);\n    }\n\n    if (instance.props.hideOnClick === true) {\n      instance.clearDelayTimeouts();\n      instance.hide();\n\n      // `mousedown` event is fired right before `focus` if pressing the\n      // currentTarget. This lets a tippy with `focus` trigger know that it\n      // should not show\n      didHideDueToDocumentMouseDown = true;\n      setTimeout(() => {\n        didHideDueToDocumentMouseDown = false;\n      });\n\n      // The listener gets added in `scheduleShow()`, but this may be hiding it\n      // before it shows, and hide()'s early bail-out behavior can prevent it\n      // from being cleaned up\n      if (!instance.state.isMounted) {\n        removeDocumentPress();\n      }\n    }\n  }\n\n  function onTouchMove(): void {\n    didTouchMove = true;\n  }\n\n  function onTouchStart(): void {\n    didTouchMove = false;\n  }\n\n  function addDocumentPress(): void {\n    const doc = getDocument();\n    doc.addEventListener('mousedown', onDocumentPress, true);\n    doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function removeDocumentPress(): void {\n    const doc = getDocument();\n    doc.removeEventListener('mousedown', onDocumentPress, true);\n    doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function onTransitionedOut(duration: number, callback: () => void): void {\n    onTransitionEnd(duration, () => {\n      if (\n        !instance.state.isVisible &&\n        popper.parentNode &&\n        popper.parentNode.contains(popper)\n      ) {\n        callback();\n      }\n    });\n  }\n\n  function onTransitionedIn(duration: number, callback: () => void): void {\n    onTransitionEnd(duration, callback);\n  }\n\n  function onTransitionEnd(duration: number, callback: () => void): void {\n    const box = getDefaultTemplateChildren().box;\n\n    function listener(event: TransitionEvent): void {\n      if (event.target === box) {\n        updateTransitionEndListener(box, 'remove', listener);\n        callback();\n      }\n    }\n\n    // Make callback synchronous if duration is 0\n    // `transitionend` won't fire otherwise\n    if (duration === 0) {\n      return callback();\n    }\n\n    updateTransitionEndListener(box, 'remove', currentTransitionEndListener);\n    updateTransitionEndListener(box, 'add', listener);\n\n    currentTransitionEndListener = listener;\n  }\n\n  function on(\n    eventType: string,\n    handler: EventListener,\n    options: boolean | Record<string, unknown> = false\n  ): void {\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach((node) => {\n      node.addEventListener(eventType, handler, options);\n      listeners.push({node, eventType, handler, options});\n    });\n  }\n\n  function addListeners(): void {\n    if (getIsCustomTouchBehavior()) {\n      on('touchstart', onTrigger, {passive: true});\n      on('touchend', onMouseLeave as EventListener, {passive: true});\n    }\n\n    splitBySpaces(instance.props.trigger).forEach((eventType) => {\n      if (eventType === 'manual') {\n        return;\n      }\n\n      on(eventType, onTrigger);\n\n      switch (eventType) {\n        case 'mouseenter':\n          on('mouseleave', onMouseLeave as EventListener);\n          break;\n        case 'focus':\n          on(isIE11 ? 'focusout' : 'blur', onBlurOrFocusOut as EventListener);\n          break;\n        case 'focusin':\n          on('focusout', onBlurOrFocusOut as EventListener);\n          break;\n      }\n    });\n  }\n\n  function removeListeners(): void {\n    listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function onTrigger(event: Event): void {\n    let shouldScheduleClickHide = false;\n\n    if (\n      !instance.state.isEnabled ||\n      isEventListenerStopped(event) ||\n      didHideDueToDocumentMouseDown\n    ) {\n      return;\n    }\n\n    const wasFocused = lastTriggerEvent?.type === 'focus';\n\n    lastTriggerEvent = event;\n    currentTarget = event.currentTarget as Element;\n\n    handleAriaExpandedAttribute();\n\n    if (!instance.state.isVisible && isMouseEvent(event)) {\n      // If scrolling, `mouseenter` events can be fired if the cursor lands\n      // over a new target, but `mousemove` events don't get fired. This\n      // causes interactive tooltips to get stuck open until the cursor is\n      // moved\n      mouseMoveListeners.forEach((listener) => listener(event));\n    }\n\n    // Toggle show/hide when clicking click-triggered tooltips\n    if (\n      event.type === 'click' &&\n      (instance.props.trigger.indexOf('mouseenter') < 0 ||\n        isVisibleFromClick) &&\n      instance.props.hideOnClick !== false &&\n      instance.state.isVisible\n    ) {\n      shouldScheduleClickHide = true;\n    } else {\n      scheduleShow(event);\n    }\n\n    if (event.type === 'click') {\n      isVisibleFromClick = !shouldScheduleClickHide;\n    }\n\n    if (shouldScheduleClickHide && !wasFocused) {\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseMove(event: MouseEvent): void {\n    const target = event.target as Node;\n    const isCursorOverReferenceOrPopper =\n      getCurrentTarget().contains(target) || popper.contains(target);\n\n    if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {\n      return;\n    }\n\n    const popperTreeData = getNestedPopperTree()\n      .concat(popper)\n      .map((popper) => {\n        const instance = popper._tippy!;\n        const state = instance.popperInstance?.state;\n\n        if (state) {\n          return {\n            popperRect: popper.getBoundingClientRect(),\n            popperState: state,\n            props,\n          };\n        }\n\n        return null;\n      })\n      .filter(Boolean) as PopperTreeData[];\n\n    if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {\n      cleanupInteractiveMouseListeners();\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseLeave(event: MouseEvent): void {\n    const shouldBail =\n      isEventListenerStopped(event) ||\n      (instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick);\n\n    if (shouldBail) {\n      return;\n    }\n\n    if (instance.props.interactive) {\n      instance.hideWithInteractivity(event);\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function onBlurOrFocusOut(event: FocusEvent): void {\n    if (\n      instance.props.trigger.indexOf('focusin') < 0 &&\n      event.target !== getCurrentTarget()\n    ) {\n      return;\n    }\n\n    // If focus was moved to within the popper\n    if (\n      instance.props.interactive &&\n      event.relatedTarget &&\n      popper.contains(event.relatedTarget as Element)\n    ) {\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function isEventListenerStopped(event: Event): boolean {\n    return currentInput.isTouch\n      ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0\n      : false;\n  }\n\n  function createPopperInstance(): void {\n    destroyPopperInstance();\n\n    const {\n      popperOptions,\n      placement,\n      offset,\n      getReferenceClientRect,\n      moveTransition,\n    } = instance.props;\n\n    const arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;\n\n    const computedReference = getReferenceClientRect\n      ? {\n          getBoundingClientRect: getReferenceClientRect,\n          contextElement:\n            getReferenceClientRect.contextElement || getCurrentTarget(),\n        }\n      : reference;\n\n    const tippyModifier: Modifier<'$$tippy', Record<string, unknown>> = {\n      name: '$$tippy',\n      enabled: true,\n      phase: 'beforeWrite',\n      requires: ['computeStyles'],\n      fn({state}) {\n        if (getIsDefaultRenderFn()) {\n          const {box} = getDefaultTemplateChildren();\n\n          ['placement', 'reference-hidden', 'escaped'].forEach((attr) => {\n            if (attr === 'placement') {\n              box.setAttribute('data-placement', state.placement);\n            } else {\n              if (state.attributes.popper[`data-popper-${attr}`]) {\n                box.setAttribute(`data-${attr}`, '');\n              } else {\n                box.removeAttribute(`data-${attr}`);\n              }\n            }\n          });\n\n          state.attributes.popper = {};\n        }\n      },\n    };\n\n    type TippyModifier = Modifier<'$$tippy', Record<string, unknown>>;\n    type ExtendedModifiers = StrictModifiers | Partial<TippyModifier>;\n\n    const modifiers: Array<ExtendedModifiers> = [\n      {\n        name: 'offset',\n        options: {\n          offset,\n        },\n      },\n      {\n        name: 'preventOverflow',\n        options: {\n          padding: {\n            top: 2,\n            bottom: 2,\n            left: 5,\n            right: 5,\n          },\n        },\n      },\n      {\n        name: 'flip',\n        options: {\n          padding: 5,\n        },\n      },\n      {\n        name: 'computeStyles',\n        options: {\n          adaptive: !moveTransition,\n        },\n      },\n      tippyModifier,\n    ];\n\n    if (getIsDefaultRenderFn() && arrow) {\n      modifiers.push({\n        name: 'arrow',\n        options: {\n          element: arrow,\n          padding: 3,\n        },\n      });\n    }\n\n    modifiers.push(...(popperOptions?.modifiers || []));\n\n    instance.popperInstance = createPopper<ExtendedModifiers>(\n      computedReference,\n      popper,\n      {\n        ...popperOptions,\n        placement,\n        onFirstUpdate,\n        modifiers,\n      }\n    );\n  }\n\n  function destroyPopperInstance(): void {\n    if (instance.popperInstance) {\n      instance.popperInstance.destroy();\n      instance.popperInstance = null;\n    }\n  }\n\n  function mount(): void {\n    const {appendTo} = instance.props;\n\n    let parentNode: any;\n\n    // By default, we'll append the popper to the triggerTargets's parentNode so\n    // it's directly after the reference element so the elements inside the\n    // tippy can be tabbed to\n    // If there are clipping issues, the user can specify a different appendTo\n    // and ensure focus management is handled correctly manually\n    const node = getCurrentTarget();\n\n    if (\n      (instance.props.interactive && appendTo === TIPPY_DEFAULT_APPEND_TO) ||\n      appendTo === 'parent'\n    ) {\n      parentNode = node.parentNode;\n    } else {\n      parentNode = invokeWithArgsOrReturn(appendTo, [node]);\n    }\n\n    // The popper element needs to exist on the DOM before its position can be\n    // updated as Popper needs to read its dimensions\n    if (!parentNode.contains(popper)) {\n      parentNode.appendChild(popper);\n    }\n\n    instance.state.isMounted = true;\n\n    createPopperInstance();\n\n    /* istanbul ignore else */\n    if (__DEV__) {\n      // Accessibility check\n      warnWhen(\n        instance.props.interactive &&\n          appendTo === defaultProps.appendTo &&\n          node.nextElementSibling !== popper,\n        [\n          'Interactive tippy element may not be accessible via keyboard',\n          'navigation because it is not directly after the reference element',\n          'in the DOM source order.',\n          '\\n\\n',\n          'Using a wrapper <div> or <span> tag around the reference element',\n          'solves this by creating a new parentNode context.',\n          '\\n\\n',\n          'Specifying `appendTo: document.body` silences this warning, but it',\n          'assumes you are using a focus management solution to handle',\n          'keyboard navigation.',\n          '\\n\\n',\n          'See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity',\n        ].join(' ')\n      );\n    }\n  }\n\n  function getNestedPopperTree(): PopperElement[] {\n    return arrayFrom(\n      popper.querySelectorAll('[data-__NAMESPACE_PREFIX__-root]')\n    );\n  }\n\n  function scheduleShow(event?: Event): void {\n    instance.clearDelayTimeouts();\n\n    if (event) {\n      invokeHook('onTrigger', [instance, event]);\n    }\n\n    addDocumentPress();\n\n    let delay = getDelay(true);\n    const [touchValue, touchDelay] = getNormalizedTouchSettings();\n\n    if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {\n      delay = touchDelay;\n    }\n\n    if (delay) {\n      showTimeout = setTimeout(() => {\n        instance.show();\n      }, delay);\n    } else {\n      instance.show();\n    }\n  }\n\n  function scheduleHide(event: Event): void {\n    instance.clearDelayTimeouts();\n\n    invokeHook('onUntrigger', [instance, event]);\n\n    if (!instance.state.isVisible) {\n      removeDocumentPress();\n\n      return;\n    }\n\n    // For interactive tippies, scheduleHide is added to a document.body handler\n    // from onMouseLeave so must intercept scheduled hides from mousemove/leave\n    // events when trigger contains mouseenter and click, and the tip is\n    // currently shown as a result of a click.\n    if (\n      instance.props.trigger.indexOf('mouseenter') >= 0 &&\n      instance.props.trigger.indexOf('click') >= 0 &&\n      ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 &&\n      isVisibleFromClick\n    ) {\n      return;\n    }\n\n    const delay = getDelay(false);\n\n    if (delay) {\n      hideTimeout = setTimeout(() => {\n        if (instance.state.isVisible) {\n          instance.hide();\n        }\n      }, delay);\n    } else {\n      // Fixes a `transitionend` problem when it fires 1 frame too\n      // late sometimes, we don't want hide() to be called.\n      scheduleHideAnimationFrame = requestAnimationFrame(() => {\n        instance.hide();\n      });\n    }\n  }\n\n  // ===========================================================================\n  // 🔑 Public methods\n  // ===========================================================================\n  function enable(): void {\n    instance.state.isEnabled = true;\n  }\n\n  function disable(): void {\n    // Disabling the instance should also hide it\n    // https://github.com/atomiks/tippy.js-react/issues/106\n    instance.hide();\n    instance.state.isEnabled = false;\n  }\n\n  function clearDelayTimeouts(): void {\n    clearTimeout(showTimeout);\n    clearTimeout(hideTimeout);\n    cancelAnimationFrame(scheduleHideAnimationFrame);\n  }\n\n  function setProps(partialProps: Partial<Props>): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('setProps'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    invokeHook('onBeforeUpdate', [instance, partialProps]);\n\n    removeListeners();\n\n    const prevProps = instance.props;\n    const nextProps = evaluateProps(reference, {\n      ...prevProps,\n      ...removeUndefinedProps(partialProps),\n      ignoreAttributes: true,\n    });\n\n    instance.props = nextProps;\n\n    addListeners();\n\n    if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {\n      cleanupInteractiveMouseListeners();\n      debouncedOnMouseMove = debounce(\n        onMouseMove,\n        nextProps.interactiveDebounce\n      );\n    }\n\n    // Ensure stale aria-expanded attributes are removed\n    if (prevProps.triggerTarget && !nextProps.triggerTarget) {\n      normalizeToArray(prevProps.triggerTarget).forEach((node) => {\n        node.removeAttribute('aria-expanded');\n      });\n    } else if (nextProps.triggerTarget) {\n      reference.removeAttribute('aria-expanded');\n    }\n\n    handleAriaExpandedAttribute();\n    handleStyles();\n\n    if (onUpdate) {\n      onUpdate(prevProps, nextProps);\n    }\n\n    if (instance.popperInstance) {\n      createPopperInstance();\n\n      // Fixes an issue with nested tippies if they are all getting re-rendered,\n      // and the nested ones get re-rendered first.\n      // https://github.com/atomiks/tippyjs-react/issues/177\n      // TODO: find a cleaner / more efficient solution(!)\n      getNestedPopperTree().forEach((nestedPopper) => {\n        // React (and other UI libs likely) requires a rAF wrapper as it flushes\n        // its work in one\n        requestAnimationFrame(nestedPopper._tippy!.popperInstance!.forceUpdate);\n      });\n    }\n\n    invokeHook('onAfterUpdate', [instance, partialProps]);\n  }\n\n  function setContent(content: Content): void {\n    instance.setProps({content});\n  }\n\n  function show(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('show'));\n    }\n\n    // Early bail-out\n    const isAlreadyVisible = instance.state.isVisible;\n    const isDestroyed = instance.state.isDestroyed;\n    const isDisabled = !instance.state.isEnabled;\n    const isTouchAndTouchDisabled =\n      currentInput.isTouch && !instance.props.touch;\n    const duration = getValueAtIndexOrReturn(\n      instance.props.duration,\n      0,\n      defaultProps.duration\n    );\n\n    if (\n      isAlreadyVisible ||\n      isDestroyed ||\n      isDisabled ||\n      isTouchAndTouchDisabled\n    ) {\n      return;\n    }\n\n    // Normalize `disabled` behavior across browsers.\n    // Firefox allows events on disabled elements, but Chrome doesn't.\n    // Using a wrapper element (i.e. <span>) is recommended.\n    if (getCurrentTarget().hasAttribute('disabled')) {\n      return;\n    }\n\n    invokeHook('onShow', [instance], false);\n    if (instance.props.onShow(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = true;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'visible';\n    }\n\n    handleStyles();\n    addDocumentPress();\n\n    if (!instance.state.isMounted) {\n      popper.style.transition = 'none';\n    }\n\n    // If flipping to the opposite side after hiding at least once, the\n    // animation will use the wrong placement without resetting the duration\n    if (getIsDefaultRenderFn()) {\n      const {box, content} = getDefaultTemplateChildren();\n      setTransitionDuration([box, content], 0);\n    }\n\n    onFirstUpdate = (): void => {\n      if (!instance.state.isVisible || ignoreOnFirstUpdate) {\n        return;\n      }\n\n      ignoreOnFirstUpdate = true;\n\n      // reflow\n      void popper.offsetHeight;\n\n      popper.style.transition = instance.props.moveTransition;\n\n      if (getIsDefaultRenderFn() && instance.props.animation) {\n        const {box, content} = getDefaultTemplateChildren();\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'visible');\n      }\n\n      handleAriaContentAttribute();\n      handleAriaExpandedAttribute();\n\n      pushIfUnique(mountedInstances, instance);\n\n      // certain modifiers (e.g. `maxSize`) require a second update after the\n      // popper has been positioned for the first time\n      instance.popperInstance?.forceUpdate();\n\n      invokeHook('onMount', [instance]);\n\n      if (instance.props.animation && getIsDefaultRenderFn()) {\n        onTransitionedIn(duration, () => {\n          instance.state.isShown = true;\n          invokeHook('onShown', [instance]);\n        });\n      }\n    };\n\n    mount();\n  }\n\n  function hide(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hide'));\n    }\n\n    // Early bail-out\n    const isAlreadyHidden = !instance.state.isVisible;\n    const isDestroyed = instance.state.isDestroyed;\n    const isDisabled = !instance.state.isEnabled;\n    const duration = getValueAtIndexOrReturn(\n      instance.props.duration,\n      1,\n      defaultProps.duration\n    );\n\n    if (isAlreadyHidden || isDestroyed || isDisabled) {\n      return;\n    }\n\n    invokeHook('onHide', [instance], false);\n    if (instance.props.onHide(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = false;\n    instance.state.isShown = false;\n    ignoreOnFirstUpdate = false;\n    isVisibleFromClick = false;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'hidden';\n    }\n\n    cleanupInteractiveMouseListeners();\n    removeDocumentPress();\n    handleStyles(true);\n\n    if (getIsDefaultRenderFn()) {\n      const {box, content} = getDefaultTemplateChildren();\n\n      if (instance.props.animation) {\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'hidden');\n      }\n    }\n\n    handleAriaContentAttribute();\n    handleAriaExpandedAttribute();\n\n    if (instance.props.animation) {\n      if (getIsDefaultRenderFn()) {\n        onTransitionedOut(duration, instance.unmount);\n      }\n    } else {\n      instance.unmount();\n    }\n  }\n\n  function hideWithInteractivity(event: MouseEvent): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(\n        instance.state.isDestroyed,\n        createMemoryLeakWarning('hideWithInteractivity')\n      );\n    }\n\n    getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);\n    debouncedOnMouseMove(event);\n  }\n\n  function unmount(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('unmount'));\n    }\n\n    if (instance.state.isVisible) {\n      instance.hide();\n    }\n\n    if (!instance.state.isMounted) {\n      return;\n    }\n\n    destroyPopperInstance();\n\n    // If a popper is not interactive, it will be appended outside the popper\n    // tree by default. This seems mainly for interactive tippies, but we should\n    // find a workaround if possible\n    getNestedPopperTree().forEach((nestedPopper) => {\n      nestedPopper._tippy!.unmount();\n    });\n\n    if (popper.parentNode) {\n      popper.parentNode.removeChild(popper);\n    }\n\n    mountedInstances = mountedInstances.filter((i) => i !== instance);\n\n    instance.state.isMounted = false;\n    invokeHook('onHidden', [instance]);\n  }\n\n  function destroy(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('destroy'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    instance.clearDelayTimeouts();\n    instance.unmount();\n\n    removeListeners();\n\n    delete reference._tippy;\n\n    instance.state.isDestroyed = true;\n\n    invokeHook('onDestroy', [instance]);\n  }\n}\n","import bindGlobalEventListeners, {\n  currentInput,\n} from './bindGlobalEventListeners';\nimport createTippy, {mountedInstances} from './createTippy';\nimport {getArrayOfElements, isElement, isReferenceElement} from './dom-utils';\nimport {defaultProps, setDefaultProps, validateProps} from './props';\nimport {HideAll, HideAllOptions, Instance, Props, Targets} from './types';\nimport {validateTargets, warnWhen} from './validation';\n\nfunction tippy(\n  targets: Targets,\n  optionalProps: Partial<Props> = {}\n): Instance | Instance[] {\n  const plugins = defaultProps.plugins.concat(optionalProps.plugins || []);\n\n  /* istanbul ignore else */\n  if (__DEV__) {\n    validateTargets(targets);\n    validateProps(optionalProps, plugins);\n  }\n\n  bindGlobalEventListeners();\n\n  const passedProps: Partial<Props> = {...optionalProps, plugins};\n\n  const elements = getArrayOfElements(targets);\n\n  /* istanbul ignore else */\n  if (__DEV__) {\n    const isSingleContentElement = isElement(passedProps.content);\n    const isMoreThanOneReferenceElement = elements.length > 1;\n    warnWhen(\n      isSingleContentElement && isMoreThanOneReferenceElement,\n      [\n        'tippy() was passed an Element as the `content` prop, but more than',\n        'one tippy instance was created by this invocation. This means the',\n        'content element will only be appended to the last tippy instance.',\n        '\\n\\n',\n        'Instead, pass the .innerHTML of the element, or use a function that',\n        'returns a cloned version of the element instead.',\n        '\\n\\n',\n        '1) content: element.innerHTML\\n',\n        '2) content: () => element.cloneNode(true)',\n      ].join(' ')\n    );\n  }\n\n  const instances = elements.reduce<Instance[]>(\n    (acc, reference): Instance[] => {\n      const instance = reference && createTippy(reference, passedProps);\n\n      if (instance) {\n        acc.push(instance);\n      }\n\n      return acc;\n    },\n    []\n  );\n\n  return isElement(targets) ? instances[0] : instances;\n}\n\ntippy.defaultProps = defaultProps;\ntippy.setDefaultProps = setDefaultProps;\ntippy.currentInput = currentInput;\n\nexport default tippy;\n\nexport const hideAll: HideAll = ({\n  exclude: excludedReferenceOrInstance,\n  duration,\n}: HideAllOptions = {}) => {\n  mountedInstances.forEach((instance) => {\n    let isExcluded = false;\n\n    if (excludedReferenceOrInstance) {\n      isExcluded = isReferenceElement(excludedReferenceOrInstance)\n        ? instance.reference === excludedReferenceOrInstance\n        : instance.popper === (excludedReferenceOrInstance as Instance).popper;\n    }\n\n    if (!isExcluded) {\n      const originalDuration = instance.props.duration;\n\n      instance.setProps({duration});\n      instance.hide();\n\n      if (!instance.state.isDestroyed) {\n        instance.setProps({duration: originalDuration});\n      }\n    }\n  });\n};\n","import tippy from '..';\nimport {div} from '../dom-utils';\nimport {\n  CreateSingleton,\n  Plugin,\n  CreateSingletonProps,\n  ReferenceElement,\n  CreateSingletonInstance,\n  Instance,\n  Props,\n} from '../types';\nimport {normalizeToArray, removeProperties} from '../utils';\nimport {errorWhen} from '../validation';\nimport {applyStyles, Modifier} from '@popperjs/core';\n\n// The default `applyStyles` modifier has a cleanup function that gets called\n// every time the popper is destroyed (i.e. a new target), removing the styles\n// and causing transitions to break for singletons when the console is open, but\n// most notably for non-transform styles being used, `gpuAcceleration: false`.\nconst applyStylesModifier: Modifier<'applyStyles', Record<string, unknown>> = {\n  ...applyStyles,\n  effect({state}) {\n    const initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0',\n      },\n      arrow: {\n        position: 'absolute',\n      },\n      reference: {},\n    };\n\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    // intentionally return no cleanup function\n    // return () => { ... }\n  },\n};\n\nconst createSingleton: CreateSingleton = (\n  tippyInstances,\n  optionalProps = {}\n) => {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    errorWhen(\n      !Array.isArray(tippyInstances),\n      [\n        'The first argument passed to createSingleton() must be an array of',\n        'tippy instances. The passed value was',\n        String(tippyInstances),\n      ].join(' ')\n    );\n  }\n\n  let individualInstances = tippyInstances;\n  let references: Array<ReferenceElement> = [];\n  let triggerTargets: Array<Element> = [];\n  let currentTarget: Element | null;\n  let overrides = optionalProps.overrides;\n  let interceptSetPropsCleanups: Array<() => void> = [];\n  let shownOnCreate = false;\n\n  function setTriggerTargets(): void {\n    triggerTargets = individualInstances\n      .map((instance) =>\n        normalizeToArray(instance.props.triggerTarget || instance.reference)\n      )\n      .reduce((acc, item) => acc.concat(item), []);\n  }\n\n  function setReferences(): void {\n    references = individualInstances.map((instance) => instance.reference);\n  }\n\n  function enableInstances(isEnabled: boolean): void {\n    individualInstances.forEach((instance) => {\n      if (isEnabled) {\n        instance.enable();\n      } else {\n        instance.disable();\n      }\n    });\n  }\n\n  function interceptSetProps(singleton: Instance): Array<() => void> {\n    return individualInstances.map((instance) => {\n      const originalSetProps = instance.setProps;\n\n      instance.setProps = (props): void => {\n        originalSetProps(props);\n\n        if (instance.reference === currentTarget) {\n          singleton.setProps(props);\n        }\n      };\n\n      return (): void => {\n        instance.setProps = originalSetProps;\n      };\n    });\n  }\n\n  // have to pass singleton, as it maybe undefined on first call\n  function prepareInstance(\n    singleton: Instance,\n    target: ReferenceElement\n  ): void {\n    const index = triggerTargets.indexOf(target);\n\n    // bail-out\n    if (target === currentTarget) {\n      return;\n    }\n\n    currentTarget = target;\n\n    const overrideProps: Partial<Props> = (overrides || [])\n      .concat('content')\n      .reduce((acc, prop) => {\n        (acc as any)[prop] = individualInstances[index].props[prop];\n        return acc;\n      }, {});\n\n    singleton.setProps({\n      ...overrideProps,\n      getReferenceClientRect:\n        typeof overrideProps.getReferenceClientRect === 'function'\n          ? overrideProps.getReferenceClientRect\n          : (): ClientRect => references[index]?.getBoundingClientRect(),\n    });\n  }\n\n  enableInstances(false);\n  setReferences();\n  setTriggerTargets();\n\n  const plugin: Plugin = {\n    fn() {\n      return {\n        onDestroy(): void {\n          enableInstances(true);\n        },\n        onHidden(): void {\n          currentTarget = null;\n        },\n        onClickOutside(instance): void {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            currentTarget = null;\n          }\n        },\n        onShow(instance): void {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            prepareInstance(instance, references[0]);\n          }\n        },\n        onTrigger(instance, event): void {\n          prepareInstance(instance, event.currentTarget as Element);\n        },\n      };\n    },\n  };\n\n  const singleton = tippy(div(), {\n    ...removeProperties(optionalProps, ['overrides']),\n    plugins: [plugin, ...(optionalProps.plugins || [])],\n    triggerTarget: triggerTargets,\n    popperOptions: {\n      ...optionalProps.popperOptions,\n      modifiers: [\n        ...(optionalProps.popperOptions?.modifiers || []),\n        applyStylesModifier,\n      ],\n    },\n  }) as CreateSingletonInstance<CreateSingletonProps>;\n\n  const originalShow = singleton.show;\n\n  singleton.show = (target?: ReferenceElement | Instance | number): void => {\n    originalShow();\n\n    // first time, showOnCreate or programmatic call with no params\n    // default to showing first instance\n    if (!currentTarget && target == null) {\n      return prepareInstance(singleton, references[0]);\n    }\n\n    // triggered from event (do nothing as prepareInstance already called by onTrigger)\n    // programmatic call with no params when already visible (do nothing again)\n    if (currentTarget && target == null) {\n      return;\n    }\n\n    // target is index of instance\n    if (typeof target === 'number') {\n      return (\n        references[target] && prepareInstance(singleton, references[target])\n      );\n    }\n\n    // target is a child tippy instance\n    if (individualInstances.indexOf(target as Instance) >= 0) {\n      const ref = (target as Instance).reference;\n      return prepareInstance(singleton, ref);\n    }\n\n    // target is a ReferenceElement\n    if (references.indexOf(target as ReferenceElement) >= 0) {\n      return prepareInstance(singleton, target as ReferenceElement);\n    }\n  };\n\n  singleton.showNext = (): void => {\n    const first = references[0];\n    if (!currentTarget) {\n      return singleton.show(0);\n    }\n    const index = references.indexOf(currentTarget);\n    singleton.show(references[index + 1] || first);\n  };\n\n  singleton.showPrevious = (): void => {\n    const last = references[references.length - 1];\n    if (!currentTarget) {\n      return singleton.show(last);\n    }\n    const index = references.indexOf(currentTarget);\n    const target = references[index - 1] || last;\n    singleton.show(target);\n  };\n\n  const originalSetProps = singleton.setProps;\n\n  singleton.setProps = (props): void => {\n    overrides = props.overrides || overrides;\n    originalSetProps(props);\n  };\n\n  singleton.setInstances = (nextInstances): void => {\n    enableInstances(true);\n    interceptSetPropsCleanups.forEach((fn) => fn());\n\n    individualInstances = nextInstances;\n\n    enableInstances(false);\n    setReferences();\n    setTriggerTargets();\n    interceptSetPropsCleanups = interceptSetProps(singleton);\n\n    singleton.setProps({triggerTarget: triggerTargets});\n  };\n\n  interceptSetPropsCleanups = interceptSetProps(singleton);\n\n  return singleton;\n};\n\nexport default createSingleton;\n","import tippy from '..';\nimport {TOUCH_OPTIONS} from '../constants';\nimport {defaultProps} from '../props';\nimport {Instance, Props, Targets} from '../types';\nimport {ListenerObject} from '../types-internal';\nimport {normalizeToArray, removeProperties} from '../utils';\nimport {errorWhen} from '../validation';\n\nconst BUBBLING_EVENTS_MAP = {\n  mouseover: 'mouseenter',\n  focusin: 'focus',\n  click: 'click',\n};\n\n/**\n * Creates a delegate instance that controls the creation of tippy instances\n * for child elements (`target` CSS selector).\n */\nfunction delegate(\n  targets: Targets,\n  props: Partial<Props> & {target: string}\n): Instance | Instance[] {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    errorWhen(\n      !(props && props.target),\n      [\n        'You must specity a `target` prop indicating a CSS selector string matching',\n        'the target elements that should receive a tippy.',\n      ].join(' ')\n    );\n  }\n\n  let listeners: ListenerObject[] = [];\n  let childTippyInstances: Instance[] = [];\n  let disabled = false;\n\n  const {target} = props;\n\n  const nativeProps = removeProperties(props, ['target']);\n  const parentProps = {...nativeProps, trigger: 'manual', touch: false};\n  const childProps = {\n    touch: defaultProps.touch,\n    ...nativeProps,\n    showOnCreate: true,\n  };\n\n  const returnValue = tippy(targets, parentProps);\n  const normalizedReturnValue = normalizeToArray(returnValue);\n\n  function onTrigger(event: Event): void {\n    if (!event.target || disabled) {\n      return;\n    }\n\n    const targetNode = (event.target as Element).closest(target);\n\n    if (!targetNode) {\n      return;\n    }\n\n    // Get relevant trigger with fallbacks:\n    // 1. Check `data-tippy-trigger` attribute on target node\n    // 2. Fallback to `trigger` passed to `delegate()`\n    // 3. Fallback to `defaultProps.trigger`\n    const trigger =\n      targetNode.getAttribute('data-tippy-trigger') ||\n      props.trigger ||\n      defaultProps.trigger;\n\n    // @ts-ignore\n    if (targetNode._tippy) {\n      return;\n    }\n\n    if (event.type === 'touchstart' && typeof childProps.touch === 'boolean') {\n      return;\n    }\n\n    if (\n      event.type !== 'touchstart' &&\n      trigger.indexOf((BUBBLING_EVENTS_MAP as any)[event.type]) < 0\n    ) {\n      return;\n    }\n\n    const instance = tippy(targetNode, childProps);\n\n    if (instance) {\n      childTippyInstances = childTippyInstances.concat(instance);\n    }\n  }\n\n  function on(\n    node: Element,\n    eventType: string,\n    handler: EventListener,\n    options: boolean | Record<string, unknown> = false\n  ): void {\n    node.addEventListener(eventType, handler, options);\n    listeners.push({node, eventType, handler, options});\n  }\n\n  function addEventListeners(instance: Instance): void {\n    const {reference} = instance;\n\n    on(reference, 'touchstart', onTrigger, TOUCH_OPTIONS);\n    on(reference, 'mouseover', onTrigger);\n    on(reference, 'focusin', onTrigger);\n    on(reference, 'click', onTrigger);\n  }\n\n  function removeEventListeners(): void {\n    listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function applyMutations(instance: Instance): void {\n    const originalDestroy = instance.destroy;\n    const originalEnable = instance.enable;\n    const originalDisable = instance.disable;\n\n    instance.destroy = (shouldDestroyChildInstances = true): void => {\n      if (shouldDestroyChildInstances) {\n        childTippyInstances.forEach((instance) => {\n          instance.destroy();\n        });\n      }\n\n      childTippyInstances = [];\n\n      removeEventListeners();\n      originalDestroy();\n    };\n\n    instance.enable = (): void => {\n      originalEnable();\n      childTippyInstances.forEach((instance) => instance.enable());\n      disabled = false;\n    };\n\n    instance.disable = (): void => {\n      originalDisable();\n      childTippyInstances.forEach((instance) => instance.disable());\n      disabled = true;\n    };\n\n    addEventListeners(instance);\n  }\n\n  normalizedReturnValue.forEach(applyMutations);\n\n  return returnValue;\n}\n\nexport default delegate;\n","import {BACKDROP_CLASS} from '../constants';\nimport {div, setVisibilityState} from '../dom-utils';\nimport {getChildren} from '../template';\nimport {AnimateFill} from '../types';\nimport {errorWhen} from '../validation';\n\nconst animateFill: AnimateFill = {\n  name: 'animateFill',\n  defaultValue: false,\n  fn(instance) {\n    // @ts-ignore\n    if (!instance.props.render?.$$tippy) {\n      if (__DEV__) {\n        errorWhen(\n          instance.props.animateFill,\n          'The `animateFill` plugin requires the default render function.'\n        );\n      }\n\n      return {};\n    }\n\n    const {box, content} = getChildren(instance.popper);\n\n    const backdrop = instance.props.animateFill\n      ? createBackdropElement()\n      : null;\n\n    return {\n      onCreate(): void {\n        if (backdrop) {\n          box.insertBefore(backdrop, box.firstElementChild!);\n          box.setAttribute('data-animatefill', '');\n          box.style.overflow = 'hidden';\n\n          instance.setProps({arrow: false, animation: 'shift-away'});\n        }\n      },\n      onMount(): void {\n        if (backdrop) {\n          const {transitionDuration} = box.style;\n          const duration = Number(transitionDuration.replace('ms', ''));\n\n          // The content should fade in after the backdrop has mostly filled the\n          // tooltip element. `clip-path` is the other alternative but is not\n          // well-supported and is buggy on some devices.\n          content.style.transitionDelay = `${Math.round(duration / 10)}ms`;\n\n          backdrop.style.transitionDuration = transitionDuration;\n          setVisibilityState([backdrop], 'visible');\n        }\n      },\n      onShow(): void {\n        if (backdrop) {\n          backdrop.style.transitionDuration = '0ms';\n        }\n      },\n      onHide(): void {\n        if (backdrop) {\n          setVisibilityState([backdrop], 'hidden');\n        }\n      },\n    };\n  },\n};\n\nexport default animateFill;\n\nfunction createBackdropElement(): HTMLDivElement {\n  const backdrop = div();\n  backdrop.className = BACKDROP_CLASS;\n  setVisibilityState([backdrop], 'hidden');\n  return backdrop;\n}\n","import {getOwnerDocument, isMouseEvent} from '../dom-utils';\nimport {FollowCursor, Instance} from '../types';\n\nlet mouseCoords = {clientX: 0, clientY: 0};\nlet activeInstances: Array<{instance: Instance; doc: Document}> = [];\n\nfunction storeMouseCoords({clientX, clientY}: MouseEvent): void {\n  mouseCoords = {clientX, clientY};\n}\n\nfunction addMouseCoordsListener(doc: Document): void {\n  doc.addEventListener('mousemove', storeMouseCoords);\n}\n\nfunction removeMouseCoordsListener(doc: Document): void {\n  doc.removeEventListener('mousemove', storeMouseCoords);\n}\n\nconst followCursor: FollowCursor = {\n  name: 'followCursor',\n  defaultValue: false,\n  fn(instance) {\n    const reference = instance.reference;\n    const doc = getOwnerDocument(instance.props.triggerTarget || reference);\n\n    let isInternalUpdate = false;\n    let wasFocusEvent = false;\n    let isUnmounted = true;\n    let prevProps = instance.props;\n\n    function getIsInitialBehavior(): boolean {\n      return (\n        instance.props.followCursor === 'initial' && instance.state.isVisible\n      );\n    }\n\n    function addListener(): void {\n      doc.addEventListener('mousemove', onMouseMove);\n    }\n\n    function removeListener(): void {\n      doc.removeEventListener('mousemove', onMouseMove);\n    }\n\n    function unsetGetReferenceClientRect(): void {\n      isInternalUpdate = true;\n      instance.setProps({getReferenceClientRect: null});\n      isInternalUpdate = false;\n    }\n\n    function onMouseMove(event: MouseEvent): void {\n      // If the instance is interactive, avoid updating the position unless it's\n      // over the reference element\n      const isCursorOverReference = event.target\n        ? reference.contains(event.target as Node)\n        : true;\n      const {followCursor} = instance.props;\n      const {clientX, clientY} = event;\n\n      const rect = reference.getBoundingClientRect();\n      const relativeX = clientX - rect.left;\n      const relativeY = clientY - rect.top;\n\n      if (isCursorOverReference || !instance.props.interactive) {\n        instance.setProps({\n          // @ts-ignore - unneeded DOMRect properties\n          getReferenceClientRect() {\n            const rect = reference.getBoundingClientRect();\n\n            let x = clientX;\n            let y = clientY;\n\n            if (followCursor === 'initial') {\n              x = rect.left + relativeX;\n              y = rect.top + relativeY;\n            }\n\n            const top = followCursor === 'horizontal' ? rect.top : y;\n            const right = followCursor === 'vertical' ? rect.right : x;\n            const bottom = followCursor === 'horizontal' ? rect.bottom : y;\n            const left = followCursor === 'vertical' ? rect.left : x;\n\n            return {\n              width: right - left,\n              height: bottom - top,\n              top,\n              right,\n              bottom,\n              left,\n            };\n          },\n        });\n      }\n    }\n\n    function create(): void {\n      if (instance.props.followCursor) {\n        activeInstances.push({instance, doc});\n        addMouseCoordsListener(doc);\n      }\n    }\n\n    function destroy(): void {\n      activeInstances = activeInstances.filter(\n        (data) => data.instance !== instance\n      );\n\n      if (activeInstances.filter((data) => data.doc === doc).length === 0) {\n        removeMouseCoordsListener(doc);\n      }\n    }\n\n    return {\n      onCreate: create,\n      onDestroy: destroy,\n      onBeforeUpdate(): void {\n        prevProps = instance.props;\n      },\n      onAfterUpdate(_, {followCursor}): void {\n        if (isInternalUpdate) {\n          return;\n        }\n\n        if (\n          followCursor !== undefined &&\n          prevProps.followCursor !== followCursor\n        ) {\n          destroy();\n\n          if (followCursor) {\n            create();\n\n            if (\n              instance.state.isMounted &&\n              !wasFocusEvent &&\n              !getIsInitialBehavior()\n            ) {\n              addListener();\n            }\n          } else {\n            removeListener();\n            unsetGetReferenceClientRect();\n          }\n        }\n      },\n      onMount(): void {\n        if (instance.props.followCursor && !wasFocusEvent) {\n          if (isUnmounted) {\n            onMouseMove(mouseCoords as MouseEvent);\n            isUnmounted = false;\n          }\n\n          if (!getIsInitialBehavior()) {\n            addListener();\n          }\n        }\n      },\n      onTrigger(_, event): void {\n        if (isMouseEvent(event)) {\n          mouseCoords = {clientX: event.clientX, clientY: event.clientY};\n        }\n        wasFocusEvent = event.type === 'focus';\n      },\n      onHidden(): void {\n        if (instance.props.followCursor) {\n          unsetGetReferenceClientRect();\n          removeListener();\n          isUnmounted = true;\n        }\n      },\n    };\n  },\n};\n\nexport default followCursor;\n","import {Modifier, Placement} from '@popperjs/core';\nimport {isMouseEvent} from '../dom-utils';\nimport {BasePlacement, InlinePositioning, Props} from '../types';\nimport {arrayFrom, getBasePlacement} from '../utils';\n\nfunction getProps(props: Props, modifier: Modifier<any, any>): Partial<Props> {\n  return {\n    popperOptions: {\n      ...props.popperOptions,\n      modifiers: [\n        ...(props.popperOptions?.modifiers || []).filter(\n          ({name}) => name !== modifier.name\n        ),\n        modifier,\n      ],\n    },\n  };\n}\n\nconst inlinePositioning: InlinePositioning = {\n  name: 'inlinePositioning',\n  defaultValue: false,\n  fn(instance) {\n    const {reference} = instance;\n\n    function isEnabled(): boolean {\n      return !!instance.props.inlinePositioning;\n    }\n\n    let placement: Placement;\n    let cursorRectIndex = -1;\n    let isInternalUpdate = false;\n    let triedPlacements: Array<string> = [];\n\n    const modifier: Modifier<\n      'tippyInlinePositioning',\n      Record<string, unknown>\n    > = {\n      name: 'tippyInlinePositioning',\n      enabled: true,\n      phase: 'afterWrite',\n      fn({state}) {\n        if (isEnabled()) {\n          if (triedPlacements.indexOf(state.placement) !== -1) {\n            triedPlacements = [];\n          }\n\n          if (\n            placement !== state.placement &&\n            triedPlacements.indexOf(state.placement) === -1\n          ) {\n            triedPlacements.push(state.placement);\n            instance.setProps({\n              // @ts-ignore - unneeded DOMRect properties\n              getReferenceClientRect: () =>\n                getReferenceClientRect(state.placement),\n            });\n          }\n\n          placement = state.placement;\n        }\n      },\n    };\n\n    function getReferenceClientRect(placement: Placement): Partial<DOMRect> {\n      return getInlineBoundingClientRect(\n        getBasePlacement(placement),\n        reference.getBoundingClientRect(),\n        arrayFrom(reference.getClientRects()),\n        cursorRectIndex\n      );\n    }\n\n    function setInternalProps(partialProps: Partial<Props>): void {\n      isInternalUpdate = true;\n      instance.setProps(partialProps);\n      isInternalUpdate = false;\n    }\n\n    function addModifier(): void {\n      if (!isInternalUpdate) {\n        setInternalProps(getProps(instance.props, modifier));\n      }\n    }\n\n    return {\n      onCreate: addModifier,\n      onAfterUpdate: addModifier,\n      onTrigger(_, event): void {\n        if (isMouseEvent(event)) {\n          const rects = arrayFrom(instance.reference.getClientRects());\n          const cursorRect = rects.find(\n            (rect) =>\n              rect.left - 2 <= event.clientX &&\n              rect.right + 2 >= event.clientX &&\n              rect.top - 2 <= event.clientY &&\n              rect.bottom + 2 >= event.clientY\n          );\n          const index = rects.indexOf(cursorRect);\n          cursorRectIndex = index > -1 ? index : cursorRectIndex;\n        }\n      },\n      onHidden(): void {\n        cursorRectIndex = -1;\n      },\n    };\n  },\n};\n\nexport default inlinePositioning;\n\nexport function getInlineBoundingClientRect(\n  currentBasePlacement: BasePlacement | null,\n  boundingRect: DOMRect,\n  clientRects: DOMRect[],\n  cursorRectIndex: number\n): {\n  top: number;\n  bottom: number;\n  left: number;\n  right: number;\n  width: number;\n  height: number;\n} {\n  // Not an inline element, or placement is not yet known\n  if (clientRects.length < 2 || currentBasePlacement === null) {\n    return boundingRect;\n  }\n\n  // There are two rects and they are disjoined\n  if (\n    clientRects.length === 2 &&\n    cursorRectIndex >= 0 &&\n    clientRects[0].left > clientRects[1].right\n  ) {\n    return clientRects[cursorRectIndex] || boundingRect;\n  }\n\n  switch (currentBasePlacement) {\n    case 'top':\n    case 'bottom': {\n      const firstRect = clientRects[0];\n      const lastRect = clientRects[clientRects.length - 1];\n      const isTop = currentBasePlacement === 'top';\n\n      const top = firstRect.top;\n      const bottom = lastRect.bottom;\n      const left = isTop ? firstRect.left : lastRect.left;\n      const right = isTop ? firstRect.right : lastRect.right;\n      const width = right - left;\n      const height = bottom - top;\n\n      return {top, bottom, left, right, width, height};\n    }\n    case 'left':\n    case 'right': {\n      const minLeft = Math.min(...clientRects.map((rects) => rects.left));\n      const maxRight = Math.max(...clientRects.map((rects) => rects.right));\n      const measureRects = clientRects.filter((rect) =>\n        currentBasePlacement === 'left'\n          ? rect.left === minLeft\n          : rect.right === maxRight\n      );\n\n      const top = measureRects[0].top;\n      const bottom = measureRects[measureRects.length - 1].bottom;\n      const left = minLeft;\n      const right = maxRight;\n      const width = right - left;\n      const height = bottom - top;\n\n      return {top, bottom, left, right, width, height};\n    }\n    default: {\n      return boundingRect;\n    }\n  }\n}\n","import {VirtualElement} from '@popperjs/core';\nimport {ReferenceElement, Sticky} from '../types';\n\nconst sticky: Sticky = {\n  name: 'sticky',\n  defaultValue: false,\n  fn(instance) {\n    const {reference, popper} = instance;\n\n    function getReference(): ReferenceElement | VirtualElement {\n      return instance.popperInstance\n        ? instance.popperInstance.state.elements.reference\n        : reference;\n    }\n\n    function shouldCheck(value: 'reference' | 'popper'): boolean {\n      return instance.props.sticky === true || instance.props.sticky === value;\n    }\n\n    let prevRefRect: ClientRect | null = null;\n    let prevPopRect: ClientRect | null = null;\n\n    function updatePosition(): void {\n      const currentRefRect = shouldCheck('reference')\n        ? getReference().getBoundingClientRect()\n        : null;\n      const currentPopRect = shouldCheck('popper')\n        ? popper.getBoundingClientRect()\n        : null;\n\n      if (\n        (currentRefRect && areRectsDifferent(prevRefRect, currentRefRect)) ||\n        (currentPopRect && areRectsDifferent(prevPopRect, currentPopRect))\n      ) {\n        if (instance.popperInstance) {\n          instance.popperInstance.update();\n        }\n      }\n\n      prevRefRect = currentRefRect;\n      prevPopRect = currentPopRect;\n\n      if (instance.state.isMounted) {\n        requestAnimationFrame(updatePosition);\n      }\n    }\n\n    return {\n      onMount(): void {\n        if (instance.props.sticky) {\n          updatePosition();\n        }\n      },\n    };\n  },\n};\n\nexport default sticky;\n\nfunction areRectsDifferent(\n  rectA: ClientRect | null,\n  rectB: ClientRect | null\n): boolean {\n  if (rectA && rectB) {\n    return (\n      rectA.top !== rectB.top ||\n      rectA.right !== rectB.right ||\n      rectA.bottom !== rectB.bottom ||\n      rectA.left !== rectB.left\n    );\n  }\n\n  return true;\n}\n","import tippy from '../src';\nimport {render} from '../src/template';\n\ntippy.setDefaultProps({render});\n\nexport {default, hideAll} from '../src';\nexport {default as createSingleton} from '../src/addons/createSingleton';\nexport {default as delegate} from '../src/addons/delegate';\nexport {default as animateFill} from '../src/plugins/animateFill';\nexport {default as followCursor} from '../src/plugins/followCursor';\nexport {default as inlinePositioning} from '../src/plugins/inlinePositioning';\nexport {default as sticky} from '../src/plugins/sticky';\nexport {ROUND_ARROW as roundArrow} from '../src/constants';\n","var createElement = require(\"./vdom/create-element.js\")\n\nmodule.exports = createElement\n","var diff = require(\"./vtree/diff.js\")\n\nmodule.exports = diff\n","var h = require(\"./virtual-hyperscript/index.js\")\n\nmodule.exports = h\n","var diff = require(\"./diff.js\")\r\nvar patch = require(\"./patch.js\")\r\nvar h = require(\"./h.js\")\r\nvar create = require(\"./create-element.js\")\r\nvar VNode = require('./vnode/vnode.js')\r\nvar VText = require('./vnode/vtext.js')\r\n\r\nmodule.exports = {\r\n    diff: diff,\r\n    patch: patch,\r\n    h: h,\r\n    create: create,\r\n    VNode: VNode,\r\n    VText: VText\r\n}\r\n","var patch = require(\"./vdom/patch.js\")\n\nmodule.exports = patch\n","var isObject = require(\"is-object\")\nvar isHook = require(\"../vnode/is-vhook.js\")\n\nmodule.exports = applyProperties\n\nfunction applyProperties(node, props, previous) {\n    for (var propName in props) {\n        var propValue = props[propName]\n\n        if (propValue === undefined) {\n            removeProperty(node, propName, propValue, previous);\n        } else if (isHook(propValue)) {\n            removeProperty(node, propName, propValue, previous)\n            if (propValue.hook) {\n                propValue.hook(node,\n                    propName,\n                    previous ? previous[propName] : undefined)\n            }\n        } else {\n            if (isObject(propValue)) {\n                patchObject(node, props, previous, propName, propValue);\n            } else {\n                node[propName] = propValue\n            }\n        }\n    }\n}\n\nfunction removeProperty(node, propName, propValue, previous) {\n    if (previous) {\n        var previousValue = previous[propName]\n\n        if (!isHook(previousValue)) {\n            if (propName === \"attributes\") {\n                for (var attrName in previousValue) {\n                    node.removeAttribute(attrName)\n                }\n            } else if (propName === \"style\") {\n                for (var i in previousValue) {\n                    node.style[i] = \"\"\n                }\n            } else if (typeof previousValue === \"string\") {\n                node[propName] = \"\"\n            } else {\n                node[propName] = null\n            }\n        } else if (previousValue.unhook) {\n            previousValue.unhook(node, propName, propValue)\n        }\n    }\n}\n\nfunction patchObject(node, props, previous, propName, propValue) {\n    var previousValue = previous ? previous[propName] : undefined\n\n    // Set attributes\n    if (propName === \"attributes\") {\n        for (var attrName in propValue) {\n            var attrValue = propValue[attrName]\n\n            if (attrValue === undefined) {\n                node.removeAttribute(attrName)\n            } else {\n                node.setAttribute(attrName, attrValue)\n            }\n        }\n\n        return\n    }\n\n    if(previousValue && isObject(previousValue) &&\n        getPrototype(previousValue) !== getPrototype(propValue)) {\n        node[propName] = propValue\n        return\n    }\n\n    if (!isObject(node[propName])) {\n        node[propName] = {}\n    }\n\n    var replacer = propName === \"style\" ? \"\" : undefined\n\n    for (var k in propValue) {\n        var value = propValue[k]\n        node[propName][k] = (value === undefined) ? replacer : value\n    }\n}\n\nfunction getPrototype(value) {\n    if (Object.getPrototypeOf) {\n        return Object.getPrototypeOf(value)\n    } else if (value.__proto__) {\n        return value.__proto__\n    } else if (value.constructor) {\n        return value.constructor.prototype\n    }\n}\n","var document = require(\"global/document\")\n\nvar applyProperties = require(\"./apply-properties\")\n\nvar isVNode = require(\"../vnode/is-vnode.js\")\nvar isVText = require(\"../vnode/is-vtext.js\")\nvar isWidget = require(\"../vnode/is-widget.js\")\nvar handleThunk = require(\"../vnode/handle-thunk.js\")\n\nmodule.exports = createElement\n\nfunction createElement(vnode, opts) {\n    var doc = opts ? opts.document || document : document\n    var warn = opts ? opts.warn : null\n\n    vnode = handleThunk(vnode).a\n\n    if (isWidget(vnode)) {\n        return vnode.init()\n    } else if (isVText(vnode)) {\n        return doc.createTextNode(vnode.text)\n    } else if (!isVNode(vnode)) {\n        if (warn) {\n            warn(\"Item is not a valid virtual dom node\", vnode)\n        }\n        return null\n    }\n\n    var node = (vnode.namespace === null) ?\n        doc.createElement(vnode.tagName) :\n        doc.createElementNS(vnode.namespace, vnode.tagName)\n\n    var props = vnode.properties\n    applyProperties(node, props)\n\n    var children = vnode.children\n\n    for (var i = 0; i < children.length; i++) {\n        var childNode = createElement(children[i], opts)\n        if (childNode) {\n            node.appendChild(childNode)\n        }\n    }\n\n    return node\n}\n","// Maps a virtual DOM tree onto a real DOM tree in an efficient manner.\n// We don't want to read all of the DOM nodes in the tree so we use\n// the in-order tree indexing to eliminate recursion down certain branches.\n// We only recurse into a DOM node if we know that it contains a child of\n// interest.\n\nvar noChild = {}\n\nmodule.exports = domIndex\n\nfunction domIndex(rootNode, tree, indices, nodes) {\n    if (!indices || indices.length === 0) {\n        return {}\n    } else {\n        indices.sort(ascending)\n        return recurse(rootNode, tree, indices, nodes, 0)\n    }\n}\n\nfunction recurse(rootNode, tree, indices, nodes, rootIndex) {\n    nodes = nodes || {}\n\n\n    if (rootNode) {\n        if (indexInRange(indices, rootIndex, rootIndex)) {\n            nodes[rootIndex] = rootNode\n        }\n\n        var vChildren = tree.children\n\n        if (vChildren) {\n\n            var childNodes = rootNode.childNodes\n\n            for (var i = 0; i < tree.children.length; i++) {\n                rootIndex += 1\n\n                var vChild = vChildren[i] || noChild\n                var nextIndex = rootIndex + (vChild.count || 0)\n\n                // skip recursion down the tree if there are no nodes down here\n                if (indexInRange(indices, rootIndex, nextIndex)) {\n                    recurse(childNodes[i], vChild, indices, nodes, rootIndex)\n                }\n\n                rootIndex = nextIndex\n            }\n        }\n    }\n\n    return nodes\n}\n\n// Binary search for an index in the interval [left, right]\nfunction indexInRange(indices, left, right) {\n    if (indices.length === 0) {\n        return false\n    }\n\n    var minIndex = 0\n    var maxIndex = indices.length - 1\n    var currentIndex\n    var currentItem\n\n    while (minIndex <= maxIndex) {\n        currentIndex = ((maxIndex + minIndex) / 2) >> 0\n        currentItem = indices[currentIndex]\n\n        if (minIndex === maxIndex) {\n            return currentItem >= left && currentItem <= right\n        } else if (currentItem < left) {\n            minIndex = currentIndex + 1\n        } else  if (currentItem > right) {\n            maxIndex = currentIndex - 1\n        } else {\n            return true\n        }\n    }\n\n    return false;\n}\n\nfunction ascending(a, b) {\n    return a > b ? 1 : -1\n}\n","var applyProperties = require(\"./apply-properties\")\n\nvar isWidget = require(\"../vnode/is-widget.js\")\nvar VPatch = require(\"../vnode/vpatch.js\")\n\nvar updateWidget = require(\"./update-widget\")\n\nmodule.exports = applyPatch\n\nfunction applyPatch(vpatch, domNode, renderOptions) {\n    var type = vpatch.type\n    var vNode = vpatch.vNode\n    var patch = vpatch.patch\n\n    switch (type) {\n        case VPatch.REMOVE:\n            return removeNode(domNode, vNode)\n        case VPatch.INSERT:\n            return insertNode(domNode, patch, renderOptions)\n        case VPatch.VTEXT:\n            return stringPatch(domNode, vNode, patch, renderOptions)\n        case VPatch.WIDGET:\n            return widgetPatch(domNode, vNode, patch, renderOptions)\n        case VPatch.VNODE:\n            return vNodePatch(domNode, vNode, patch, renderOptions)\n        case VPatch.ORDER:\n            reorderChildren(domNode, patch)\n            return domNode\n        case VPatch.PROPS:\n            applyProperties(domNode, patch, vNode.properties)\n            return domNode\n        case VPatch.THUNK:\n            return replaceRoot(domNode,\n                renderOptions.patch(domNode, patch, renderOptions))\n        default:\n            return domNode\n    }\n}\n\nfunction removeNode(domNode, vNode) {\n    var parentNode = domNode.parentNode\n\n    if (parentNode) {\n        parentNode.removeChild(domNode)\n    }\n\n    destroyWidget(domNode, vNode);\n\n    return null\n}\n\nfunction insertNode(parentNode, vNode, renderOptions) {\n    var newNode = renderOptions.render(vNode, renderOptions)\n\n    if (parentNode) {\n        parentNode.appendChild(newNode)\n    }\n\n    return parentNode\n}\n\nfunction stringPatch(domNode, leftVNode, vText, renderOptions) {\n    var newNode\n\n    if (domNode.nodeType === 3) {\n        domNode.replaceData(0, domNode.length, vText.text)\n        newNode = domNode\n    } else {\n        var parentNode = domNode.parentNode\n        newNode = renderOptions.render(vText, renderOptions)\n\n        if (parentNode && newNode !== domNode) {\n            parentNode.replaceChild(newNode, domNode)\n        }\n    }\n\n    return newNode\n}\n\nfunction widgetPatch(domNode, leftVNode, widget, renderOptions) {\n    var updating = updateWidget(leftVNode, widget)\n    var newNode\n\n    if (updating) {\n        newNode = widget.update(leftVNode, domNode) || domNode\n    } else {\n        newNode = renderOptions.render(widget, renderOptions)\n    }\n\n    var parentNode = domNode.parentNode\n\n    if (parentNode && newNode !== domNode) {\n        parentNode.replaceChild(newNode, domNode)\n    }\n\n    if (!updating) {\n        destroyWidget(domNode, leftVNode)\n    }\n\n    return newNode\n}\n\nfunction vNodePatch(domNode, leftVNode, vNode, renderOptions) {\n    var parentNode = domNode.parentNode\n    var newNode = renderOptions.render(vNode, renderOptions)\n\n    if (parentNode && newNode !== domNode) {\n        parentNode.replaceChild(newNode, domNode)\n    }\n\n    return newNode\n}\n\nfunction destroyWidget(domNode, w) {\n    if (typeof w.destroy === \"function\" && isWidget(w)) {\n        w.destroy(domNode)\n    }\n}\n\nfunction reorderChildren(domNode, moves) {\n    var childNodes = domNode.childNodes\n    var keyMap = {}\n    var node\n    var remove\n    var insert\n\n    for (var i = 0; i < moves.removes.length; i++) {\n        remove = moves.removes[i]\n        node = childNodes[remove.from]\n        if (remove.key) {\n            keyMap[remove.key] = node\n        }\n        domNode.removeChild(node)\n    }\n\n    var length = childNodes.length\n    for (var j = 0; j < moves.inserts.length; j++) {\n        insert = moves.inserts[j]\n        node = keyMap[insert.key]\n        // this is the weirdest bug i've ever seen in webkit\n        domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to])\n    }\n}\n\nfunction replaceRoot(oldRoot, newRoot) {\n    if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) {\n        oldRoot.parentNode.replaceChild(newRoot, oldRoot)\n    }\n\n    return newRoot;\n}\n","var document = require(\"global/document\")\nvar isArray = require(\"x-is-array\")\n\nvar render = require(\"./create-element\")\nvar domIndex = require(\"./dom-index\")\nvar patchOp = require(\"./patch-op\")\nmodule.exports = patch\n\nfunction patch(rootNode, patches, renderOptions) {\n    renderOptions = renderOptions || {}\n    renderOptions.patch = renderOptions.patch && renderOptions.patch !== patch\n        ? renderOptions.patch\n        : patchRecursive\n    renderOptions.render = renderOptions.render || render\n\n    return renderOptions.patch(rootNode, patches, renderOptions)\n}\n\nfunction patchRecursive(rootNode, patches, renderOptions) {\n    var indices = patchIndices(patches)\n\n    if (indices.length === 0) {\n        return rootNode\n    }\n\n    var index = domIndex(rootNode, patches.a, indices)\n    var ownerDocument = rootNode.ownerDocument\n\n    if (!renderOptions.document && ownerDocument !== document) {\n        renderOptions.document = ownerDocument\n    }\n\n    for (var i = 0; i < indices.length; i++) {\n        var nodeIndex = indices[i]\n        rootNode = applyPatch(rootNode,\n            index[nodeIndex],\n            patches[nodeIndex],\n            renderOptions)\n    }\n\n    return rootNode\n}\n\nfunction applyPatch(rootNode, domNode, patchList, renderOptions) {\n    if (!domNode) {\n        return rootNode\n    }\n\n    var newNode\n\n    if (isArray(patchList)) {\n        for (var i = 0; i < patchList.length; i++) {\n            newNode = patchOp(patchList[i], domNode, renderOptions)\n\n            if (domNode === rootNode) {\n                rootNode = newNode\n            }\n        }\n    } else {\n        newNode = patchOp(patchList, domNode, renderOptions)\n\n        if (domNode === rootNode) {\n            rootNode = newNode\n        }\n    }\n\n    return rootNode\n}\n\nfunction patchIndices(patches) {\n    var indices = []\n\n    for (var key in patches) {\n        if (key !== \"a\") {\n            indices.push(Number(key))\n        }\n    }\n\n    return indices\n}\n","var isWidget = require(\"../vnode/is-widget.js\")\n\nmodule.exports = updateWidget\n\nfunction updateWidget(a, b) {\n    if (isWidget(a) && isWidget(b)) {\n        if (\"name\" in a && \"name\" in b) {\n            return a.id === b.id\n        } else {\n            return a.init === b.init\n        }\n    }\n\n    return false\n}\n","'use strict';\n\nvar EvStore = require('ev-store');\n\nmodule.exports = EvHook;\n\nfunction EvHook(value) {\n    if (!(this instanceof EvHook)) {\n        return new EvHook(value);\n    }\n\n    this.value = value;\n}\n\nEvHook.prototype.hook = function (node, propertyName) {\n    var es = EvStore(node);\n    var propName = propertyName.substr(3);\n\n    es[propName] = this.value;\n};\n\nEvHook.prototype.unhook = function(node, propertyName) {\n    var es = EvStore(node);\n    var propName = propertyName.substr(3);\n\n    es[propName] = undefined;\n};\n","'use strict';\n\nmodule.exports = SoftSetHook;\n\nfunction SoftSetHook(value) {\n    if (!(this instanceof SoftSetHook)) {\n        return new SoftSetHook(value);\n    }\n\n    this.value = value;\n}\n\nSoftSetHook.prototype.hook = function (node, propertyName) {\n    if (node[propertyName] !== this.value) {\n        node[propertyName] = this.value;\n    }\n};\n","'use strict';\n\nvar isArray = require('x-is-array');\n\nvar VNode = require('../vnode/vnode.js');\nvar VText = require('../vnode/vtext.js');\nvar isVNode = require('../vnode/is-vnode');\nvar isVText = require('../vnode/is-vtext');\nvar isWidget = require('../vnode/is-widget');\nvar isHook = require('../vnode/is-vhook');\nvar isVThunk = require('../vnode/is-thunk');\n\nvar parseTag = require('./parse-tag.js');\nvar softSetHook = require('./hooks/soft-set-hook.js');\nvar evHook = require('./hooks/ev-hook.js');\n\nmodule.exports = h;\n\nfunction h(tagName, properties, children) {\n    var childNodes = [];\n    var tag, props, key, namespace;\n\n    if (!children && isChildren(properties)) {\n        children = properties;\n        props = {};\n    }\n\n    props = props || properties || {};\n    tag = parseTag(tagName, props);\n\n    // support keys\n    if (props.hasOwnProperty('key')) {\n        key = props.key;\n        props.key = undefined;\n    }\n\n    // support namespace\n    if (props.hasOwnProperty('namespace')) {\n        namespace = props.namespace;\n        props.namespace = undefined;\n    }\n\n    // fix cursor bug\n    if (tag === 'INPUT' &&\n        !namespace &&\n        props.hasOwnProperty('value') &&\n        props.value !== undefined &&\n        !isHook(props.value)\n    ) {\n        props.value = softSetHook(props.value);\n    }\n\n    transformProperties(props);\n\n    if (children !== undefined && children !== null) {\n        addChild(children, childNodes, tag, props);\n    }\n\n\n    return new VNode(tag, props, childNodes, key, namespace);\n}\n\nfunction addChild(c, childNodes, tag, props) {\n    if (typeof c === 'string') {\n        childNodes.push(new VText(c));\n    } else if (typeof c === 'number') {\n        childNodes.push(new VText(String(c)));\n    } else if (isChild(c)) {\n        childNodes.push(c);\n    } else if (isArray(c)) {\n        for (var i = 0; i < c.length; i++) {\n            addChild(c[i], childNodes, tag, props);\n        }\n    } else if (c === null || c === undefined) {\n        return;\n    } else {\n        throw UnexpectedVirtualElement({\n            foreignObject: c,\n            parentVnode: {\n                tagName: tag,\n                properties: props\n            }\n        });\n    }\n}\n\nfunction transformProperties(props) {\n    for (var propName in props) {\n        if (props.hasOwnProperty(propName)) {\n            var value = props[propName];\n\n            if (isHook(value)) {\n                continue;\n            }\n\n            if (propName.substr(0, 3) === 'ev-') {\n                // add ev-foo support\n                props[propName] = evHook(value);\n            }\n        }\n    }\n}\n\nfunction isChild(x) {\n    return isVNode(x) || isVText(x) || isWidget(x) || isVThunk(x);\n}\n\nfunction isChildren(x) {\n    return typeof x === 'string' || isArray(x) || isChild(x);\n}\n\nfunction UnexpectedVirtualElement(data) {\n    var err = new Error();\n\n    err.type = 'virtual-hyperscript.unexpected.virtual-element';\n    err.message = 'Unexpected virtual child passed to h().\\n' +\n        'Expected a VNode / Vthunk / VWidget / string but:\\n' +\n        'got:\\n' +\n        errorString(data.foreignObject) +\n        '.\\n' +\n        'The parent vnode is:\\n' +\n        errorString(data.parentVnode)\n        '\\n' +\n        'Suggested fix: change your `h(..., [ ... ])` callsite.';\n    err.foreignObject = data.foreignObject;\n    err.parentVnode = data.parentVnode;\n\n    return err;\n}\n\nfunction errorString(obj) {\n    try {\n        return JSON.stringify(obj, null, '    ');\n    } catch (e) {\n        return String(obj);\n    }\n}\n","'use strict';\n\nvar split = require('browser-split');\n\nvar classIdSplit = /([\\.#]?[a-zA-Z0-9\\u007F-\\uFFFF_:-]+)/;\nvar notClassId = /^\\.|#/;\n\nmodule.exports = parseTag;\n\nfunction parseTag(tag, props) {\n    if (!tag) {\n        return 'DIV';\n    }\n\n    var noId = !(props.hasOwnProperty('id'));\n\n    var tagParts = split(tag, classIdSplit);\n    var tagName = null;\n\n    if (notClassId.test(tagParts[1])) {\n        tagName = 'DIV';\n    }\n\n    var classes, part, type, i;\n\n    for (i = 0; i < tagParts.length; i++) {\n        part = tagParts[i];\n\n        if (!part) {\n            continue;\n        }\n\n        type = part.charAt(0);\n\n        if (!tagName) {\n            tagName = part;\n        } else if (type === '.') {\n            classes = classes || [];\n            classes.push(part.substring(1, part.length));\n        } else if (type === '#' && noId) {\n            props.id = part.substring(1, part.length);\n        }\n    }\n\n    if (classes) {\n        if (props.className) {\n            classes.push(props.className);\n        }\n\n        props.className = classes.join(' ');\n    }\n\n    return props.namespace ? tagName : tagName.toUpperCase();\n}\n","var isVNode = require(\"./is-vnode\")\nvar isVText = require(\"./is-vtext\")\nvar isWidget = require(\"./is-widget\")\nvar isThunk = require(\"./is-thunk\")\n\nmodule.exports = handleThunk\n\nfunction handleThunk(a, b) {\n    var renderedA = a\n    var renderedB = b\n\n    if (isThunk(b)) {\n        renderedB = renderThunk(b, a)\n    }\n\n    if (isThunk(a)) {\n        renderedA = renderThunk(a, null)\n    }\n\n    return {\n        a: renderedA,\n        b: renderedB\n    }\n}\n\nfunction renderThunk(thunk, previous) {\n    var renderedThunk = thunk.vnode\n\n    if (!renderedThunk) {\n        renderedThunk = thunk.vnode = thunk.render(previous)\n    }\n\n    if (!(isVNode(renderedThunk) ||\n            isVText(renderedThunk) ||\n            isWidget(renderedThunk))) {\n        throw new Error(\"thunk did not return a valid node\");\n    }\n\n    return renderedThunk\n}\n","module.exports = isThunk\r\n\r\nfunction isThunk(t) {\r\n    return t && t.type === \"Thunk\"\r\n}\r\n","module.exports = isHook\n\nfunction isHook(hook) {\n    return hook &&\n      (typeof hook.hook === \"function\" && !hook.hasOwnProperty(\"hook\") ||\n       typeof hook.unhook === \"function\" && !hook.hasOwnProperty(\"unhook\"))\n}\n","var version = require(\"./version\")\n\nmodule.exports = isVirtualNode\n\nfunction isVirtualNode(x) {\n    return x && x.type === \"VirtualNode\" && x.version === version\n}\n","var version = require(\"./version\")\n\nmodule.exports = isVirtualText\n\nfunction isVirtualText(x) {\n    return x && x.type === \"VirtualText\" && x.version === version\n}\n","module.exports = isWidget\n\nfunction isWidget(w) {\n    return w && w.type === \"Widget\"\n}\n","module.exports = \"2\"\n","var version = require(\"./version\")\nvar isVNode = require(\"./is-vnode\")\nvar isWidget = require(\"./is-widget\")\nvar isThunk = require(\"./is-thunk\")\nvar isVHook = require(\"./is-vhook\")\n\nmodule.exports = VirtualNode\n\nvar noProperties = {}\nvar noChildren = []\n\nfunction VirtualNode(tagName, properties, children, key, namespace) {\n    this.tagName = tagName\n    this.properties = properties || noProperties\n    this.children = children || noChildren\n    this.key = key != null ? String(key) : undefined\n    this.namespace = (typeof namespace === \"string\") ? namespace : null\n\n    var count = (children && children.length) || 0\n    var descendants = 0\n    var hasWidgets = false\n    var hasThunks = false\n    var descendantHooks = false\n    var hooks\n\n    for (var propName in properties) {\n        if (properties.hasOwnProperty(propName)) {\n            var property = properties[propName]\n            if (isVHook(property) && property.unhook) {\n                if (!hooks) {\n                    hooks = {}\n                }\n\n                hooks[propName] = property\n            }\n        }\n    }\n\n    for (var i = 0; i < count; i++) {\n        var child = children[i]\n        if (isVNode(child)) {\n            descendants += child.count || 0\n\n            if (!hasWidgets && child.hasWidgets) {\n                hasWidgets = true\n            }\n\n            if (!hasThunks && child.hasThunks) {\n                hasThunks = true\n            }\n\n            if (!descendantHooks && (child.hooks || child.descendantHooks)) {\n                descendantHooks = true\n            }\n        } else if (!hasWidgets && isWidget(child)) {\n            if (typeof child.destroy === \"function\") {\n                hasWidgets = true\n            }\n        } else if (!hasThunks && isThunk(child)) {\n            hasThunks = true;\n        }\n    }\n\n    this.count = count + descendants\n    this.hasWidgets = hasWidgets\n    this.hasThunks = hasThunks\n    this.hooks = hooks\n    this.descendantHooks = descendantHooks\n}\n\nVirtualNode.prototype.version = version\nVirtualNode.prototype.type = \"VirtualNode\"\n","var version = require(\"./version\")\n\nVirtualPatch.NONE = 0\nVirtualPatch.VTEXT = 1\nVirtualPatch.VNODE = 2\nVirtualPatch.WIDGET = 3\nVirtualPatch.PROPS = 4\nVirtualPatch.ORDER = 5\nVirtualPatch.INSERT = 6\nVirtualPatch.REMOVE = 7\nVirtualPatch.THUNK = 8\n\nmodule.exports = VirtualPatch\n\nfunction VirtualPatch(type, vNode, patch) {\n    this.type = Number(type)\n    this.vNode = vNode\n    this.patch = patch\n}\n\nVirtualPatch.prototype.version = version\nVirtualPatch.prototype.type = \"VirtualPatch\"\n","var version = require(\"./version\")\n\nmodule.exports = VirtualText\n\nfunction VirtualText(text) {\n    this.text = String(text)\n}\n\nVirtualText.prototype.version = version\nVirtualText.prototype.type = \"VirtualText\"\n","var isObject = require(\"is-object\")\nvar isHook = require(\"../vnode/is-vhook\")\n\nmodule.exports = diffProps\n\nfunction diffProps(a, b) {\n    var diff\n\n    for (var aKey in a) {\n        if (!(aKey in b)) {\n            diff = diff || {}\n            diff[aKey] = undefined\n        }\n\n        var aValue = a[aKey]\n        var bValue = b[aKey]\n\n        if (aValue === bValue) {\n            continue\n        } else if (isObject(aValue) && isObject(bValue)) {\n            if (getPrototype(bValue) !== getPrototype(aValue)) {\n                diff = diff || {}\n                diff[aKey] = bValue\n            } else if (isHook(bValue)) {\n                 diff = diff || {}\n                 diff[aKey] = bValue\n            } else {\n                var objectDiff = diffProps(aValue, bValue)\n                if (objectDiff) {\n                    diff = diff || {}\n                    diff[aKey] = objectDiff\n                }\n            }\n        } else {\n            diff = diff || {}\n            diff[aKey] = bValue\n        }\n    }\n\n    for (var bKey in b) {\n        if (!(bKey in a)) {\n            diff = diff || {}\n            diff[bKey] = b[bKey]\n        }\n    }\n\n    return diff\n}\n\nfunction getPrototype(value) {\n  if (Object.getPrototypeOf) {\n    return Object.getPrototypeOf(value)\n  } else if (value.__proto__) {\n    return value.__proto__\n  } else if (value.constructor) {\n    return value.constructor.prototype\n  }\n}\n","var isArray = require(\"x-is-array\")\n\nvar VPatch = require(\"../vnode/vpatch\")\nvar isVNode = require(\"../vnode/is-vnode\")\nvar isVText = require(\"../vnode/is-vtext\")\nvar isWidget = require(\"../vnode/is-widget\")\nvar isThunk = require(\"../vnode/is-thunk\")\nvar handleThunk = require(\"../vnode/handle-thunk\")\n\nvar diffProps = require(\"./diff-props\")\n\nmodule.exports = diff\n\nfunction diff(a, b) {\n    var patch = { a: a }\n    walk(a, b, patch, 0)\n    return patch\n}\n\nfunction walk(a, b, patch, index) {\n    if (a === b) {\n        return\n    }\n\n    var apply = patch[index]\n    var applyClear = false\n\n    if (isThunk(a) || isThunk(b)) {\n        thunks(a, b, patch, index)\n    } else if (b == null) {\n\n        // If a is a widget we will add a remove patch for it\n        // Otherwise any child widgets/hooks must be destroyed.\n        // This prevents adding two remove patches for a widget.\n        if (!isWidget(a)) {\n            clearState(a, patch, index)\n            apply = patch[index]\n        }\n\n        apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b))\n    } else if (isVNode(b)) {\n        if (isVNode(a)) {\n            if (a.tagName === b.tagName &&\n                a.namespace === b.namespace &&\n                a.key === b.key) {\n                var propsPatch = diffProps(a.properties, b.properties)\n                if (propsPatch) {\n                    apply = appendPatch(apply,\n                        new VPatch(VPatch.PROPS, a, propsPatch))\n                }\n                apply = diffChildren(a, b, patch, apply, index)\n            } else {\n                apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))\n                applyClear = true\n            }\n        } else {\n            apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))\n            applyClear = true\n        }\n    } else if (isVText(b)) {\n        if (!isVText(a)) {\n            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))\n            applyClear = true\n        } else if (a.text !== b.text) {\n            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))\n        }\n    } else if (isWidget(b)) {\n        if (!isWidget(a)) {\n            applyClear = true\n        }\n\n        apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b))\n    }\n\n    if (apply) {\n        patch[index] = apply\n    }\n\n    if (applyClear) {\n        clearState(a, patch, index)\n    }\n}\n\nfunction diffChildren(a, b, patch, apply, index) {\n    var aChildren = a.children\n    var orderedSet = reorder(aChildren, b.children)\n    var bChildren = orderedSet.children\n\n    var aLen = aChildren.length\n    var bLen = bChildren.length\n    var len = aLen > bLen ? aLen : bLen\n\n    for (var i = 0; i < len; i++) {\n        var leftNode = aChildren[i]\n        var rightNode = bChildren[i]\n        index += 1\n\n        if (!leftNode) {\n            if (rightNode) {\n                // Excess nodes in b need to be added\n                apply = appendPatch(apply,\n                    new VPatch(VPatch.INSERT, null, rightNode))\n            }\n        } else {\n            walk(leftNode, rightNode, patch, index)\n        }\n\n        if (isVNode(leftNode) && leftNode.count) {\n            index += leftNode.count\n        }\n    }\n\n    if (orderedSet.moves) {\n        // Reorder nodes last\n        apply = appendPatch(apply, new VPatch(\n            VPatch.ORDER,\n            a,\n            orderedSet.moves\n        ))\n    }\n\n    return apply\n}\n\nfunction clearState(vNode, patch, index) {\n    // TODO: Make this a single walk, not two\n    unhook(vNode, patch, index)\n    destroyWidgets(vNode, patch, index)\n}\n\n// Patch records for all destroyed widgets must be added because we need\n// a DOM node reference for the destroy function\nfunction destroyWidgets(vNode, patch, index) {\n    if (isWidget(vNode)) {\n        if (typeof vNode.destroy === \"function\") {\n            patch[index] = appendPatch(\n                patch[index],\n                new VPatch(VPatch.REMOVE, vNode, null)\n            )\n        }\n    } else if (isVNode(vNode) && (vNode.hasWidgets || vNode.hasThunks)) {\n        var children = vNode.children\n        var len = children.length\n        for (var i = 0; i < len; i++) {\n            var child = children[i]\n            index += 1\n\n            destroyWidgets(child, patch, index)\n\n            if (isVNode(child) && child.count) {\n                index += child.count\n            }\n        }\n    } else if (isThunk(vNode)) {\n        thunks(vNode, null, patch, index)\n    }\n}\n\n// Create a sub-patch for thunks\nfunction thunks(a, b, patch, index) {\n    var nodes = handleThunk(a, b)\n    var thunkPatch = diff(nodes.a, nodes.b)\n    if (hasPatches(thunkPatch)) {\n        patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch)\n    }\n}\n\nfunction hasPatches(patch) {\n    for (var index in patch) {\n        if (index !== \"a\") {\n            return true\n        }\n    }\n\n    return false\n}\n\n// Execute hooks when two nodes are identical\nfunction unhook(vNode, patch, index) {\n    if (isVNode(vNode)) {\n        if (vNode.hooks) {\n            patch[index] = appendPatch(\n                patch[index],\n                new VPatch(\n                    VPatch.PROPS,\n                    vNode,\n                    undefinedKeys(vNode.hooks)\n                )\n            )\n        }\n\n        if (vNode.descendantHooks || vNode.hasThunks) {\n            var children = vNode.children\n            var len = children.length\n            for (var i = 0; i < len; i++) {\n                var child = children[i]\n                index += 1\n\n                unhook(child, patch, index)\n\n                if (isVNode(child) && child.count) {\n                    index += child.count\n                }\n            }\n        }\n    } else if (isThunk(vNode)) {\n        thunks(vNode, null, patch, index)\n    }\n}\n\nfunction undefinedKeys(obj) {\n    var result = {}\n\n    for (var key in obj) {\n        result[key] = undefined\n    }\n\n    return result\n}\n\n// List diff, naive left to right reordering\nfunction reorder(aChildren, bChildren) {\n    // O(M) time, O(M) memory\n    var bChildIndex = keyIndex(bChildren)\n    var bKeys = bChildIndex.keys\n    var bFree = bChildIndex.free\n\n    if (bFree.length === bChildren.length) {\n        return {\n            children: bChildren,\n            moves: null\n        }\n    }\n\n    // O(N) time, O(N) memory\n    var aChildIndex = keyIndex(aChildren)\n    var aKeys = aChildIndex.keys\n    var aFree = aChildIndex.free\n\n    if (aFree.length === aChildren.length) {\n        return {\n            children: bChildren,\n            moves: null\n        }\n    }\n\n    // O(MAX(N, M)) memory\n    var newChildren = []\n\n    var freeIndex = 0\n    var freeCount = bFree.length\n    var deletedItems = 0\n\n    // Iterate through a and match a node in b\n    // O(N) time,\n    for (var i = 0 ; i < aChildren.length; i++) {\n        var aItem = aChildren[i]\n        var itemIndex\n\n        if (aItem.key) {\n            if (bKeys.hasOwnProperty(aItem.key)) {\n                // Match up the old keys\n                itemIndex = bKeys[aItem.key]\n                newChildren.push(bChildren[itemIndex])\n\n            } else {\n                // Remove old keyed items\n                itemIndex = i - deletedItems++\n                newChildren.push(null)\n            }\n        } else {\n            // Match the item in a with the next free item in b\n            if (freeIndex < freeCount) {\n                itemIndex = bFree[freeIndex++]\n                newChildren.push(bChildren[itemIndex])\n            } else {\n                // There are no free items in b to match with\n                // the free items in a, so the extra free nodes\n                // are deleted.\n                itemIndex = i - deletedItems++\n                newChildren.push(null)\n            }\n        }\n    }\n\n    var lastFreeIndex = freeIndex >= bFree.length ?\n        bChildren.length :\n        bFree[freeIndex]\n\n    // Iterate through b and append any new keys\n    // O(M) time\n    for (var j = 0; j < bChildren.length; j++) {\n        var newItem = bChildren[j]\n\n        if (newItem.key) {\n            if (!aKeys.hasOwnProperty(newItem.key)) {\n                // Add any new keyed items\n                // We are adding new items to the end and then sorting them\n                // in place. In future we should insert new items in place.\n                newChildren.push(newItem)\n            }\n        } else if (j >= lastFreeIndex) {\n            // Add any leftover non-keyed items\n            newChildren.push(newItem)\n        }\n    }\n\n    var simulate = newChildren.slice()\n    var simulateIndex = 0\n    var removes = []\n    var inserts = []\n    var simulateItem\n\n    for (var k = 0; k < bChildren.length;) {\n        var wantedItem = bChildren[k]\n        simulateItem = simulate[simulateIndex]\n\n        // remove items\n        while (simulateItem === null && simulate.length) {\n            removes.push(remove(simulate, simulateIndex, null))\n            simulateItem = simulate[simulateIndex]\n        }\n\n        if (!simulateItem || simulateItem.key !== wantedItem.key) {\n            // if we need a key in this position...\n            if (wantedItem.key) {\n                if (simulateItem && simulateItem.key) {\n                    // if an insert doesn't put this key in place, it needs to move\n                    if (bKeys[simulateItem.key] !== k + 1) {\n                        removes.push(remove(simulate, simulateIndex, simulateItem.key))\n                        simulateItem = simulate[simulateIndex]\n                        // if the remove didn't put the wanted item in place, we need to insert it\n                        if (!simulateItem || simulateItem.key !== wantedItem.key) {\n                            inserts.push({key: wantedItem.key, to: k})\n                        }\n                        // items are matching, so skip ahead\n                        else {\n                            simulateIndex++\n                        }\n                    }\n                    else {\n                        inserts.push({key: wantedItem.key, to: k})\n                    }\n                }\n                else {\n                    inserts.push({key: wantedItem.key, to: k})\n                }\n                k++\n            }\n            // a key in simulate has no matching wanted key, remove it\n            else if (simulateItem && simulateItem.key) {\n                removes.push(remove(simulate, simulateIndex, simulateItem.key))\n            }\n        }\n        else {\n            simulateIndex++\n            k++\n        }\n    }\n\n    // remove all the remaining nodes from simulate\n    while(simulateIndex < simulate.length) {\n        simulateItem = simulate[simulateIndex]\n        removes.push(remove(simulate, simulateIndex, simulateItem && simulateItem.key))\n    }\n\n    // If the only moves we have are deletes then we can just\n    // let the delete patch remove these items.\n    if (removes.length === deletedItems && !inserts.length) {\n        return {\n            children: newChildren,\n            moves: null\n        }\n    }\n\n    return {\n        children: newChildren,\n        moves: {\n            removes: removes,\n            inserts: inserts\n        }\n    }\n}\n\nfunction remove(arr, index, key) {\n    arr.splice(index, 1)\n\n    return {\n        from: index,\n        key: key\n    }\n}\n\nfunction keyIndex(children) {\n    var keys = {}\n    var free = []\n    var length = children.length\n\n    for (var i = 0; i < length; i++) {\n        var child = children[i]\n\n        if (child.key) {\n            keys[child.key] = i\n        } else {\n            free.push(i)\n        }\n    }\n\n    return {\n        keys: keys,     // A hash of key name to index\n        free: free      // An array of unkeyed item indices\n    }\n}\n\nfunction appendPatch(apply, patch) {\n    if (apply) {\n        if (isArray(apply)) {\n            apply.push(patch)\n        } else {\n            apply = [apply, patch]\n        }\n\n        return apply\n    } else {\n        return patch\n    }\n}\n","/* jshint node: true */\n'use strict';\n\n/**\n  # wildcard\n\n  Very simple wildcard matching, which is designed to provide the same\n  functionality that is found in the\n  [eve](https://github.com/adobe-webplatform/eve) eventing library.\n\n  ## Usage\n\n  It works with strings:\n\n  <<< examples/strings.js\n\n  Arrays:\n\n  <<< examples/arrays.js\n\n  Objects (matching against keys):\n\n  <<< examples/objects.js\n\n  While the library works in Node, if you are are looking for file-based\n  wildcard matching then you should have a look at:\n\n  <https://github.com/isaacs/node-glob>\n**/\n\nfunction WildcardMatcher(text, separator) {\n  this.text = text = text || '';\n  this.hasWild = ~text.indexOf('*');\n  this.separator = separator;\n  this.parts = text.split(separator);\n}\n\nWildcardMatcher.prototype.match = function(input) {\n  var matches = true;\n  var parts = this.parts;\n  var ii;\n  var partsCount = parts.length;\n  var testParts;\n\n  if (typeof input == 'string' || input instanceof String) {\n    if (!this.hasWild && this.text != input) {\n      matches = false;\n    } else {\n      testParts = (input || '').split(this.separator);\n      for (ii = 0; matches && ii < partsCount; ii++) {\n        if (parts[ii] === '*')  {\n          continue;\n        } else if (ii < testParts.length) {\n          matches = parts[ii] === testParts[ii];\n        } else {\n          matches = false;\n        }\n      }\n\n      // If matches, then return the component parts\n      matches = matches && testParts;\n    }\n  }\n  else if (typeof input.splice == 'function') {\n    matches = [];\n\n    for (ii = input.length; ii--; ) {\n      if (this.match(input[ii])) {\n        matches[matches.length] = input[ii];\n      }\n    }\n  }\n  else if (typeof input == 'object') {\n    matches = {};\n\n    for (var key in input) {\n      if (this.match(key)) {\n        matches[key] = input[key];\n      }\n    }\n  }\n\n  return matches;\n};\n\nmodule.exports = function(text, test, separator) {\n  var matcher = new WildcardMatcher(text, separator || /[\\/\\.]/);\n  if (typeof test != 'undefined') {\n    return matcher.match(test);\n  }\n\n  return matcher;\n};\n","var nativeIsArray = Array.isArray\nvar toString = Object.prototype.toString\n\nmodule.exports = nativeIsArray || isArray\n\nfunction isArray(obj) {\n    return toString.call(obj) === \"[object Array]\"\n}\n","/**\n * default settings\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar getDefaultCSSWhiteList = require(\"cssfilter\").getDefaultWhiteList;\nvar _ = require(\"./util\");\n\nfunction getDefaultWhiteList() {\n  return {\n    a: [\"target\", \"href\", \"title\"],\n    abbr: [\"title\"],\n    address: [],\n    area: [\"shape\", \"coords\", \"href\", \"alt\"],\n    article: [],\n    aside: [],\n    audio: [\n      \"autoplay\",\n      \"controls\",\n      \"crossorigin\",\n      \"loop\",\n      \"muted\",\n      \"preload\",\n      \"src\",\n    ],\n    b: [],\n    bdi: [\"dir\"],\n    bdo: [\"dir\"],\n    big: [],\n    blockquote: [\"cite\"],\n    br: [],\n    caption: [],\n    center: [],\n    cite: [],\n    code: [],\n    col: [\"align\", \"valign\", \"span\", \"width\"],\n    colgroup: [\"align\", \"valign\", \"span\", \"width\"],\n    dd: [],\n    del: [\"datetime\"],\n    details: [\"open\"],\n    div: [],\n    dl: [],\n    dt: [],\n    em: [],\n    figcaption: [],\n    figure: [],\n    font: [\"color\", \"size\", \"face\"],\n    footer: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    header: [],\n    hr: [],\n    i: [],\n    img: [\"src\", \"alt\", \"title\", \"width\", \"height\"],\n    ins: [\"datetime\"],\n    li: [],\n    mark: [],\n    nav: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    section: [],\n    small: [],\n    span: [],\n    sub: [],\n    summary: [],\n    sup: [],\n    strong: [],\n    strike: [],\n    table: [\"width\", \"border\", \"align\", \"valign\"],\n    tbody: [\"align\", \"valign\"],\n    td: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n    tfoot: [\"align\", \"valign\"],\n    th: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n    thead: [\"align\", \"valign\"],\n    tr: [\"rowspan\", \"align\", \"valign\"],\n    tt: [],\n    u: [],\n    ul: [],\n    video: [\n      \"autoplay\",\n      \"controls\",\n      \"crossorigin\",\n      \"loop\",\n      \"muted\",\n      \"playsinline\",\n      \"poster\",\n      \"preload\",\n      \"src\",\n      \"height\",\n      \"width\",\n    ],\n  };\n}\n\nvar defaultCSSFilter = new FilterCSS();\n\n/**\n * default onTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onTag(tag, html, options) {\n  // do nothing\n}\n\n/**\n * default onIgnoreTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreTag(tag, html, options) {\n  // do nothing\n}\n\n/**\n * default onTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onTagAttr(tag, name, value) {\n  // do nothing\n}\n\n/**\n * default onIgnoreTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onIgnoreTagAttr(tag, name, value) {\n  // do nothing\n}\n\n/**\n * default escapeHtml function\n *\n * @param {String} html\n */\nfunction escapeHtml(html) {\n  return html.replace(REGEXP_LT, \"&lt;\").replace(REGEXP_GT, \"&gt;\");\n}\n\n/**\n * default safeAttrValue function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @param {Object} cssFilter\n * @return {String}\n */\nfunction safeAttrValue(tag, name, value, cssFilter) {\n  // unescape attribute value firstly\n  value = friendlyAttrValue(value);\n\n  if (name === \"href\" || name === \"src\") {\n    // filter `href` and `src` attribute\n    // only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#`\n    value = _.trim(value);\n    if (value === \"#\") return \"#\";\n    if (\n      !(\n        value.substr(0, 7) === \"http://\" ||\n        value.substr(0, 8) === \"https://\" ||\n        value.substr(0, 7) === \"mailto:\" ||\n        value.substr(0, 4) === \"tel:\" ||\n        value.substr(0, 11) === \"data:image/\" ||\n        value.substr(0, 6) === \"ftp://\" ||\n        value.substr(0, 2) === \"./\" ||\n        value.substr(0, 3) === \"../\" ||\n        value[0] === \"#\" ||\n        value[0] === \"/\"\n      )\n    ) {\n      return \"\";\n    }\n  } else if (name === \"background\") {\n    // filter `background` attribute (maybe no use)\n    // `javascript:`\n    REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n    if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n      return \"\";\n    }\n  } else if (name === \"style\") {\n    // `expression()`\n    REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0;\n    if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) {\n      return \"\";\n    }\n    // `url()`\n    REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0;\n    if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) {\n      REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n      if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n        return \"\";\n      }\n    }\n    if (cssFilter !== false) {\n      cssFilter = cssFilter || defaultCSSFilter;\n      value = cssFilter.process(value);\n    }\n  }\n\n  // escape `<>\"` before returns\n  value = escapeAttrValue(value);\n  return value;\n}\n\n// RegExp list\nvar REGEXP_LT = /</g;\nvar REGEXP_GT = />/g;\nvar REGEXP_QUOTE = /\"/g;\nvar REGEXP_QUOTE_2 = /&quot;/g;\nvar REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim;\nvar REGEXP_ATTR_VALUE_COLON = /&colon;?/gim;\nvar REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\\/\\*|\\*\\//gm;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_4 =\n  /((j\\s*a\\s*v\\s*a|v\\s*b|l\\s*i\\s*v\\s*e)\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*|m\\s*o\\s*c\\s*h\\s*a):/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:\\s*image\\//gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_7 =\n  /e\\s*x\\s*p\\s*r\\s*e\\s*s\\s*s\\s*i\\s*o\\s*n\\s*\\(.*/gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\\s*r\\s*l\\s*\\(.*/gi;\n\n/**\n * escape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction escapeQuote(str) {\n  return str.replace(REGEXP_QUOTE, \"&quot;\");\n}\n\n/**\n * unescape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction unescapeQuote(str) {\n  return str.replace(REGEXP_QUOTE_2, '\"');\n}\n\n/**\n * escape html entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeHtmlEntities(str) {\n  return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode(str, code) {\n    return code[0] === \"x\" || code[0] === \"X\"\n      ? String.fromCharCode(parseInt(code.substr(1), 16))\n      : String.fromCharCode(parseInt(code, 10));\n  });\n}\n\n/**\n * escape html5 new danger entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeDangerHtml5Entities(str) {\n  return str\n    .replace(REGEXP_ATTR_VALUE_COLON, \":\")\n    .replace(REGEXP_ATTR_VALUE_NEWLINE, \" \");\n}\n\n/**\n * clear nonprintable characters\n *\n * @param {String} str\n * @return {String}\n */\nfunction clearNonPrintableCharacter(str) {\n  var str2 = \"\";\n  for (var i = 0, len = str.length; i < len; i++) {\n    str2 += str.charCodeAt(i) < 32 ? \" \" : str.charAt(i);\n  }\n  return _.trim(str2);\n}\n\n/**\n * get friendly attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction friendlyAttrValue(str) {\n  str = unescapeQuote(str);\n  str = escapeHtmlEntities(str);\n  str = escapeDangerHtml5Entities(str);\n  str = clearNonPrintableCharacter(str);\n  return str;\n}\n\n/**\n * unescape attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeAttrValue(str) {\n  str = escapeQuote(str);\n  str = escapeHtml(str);\n  return str;\n}\n\n/**\n * `onIgnoreTag` function for removing all the tags that are not in whitelist\n */\nfunction onIgnoreTagStripAll() {\n  return \"\";\n}\n\n/**\n * remove tag body\n * specify a `tags` list, if the tag is not in the `tags` list then process by the specify function (optional)\n *\n * @param {array} tags\n * @param {function} next\n */\nfunction StripTagBody(tags, next) {\n  if (typeof next !== \"function\") {\n    next = function () {};\n  }\n\n  var isRemoveAllTag = !Array.isArray(tags);\n  function isRemoveTag(tag) {\n    if (isRemoveAllTag) return true;\n    return _.indexOf(tags, tag) !== -1;\n  }\n\n  var removeList = [];\n  var posStart = false;\n\n  return {\n    onIgnoreTag: function (tag, html, options) {\n      if (isRemoveTag(tag)) {\n        if (options.isClosing) {\n          var ret = \"[/removed]\";\n          var end = options.position + ret.length;\n          removeList.push([\n            posStart !== false ? posStart : options.position,\n            end,\n          ]);\n          posStart = false;\n          return ret;\n        } else {\n          if (!posStart) {\n            posStart = options.position;\n          }\n          return \"[removed]\";\n        }\n      } else {\n        return next(tag, html, options);\n      }\n    },\n    remove: function (html) {\n      var rethtml = \"\";\n      var lastPos = 0;\n      _.forEach(removeList, function (pos) {\n        rethtml += html.slice(lastPos, pos[0]);\n        lastPos = pos[1];\n      });\n      rethtml += html.slice(lastPos);\n      return rethtml;\n    },\n  };\n}\n\n/**\n * remove html comments\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripCommentTag(html) {\n  var retHtml = \"\";\n  var lastPos = 0;\n  while (lastPos < html.length) {\n    var i = html.indexOf(\"<!--\", lastPos);\n    if (i === -1) {\n      retHtml += html.slice(lastPos);\n      break;\n    }\n    retHtml += html.slice(lastPos, i);\n    var j = html.indexOf(\"-->\", i);\n    if (j === -1) {\n      break;\n    }\n    lastPos = j + 3;\n  }\n  return retHtml;\n}\n\n/**\n * remove invisible characters\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripBlankChar(html) {\n  var chars = html.split(\"\");\n  chars = chars.filter(function (char) {\n    var c = char.charCodeAt(0);\n    if (c === 127) return false;\n    if (c <= 31) {\n      if (c === 10 || c === 13) return true;\n      return false;\n    }\n    return true;\n  });\n  return chars.join(\"\");\n}\n\nexports.whiteList = getDefaultWhiteList();\nexports.getDefaultWhiteList = getDefaultWhiteList;\nexports.onTag = onTag;\nexports.onIgnoreTag = onIgnoreTag;\nexports.onTagAttr = onTagAttr;\nexports.onIgnoreTagAttr = onIgnoreTagAttr;\nexports.safeAttrValue = safeAttrValue;\nexports.escapeHtml = escapeHtml;\nexports.escapeQuote = escapeQuote;\nexports.unescapeQuote = unescapeQuote;\nexports.escapeHtmlEntities = escapeHtmlEntities;\nexports.escapeDangerHtml5Entities = escapeDangerHtml5Entities;\nexports.clearNonPrintableCharacter = clearNonPrintableCharacter;\nexports.friendlyAttrValue = friendlyAttrValue;\nexports.escapeAttrValue = escapeAttrValue;\nexports.onIgnoreTagStripAll = onIgnoreTagStripAll;\nexports.StripTagBody = StripTagBody;\nexports.stripCommentTag = stripCommentTag;\nexports.stripBlankChar = stripBlankChar;\nexports.cssFilter = defaultCSSFilter;\nexports.getDefaultCSSWhiteList = getDefaultCSSWhiteList;\n","/**\n * xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar FilterXSS = require(\"./xss\");\n\n/**\n * filter xss function\n *\n * @param {String} html\n * @param {Object} options { whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml }\n * @return {String}\n */\nfunction filterXSS(html, options) {\n  var xss = new FilterXSS(options);\n  return xss.process(html);\n}\n\nexports = module.exports = filterXSS;\nexports.filterXSS = filterXSS;\nexports.FilterXSS = FilterXSS;\n\n(function () {\n  for (var i in DEFAULT) {\n    exports[i] = DEFAULT[i];\n  }\n  for (var j in parser) {\n    exports[j] = parser[j];\n  }\n})();\n\n// using `xss` on the browser, output `filterXSS` to the globals\nif (typeof window !== \"undefined\") {\n  window.filterXSS = module.exports;\n}\n\n// using `xss` on the WebWorker, output `filterXSS` to the globals\nfunction isWorkerEnv() {\n  return (\n    typeof self !== \"undefined\" &&\n    typeof DedicatedWorkerGlobalScope !== \"undefined\" &&\n    self instanceof DedicatedWorkerGlobalScope\n  );\n}\nif (isWorkerEnv()) {\n  self.filterXSS = module.exports;\n}\n","/**\n * Simple HTML Parser\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar _ = require(\"./util\");\n\n/**\n * get tag name\n *\n * @param {String} html e.g. '<a hef=\"#\">'\n * @return {String}\n */\nfunction getTagName(html) {\n  var i = _.spaceIndex(html);\n  var tagName;\n  if (i === -1) {\n    tagName = html.slice(1, -1);\n  } else {\n    tagName = html.slice(1, i + 1);\n  }\n  tagName = _.trim(tagName).toLowerCase();\n  if (tagName.slice(0, 1) === \"/\") tagName = tagName.slice(1);\n  if (tagName.slice(-1) === \"/\") tagName = tagName.slice(0, -1);\n  return tagName;\n}\n\n/**\n * is close tag?\n *\n * @param {String} html 如：'<a hef=\"#\">'\n * @return {Boolean}\n */\nfunction isClosing(html) {\n  return html.slice(0, 2) === \"</\";\n}\n\n/**\n * parse input html and returns processed html\n *\n * @param {String} html\n * @param {Function} onTag e.g. function (sourcePosition, position, tag, html, isClosing)\n * @param {Function} escapeHtml\n * @return {String}\n */\nfunction parseTag(html, onTag, escapeHtml) {\n  \"use strict\";\n\n  var rethtml = \"\";\n  var lastPos = 0;\n  var tagStart = false;\n  var quoteStart = false;\n  var currentPos = 0;\n  var len = html.length;\n  var currentTagName = \"\";\n  var currentHtml = \"\";\n\n  chariterator: for (currentPos = 0; currentPos < len; currentPos++) {\n    var c = html.charAt(currentPos);\n    if (tagStart === false) {\n      if (c === \"<\") {\n        tagStart = currentPos;\n        continue;\n      }\n    } else {\n      if (quoteStart === false) {\n        if (c === \"<\") {\n          rethtml += escapeHtml(html.slice(lastPos, currentPos));\n          tagStart = currentPos;\n          lastPos = currentPos;\n          continue;\n        }\n        if (c === \">\") {\n          rethtml += escapeHtml(html.slice(lastPos, tagStart));\n          currentHtml = html.slice(tagStart, currentPos + 1);\n          currentTagName = getTagName(currentHtml);\n          rethtml += onTag(\n            tagStart,\n            rethtml.length,\n            currentTagName,\n            currentHtml,\n            isClosing(currentHtml)\n          );\n          lastPos = currentPos + 1;\n          tagStart = false;\n          continue;\n        }\n        if (c === '\"' || c === \"'\") {\n          var i = 1;\n          var ic = html.charAt(currentPos - i);\n\n          while (ic.trim() === \"\" || ic === \"=\") {\n            if (ic === \"=\") {\n              quoteStart = c;\n              continue chariterator;\n            }\n            ic = html.charAt(currentPos - ++i);\n          }\n        }\n      } else {\n        if (c === quoteStart) {\n          quoteStart = false;\n          continue;\n        }\n      }\n    }\n  }\n  if (lastPos < html.length) {\n    rethtml += escapeHtml(html.substr(lastPos));\n  }\n\n  return rethtml;\n}\n\nvar REGEXP_ILLEGAL_ATTR_NAME = /[^a-zA-Z0-9\\\\_:.-]/gim;\n\n/**\n * parse input attributes and returns processed attributes\n *\n * @param {String} html e.g. `href=\"#\" target=\"_blank\"`\n * @param {Function} onAttr e.g. `function (name, value)`\n * @return {String}\n */\nfunction parseAttr(html, onAttr) {\n  \"use strict\";\n\n  var lastPos = 0;\n  var lastMarkPos = 0;\n  var retAttrs = [];\n  var tmpName = false;\n  var len = html.length;\n\n  function addAttr(name, value) {\n    name = _.trim(name);\n    name = name.replace(REGEXP_ILLEGAL_ATTR_NAME, \"\").toLowerCase();\n    if (name.length < 1) return;\n    var ret = onAttr(name, value || \"\");\n    if (ret) retAttrs.push(ret);\n  }\n\n  // 逐个分析字符\n  for (var i = 0; i < len; i++) {\n    var c = html.charAt(i);\n    var v, j;\n    if (tmpName === false && c === \"=\") {\n      tmpName = html.slice(lastPos, i);\n      lastPos = i + 1;\n      lastMarkPos = html.charAt(lastPos) === '\"' || html.charAt(lastPos) === \"'\" ? lastPos : findNextQuotationMark(html, i + 1);\n      continue;\n    }\n    if (tmpName !== false) {\n      if (\n        i === lastMarkPos\n      ) {\n        j = html.indexOf(c, i + 1);\n        if (j === -1) {\n          break;\n        } else {\n          v = _.trim(html.slice(lastMarkPos + 1, j));\n          addAttr(tmpName, v);\n          tmpName = false;\n          i = j;\n          lastPos = i + 1;\n          continue;\n        }\n      }\n    }\n    if (/\\s|\\n|\\t/.test(c)) {\n      html = html.replace(/\\s|\\n|\\t/g, \" \");\n      if (tmpName === false) {\n        j = findNextEqual(html, i);\n        if (j === -1) {\n          v = _.trim(html.slice(lastPos, i));\n          addAttr(v);\n          tmpName = false;\n          lastPos = i + 1;\n          continue;\n        } else {\n          i = j - 1;\n          continue;\n        }\n      } else {\n        j = findBeforeEqual(html, i - 1);\n        if (j === -1) {\n          v = _.trim(html.slice(lastPos, i));\n          v = stripQuoteWrap(v);\n          addAttr(tmpName, v);\n          tmpName = false;\n          lastPos = i + 1;\n          continue;\n        } else {\n          continue;\n        }\n      }\n    }\n  }\n\n  if (lastPos < html.length) {\n    if (tmpName === false) {\n      addAttr(html.slice(lastPos));\n    } else {\n      addAttr(tmpName, stripQuoteWrap(_.trim(html.slice(lastPos))));\n    }\n  }\n\n  return _.trim(retAttrs.join(\" \"));\n}\n\nfunction findNextEqual(str, i) {\n  for (; i < str.length; i++) {\n    var c = str[i];\n    if (c === \" \") continue;\n    if (c === \"=\") return i;\n    return -1;\n  }\n}\n\nfunction findNextQuotationMark(str, i) {\n  for (; i < str.length; i++) {\n    var c = str[i];\n    if (c === \" \") continue;\n    if (c === \"'\" || c === '\"') return i;\n    return -1;\n  }\n}\n\nfunction findBeforeEqual(str, i) {\n  for (; i > 0; i--) {\n    var c = str[i];\n    if (c === \" \") continue;\n    if (c === \"=\") return i;\n    return -1;\n  }\n}\n\nfunction isQuoteWrapString(text) {\n  if (\n    (text[0] === '\"' && text[text.length - 1] === '\"') ||\n    (text[0] === \"'\" && text[text.length - 1] === \"'\")\n  ) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction stripQuoteWrap(text) {\n  if (isQuoteWrapString(text)) {\n    return text.substr(1, text.length - 2);\n  } else {\n    return text;\n  }\n}\n\nexports.parseTag = parseTag;\nexports.parseAttr = parseAttr;\n","module.exports = {\n  indexOf: function (arr, item) {\n    var i, j;\n    if (Array.prototype.indexOf) {\n      return arr.indexOf(item);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      if (arr[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  },\n  forEach: function (arr, fn, scope) {\n    var i, j;\n    if (Array.prototype.forEach) {\n      return arr.forEach(fn, scope);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      fn.call(scope, arr[i], i, arr);\n    }\n  },\n  trim: function (str) {\n    if (String.prototype.trim) {\n      return str.trim();\n    }\n    return str.replace(/(^\\s*)|(\\s*$)/g, \"\");\n  },\n  spaceIndex: function (str) {\n    var reg = /\\s|\\n|\\t/;\n    var match = reg.exec(str);\n    return match ? match.index : -1;\n  },\n};\n","/**\n * filter xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar parseTag = parser.parseTag;\nvar parseAttr = parser.parseAttr;\nvar _ = require(\"./util\");\n\n/**\n * returns `true` if the input value is `undefined` or `null`\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull(obj) {\n  return obj === undefined || obj === null;\n}\n\n/**\n * get attributes for a tag\n *\n * @param {String} html\n * @return {Object}\n *   - {String} html\n *   - {Boolean} closing\n */\nfunction getAttrs(html) {\n  var i = _.spaceIndex(html);\n  if (i === -1) {\n    return {\n      html: \"\",\n      closing: html[html.length - 2] === \"/\",\n    };\n  }\n  html = _.trim(html.slice(i + 1, -1));\n  var isClosing = html[html.length - 1] === \"/\";\n  if (isClosing) html = _.trim(html.slice(0, -1));\n  return {\n    html: html,\n    closing: isClosing,\n  };\n}\n\n/**\n * shallow copy\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject(obj) {\n  var ret = {};\n  for (var i in obj) {\n    ret[i] = obj[i];\n  }\n  return ret;\n}\n\nfunction keysToLowerCase(obj) {\n  var ret = {};\n  for (var i in obj) {\n    if (Array.isArray(obj[i])) {\n      ret[i.toLowerCase()] = obj[i].map(function (item) {\n        return item.toLowerCase();\n      });\n    } else {\n      ret[i.toLowerCase()] = obj[i];\n    }\n  }\n  return ret;\n}\n\n/**\n * FilterXSS class\n *\n * @param {Object} options\n *        whiteList (or allowList), onTag, onTagAttr, onIgnoreTag,\n *        onIgnoreTagAttr, safeAttrValue, escapeHtml\n *        stripIgnoreTagBody, allowCommentTag, stripBlankChar\n *        css{whiteList, onAttr, onIgnoreAttr} `css=false` means don't use `cssfilter`\n */\nfunction FilterXSS(options) {\n  options = shallowCopyObject(options || {});\n\n  if (options.stripIgnoreTag) {\n    if (options.onIgnoreTag) {\n      console.error(\n        'Notes: cannot use these two options \"stripIgnoreTag\" and \"onIgnoreTag\" at the same time'\n      );\n    }\n    options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll;\n  }\n  if (options.whiteList || options.allowList) {\n    options.whiteList = keysToLowerCase(options.whiteList || options.allowList);\n  } else {\n    options.whiteList = DEFAULT.whiteList;\n  }\n\n  options.onTag = options.onTag || DEFAULT.onTag;\n  options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr;\n  options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag;\n  options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr;\n  options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n  options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml;\n  this.options = options;\n\n  if (options.css === false) {\n    this.cssFilter = false;\n  } else {\n    options.css = options.css || {};\n    this.cssFilter = new FilterCSS(options.css);\n  }\n}\n\n/**\n * start process and returns result\n *\n * @param {String} html\n * @return {String}\n */\nFilterXSS.prototype.process = function (html) {\n  // compatible with the input\n  html = html || \"\";\n  html = html.toString();\n  if (!html) return \"\";\n\n  var me = this;\n  var options = me.options;\n  var whiteList = options.whiteList;\n  var onTag = options.onTag;\n  var onIgnoreTag = options.onIgnoreTag;\n  var onTagAttr = options.onTagAttr;\n  var onIgnoreTagAttr = options.onIgnoreTagAttr;\n  var safeAttrValue = options.safeAttrValue;\n  var escapeHtml = options.escapeHtml;\n  var cssFilter = me.cssFilter;\n\n  // remove invisible characters\n  if (options.stripBlankChar) {\n    html = DEFAULT.stripBlankChar(html);\n  }\n\n  // remove html comments\n  if (!options.allowCommentTag) {\n    html = DEFAULT.stripCommentTag(html);\n  }\n\n  // if enable stripIgnoreTagBody\n  var stripIgnoreTagBody = false;\n  if (options.stripIgnoreTagBody) {\n    stripIgnoreTagBody = DEFAULT.StripTagBody(\n      options.stripIgnoreTagBody,\n      onIgnoreTag\n    );\n    onIgnoreTag = stripIgnoreTagBody.onIgnoreTag;\n  }\n\n  var retHtml = parseTag(\n    html,\n    function (sourcePosition, position, tag, html, isClosing) {\n      var info = {\n        sourcePosition: sourcePosition,\n        position: position,\n        isClosing: isClosing,\n        isWhite: Object.prototype.hasOwnProperty.call(whiteList, tag),\n      };\n\n      // call `onTag()`\n      var ret = onTag(tag, html, info);\n      if (!isNull(ret)) return ret;\n\n      if (info.isWhite) {\n        if (info.isClosing) {\n          return \"</\" + tag + \">\";\n        }\n\n        var attrs = getAttrs(html);\n        var whiteAttrList = whiteList[tag];\n        var attrsHtml = parseAttr(attrs.html, function (name, value) {\n          // call `onTagAttr()`\n          var isWhiteAttr = _.indexOf(whiteAttrList, name) !== -1;\n          var ret = onTagAttr(tag, name, value, isWhiteAttr);\n          if (!isNull(ret)) return ret;\n\n          if (isWhiteAttr) {\n            // call `safeAttrValue()`\n            value = safeAttrValue(tag, name, value, cssFilter);\n            if (value) {\n              return name + '=\"' + value + '\"';\n            } else {\n              return name;\n            }\n          } else {\n            // call `onIgnoreTagAttr()`\n            ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr);\n            if (!isNull(ret)) return ret;\n            return;\n          }\n        });\n\n        // build new tag html\n        html = \"<\" + tag;\n        if (attrsHtml) html += \" \" + attrsHtml;\n        if (attrs.closing) html += \" /\";\n        html += \">\";\n        return html;\n      } else {\n        // call `onIgnoreTag()`\n        ret = onIgnoreTag(tag, html, info);\n        if (!isNull(ret)) return ret;\n        return escapeHtml(html);\n      }\n    },\n    escapeHtml\n  );\n\n  // if enable stripIgnoreTagBody\n  if (stripIgnoreTagBody) {\n    retHtml = stripIgnoreTagBody.remove(retHtml);\n  }\n\n  return retHtml;\n};\n\nmodule.exports = FilterXSS;\n","\"use strict\";\n\nvar _AbortController = require(\"@uppy/utils/lib/AbortController\");\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nconst delay = require(\"@uppy/utils/lib/delay\");\n\nconst MB = 1024 * 1024;\nconst defaultOptions = {\n  limit: 1,\n  retryDelays: [0, 1000, 3000, 5000],\n\n  getChunkSize(file) {\n    return Math.ceil(file.size / 10000);\n  },\n\n  onStart() {},\n\n  onProgress() {},\n\n  onPartComplete() {},\n\n  onSuccess() {},\n\n  onError(err) {\n    throw err;\n  }\n\n};\n\nfunction ensureInt(value) {\n  if (typeof value === 'string') {\n    return parseInt(value, 10);\n  }\n\n  if (typeof value === 'number') {\n    return value;\n  }\n\n  throw new TypeError('Expected a number');\n}\n\nvar _aborted = /*#__PURE__*/_classPrivateFieldLooseKey(\"aborted\");\n\nvar _initChunks = /*#__PURE__*/_classPrivateFieldLooseKey(\"initChunks\");\n\nvar _createUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"createUpload\");\n\nvar _resumeUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"resumeUpload\");\n\nvar _uploadParts = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadParts\");\n\nvar _retryable = /*#__PURE__*/_classPrivateFieldLooseKey(\"retryable\");\n\nvar _prepareUploadParts = /*#__PURE__*/_classPrivateFieldLooseKey(\"prepareUploadParts\");\n\nvar _uploadPartRetryable = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadPartRetryable\");\n\nvar _uploadPart = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadPart\");\n\nvar _onPartProgress = /*#__PURE__*/_classPrivateFieldLooseKey(\"onPartProgress\");\n\nvar _onPartComplete = /*#__PURE__*/_classPrivateFieldLooseKey(\"onPartComplete\");\n\nvar _uploadPartBytes = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadPartBytes\");\n\nvar _completeUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"completeUpload\");\n\nvar _abortUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"abortUpload\");\n\nvar _onError = /*#__PURE__*/_classPrivateFieldLooseKey(\"onError\");\n\nclass MultipartUploader {\n  constructor(file, options) {\n    Object.defineProperty(this, _onError, {\n      value: _onError2\n    });\n    Object.defineProperty(this, _abortUpload, {\n      value: _abortUpload2\n    });\n    Object.defineProperty(this, _completeUpload, {\n      value: _completeUpload2\n    });\n    Object.defineProperty(this, _uploadPartBytes, {\n      value: _uploadPartBytes2\n    });\n    Object.defineProperty(this, _onPartComplete, {\n      value: _onPartComplete2\n    });\n    Object.defineProperty(this, _onPartProgress, {\n      value: _onPartProgress2\n    });\n    Object.defineProperty(this, _uploadPart, {\n      value: _uploadPart2\n    });\n    Object.defineProperty(this, _uploadPartRetryable, {\n      value: _uploadPartRetryable2\n    });\n    Object.defineProperty(this, _prepareUploadParts, {\n      value: _prepareUploadParts2\n    });\n    Object.defineProperty(this, _retryable, {\n      value: _retryable2\n    });\n    Object.defineProperty(this, _uploadParts, {\n      value: _uploadParts2\n    });\n    Object.defineProperty(this, _resumeUpload, {\n      value: _resumeUpload2\n    });\n    Object.defineProperty(this, _createUpload, {\n      value: _createUpload2\n    });\n    Object.defineProperty(this, _initChunks, {\n      value: _initChunks2\n    });\n    Object.defineProperty(this, _aborted, {\n      value: _aborted2\n    });\n    this.options = { ...defaultOptions,\n      ...options\n    }; // Use default `getChunkSize` if it was null or something\n\n    if (!this.options.getChunkSize) {\n      this.options.getChunkSize = defaultOptions.getChunkSize;\n    }\n\n    this.file = file;\n    this.abortController = new _AbortController.AbortController();\n    this.key = this.options.key || null;\n    this.uploadId = this.options.uploadId || null;\n    this.parts = []; // Do `this.createdPromise.then(OP)` to execute an operation `OP` _only_ if the\n    // upload was created already. That also ensures that the sequencing is right\n    // (so the `OP` definitely happens if the upload is created).\n    //\n    // This mostly exists to make `#abortUpload` work well: only sending the abort request if\n    // the upload was already created, and if the createMultipartUpload request is still in flight,\n    // aborting it immediately after it finishes.\n\n    this.createdPromise = Promise.reject(); // eslint-disable-line prefer-promise-reject-errors\n\n    this.isPaused = false;\n    this.partsInProgress = 0;\n    this.chunks = null;\n    this.chunkState = null;\n\n    _classPrivateFieldLooseBase(this, _initChunks)[_initChunks]();\n\n    this.createdPromise.catch(() => {}); // silence uncaught rejection warning\n  }\n  /**\n   * Was this upload aborted?\n   *\n   * If yes, we may need to throw an AbortError.\n   *\n   * @returns {boolean}\n   */\n\n\n  start() {\n    this.isPaused = false;\n\n    if (this.uploadId) {\n      _classPrivateFieldLooseBase(this, _resumeUpload)[_resumeUpload]();\n    } else {\n      _classPrivateFieldLooseBase(this, _createUpload)[_createUpload]();\n    }\n  }\n\n  pause() {\n    this.abortController.abort(); // Swap it out for a new controller, because this instance may be resumed later.\n\n    this.abortController = new _AbortController.AbortController();\n    this.isPaused = true;\n  }\n\n  abort(opts) {\n    var _opts;\n\n    if (opts === void 0) {\n      opts = undefined;\n    }\n\n    if ((_opts = opts) != null && _opts.really) _classPrivateFieldLooseBase(this, _abortUpload)[_abortUpload]();else this.pause();\n  }\n\n}\n\nfunction _aborted2() {\n  return this.abortController.signal.aborted;\n}\n\nfunction _initChunks2() {\n  const chunks = [];\n  const desiredChunkSize = this.options.getChunkSize(this.file); // at least 5MB per request, at most 10k requests\n\n  const minChunkSize = Math.max(5 * MB, Math.ceil(this.file.size / 10000));\n  const chunkSize = Math.max(desiredChunkSize, minChunkSize); // Upload zero-sized files in one zero-sized chunk\n\n  if (this.file.size === 0) {\n    chunks.push(this.file);\n  } else {\n    for (let i = 0; i < this.file.size; i += chunkSize) {\n      const end = Math.min(this.file.size, i + chunkSize);\n      chunks.push(this.file.slice(i, end));\n    }\n  }\n\n  this.chunks = chunks;\n  this.chunkState = chunks.map(() => ({\n    uploaded: 0,\n    busy: false,\n    done: false\n  }));\n}\n\nfunction _createUpload2() {\n  this.createdPromise = Promise.resolve().then(() => this.options.createMultipartUpload());\n  return this.createdPromise.then(result => {\n    if (_classPrivateFieldLooseBase(this, _aborted)[_aborted]()) throw (0, _AbortController.createAbortError)();\n    const valid = typeof result === 'object' && result && typeof result.uploadId === 'string' && typeof result.key === 'string';\n\n    if (!valid) {\n      throw new TypeError('AwsS3/Multipart: Got incorrect result from `createMultipartUpload()`, expected an object `{ uploadId, key }`.');\n    }\n\n    this.key = result.key;\n    this.uploadId = result.uploadId;\n    this.options.onStart(result);\n\n    _classPrivateFieldLooseBase(this, _uploadParts)[_uploadParts]();\n  }).catch(err => {\n    _classPrivateFieldLooseBase(this, _onError)[_onError](err);\n  });\n}\n\nasync function _resumeUpload2() {\n  try {\n    const parts = await this.options.listParts({\n      uploadId: this.uploadId,\n      key: this.key\n    });\n    if (_classPrivateFieldLooseBase(this, _aborted)[_aborted]()) throw (0, _AbortController.createAbortError)();\n    parts.forEach(part => {\n      const i = part.PartNumber - 1;\n      this.chunkState[i] = {\n        uploaded: ensureInt(part.Size),\n        etag: part.ETag,\n        done: true\n      }; // Only add if we did not yet know about this part.\n\n      if (!this.parts.some(p => p.PartNumber === part.PartNumber)) {\n        this.parts.push({\n          PartNumber: part.PartNumber,\n          ETag: part.ETag\n        });\n      }\n    });\n\n    _classPrivateFieldLooseBase(this, _uploadParts)[_uploadParts]();\n  } catch (err) {\n    _classPrivateFieldLooseBase(this, _onError)[_onError](err);\n  }\n}\n\nfunction _uploadParts2() {\n  if (this.isPaused) return; // All parts are uploaded.\n\n  if (this.chunkState.every(state => state.done)) {\n    _classPrivateFieldLooseBase(this, _completeUpload)[_completeUpload]();\n\n    return;\n  } // For a 100MB file, with the default min chunk size of 5MB and a limit of 10:\n  //\n  // Total 20 parts\n  // ---------\n  // Need 1 is 10\n  // Need 2 is 5\n  // Need 3 is 5\n\n\n  const need = this.options.limit - this.partsInProgress;\n  const completeChunks = this.chunkState.filter(state => state.done).length;\n  const remainingChunks = this.chunks.length - completeChunks;\n  let minNeeded = Math.ceil(this.options.limit / 2);\n\n  if (minNeeded > remainingChunks) {\n    minNeeded = remainingChunks;\n  }\n\n  if (need < minNeeded) return;\n  const candidates = [];\n\n  for (let i = 0; i < this.chunkState.length; i++) {\n    const state = this.chunkState[i]; // eslint-disable-next-line no-continue\n\n    if (state.done || state.busy) continue;\n    candidates.push(i);\n\n    if (candidates.length >= need) {\n      break;\n    }\n  }\n\n  if (candidates.length === 0) return;\n\n  _classPrivateFieldLooseBase(this, _prepareUploadParts)[_prepareUploadParts](candidates).then(result => {\n    candidates.forEach(index => {\n      const partNumber = index + 1;\n      const prePreparedPart = {\n        url: result.presignedUrls[partNumber],\n        headers: result.headers\n      };\n\n      _classPrivateFieldLooseBase(this, _uploadPartRetryable)[_uploadPartRetryable](index, prePreparedPart).then(() => {\n        _classPrivateFieldLooseBase(this, _uploadParts)[_uploadParts]();\n      }, err => {\n        _classPrivateFieldLooseBase(this, _onError)[_onError](err);\n      });\n    });\n  });\n}\n\nfunction _retryable2(_ref) {\n  let {\n    before,\n    attempt,\n    after\n  } = _ref;\n  const {\n    retryDelays\n  } = this.options;\n  const {\n    signal\n  } = this.abortController;\n  if (before) before();\n\n  function shouldRetry(err) {\n    if (err.source && typeof err.source.status === 'number') {\n      const {\n        status\n      } = err.source; // 0 probably indicates network failure\n\n      return status === 0 || status === 409 || status === 423 || status >= 500 && status < 600;\n    }\n\n    return false;\n  }\n\n  const doAttempt = retryAttempt => attempt().catch(err => {\n    if (_classPrivateFieldLooseBase(this, _aborted)[_aborted]()) throw (0, _AbortController.createAbortError)();\n\n    if (shouldRetry(err) && retryAttempt < retryDelays.length) {\n      return delay(retryDelays[retryAttempt], {\n        signal\n      }).then(() => doAttempt(retryAttempt + 1));\n    }\n\n    throw err;\n  });\n\n  return doAttempt(0).then(result => {\n    if (after) after();\n    return result;\n  }, err => {\n    if (after) after();\n    throw err;\n  });\n}\n\nasync function _prepareUploadParts2(candidates) {\n  candidates.forEach(i => {\n    this.chunkState[i].busy = true;\n  });\n  const result = await _classPrivateFieldLooseBase(this, _retryable)[_retryable]({\n    attempt: () => this.options.prepareUploadParts({\n      key: this.key,\n      uploadId: this.uploadId,\n      partNumbers: candidates.map(index => index + 1),\n      chunks: candidates.reduce((chunks, candidate) => ({ ...chunks,\n        // Use the part number as the index\n        [candidate + 1]: this.chunks[candidate]\n      }), {})\n    })\n  });\n\n  if (typeof (result == null ? void 0 : result.presignedUrls) !== 'object') {\n    throw new TypeError('AwsS3/Multipart: Got incorrect result from `prepareUploadParts()`, expected an object `{ presignedUrls }`.');\n  }\n\n  return result;\n}\n\nfunction _uploadPartRetryable2(index, prePreparedPart) {\n  return _classPrivateFieldLooseBase(this, _retryable)[_retryable]({\n    before: () => {\n      this.partsInProgress += 1;\n    },\n    attempt: () => _classPrivateFieldLooseBase(this, _uploadPart)[_uploadPart](index, prePreparedPart),\n    after: () => {\n      this.partsInProgress -= 1;\n    }\n  });\n}\n\nfunction _uploadPart2(index, prePreparedPart) {\n  this.chunkState[index].busy = true;\n  const valid = typeof (prePreparedPart == null ? void 0 : prePreparedPart.url) === 'string';\n\n  if (!valid) {\n    throw new TypeError('AwsS3/Multipart: Got incorrect result for `prePreparedPart`, expected an object `{ url }`.');\n  }\n\n  const {\n    url,\n    headers\n  } = prePreparedPart;\n\n  if (_classPrivateFieldLooseBase(this, _aborted)[_aborted]()) {\n    this.chunkState[index].busy = false;\n    throw (0, _AbortController.createAbortError)();\n  }\n\n  return _classPrivateFieldLooseBase(this, _uploadPartBytes)[_uploadPartBytes](index, url, headers);\n}\n\nfunction _onPartProgress2(index, sent) {\n  this.chunkState[index].uploaded = ensureInt(sent);\n  const totalUploaded = this.chunkState.reduce((n, c) => n + c.uploaded, 0);\n  this.options.onProgress(totalUploaded, this.file.size);\n}\n\nfunction _onPartComplete2(index, etag) {\n  this.chunkState[index].etag = etag;\n  this.chunkState[index].done = true;\n  const part = {\n    PartNumber: index + 1,\n    ETag: etag\n  };\n  this.parts.push(part);\n  this.options.onPartComplete(part);\n}\n\nfunction _uploadPartBytes2(index, url, headers) {\n  const body = this.chunks[index];\n  const {\n    signal\n  } = this.abortController;\n  let defer;\n  const promise = new Promise((resolve, reject) => {\n    defer = {\n      resolve,\n      reject\n    };\n  });\n  const xhr = new XMLHttpRequest();\n  xhr.open('PUT', url, true);\n\n  if (headers) {\n    Object.keys(headers).forEach(key => {\n      xhr.setRequestHeader(key, headers[key]);\n    });\n  }\n\n  xhr.responseType = 'text';\n\n  function cleanup() {\n    // eslint-disable-next-line no-use-before-define\n    signal.removeEventListener('abort', onabort);\n  }\n\n  function onabort() {\n    xhr.abort();\n  }\n\n  signal.addEventListener('abort', onabort);\n  xhr.upload.addEventListener('progress', ev => {\n    if (!ev.lengthComputable) return;\n\n    _classPrivateFieldLooseBase(this, _onPartProgress)[_onPartProgress](index, ev.loaded, ev.total);\n  });\n  xhr.addEventListener('abort', () => {\n    cleanup();\n    this.chunkState[index].busy = false;\n    defer.reject((0, _AbortController.createAbortError)());\n  });\n  xhr.addEventListener('load', ev => {\n    cleanup();\n    this.chunkState[index].busy = false;\n\n    if (ev.target.status < 200 || ev.target.status >= 300) {\n      const error = new Error('Non 2xx');\n      error.source = ev.target;\n      defer.reject(error);\n      return;\n    } // This avoids the net::ERR_OUT_OF_MEMORY in Chromium Browsers.\n\n\n    this.chunks[index] = null;\n\n    _classPrivateFieldLooseBase(this, _onPartProgress)[_onPartProgress](index, body.size, body.size); // NOTE This must be allowed by CORS.\n\n\n    const etag = ev.target.getResponseHeader('ETag');\n\n    if (etag === null) {\n      defer.reject(new Error('AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.'));\n      return;\n    }\n\n    _classPrivateFieldLooseBase(this, _onPartComplete)[_onPartComplete](index, etag);\n\n    defer.resolve();\n  });\n  xhr.addEventListener('error', ev => {\n    cleanup();\n    this.chunkState[index].busy = false;\n    const error = new Error('Unknown error');\n    error.source = ev.target;\n    defer.reject(error);\n  });\n  xhr.send(body);\n  return promise;\n}\n\nasync function _completeUpload2() {\n  // Parts may not have completed uploading in sorted order, if limit > 1.\n  this.parts.sort((a, b) => a.PartNumber - b.PartNumber);\n\n  try {\n    const result = await this.options.completeMultipartUpload({\n      key: this.key,\n      uploadId: this.uploadId,\n      parts: this.parts\n    });\n    this.options.onSuccess(result);\n  } catch (err) {\n    _classPrivateFieldLooseBase(this, _onError)[_onError](err);\n  }\n}\n\nfunction _abortUpload2() {\n  this.abortController.abort();\n  this.createdPromise.then(() => {\n    this.options.abortMultipartUpload({\n      key: this.key,\n      uploadId: this.uploadId\n    });\n  }, () => {// if the creation failed we do not need to abort\n  });\n}\n\nfunction _onError2(err) {\n  if (err && err.name === 'AbortError') {\n    return;\n  }\n\n  this.options.onError(err);\n}\n\nmodule.exports = MultipartUploader;","\"use strict\";\n\nvar _companionClient = require(\"@uppy/companion-client\");\n\nvar _RateLimitedQueue = require(\"@uppy/utils/lib/RateLimitedQueue\");\n\nlet _Symbol$for;\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nconst BasePlugin = require(\"@uppy/core/lib/BasePlugin\");\n\nconst EventTracker = require(\"@uppy/utils/lib/EventTracker\");\n\nconst emitSocketProgress = require(\"@uppy/utils/lib/emitSocketProgress\");\n\nconst getSocketHost = require(\"@uppy/utils/lib/getSocketHost\");\n\nconst packageJson = {\n  \"version\": \"2.4.1\"\n};\n\nconst MultipartUploader = require(\"./MultipartUploader.js\");\n\nfunction assertServerError(res) {\n  if (res && res.error) {\n    const error = new Error(res.message);\n    Object.assign(error, res.error);\n    throw error;\n  }\n\n  return res;\n}\n\nvar _queueRequestSocketToken = /*#__PURE__*/_classPrivateFieldLooseKey(\"queueRequestSocketToken\");\n\nvar _client = /*#__PURE__*/_classPrivateFieldLooseKey(\"client\");\n\nvar _requestSocketToken = /*#__PURE__*/_classPrivateFieldLooseKey(\"requestSocketToken\");\n\nvar _setCompanionHeaders = /*#__PURE__*/_classPrivateFieldLooseKey(\"setCompanionHeaders\");\n\n_Symbol$for = Symbol.for('uppy test: getClient');\n\nclass AwsS3Multipart extends BasePlugin {\n  constructor(uppy, _opts) {\n    super(uppy, _opts);\n    Object.defineProperty(this, _queueRequestSocketToken, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _client, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _requestSocketToken, {\n      writable: true,\n      value: async file => {\n        const Client = file.remote.providerOptions.provider ? _companionClient.Provider : _companionClient.RequestClient;\n        const client = new Client(this.uppy, file.remote.providerOptions);\n        const opts = { ...this.opts\n        };\n\n        if (file.tus) {\n          // Install file-specific upload overrides.\n          Object.assign(opts, file.tus);\n        }\n\n        const res = await client.post(file.remote.url, { ...file.remote.body,\n          protocol: 's3-multipart',\n          size: file.data.size,\n          metadata: file.meta\n        });\n        return res.token;\n      }\n    });\n    Object.defineProperty(this, _setCompanionHeaders, {\n      writable: true,\n      value: () => {\n        _classPrivateFieldLooseBase(this, _client)[_client].setCompanionHeaders(this.opts.companionHeaders);\n\n        return Promise.resolve();\n      }\n    });\n    this.type = 'uploader';\n    this.id = this.opts.id || 'AwsS3Multipart';\n    this.title = 'AWS S3 Multipart';\n    _classPrivateFieldLooseBase(this, _client)[_client] = new _companionClient.RequestClient(uppy, _opts);\n    const defaultOptions = {\n      timeout: 30 * 1000,\n      limit: 0,\n      retryDelays: [0, 1000, 3000, 5000],\n      createMultipartUpload: this.createMultipartUpload.bind(this),\n      listParts: this.listParts.bind(this),\n      prepareUploadParts: this.prepareUploadParts.bind(this),\n      abortMultipartUpload: this.abortMultipartUpload.bind(this),\n      completeMultipartUpload: this.completeMultipartUpload.bind(this),\n      companionHeaders: {}\n    };\n    this.opts = { ...defaultOptions,\n      ..._opts\n    };\n    this.upload = this.upload.bind(this);\n    this.requests = new _RateLimitedQueue.RateLimitedQueue(this.opts.limit);\n    this.uploaders = Object.create(null);\n    this.uploaderEvents = Object.create(null);\n    this.uploaderSockets = Object.create(null);\n    _classPrivateFieldLooseBase(this, _queueRequestSocketToken)[_queueRequestSocketToken] = this.requests.wrapPromiseFunction(_classPrivateFieldLooseBase(this, _requestSocketToken)[_requestSocketToken]);\n  }\n\n  [_Symbol$for]() {\n    return _classPrivateFieldLooseBase(this, _client)[_client];\n  } // TODO: remove getter and setter for #client on the next major release\n\n\n  get client() {\n    return _classPrivateFieldLooseBase(this, _client)[_client];\n  }\n\n  set client(client) {\n    _classPrivateFieldLooseBase(this, _client)[_client] = client;\n  }\n  /**\n   * Clean up all references for a file's upload: the MultipartUploader instance,\n   * any events related to the file, and the Companion WebSocket connection.\n   *\n   * Set `opts.abort` to tell S3 that the multipart upload is cancelled and must be removed.\n   * This should be done when the user cancels the upload, not when the upload is completed or errored.\n   */\n\n\n  resetUploaderReferences(fileID, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (this.uploaders[fileID]) {\n      this.uploaders[fileID].abort({\n        really: opts.abort || false\n      });\n      this.uploaders[fileID] = null;\n    }\n\n    if (this.uploaderEvents[fileID]) {\n      this.uploaderEvents[fileID].remove();\n      this.uploaderEvents[fileID] = null;\n    }\n\n    if (this.uploaderSockets[fileID]) {\n      this.uploaderSockets[fileID].close();\n      this.uploaderSockets[fileID] = null;\n    }\n  }\n\n  assertHost(method) {\n    if (!this.opts.companionUrl) {\n      throw new Error(`Expected a \\`companionUrl\\` option containing a Companion address, or if you are not using Companion, a custom \\`${method}\\` implementation.`);\n    }\n  }\n\n  createMultipartUpload(file) {\n    this.assertHost('createMultipartUpload');\n    const metadata = {};\n    Object.keys(file.meta).forEach(key => {\n      if (file.meta[key] != null) {\n        metadata[key] = file.meta[key].toString();\n      }\n    });\n    return _classPrivateFieldLooseBase(this, _client)[_client].post('s3/multipart', {\n      filename: file.name,\n      type: file.type,\n      metadata\n    }).then(assertServerError);\n  }\n\n  listParts(file, _ref) {\n    let {\n      key,\n      uploadId\n    } = _ref;\n    this.assertHost('listParts');\n    const filename = encodeURIComponent(key);\n    return _classPrivateFieldLooseBase(this, _client)[_client].get(`s3/multipart/${uploadId}?key=${filename}`).then(assertServerError);\n  }\n\n  prepareUploadParts(file, _ref2) {\n    let {\n      key,\n      uploadId,\n      partNumbers\n    } = _ref2;\n    this.assertHost('prepareUploadParts');\n    const filename = encodeURIComponent(key);\n    return _classPrivateFieldLooseBase(this, _client)[_client].get(`s3/multipart/${uploadId}/batch?key=${filename}&partNumbers=${partNumbers.join(',')}`).then(assertServerError);\n  }\n\n  completeMultipartUpload(file, _ref3) {\n    let {\n      key,\n      uploadId,\n      parts\n    } = _ref3;\n    this.assertHost('completeMultipartUpload');\n    const filename = encodeURIComponent(key);\n    const uploadIdEnc = encodeURIComponent(uploadId);\n    return _classPrivateFieldLooseBase(this, _client)[_client].post(`s3/multipart/${uploadIdEnc}/complete?key=${filename}`, {\n      parts\n    }).then(assertServerError);\n  }\n\n  abortMultipartUpload(file, _ref4) {\n    let {\n      key,\n      uploadId\n    } = _ref4;\n    this.assertHost('abortMultipartUpload');\n    const filename = encodeURIComponent(key);\n    const uploadIdEnc = encodeURIComponent(uploadId);\n    return _classPrivateFieldLooseBase(this, _client)[_client].delete(`s3/multipart/${uploadIdEnc}?key=${filename}`).then(assertServerError);\n  }\n\n  uploadFile(file) {\n    var _this = this;\n\n    return new Promise((resolve, reject) => {\n      let queuedRequest;\n\n      const onStart = data => {\n        const cFile = this.uppy.getFile(file.id);\n        this.uppy.setFileState(file.id, {\n          s3Multipart: { ...cFile.s3Multipart,\n            key: data.key,\n            uploadId: data.uploadId\n          }\n        });\n      };\n\n      const onProgress = (bytesUploaded, bytesTotal) => {\n        this.uppy.emit('upload-progress', file, {\n          uploader: this,\n          bytesUploaded,\n          bytesTotal\n        });\n      };\n\n      const onError = err => {\n        this.uppy.log(err);\n        this.uppy.emit('upload-error', file, err);\n        queuedRequest.done();\n        this.resetUploaderReferences(file.id);\n        reject(err);\n      };\n\n      const onSuccess = result => {\n        const uploadObject = upload; // eslint-disable-line no-use-before-define\n\n        const uploadResp = {\n          body: { ...result\n          },\n          uploadURL: result.location\n        };\n        queuedRequest.done();\n        this.resetUploaderReferences(file.id);\n        const cFile = this.uppy.getFile(file.id);\n        this.uppy.emit('upload-success', cFile || file, uploadResp);\n\n        if (result.location) {\n          this.uppy.log(`Download ${uploadObject.file.name} from ${result.location}`);\n        }\n\n        resolve(uploadObject);\n      };\n\n      const onPartComplete = part => {\n        const cFile = this.uppy.getFile(file.id);\n\n        if (!cFile) {\n          return;\n        }\n\n        this.uppy.emit('s3-multipart:part-uploaded', cFile, part);\n      };\n\n      const upload = new MultipartUploader(file.data, {\n        // .bind to pass the file object to each handler.\n        createMultipartUpload: this.opts.createMultipartUpload.bind(this, file),\n        listParts: this.opts.listParts.bind(this, file),\n        prepareUploadParts: this.opts.prepareUploadParts.bind(this, file),\n        completeMultipartUpload: this.opts.completeMultipartUpload.bind(this, file),\n        abortMultipartUpload: this.opts.abortMultipartUpload.bind(this, file),\n        getChunkSize: this.opts.getChunkSize ? this.opts.getChunkSize.bind(this) : null,\n        onStart,\n        onProgress,\n        onError,\n        onSuccess,\n        onPartComplete,\n        limit: this.opts.limit || 5,\n        retryDelays: this.opts.retryDelays || [],\n        ...file.s3Multipart\n      });\n      this.uploaders[file.id] = upload;\n      this.uploaderEvents[file.id] = new EventTracker(this.uppy);\n      queuedRequest = this.requests.run(() => {\n        if (!file.isPaused) {\n          upload.start();\n        } // Don't do anything here, the caller will take care of cancelling the upload itself\n        // using resetUploaderReferences(). This is because resetUploaderReferences() has to be\n        // called when this request is still in the queue, and has not been started yet, too. At\n        // that point this cancellation function is not going to be called.\n\n\n        return () => {};\n      });\n      this.onFileRemove(file.id, removed => {\n        queuedRequest.abort();\n        this.resetUploaderReferences(file.id, {\n          abort: true\n        });\n        resolve(`upload ${removed.id} was removed`);\n      });\n      this.onCancelAll(file.id, function (_temp) {\n        let {\n          reason\n        } = _temp === void 0 ? {} : _temp;\n\n        if (reason === 'user') {\n          queuedRequest.abort();\n\n          _this.resetUploaderReferences(file.id, {\n            abort: true\n          });\n        }\n\n        resolve(`upload ${file.id} was canceled`);\n      });\n      this.onFilePause(file.id, isPaused => {\n        if (isPaused) {\n          // Remove this file from the queue so another file can start in its place.\n          queuedRequest.abort();\n          upload.pause();\n        } else {\n          // Resuming an upload should be queued, else you could pause and then\n          // resume a queued upload to make it skip the queue.\n          queuedRequest.abort();\n          queuedRequest = this.requests.run(() => {\n            upload.start();\n            return () => {};\n          });\n        }\n      });\n      this.onPauseAll(file.id, () => {\n        queuedRequest.abort();\n        upload.pause();\n      });\n      this.onResumeAll(file.id, () => {\n        queuedRequest.abort();\n\n        if (file.error) {\n          upload.abort();\n        }\n\n        queuedRequest = this.requests.run(() => {\n          upload.start();\n          return () => {};\n        });\n      }); // Don't double-emit upload-started for Golden Retriever-restored files that were already started\n\n      if (!file.progress.uploadStarted || !file.isRestored) {\n        this.uppy.emit('upload-started', file);\n      }\n    });\n  }\n\n  async uploadRemote(file) {\n    this.resetUploaderReferences(file.id); // Don't double-emit upload-started for Golden Retriever-restored files that were already started\n\n    if (!file.progress.uploadStarted || !file.isRestored) {\n      this.uppy.emit('upload-started', file);\n    }\n\n    try {\n      if (file.serverToken) {\n        return this.connectToServerSocket(file);\n      }\n\n      const serverToken = await _classPrivateFieldLooseBase(this, _queueRequestSocketToken)[_queueRequestSocketToken](file);\n      this.uppy.setFileState(file.id, {\n        serverToken\n      });\n      return this.connectToServerSocket(this.uppy.getFile(file.id));\n    } catch (err) {\n      this.uppy.emit('upload-error', file, err);\n      throw err;\n    }\n  }\n\n  connectToServerSocket(file) {\n    var _this2 = this;\n\n    return new Promise((resolve, reject) => {\n      let queuedRequest;\n      const token = file.serverToken;\n      const host = getSocketHost(file.remote.companionUrl);\n      const socket = new _companionClient.Socket({\n        target: `${host}/api/${token}`\n      });\n      this.uploaderSockets[file.id] = socket;\n      this.uploaderEvents[file.id] = new EventTracker(this.uppy);\n      this.onFileRemove(file.id, () => {\n        queuedRequest.abort();\n        socket.send('cancel', {});\n        this.resetUploaderReferences(file.id, {\n          abort: true\n        });\n        resolve(`upload ${file.id} was removed`);\n      });\n      this.onFilePause(file.id, isPaused => {\n        if (isPaused) {\n          // Remove this file from the queue so another file can start in its place.\n          queuedRequest.abort();\n          socket.send('pause', {});\n        } else {\n          // Resuming an upload should be queued, else you could pause and then\n          // resume a queued upload to make it skip the queue.\n          queuedRequest.abort();\n          queuedRequest = this.requests.run(() => {\n            socket.send('resume', {});\n            return () => {};\n          });\n        }\n      });\n      this.onPauseAll(file.id, () => {\n        queuedRequest.abort();\n        socket.send('pause', {});\n      });\n      this.onCancelAll(file.id, function (_temp2) {\n        let {\n          reason\n        } = _temp2 === void 0 ? {} : _temp2;\n\n        if (reason === 'user') {\n          queuedRequest.abort();\n          socket.send('cancel', {});\n\n          _this2.resetUploaderReferences(file.id);\n        }\n\n        resolve(`upload ${file.id} was canceled`);\n      });\n      this.onResumeAll(file.id, () => {\n        queuedRequest.abort();\n\n        if (file.error) {\n          socket.send('pause', {});\n        }\n\n        queuedRequest = this.requests.run(() => {\n          socket.send('resume', {});\n        });\n      });\n      this.onRetry(file.id, () => {\n        // Only do the retry if the upload is actually in progress;\n        // else we could try to send these messages when the upload is still queued.\n        // We may need a better check for this since the socket may also be closed\n        // for other reasons, like network failures.\n        if (socket.isOpen) {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        }\n      });\n      this.onRetryAll(file.id, () => {\n        if (socket.isOpen) {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        }\n      });\n      socket.on('progress', progressData => emitSocketProgress(this, progressData, file));\n      socket.on('error', errData => {\n        this.uppy.emit('upload-error', file, new Error(errData.error));\n        this.resetUploaderReferences(file.id);\n        queuedRequest.done();\n        reject(new Error(errData.error));\n      });\n      socket.on('success', data => {\n        const uploadResp = {\n          uploadURL: data.url\n        };\n        this.uppy.emit('upload-success', file, uploadResp);\n        this.resetUploaderReferences(file.id);\n        queuedRequest.done();\n        resolve();\n      });\n      queuedRequest = this.requests.run(() => {\n        if (file.isPaused) {\n          socket.send('pause', {});\n        }\n\n        return () => {};\n      });\n    });\n  }\n\n  upload(fileIDs) {\n    if (fileIDs.length === 0) return Promise.resolve();\n    const promises = fileIDs.map(id => {\n      const file = this.uppy.getFile(id);\n\n      if (file.isRemote) {\n        return this.uploadRemote(file);\n      }\n\n      return this.uploadFile(file);\n    });\n    return Promise.all(promises);\n  }\n\n  onFileRemove(fileID, cb) {\n    this.uploaderEvents[fileID].on('file-removed', file => {\n      if (fileID === file.id) cb(file.id);\n    });\n  }\n\n  onFilePause(fileID, cb) {\n    this.uploaderEvents[fileID].on('upload-pause', (targetFileID, isPaused) => {\n      if (fileID === targetFileID) {\n        // const isPaused = this.uppy.pauseResume(fileID)\n        cb(isPaused);\n      }\n    });\n  }\n\n  onRetry(fileID, cb) {\n    this.uploaderEvents[fileID].on('upload-retry', targetFileID => {\n      if (fileID === targetFileID) {\n        cb();\n      }\n    });\n  }\n\n  onRetryAll(fileID, cb) {\n    this.uploaderEvents[fileID].on('retry-all', () => {\n      if (!this.uppy.getFile(fileID)) return;\n      cb();\n    });\n  }\n\n  onPauseAll(fileID, cb) {\n    this.uploaderEvents[fileID].on('pause-all', () => {\n      if (!this.uppy.getFile(fileID)) return;\n      cb();\n    });\n  }\n\n  onCancelAll(fileID, eventHandler) {\n    var _this3 = this;\n\n    this.uploaderEvents[fileID].on('cancel-all', function () {\n      if (!_this3.uppy.getFile(fileID)) return;\n      eventHandler(...arguments);\n    });\n  }\n\n  onResumeAll(fileID, cb) {\n    this.uploaderEvents[fileID].on('resume-all', () => {\n      if (!this.uppy.getFile(fileID)) return;\n      cb();\n    });\n  }\n\n  install() {\n    const {\n      capabilities\n    } = this.uppy.getState();\n    this.uppy.setState({\n      capabilities: { ...capabilities,\n        resumableUploads: true\n      }\n    });\n    this.uppy.addPreProcessor(_classPrivateFieldLooseBase(this, _setCompanionHeaders)[_setCompanionHeaders]);\n    this.uppy.addUploader(this.upload);\n  }\n\n  uninstall() {\n    const {\n      capabilities\n    } = this.uppy.getState();\n    this.uppy.setState({\n      capabilities: { ...capabilities,\n        resumableUploads: false\n      }\n    });\n    this.uppy.removePreProcessor(_classPrivateFieldLooseBase(this, _setCompanionHeaders)[_setCompanionHeaders]);\n    this.uppy.removeUploader(this.upload);\n  }\n\n}\n\nAwsS3Multipart.VERSION = packageJson.version;\nmodule.exports = AwsS3Multipart;","\"use strict\";\n\nvar _nonSecure = require(\"nanoid/non-secure\");\n\nvar _companionClient = require(\"@uppy/companion-client\");\n\nvar _RateLimitedQueue = require(\"@uppy/utils/lib/RateLimitedQueue\");\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nconst emitSocketProgress = require(\"@uppy/utils/lib/emitSocketProgress\");\n\nconst getSocketHost = require(\"@uppy/utils/lib/getSocketHost\");\n\nconst EventTracker = require(\"@uppy/utils/lib/EventTracker\");\n\nconst ProgressTimeout = require(\"@uppy/utils/lib/ProgressTimeout\");\n\nconst ErrorWithCause = require(\"@uppy/utils/lib/ErrorWithCause\");\n\nconst NetworkError = require(\"@uppy/utils/lib/NetworkError\");\n\nconst isNetworkError = require(\"@uppy/utils/lib/isNetworkError\");\n\n// See XHRUpload\nfunction buildResponseError(xhr, error) {\n  if (isNetworkError(xhr)) return new NetworkError(error, xhr);\n  const err = new ErrorWithCause('Upload error', {\n    cause: error\n  });\n  err.request = xhr;\n  return err;\n} // See XHRUpload\n\n\nfunction setTypeInBlob(file) {\n  const dataWithUpdatedType = file.data.slice(0, file.data.size, file.meta.type);\n  return dataWithUpdatedType;\n}\n\nfunction addMetadata(formData, meta, opts) {\n  const metaFields = Array.isArray(opts.metaFields) ? opts.metaFields // Send along all fields by default.\n  : Object.keys(meta);\n  metaFields.forEach(item => {\n    formData.append(item, meta[item]);\n  });\n}\n\nfunction createFormDataUpload(file, opts) {\n  const formPost = new FormData();\n  addMetadata(formPost, file.meta, opts);\n  const dataWithUpdatedType = setTypeInBlob(file);\n\n  if (file.name) {\n    formPost.append(opts.fieldName, dataWithUpdatedType, file.meta.name);\n  } else {\n    formPost.append(opts.fieldName, dataWithUpdatedType);\n  }\n\n  return formPost;\n}\n\nconst createBareUpload = file => file.data;\n\nvar _queueRequestSocketToken = /*#__PURE__*/_classPrivateFieldLooseKey(\"queueRequestSocketToken\");\n\nvar _getOptions = /*#__PURE__*/_classPrivateFieldLooseKey(\"getOptions\");\n\nvar _addEventHandlerForFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"addEventHandlerForFile\");\n\nvar _addEventHandlerIfFileStillExists = /*#__PURE__*/_classPrivateFieldLooseKey(\"addEventHandlerIfFileStillExists\");\n\nvar _uploadLocalFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadLocalFile\");\n\nvar _requestSocketToken = /*#__PURE__*/_classPrivateFieldLooseKey(\"requestSocketToken\");\n\nvar _uploadRemoteFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadRemoteFile\");\n\nclass MiniXHRUpload {\n  constructor(_uppy, _opts) {\n    Object.defineProperty(this, _uploadRemoteFile, {\n      value: _uploadRemoteFile2\n    });\n    Object.defineProperty(this, _uploadLocalFile, {\n      value: _uploadLocalFile2\n    });\n    Object.defineProperty(this, _addEventHandlerIfFileStillExists, {\n      value: _addEventHandlerIfFileStillExists2\n    });\n    Object.defineProperty(this, _addEventHandlerForFile, {\n      value: _addEventHandlerForFile2\n    });\n    Object.defineProperty(this, _getOptions, {\n      value: _getOptions2\n    });\n    Object.defineProperty(this, _queueRequestSocketToken, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _requestSocketToken, {\n      writable: true,\n      value: async file => {\n        const opts = _classPrivateFieldLooseBase(this, _getOptions)[_getOptions](file);\n\n        const Client = file.remote.providerOptions.provider ? _companionClient.Provider : _companionClient.RequestClient;\n        const client = new Client(this.uppy, file.remote.providerOptions);\n        const metaFields = Array.isArray(opts.metaFields) ? opts.metaFields // Send along all fields by default.\n        : Object.keys(file.meta);\n\n        if (file.tus) {\n          // Install file-specific upload overrides.\n          Object.assign(opts, file.tus);\n        }\n\n        const res = await client.post(file.remote.url, { ...file.remote.body,\n          endpoint: opts.endpoint,\n          size: file.data.size,\n          fieldname: opts.fieldName,\n          metadata: Object.fromEntries(metaFields.map(name => [name, file.meta[name]])),\n          httpMethod: opts.method,\n          useFormData: opts.formData,\n          headers: opts.headers\n        });\n        return res.token;\n      }\n    });\n    this.uppy = _uppy;\n    this.opts = {\n      validateStatus(status) {\n        return status >= 200 && status < 300;\n      },\n\n      ..._opts\n    };\n    this.requests = _opts[_RateLimitedQueue.internalRateLimitedQueue];\n    this.uploaderEvents = Object.create(null);\n    this.i18n = _opts.i18n;\n    _classPrivateFieldLooseBase(this, _queueRequestSocketToken)[_queueRequestSocketToken] = this.requests.wrapPromiseFunction(_classPrivateFieldLooseBase(this, _requestSocketToken)[_requestSocketToken]);\n  }\n\n  uploadFile(id, current, total) {\n    const file = this.uppy.getFile(id);\n\n    if (file.error) {\n      throw new Error(file.error);\n    } else if (file.isRemote) {\n      return _classPrivateFieldLooseBase(this, _uploadRemoteFile)[_uploadRemoteFile](file, current, total);\n    }\n\n    return _classPrivateFieldLooseBase(this, _uploadLocalFile)[_uploadLocalFile](file, current, total);\n  }\n\n  connectToServerSocket(file) {\n    return new Promise((resolve, reject) => {\n      const opts = _classPrivateFieldLooseBase(this, _getOptions)[_getOptions](file);\n\n      const token = file.serverToken;\n      const host = getSocketHost(file.remote.companionUrl);\n      const socket = new _companionClient.Socket({\n        target: `${host}/api/${token}`\n      });\n      this.uploaderEvents[file.id] = new EventTracker(this.uppy);\n      const queuedRequest = this.requests.run(() => {\n        if (file.isPaused) {\n          socket.send('pause', {});\n        }\n\n        return () => socket.close();\n      });\n\n      _classPrivateFieldLooseBase(this, _addEventHandlerForFile)[_addEventHandlerForFile]('file-removed', file.id, () => {\n        socket.send('cancel', {});\n        queuedRequest.abort();\n        resolve(`upload ${file.id} was removed`);\n      });\n\n      _classPrivateFieldLooseBase(this, _addEventHandlerIfFileStillExists)[_addEventHandlerIfFileStillExists]('cancel-all', file.id, function (_temp) {\n        let {\n          reason\n        } = _temp === void 0 ? {} : _temp;\n\n        if (reason === 'user') {\n          socket.send('cancel', {});\n          queuedRequest.abort();\n        }\n\n        resolve(`upload ${file.id} was canceled`);\n      });\n\n      _classPrivateFieldLooseBase(this, _addEventHandlerForFile)[_addEventHandlerForFile]('upload-retry', file.id, () => {\n        socket.send('pause', {});\n        socket.send('resume', {});\n      });\n\n      _classPrivateFieldLooseBase(this, _addEventHandlerIfFileStillExists)[_addEventHandlerIfFileStillExists]('retry-all', file.id, () => {\n        socket.send('pause', {});\n        socket.send('resume', {});\n      });\n\n      socket.on('progress', progressData => emitSocketProgress(this, progressData, file));\n      socket.on('success', data => {\n        const body = opts.getResponseData(data.response.responseText, data.response);\n        const uploadURL = body[opts.responseUrlFieldName];\n        const uploadResp = {\n          status: data.response.status,\n          body,\n          uploadURL,\n          bytesUploaded: data.bytesUploaded\n        };\n        this.uppy.emit('upload-success', file, uploadResp);\n        queuedRequest.done();\n\n        if (this.uploaderEvents[file.id]) {\n          this.uploaderEvents[file.id].remove();\n          this.uploaderEvents[file.id] = null;\n        }\n\n        return resolve();\n      });\n      socket.on('error', errData => {\n        const resp = errData.response;\n        const error = resp ? opts.getResponseError(resp.responseText, resp) : new ErrorWithCause(errData.error.message, {\n          cause: errData.error\n        });\n        this.uppy.emit('upload-error', file, error);\n        queuedRequest.done();\n\n        if (this.uploaderEvents[file.id]) {\n          this.uploaderEvents[file.id].remove();\n          this.uploaderEvents[file.id] = null;\n        }\n\n        reject(error);\n      });\n    }).catch(err => {\n      this.uppy.emit('upload-error', file, err);\n      return Promise.reject(err);\n    });\n  }\n\n}\n\nfunction _getOptions2(file) {\n  var _file$xhrUpload;\n\n  const {\n    uppy\n  } = this;\n  const overrides = uppy.getState().xhrUpload;\n  const opts = { ...this.opts,\n    ...(overrides || {}),\n    ...(file.xhrUpload || {}),\n    headers: { ...this.opts.headers,\n      ...(overrides == null ? void 0 : overrides.headers),\n      ...((_file$xhrUpload = file.xhrUpload) == null ? void 0 : _file$xhrUpload.headers)\n    }\n  };\n  return opts;\n}\n\nfunction _addEventHandlerForFile2(eventName, fileID, eventHandler) {\n  this.uploaderEvents[fileID].on(eventName, targetFileID => {\n    if (fileID === targetFileID) eventHandler();\n  });\n}\n\nfunction _addEventHandlerIfFileStillExists2(eventName, fileID, eventHandler) {\n  var _this = this;\n\n  this.uploaderEvents[fileID].on(eventName, function () {\n    if (_this.uppy.getFile(fileID)) eventHandler(...arguments);\n  });\n}\n\nfunction _uploadLocalFile2(file, current, total) {\n  const opts = _classPrivateFieldLooseBase(this, _getOptions)[_getOptions](file);\n\n  this.uppy.log(`uploading ${current} of ${total}`);\n  return new Promise((resolve, reject) => {\n    // This is done in index.js in the S3 plugin.\n    // this.uppy.emit('upload-started', file)\n    const data = opts.formData ? createFormDataUpload(file, opts) : createBareUpload(file, opts);\n    const xhr = new XMLHttpRequest();\n    this.uploaderEvents[file.id] = new EventTracker(this.uppy);\n    const timer = new ProgressTimeout(opts.timeout, () => {\n      xhr.abort(); // eslint-disable-next-line no-use-before-define\n\n      queuedRequest.done();\n      const error = new Error(this.i18n('timedOut', {\n        seconds: Math.ceil(opts.timeout / 1000)\n      }));\n      this.uppy.emit('upload-error', file, error);\n      reject(error);\n    });\n    const id = (0, _nonSecure.nanoid)();\n    xhr.upload.addEventListener('loadstart', () => {\n      this.uppy.log(`[AwsS3/XHRUpload] ${id} started`);\n    });\n    xhr.upload.addEventListener('progress', ev => {\n      this.uppy.log(`[AwsS3/XHRUpload] ${id} progress: ${ev.loaded} / ${ev.total}`); // Begin checking for timeouts when progress starts, instead of loading,\n      // to avoid timing out requests on browser concurrency queue\n\n      timer.progress();\n\n      if (ev.lengthComputable) {\n        this.uppy.emit('upload-progress', file, {\n          uploader: this,\n          bytesUploaded: ev.loaded,\n          bytesTotal: ev.total\n        });\n      }\n    });\n    xhr.addEventListener('load', ev => {\n      this.uppy.log(`[AwsS3/XHRUpload] ${id} finished`);\n      timer.done(); // eslint-disable-next-line no-use-before-define\n\n      queuedRequest.done();\n\n      if (this.uploaderEvents[file.id]) {\n        this.uploaderEvents[file.id].remove();\n        this.uploaderEvents[file.id] = null;\n      }\n\n      if (opts.validateStatus(ev.target.status, xhr.responseText, xhr)) {\n        const body = opts.getResponseData(xhr.responseText, xhr);\n        const uploadURL = body[opts.responseUrlFieldName];\n        const uploadResp = {\n          status: ev.target.status,\n          body,\n          uploadURL\n        };\n        this.uppy.emit('upload-success', file, uploadResp);\n\n        if (uploadURL) {\n          this.uppy.log(`Download ${file.name} from ${uploadURL}`);\n        }\n\n        return resolve(file);\n      }\n\n      const body = opts.getResponseData(xhr.responseText, xhr);\n      const error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n      const response = {\n        status: ev.target.status,\n        body\n      };\n      this.uppy.emit('upload-error', file, error, response);\n      return reject(error);\n    });\n    xhr.addEventListener('error', () => {\n      this.uppy.log(`[AwsS3/XHRUpload] ${id} errored`);\n      timer.done(); // eslint-disable-next-line no-use-before-define\n\n      queuedRequest.done();\n\n      if (this.uploaderEvents[file.id]) {\n        this.uploaderEvents[file.id].remove();\n        this.uploaderEvents[file.id] = null;\n      }\n\n      const error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n      this.uppy.emit('upload-error', file, error);\n      return reject(error);\n    });\n    xhr.open(opts.method.toUpperCase(), opts.endpoint, true); // IE10 does not allow setting `withCredentials` and `responseType`\n    // before `open()` is called. It’s important to set withCredentials\n    // to a boolean, otherwise React Native crashes\n\n    xhr.withCredentials = Boolean(opts.withCredentials);\n\n    if (opts.responseType !== '') {\n      xhr.responseType = opts.responseType;\n    }\n\n    Object.keys(opts.headers).forEach(header => {\n      xhr.setRequestHeader(header, opts.headers[header]);\n    });\n    const queuedRequest = this.requests.run(() => {\n      xhr.send(data);\n      return () => {\n        // eslint-disable-next-line no-use-before-define\n        timer.done();\n        xhr.abort();\n      };\n    }, {\n      priority: 1\n    });\n\n    _classPrivateFieldLooseBase(this, _addEventHandlerForFile)[_addEventHandlerForFile]('file-removed', file.id, () => {\n      queuedRequest.abort();\n      reject(new Error('File removed'));\n    });\n\n    _classPrivateFieldLooseBase(this, _addEventHandlerIfFileStillExists)[_addEventHandlerIfFileStillExists]('cancel-all', file.id, function (_temp2) {\n      let {\n        reason\n      } = _temp2 === void 0 ? {} : _temp2;\n\n      if (reason === 'user') {\n        queuedRequest.abort();\n      }\n\n      reject(new Error('Upload cancelled'));\n    });\n  });\n}\n\nasync function _uploadRemoteFile2(file) {\n  try {\n    if (file.serverToken) {\n      return this.connectToServerSocket(file);\n    }\n\n    const serverToken = await _classPrivateFieldLooseBase(this, _queueRequestSocketToken)[_queueRequestSocketToken](file);\n    this.uppy.setFileState(file.id, {\n      serverToken\n    });\n    return this.connectToServerSocket(this.uppy.getFile(file.id));\n  } catch (err) {\n    this.uppy.emit('upload-error', file, err);\n    throw err;\n  }\n}\n\nmodule.exports = MiniXHRUpload;","\"use strict\";\n\nvar _RateLimitedQueue = require(\"@uppy/utils/lib/RateLimitedQueue\");\n\nvar _companionClient = require(\"@uppy/companion-client\");\n\nlet _Symbol$for;\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\n/**\n * This plugin is currently a A Big Hack™! The core reason for that is how this plugin\n * interacts with Uppy's current pipeline design. The pipeline can handle files in steps,\n * including preprocessing, uploading, and postprocessing steps. This plugin initially\n * was designed to do its work in a preprocessing step, and let XHRUpload deal with the\n * actual file upload as an uploading step. However, Uppy runs steps on all files at once,\n * sequentially: first, all files go through a preprocessing step, then, once they are all\n * done, they go through the uploading step.\n *\n * For S3, this causes severely broken behaviour when users upload many files. The\n * preprocessing step will request S3 upload URLs that are valid for a short time only,\n * but it has to do this for _all_ files, which can take a long time if there are hundreds\n * or even thousands of files. By the time the uploader step starts, the first URLs may\n * already have expired. If not, the uploading might take such a long time that later URLs\n * will expire before some files can be uploaded.\n *\n * The long-term solution to this problem is to change the upload pipeline so that files\n * can be sent to the next step individually. That requires a breaking change, so it is\n * planned for some future Uppy version.\n *\n * In the mean time, this plugin is stuck with a hackier approach: the necessary parts\n * of the XHRUpload implementation were copied into this plugin, as the MiniXHRUpload\n * class, and this plugin calls into it immediately once it receives an upload URL.\n * This isn't as nicely modular as we'd like and requires us to maintain two copies of\n * the XHRUpload code, but at least it's not horrifically broken :)\n */\nconst BasePlugin = require(\"@uppy/core/lib/BasePlugin\");\n\nconst packageJson = {\n  \"version\": \"2.2.1\"\n};\n\nconst MiniXHRUpload = require(\"./MiniXHRUpload.js\");\n\nconst isXml = require(\"./isXml.js\");\n\nconst locale = require(\"./locale.js\");\n\nfunction resolveUrl(origin, link) {\n  return new URL(link, origin || undefined).toString();\n}\n/**\n * Get the contents of a named tag in an XML source string.\n *\n * @param {string} source - The XML source string.\n * @param {string} tagName - The name of the tag.\n * @returns {string} The contents of the tag, or the empty string if the tag does not exist.\n */\n\n\nfunction getXmlValue(source, tagName) {\n  const start = source.indexOf(`<${tagName}>`);\n  const end = source.indexOf(`</${tagName}>`, start);\n  return start !== -1 && end !== -1 ? source.slice(start + tagName.length + 2, end) : '';\n}\n\nfunction assertServerError(res) {\n  if (res && res.error) {\n    const error = new Error(res.message);\n    Object.assign(error, res.error);\n    throw error;\n  }\n\n  return res;\n}\n\nfunction validateParameters(file, params) {\n  const valid = params != null && typeof params.url === 'string' && (typeof params.fields === 'object' || params.fields == null);\n\n  if (!valid) {\n    const err = new TypeError(`AwsS3: got incorrect result from 'getUploadParameters()' for file '${file.name}', expected an object '{ url, method, fields, headers }' but got '${JSON.stringify(params)}' instead.\\nSee https://uppy.io/docs/aws-s3/#getUploadParameters-file for more on the expected format.`);\n    throw err;\n  }\n\n  const methodIsValid = params.method == null || /^p(u|os)t$/i.test(params.method);\n\n  if (!methodIsValid) {\n    const err = new TypeError(`AwsS3: got incorrect method from 'getUploadParameters()' for file '${file.name}', expected  'put' or 'post' but got '${params.method}' instead.\\nSee https://uppy.io/docs/aws-s3/#getUploadParameters-file for more on the expected format.`);\n    throw err;\n  }\n} // Get the error data from a failed XMLHttpRequest instance.\n// `content` is the S3 response as a string.\n// `xhr` is the XMLHttpRequest instance.\n\n\nfunction defaultGetResponseError(content, xhr) {\n  // If no response, we don't have a specific error message, use the default.\n  if (!isXml(content, xhr)) {\n    return undefined;\n  }\n\n  const error = getXmlValue(content, 'Message');\n  return new Error(error);\n} // warning deduplication flag: see `getResponseData()` XHRUpload option definition\n\n\nlet warnedSuccessActionStatus = false;\n\nvar _client = /*#__PURE__*/_classPrivateFieldLooseKey(\"client\");\n\nvar _requests = /*#__PURE__*/_classPrivateFieldLooseKey(\"requests\");\n\nvar _uploader = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploader\");\n\nvar _handleUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"handleUpload\");\n\nvar _setCompanionHeaders = /*#__PURE__*/_classPrivateFieldLooseKey(\"setCompanionHeaders\");\n\n_Symbol$for = Symbol.for('uppy test: getClient');\n\nclass AwsS3 extends BasePlugin {\n  constructor(uppy, opts) {\n    super(uppy, opts);\n    Object.defineProperty(this, _client, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _requests, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _uploader, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _handleUpload, {\n      writable: true,\n      value: fileIDs => {\n        /**\n         * keep track of `getUploadParameters()` responses\n         * so we can cancel the calls individually using just a file ID\n         *\n         * @type {Record<string, import('@uppy/utils/lib/RateLimitedQueue').AbortablePromise<unknown>>}\n         */\n        const paramsPromises = Object.create(null);\n\n        function onremove(file) {\n          var _paramsPromises$id;\n\n          const {\n            id\n          } = file;\n          (_paramsPromises$id = paramsPromises[id]) == null ? void 0 : _paramsPromises$id.abort();\n        }\n\n        this.uppy.on('file-removed', onremove);\n        fileIDs.forEach(id => {\n          const file = this.uppy.getFile(id);\n          this.uppy.emit('upload-started', file);\n        });\n\n        const getUploadParameters = _classPrivateFieldLooseBase(this, _requests)[_requests].wrapPromiseFunction(file => {\n          return this.opts.getUploadParameters(file);\n        });\n\n        const numberOfFiles = fileIDs.length;\n        return Promise.allSettled(fileIDs.map((id, index) => {\n          paramsPromises[id] = getUploadParameters(this.uppy.getFile(id));\n          return paramsPromises[id].then(params => {\n            delete paramsPromises[id];\n            const file = this.uppy.getFile(id);\n            validateParameters(file, params);\n            const {\n              method = 'post',\n              url,\n              fields,\n              headers\n            } = params;\n            const xhrOpts = {\n              method,\n              formData: method.toLowerCase() === 'post',\n              endpoint: url,\n              metaFields: fields ? Object.keys(fields) : []\n            };\n\n            if (headers) {\n              xhrOpts.headers = headers;\n            }\n\n            this.uppy.setFileState(file.id, {\n              meta: { ...file.meta,\n                ...fields\n              },\n              xhrUpload: xhrOpts\n            });\n            return _classPrivateFieldLooseBase(this, _uploader)[_uploader].uploadFile(file.id, index, numberOfFiles);\n          }).catch(error => {\n            delete paramsPromises[id];\n            const file = this.uppy.getFile(id);\n            this.uppy.emit('upload-error', file, error);\n            return Promise.reject(error);\n          });\n        })).finally(() => {\n          // cleanup.\n          this.uppy.off('file-removed', onremove);\n        });\n      }\n    });\n    Object.defineProperty(this, _setCompanionHeaders, {\n      writable: true,\n      value: () => {\n        _classPrivateFieldLooseBase(this, _client)[_client].setCompanionHeaders(this.opts.companionHeaders);\n\n        return Promise.resolve();\n      }\n    });\n    this.type = 'uploader';\n    this.id = this.opts.id || 'AwsS3';\n    this.title = 'AWS S3';\n    this.defaultLocale = locale;\n    const defaultOptions = {\n      timeout: 30 * 1000,\n      limit: 0,\n      metaFields: [],\n      // have to opt in\n      getUploadParameters: this.getUploadParameters.bind(this),\n      companionHeaders: {}\n    };\n    this.opts = { ...defaultOptions,\n      ...opts\n    }; // TODO: remove i18n once we can depend on XHRUpload instead of MiniXHRUpload\n\n    this.i18nInit();\n    _classPrivateFieldLooseBase(this, _client)[_client] = new _companionClient.RequestClient(uppy, opts);\n    _classPrivateFieldLooseBase(this, _requests)[_requests] = new _RateLimitedQueue.RateLimitedQueue(this.opts.limit);\n  }\n\n  [_Symbol$for]() {\n    return _classPrivateFieldLooseBase(this, _client)[_client];\n  } // TODO: remove getter and setter for #client on the next major release\n\n\n  get client() {\n    return _classPrivateFieldLooseBase(this, _client)[_client];\n  }\n\n  set client(client) {\n    _classPrivateFieldLooseBase(this, _client)[_client] = client;\n  }\n\n  getUploadParameters(file) {\n    if (!this.opts.companionUrl) {\n      throw new Error('Expected a `companionUrl` option containing a Companion address.');\n    }\n\n    const filename = file.meta.name;\n    const {\n      type\n    } = file.meta;\n    const metadata = Object.fromEntries(this.opts.metaFields.filter(key => file.meta[key] != null).map(key => [`metadata[${key}]`, file.meta[key].toString()]));\n    const query = new URLSearchParams({\n      filename,\n      type,\n      ...metadata\n    });\n    return _classPrivateFieldLooseBase(this, _client)[_client].get(`s3/params?${query}`).then(assertServerError);\n  }\n\n  install() {\n    const {\n      uppy\n    } = this;\n    uppy.addPreProcessor(_classPrivateFieldLooseBase(this, _setCompanionHeaders)[_setCompanionHeaders]);\n    uppy.addUploader(_classPrivateFieldLooseBase(this, _handleUpload)[_handleUpload]); // Get the response data from a successful XMLHttpRequest instance.\n    // `content` is the S3 response as a string.\n    // `xhr` is the XMLHttpRequest instance.\n\n    function defaultGetResponseData(content, xhr) {\n      const opts = this; // If no response, we've hopefully done a PUT request to the file\n      // in the bucket on its full URL.\n\n      if (!isXml(content, xhr)) {\n        if (opts.method.toUpperCase() === 'POST') {\n          if (!warnedSuccessActionStatus) {\n            uppy.log('[AwsS3] No response data found, make sure to set the success_action_status AWS SDK option to 201. See https://uppy.io/docs/aws-s3/#POST-Uploads', 'warning');\n            warnedSuccessActionStatus = true;\n          } // The responseURL won't contain the object key. Give up.\n\n\n          return {\n            location: null\n          };\n        } // responseURL is not available in older browsers.\n\n\n        if (!xhr.responseURL) {\n          return {\n            location: null\n          };\n        } // Trim the query string because it's going to be a bunch of presign\n        // parameters for a PUT request—doing a GET request with those will\n        // always result in an error\n\n\n        return {\n          location: xhr.responseURL.replace(/\\?.*$/, '')\n        };\n      }\n\n      return {\n        // Some S3 alternatives do not reply with an absolute URL.\n        // Eg DigitalOcean Spaces uses /$bucketName/xyz\n        location: resolveUrl(xhr.responseURL, getXmlValue(content, 'Location')),\n        bucket: getXmlValue(content, 'Bucket'),\n        key: getXmlValue(content, 'Key'),\n        etag: getXmlValue(content, 'ETag')\n      };\n    }\n\n    const xhrOptions = {\n      fieldName: 'file',\n      responseUrlFieldName: 'location',\n      timeout: this.opts.timeout,\n      // Share the rate limiting queue with XHRUpload.\n      [_RateLimitedQueue.internalRateLimitedQueue]: _classPrivateFieldLooseBase(this, _requests)[_requests],\n      responseType: 'text',\n      getResponseData: this.opts.getResponseData || defaultGetResponseData,\n      getResponseError: defaultGetResponseError\n    }; // TODO: remove i18n once we can depend on XHRUpload instead of MiniXHRUpload\n\n    xhrOptions.i18n = this.i18n; // Revert to `uppy.use(XHRUpload)` once the big comment block at the top of\n    // this file is solved\n\n    _classPrivateFieldLooseBase(this, _uploader)[_uploader] = new MiniXHRUpload(uppy, xhrOptions);\n  }\n\n  uninstall() {\n    this.uppy.removePreProcessor(_classPrivateFieldLooseBase(this, _setCompanionHeaders)[_setCompanionHeaders]);\n    this.uppy.removeUploader(_classPrivateFieldLooseBase(this, _handleUpload)[_handleUpload]);\n  }\n\n}\n\nAwsS3.VERSION = packageJson.version;\nmodule.exports = AwsS3;","\"use strict\";\n\n/**\n * Remove parameters like `charset=utf-8` from the end of a mime type string.\n *\n * @param {string} mimeType - The mime type string that may have optional parameters.\n * @returns {string} The \"base\" mime type, i.e. only 'category/type'.\n */\nfunction removeMimeParameters(mimeType) {\n  return mimeType.replace(/;.*$/, '');\n}\n/**\n * Check if a response contains XML based on the response object and its text content.\n *\n * @param {string} content - The text body of the response.\n * @param {object|XMLHttpRequest} xhr - The XHR object or response object from Companion.\n * @returns {bool} Whether the content is (probably) XML.\n */\n\n\nfunction isXml(content, xhr) {\n  const rawContentType = xhr.headers ? xhr.headers['content-type'] : xhr.getResponseHeader('Content-Type');\n\n  if (typeof rawContentType === 'string') {\n    const contentType = removeMimeParameters(rawContentType).toLowerCase();\n\n    if (contentType === 'application/xml' || contentType === 'text/xml') {\n      return true;\n    } // GCS uses text/html for some reason\n    // https://github.com/transloadit/uppy/issues/896\n\n\n    if (contentType === 'text/html' && /^<\\?xml /.test(content)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nmodule.exports = isXml;","\"use strict\";\n\nmodule.exports = {\n  strings: {\n    timedOut: 'Upload stalled for %{seconds} seconds, aborting.'\n  }\n};","'use strict';\n\nclass AuthError extends Error {\n  constructor() {\n    super('Authorization required');\n    this.name = 'AuthError';\n    this.isAuthError = true;\n  }\n\n}\n\nmodule.exports = AuthError;","'use strict';\n\nvar tokenStorage = require(\"./tokenStorage.js\");\n\nconst RequestClient = require(\"./RequestClient.js\");\n\nconst getName = id => {\n  return id.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' ');\n};\n\nclass Provider extends RequestClient {\n  constructor(uppy, opts) {\n    super(uppy, opts);\n    this.provider = opts.provider;\n    this.id = this.provider;\n    this.name = this.opts.name || getName(this.id);\n    this.pluginId = this.opts.pluginId;\n    this.tokenKey = `companion-${this.pluginId}-auth-token`;\n    this.companionKeysParams = this.opts.companionKeysParams;\n    this.preAuthToken = null;\n  }\n\n  headers() {\n    return Promise.all([super.headers(), this.getAuthToken()]).then(_ref => {\n      let [headers, token] = _ref;\n      const authHeaders = {};\n\n      if (token) {\n        authHeaders['uppy-auth-token'] = token;\n      }\n\n      if (this.companionKeysParams) {\n        authHeaders['uppy-credentials-params'] = btoa(JSON.stringify({\n          params: this.companionKeysParams\n        }));\n      }\n\n      return { ...headers,\n        ...authHeaders\n      };\n    });\n  }\n\n  onReceiveResponse(response) {\n    response = super.onReceiveResponse(response); // eslint-disable-line no-param-reassign\n\n    const plugin = this.uppy.getPlugin(this.pluginId);\n    const oldAuthenticated = plugin.getPluginState().authenticated;\n    const authenticated = oldAuthenticated ? response.status !== 401 : response.status < 400;\n    plugin.setPluginState({\n      authenticated\n    });\n    return response;\n  }\n\n  setAuthToken(token) {\n    return this.uppy.getPlugin(this.pluginId).storage.setItem(this.tokenKey, token);\n  }\n\n  getAuthToken() {\n    return this.uppy.getPlugin(this.pluginId).storage.getItem(this.tokenKey);\n  }\n  /**\n   * Ensure we have a preauth token if necessary. Attempts to fetch one if we don't,\n   * or rejects if loading one fails.\n   */\n\n\n  async ensurePreAuth() {\n    if (this.companionKeysParams && !this.preAuthToken) {\n      await this.fetchPreAuthToken();\n\n      if (!this.preAuthToken) {\n        throw new Error('Could not load authentication data required for third-party login. Please try again later.');\n      }\n    }\n  }\n\n  authUrl(queries) {\n    if (queries === void 0) {\n      queries = {};\n    }\n\n    const params = new URLSearchParams(queries);\n\n    if (this.preAuthToken) {\n      params.set('uppyPreAuthToken', this.preAuthToken);\n    }\n\n    return `${this.hostname}/${this.id}/connect?${params}`;\n  }\n\n  fileUrl(id) {\n    return `${this.hostname}/${this.id}/get/${id}`;\n  }\n\n  async fetchPreAuthToken() {\n    if (!this.companionKeysParams) {\n      return;\n    }\n\n    try {\n      const res = await this.post(`${this.id}/preauth/`, {\n        params: this.companionKeysParams\n      });\n      this.preAuthToken = res.token;\n    } catch (err) {\n      this.uppy.log(`[CompanionClient] unable to fetch preAuthToken ${err}`, 'warning');\n    }\n  }\n\n  list(directory) {\n    return this.get(`${this.id}/list/${directory || ''}`);\n  }\n\n  logout() {\n    return this.get(`${this.id}/logout`).then(response => Promise.all([response, this.uppy.getPlugin(this.pluginId).storage.removeItem(this.tokenKey)])).then(_ref2 => {\n      let [response] = _ref2;\n      return response;\n    });\n  }\n\n  static initPlugin(plugin, opts, defaultOpts) {\n    /* eslint-disable no-param-reassign */\n    plugin.type = 'acquirer';\n    plugin.files = [];\n\n    if (defaultOpts) {\n      plugin.opts = { ...defaultOpts,\n        ...opts\n      };\n    }\n\n    if (opts.serverUrl || opts.serverPattern) {\n      throw new Error('`serverUrl` and `serverPattern` have been renamed to `companionUrl` and `companionAllowedHosts` respectively in the 0.30.5 release. Please consult the docs (for example, https://uppy.io/docs/instagram/ for the Instagram plugin) and use the updated options.`');\n    }\n\n    if (opts.companionAllowedHosts) {\n      const pattern = opts.companionAllowedHosts; // validate companionAllowedHosts param\n\n      if (typeof pattern !== 'string' && !Array.isArray(pattern) && !(pattern instanceof RegExp)) {\n        throw new TypeError(`${plugin.id}: the option \"companionAllowedHosts\" must be one of string, Array, RegExp`);\n      }\n\n      plugin.opts.companionAllowedHosts = pattern;\n    } else if (/^(?!https?:\\/\\/).*$/i.test(opts.companionUrl)) {\n      // does not start with https://\n      plugin.opts.companionAllowedHosts = `https://${opts.companionUrl.replace(/^\\/\\//, '')}`;\n    } else {\n      plugin.opts.companionAllowedHosts = new URL(opts.companionUrl).origin;\n    }\n\n    plugin.storage = plugin.opts.storage || tokenStorage;\n    /* eslint-enable no-param-reassign */\n  }\n\n}\n\nmodule.exports = Provider;","'use strict';\n\nlet _Symbol$for;\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nconst fetchWithNetworkError = require(\"@uppy/utils/lib/fetchWithNetworkError\");\n\nconst ErrorWithCause = require(\"@uppy/utils/lib/ErrorWithCause\");\n\nconst AuthError = require(\"./AuthError.js\");\n\nconst packageJson = {\n  \"version\": \"2.2.1\"\n}; // Remove the trailing slash so we can always safely append /xyz.\n\nfunction stripSlash(url) {\n  return url.replace(/\\/$/, '');\n}\n\nasync function handleJSONResponse(res) {\n  if (res.status === 401) {\n    throw new AuthError();\n  }\n\n  const jsonPromise = res.json();\n\n  if (res.status < 200 || res.status > 300) {\n    let errMsg = `Failed request with status: ${res.status}. ${res.statusText}`;\n\n    try {\n      const errData = await jsonPromise;\n      errMsg = errData.message ? `${errMsg} message: ${errData.message}` : errMsg;\n      errMsg = errData.requestId ? `${errMsg} request-Id: ${errData.requestId}` : errMsg;\n    } finally {\n      // eslint-disable-next-line no-unsafe-finally\n      throw new Error(errMsg);\n    }\n  }\n\n  return jsonPromise;\n}\n\nvar _companionHeaders = /*#__PURE__*/_classPrivateFieldLooseKey(\"companionHeaders\");\n\nvar _getPostResponseFunc = /*#__PURE__*/_classPrivateFieldLooseKey(\"getPostResponseFunc\");\n\nvar _getUrl = /*#__PURE__*/_classPrivateFieldLooseKey(\"getUrl\");\n\nvar _errorHandler = /*#__PURE__*/_classPrivateFieldLooseKey(\"errorHandler\");\n\n_Symbol$for = Symbol.for('uppy test: getCompanionHeaders');\n\nclass RequestClient {\n  constructor(uppy, opts) {\n    Object.defineProperty(this, _errorHandler, {\n      value: _errorHandler2\n    });\n    Object.defineProperty(this, _getUrl, {\n      value: _getUrl2\n    });\n    Object.defineProperty(this, _companionHeaders, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _getPostResponseFunc, {\n      writable: true,\n      value: skip => response => skip ? response : this.onReceiveResponse(response)\n    });\n    this.uppy = uppy;\n    this.opts = opts;\n    this.onReceiveResponse = this.onReceiveResponse.bind(this);\n    this.allowedHeaders = ['accept', 'content-type', 'uppy-auth-token'];\n    this.preflightDone = false;\n    _classPrivateFieldLooseBase(this, _companionHeaders)[_companionHeaders] = opts == null ? void 0 : opts.companionHeaders;\n  }\n\n  setCompanionHeaders(headers) {\n    _classPrivateFieldLooseBase(this, _companionHeaders)[_companionHeaders] = headers;\n  }\n\n  [_Symbol$for]() {\n    return _classPrivateFieldLooseBase(this, _companionHeaders)[_companionHeaders];\n  }\n\n  get hostname() {\n    const {\n      companion\n    } = this.uppy.getState();\n    const host = this.opts.companionUrl;\n    return stripSlash(companion && companion[host] ? companion[host] : host);\n  }\n\n  headers() {\n    return Promise.resolve({ ...RequestClient.defaultHeaders,\n      ..._classPrivateFieldLooseBase(this, _companionHeaders)[_companionHeaders]\n    });\n  }\n\n  onReceiveResponse(response) {\n    const state = this.uppy.getState();\n    const companion = state.companion || {};\n    const host = this.opts.companionUrl;\n    const {\n      headers\n    } = response; // Store the self-identified domain name for the Companion instance we just hit.\n\n    if (headers.has('i-am') && headers.get('i-am') !== companion[host]) {\n      this.uppy.setState({\n        companion: { ...companion,\n          [host]: headers.get('i-am')\n        }\n      });\n    }\n\n    return response;\n  }\n\n  preflight(path) {\n    if (this.preflightDone) {\n      return Promise.resolve(this.allowedHeaders.slice());\n    }\n\n    return fetch(_classPrivateFieldLooseBase(this, _getUrl)[_getUrl](path), {\n      method: 'OPTIONS'\n    }).then(response => {\n      if (response.headers.has('access-control-allow-headers')) {\n        this.allowedHeaders = response.headers.get('access-control-allow-headers').split(',').map(headerName => headerName.trim().toLowerCase());\n      }\n\n      this.preflightDone = true;\n      return this.allowedHeaders.slice();\n    }).catch(err => {\n      this.uppy.log(`[CompanionClient] unable to make preflight request ${err}`, 'warning');\n      this.preflightDone = true;\n      return this.allowedHeaders.slice();\n    });\n  }\n\n  preflightAndHeaders(path) {\n    return Promise.all([this.preflight(path), this.headers()]).then(_ref => {\n      let [allowedHeaders, headers] = _ref;\n      // filter to keep only allowed Headers\n      Object.keys(headers).forEach(header => {\n        if (!allowedHeaders.includes(header.toLowerCase())) {\n          this.uppy.log(`[CompanionClient] excluding disallowed header ${header}`);\n          delete headers[header]; // eslint-disable-line no-param-reassign\n        }\n      });\n      return headers;\n    });\n  }\n\n  get(path, skipPostResponse) {\n    const method = 'get';\n    return this.preflightAndHeaders(path).then(headers => fetchWithNetworkError(_classPrivateFieldLooseBase(this, _getUrl)[_getUrl](path), {\n      method,\n      headers,\n      credentials: this.opts.companionCookiesRule || 'same-origin'\n    })).then(_classPrivateFieldLooseBase(this, _getPostResponseFunc)[_getPostResponseFunc](skipPostResponse)).then(handleJSONResponse).catch(_classPrivateFieldLooseBase(this, _errorHandler)[_errorHandler](method, path));\n  }\n\n  post(path, data, skipPostResponse) {\n    const method = 'post';\n    return this.preflightAndHeaders(path).then(headers => fetchWithNetworkError(_classPrivateFieldLooseBase(this, _getUrl)[_getUrl](path), {\n      method,\n      headers,\n      credentials: this.opts.companionCookiesRule || 'same-origin',\n      body: JSON.stringify(data)\n    })).then(_classPrivateFieldLooseBase(this, _getPostResponseFunc)[_getPostResponseFunc](skipPostResponse)).then(handleJSONResponse).catch(_classPrivateFieldLooseBase(this, _errorHandler)[_errorHandler](method, path));\n  }\n\n  delete(path, data, skipPostResponse) {\n    const method = 'delete';\n    return this.preflightAndHeaders(path).then(headers => fetchWithNetworkError(`${this.hostname}/${path}`, {\n      method,\n      headers,\n      credentials: this.opts.companionCookiesRule || 'same-origin',\n      body: data ? JSON.stringify(data) : null\n    })).then(_classPrivateFieldLooseBase(this, _getPostResponseFunc)[_getPostResponseFunc](skipPostResponse)).then(handleJSONResponse).catch(_classPrivateFieldLooseBase(this, _errorHandler)[_errorHandler](method, path));\n  }\n\n}\n\nfunction _getUrl2(url) {\n  if (/^(https?:|)\\/\\//.test(url)) {\n    return url;\n  }\n\n  return `${this.hostname}/${url}`;\n}\n\nfunction _errorHandler2(method, path) {\n  return err => {\n    var _err;\n\n    if (!((_err = err) != null && _err.isAuthError)) {\n      // eslint-disable-next-line no-param-reassign\n      err = new ErrorWithCause(`Could not ${method} ${_classPrivateFieldLooseBase(this, _getUrl)[_getUrl](path)}`, {\n        cause: err\n      });\n    }\n\n    return Promise.reject(err);\n  };\n}\n\nRequestClient.VERSION = packageJson.version;\nRequestClient.defaultHeaders = {\n  Accept: 'application/json',\n  'Content-Type': 'application/json',\n  'Uppy-Versions': `@uppy/companion-client=${RequestClient.VERSION}`\n};\nmodule.exports = RequestClient;","'use strict';\n\nconst RequestClient = require(\"./RequestClient.js\");\n\nconst getName = id => {\n  return id.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' ');\n};\n\nclass SearchProvider extends RequestClient {\n  constructor(uppy, opts) {\n    super(uppy, opts);\n    this.provider = opts.provider;\n    this.id = this.provider;\n    this.name = this.opts.name || getName(this.id);\n    this.pluginId = this.opts.pluginId;\n  }\n\n  fileUrl(id) {\n    return `${this.hostname}/search/${this.id}/get/${id}`;\n  }\n\n  search(text, queries) {\n    return this.get(`search/${this.id}/list?q=${encodeURIComponent(text)}${queries ? `&${queries}` : ''}`);\n  }\n\n}\n\nmodule.exports = SearchProvider;","\"use strict\";\n\nlet _Symbol$for, _Symbol$for2;\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nconst ee = require(\"namespace-emitter\");\n\nvar _queued = /*#__PURE__*/_classPrivateFieldLooseKey(\"queued\");\n\nvar _emitter = /*#__PURE__*/_classPrivateFieldLooseKey(\"emitter\");\n\nvar _isOpen = /*#__PURE__*/_classPrivateFieldLooseKey(\"isOpen\");\n\nvar _socket = /*#__PURE__*/_classPrivateFieldLooseKey(\"socket\");\n\nvar _handleMessage = /*#__PURE__*/_classPrivateFieldLooseKey(\"handleMessage\");\n\n_Symbol$for = Symbol.for('uppy test: getSocket');\n_Symbol$for2 = Symbol.for('uppy test: getQueued');\n\nclass UppySocket {\n  constructor(opts) {\n    Object.defineProperty(this, _queued, {\n      writable: true,\n      value: []\n    });\n    Object.defineProperty(this, _emitter, {\n      writable: true,\n      value: ee()\n    });\n    Object.defineProperty(this, _isOpen, {\n      writable: true,\n      value: false\n    });\n    Object.defineProperty(this, _socket, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _handleMessage, {\n      writable: true,\n      value: e => {\n        try {\n          const message = JSON.parse(e.data);\n          this.emit(message.action, message.payload);\n        } catch (err) {\n          // TODO: use a more robust error handler.\n          console.log(err); // eslint-disable-line no-console\n        }\n      }\n    });\n    this.opts = opts;\n\n    if (!opts || opts.autoOpen !== false) {\n      this.open();\n    }\n  }\n\n  get isOpen() {\n    return _classPrivateFieldLooseBase(this, _isOpen)[_isOpen];\n  }\n\n  [_Symbol$for]() {\n    return _classPrivateFieldLooseBase(this, _socket)[_socket];\n  }\n\n  [_Symbol$for2]() {\n    return _classPrivateFieldLooseBase(this, _queued)[_queued];\n  }\n\n  open() {\n    _classPrivateFieldLooseBase(this, _socket)[_socket] = new WebSocket(this.opts.target);\n\n    _classPrivateFieldLooseBase(this, _socket)[_socket].onopen = () => {\n      _classPrivateFieldLooseBase(this, _isOpen)[_isOpen] = true;\n\n      while (_classPrivateFieldLooseBase(this, _queued)[_queued].length > 0 && _classPrivateFieldLooseBase(this, _isOpen)[_isOpen]) {\n        const first = _classPrivateFieldLooseBase(this, _queued)[_queued].shift();\n\n        this.send(first.action, first.payload);\n      }\n    };\n\n    _classPrivateFieldLooseBase(this, _socket)[_socket].onclose = () => {\n      _classPrivateFieldLooseBase(this, _isOpen)[_isOpen] = false;\n    };\n\n    _classPrivateFieldLooseBase(this, _socket)[_socket].onmessage = _classPrivateFieldLooseBase(this, _handleMessage)[_handleMessage];\n  }\n\n  close() {\n    var _classPrivateFieldLoo;\n\n    (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _socket)[_socket]) == null ? void 0 : _classPrivateFieldLoo.close();\n  }\n\n  send(action, payload) {\n    // attach uuid\n    if (!_classPrivateFieldLooseBase(this, _isOpen)[_isOpen]) {\n      _classPrivateFieldLooseBase(this, _queued)[_queued].push({\n        action,\n        payload\n      });\n\n      return;\n    }\n\n    _classPrivateFieldLooseBase(this, _socket)[_socket].send(JSON.stringify({\n      action,\n      payload\n    }));\n  }\n\n  on(action, handler) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].on(action, handler);\n  }\n\n  emit(action, payload) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].emit(action, payload);\n  }\n\n  once(action, handler) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].once(action, handler);\n  }\n\n}\n\nmodule.exports = UppySocket;","'use strict';\n/**\n * Manages communications with Companion\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Socket = exports.SearchProvider = exports.RequestClient = exports.Provider = void 0;\n\nconst _0 = require(\"./RequestClient.js\");\n\nexports.RequestClient = _0;\n\nconst _1 = require(\"./Provider.js\");\n\nexports.Provider = _1;\n\nconst _2 = require(\"./SearchProvider.js\");\n\nexports.SearchProvider = _2;\n\nconst _3 = require(\"./Socket.js\");\n\nexports.Socket = _3;","'use strict';\n/**\n * This module serves as an Async wrapper for LocalStorage\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getItem = getItem;\nexports.removeItem = removeItem;\nexports.setItem = setItem;\n\nfunction setItem(key, value) {\n  return new Promise(resolve => {\n    localStorage.setItem(key, value);\n    resolve();\n  });\n}\n\nfunction getItem(key) {\n  return Promise.resolve(localStorage.getItem(key));\n}\n\nfunction removeItem(key) {\n  return new Promise(resolve => {\n    localStorage.removeItem(key);\n    resolve();\n  });\n}","\"use strict\";\n\n/**\n * Core plugin logic that all plugins share.\n *\n * BasePlugin does not contain DOM rendering so it can be used for plugins\n * without a user interface.\n *\n * See `Plugin` for the extended version with Preact rendering for interfaces.\n */\nconst Translator = require(\"@uppy/utils/lib/Translator\");\n\nclass BasePlugin {\n  constructor(uppy, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    this.uppy = uppy;\n    this.opts = opts;\n  }\n\n  getPluginState() {\n    const {\n      plugins\n    } = this.uppy.getState();\n    return plugins[this.id] || {};\n  }\n\n  setPluginState(update) {\n    const {\n      plugins\n    } = this.uppy.getState();\n    this.uppy.setState({\n      plugins: { ...plugins,\n        [this.id]: { ...plugins[this.id],\n          ...update\n        }\n      }\n    });\n  }\n\n  setOptions(newOpts) {\n    this.opts = { ...this.opts,\n      ...newOpts\n    };\n    this.setPluginState(); // so that UI re-renders with new options\n\n    this.i18nInit();\n  }\n\n  i18nInit() {\n    const translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = translator.translate.bind(translator);\n    this.i18nArray = translator.translateArray.bind(translator);\n    this.setPluginState(); // so that UI re-renders and we see the updated locale\n  }\n  /**\n   * Extendable methods\n   * ==================\n   * These methods are here to serve as an overview of the extendable methods as well as\n   * making them not conditional in use, such as `if (this.afterUpdate)`.\n   */\n  // eslint-disable-next-line class-methods-use-this\n\n\n  addTarget() {\n    throw new Error('Extend the addTarget method to add your plugin to another plugin\\'s target');\n  } // eslint-disable-next-line class-methods-use-this\n\n\n  install() {} // eslint-disable-next-line class-methods-use-this\n\n\n  uninstall() {}\n  /**\n   * Called when plugin is mounted, whether in DOM or into another plugin.\n   * Needed because sometimes plugins are mounted separately/after `install`,\n   * so this.el and this.parent might not be available in `install`.\n   * This is the case with @uppy/react plugins, for example.\n   */\n\n\n  render() {\n    throw new Error('Extend the render method to add your plugin to a DOM element');\n  } // TODO: remove in the next major version. It's not feasible to\n  // try to use plugins with other frameworks.\n  // eslint-disable-next-line class-methods-use-this\n\n\n  update() {} // Called after every state update, after everything's mounted. Debounced.\n  // eslint-disable-next-line class-methods-use-this\n\n\n  afterUpdate() {}\n\n}\n\nmodule.exports = BasePlugin;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = exports.RestrictionError = exports.Restricter = void 0;\n\n/* eslint-disable max-classes-per-file, class-methods-use-this */\n\n/* global AggregateError */\nconst prettierBytes = require(\"@transloadit/prettier-bytes\");\n\nconst match = require(\"mime-match\");\n\nconst defaultOptions = {\n  maxFileSize: null,\n  minFileSize: null,\n  maxTotalFileSize: null,\n  maxNumberOfFiles: null,\n  minNumberOfFiles: null,\n  allowedFileTypes: null,\n  requiredMetaFields: []\n};\nexports.defaultOptions = defaultOptions;\n\nclass RestrictionError extends Error {\n  constructor() {\n    super(...arguments);\n    this.isRestriction = true;\n  }\n\n}\n\nexports.RestrictionError = RestrictionError;\n\nif (typeof AggregateError === 'undefined') {\n  // eslint-disable-next-line no-global-assign\n  // TODO: remove this \"polyfill\" in the next major.\n  globalThis.AggregateError = class AggregateError extends Error {\n    constructor(errors, message) {\n      super(message);\n      this.errors = errors;\n    }\n\n  };\n}\n\nclass Restricter {\n  constructor(getOpts, i18n) {\n    this.i18n = i18n;\n\n    this.getOpts = () => {\n      const opts = getOpts();\n\n      if (opts.restrictions.allowedFileTypes != null && !Array.isArray(opts.restrictions.allowedFileTypes)) {\n        throw new TypeError('`restrictions.allowedFileTypes` must be an array');\n      }\n\n      return opts;\n    };\n  }\n\n  validate(file, files) {\n    const {\n      maxFileSize,\n      minFileSize,\n      maxTotalFileSize,\n      maxNumberOfFiles,\n      allowedFileTypes\n    } = this.getOpts().restrictions;\n\n    if (maxNumberOfFiles && files.length + 1 > maxNumberOfFiles) {\n      throw new RestrictionError(`${this.i18n('youCanOnlyUploadX', {\n        smart_count: maxNumberOfFiles\n      })}`);\n    }\n\n    if (allowedFileTypes) {\n      const isCorrectFileType = allowedFileTypes.some(type => {\n        // check if this is a mime-type\n        if (type.includes('/')) {\n          if (!file.type) return false;\n          return match(file.type.replace(/;.*?$/, ''), type);\n        } // otherwise this is likely an extension\n\n\n        if (type[0] === '.' && file.extension) {\n          return file.extension.toLowerCase() === type.slice(1).toLowerCase();\n        }\n\n        return false;\n      });\n\n      if (!isCorrectFileType) {\n        const allowedFileTypesString = allowedFileTypes.join(', ');\n        throw new RestrictionError(this.i18n('youCanOnlyUploadFileTypes', {\n          types: allowedFileTypesString\n        }));\n      }\n    } // We can't check maxTotalFileSize if the size is unknown.\n\n\n    if (maxTotalFileSize && file.size != null) {\n      const totalFilesSize = files.reduce((total, f) => total + f.size, file.size);\n\n      if (totalFilesSize > maxTotalFileSize) {\n        throw new RestrictionError(this.i18n('exceedsSize', {\n          size: prettierBytes(maxTotalFileSize),\n          file: file.name\n        }));\n      }\n    } // We can't check maxFileSize if the size is unknown.\n\n\n    if (maxFileSize && file.size != null && file.size > maxFileSize) {\n      throw new RestrictionError(this.i18n('exceedsSize', {\n        size: prettierBytes(maxFileSize),\n        file: file.name\n      }));\n    } // We can't check minFileSize if the size is unknown.\n\n\n    if (minFileSize && file.size != null && file.size < minFileSize) {\n      throw new RestrictionError(this.i18n('inferiorSize', {\n        size: prettierBytes(minFileSize)\n      }));\n    }\n  }\n\n  validateMinNumberOfFiles(files) {\n    const {\n      minNumberOfFiles\n    } = this.getOpts().restrictions;\n\n    if (Object.keys(files).length < minNumberOfFiles) {\n      throw new RestrictionError(this.i18n('youHaveToAtLeastSelectX', {\n        smart_count: minNumberOfFiles\n      }));\n    }\n  }\n\n  getMissingRequiredMetaFields(file) {\n    const error = new RestrictionError(this.i18n('missingRequiredMetaFieldOnFile', {\n      fileName: file.name\n    }));\n    const {\n      requiredMetaFields\n    } = this.getOpts().restrictions; // TODO: migrate to Object.hasOwn in the next major.\n\n    const own = Object.prototype.hasOwnProperty;\n    const missingFields = [];\n\n    for (const field of requiredMetaFields) {\n      if (!own.call(file.meta, field) || file.meta[field] === '') {\n        missingFields.push(field);\n      }\n    }\n\n    return {\n      missingFields,\n      error\n    };\n  }\n\n}\n\nexports.Restricter = Restricter;","\"use strict\";\n\nvar _preact = require(\"preact\");\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nconst findDOMElement = require(\"@uppy/utils/lib/findDOMElement\");\n\nconst getTextDirection = require(\"@uppy/utils/lib/getTextDirection\");\n\nconst BasePlugin = require(\"./BasePlugin.js\");\n/**\n * Defer a frequent call to the microtask queue.\n *\n * @param {() => T} fn\n * @returns {Promise<T>}\n */\n\n\nfunction debounce(fn) {\n  let calling = null;\n  let latestArgs = null;\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    latestArgs = args;\n\n    if (!calling) {\n      calling = Promise.resolve().then(() => {\n        calling = null; // At this point `args` may be different from the most\n        // recent state, if multiple calls happened since this task\n        // was queued. So we use the `latestArgs`, which definitely\n        // is the most recent call.\n\n        return fn(...latestArgs);\n      });\n    }\n\n    return calling;\n  };\n}\n/**\n * UIPlugin is the extended version of BasePlugin to incorporate rendering with Preact.\n * Use this for plugins that need a user interface.\n *\n * For plugins without an user interface, see BasePlugin.\n */\n\n\nvar _updateUI = /*#__PURE__*/_classPrivateFieldLooseKey(\"updateUI\");\n\nclass UIPlugin extends BasePlugin {\n  constructor() {\n    super(...arguments);\n    Object.defineProperty(this, _updateUI, {\n      writable: true,\n      value: void 0\n    });\n  }\n\n  /**\n   * Check if supplied `target` is a DOM element or an `object`.\n   * If it’s an object — target is a plugin, and we search `plugins`\n   * for a plugin with same name and return its target.\n   */\n  mount(target, plugin) {\n    const callerPluginName = plugin.id;\n    const targetElement = findDOMElement(target);\n\n    if (targetElement) {\n      this.isTargetDOMEl = true; // When target is <body> with a single <div> element,\n      // Preact thinks it’s the Uppy root element in there when doing a diff,\n      // and destroys it. So we are creating a fragment (could be empty div)\n\n      const uppyRootElement = document.createElement('div');\n      uppyRootElement.classList.add('uppy-Root'); // API for plugins that require a synchronous rerender.\n\n      _classPrivateFieldLooseBase(this, _updateUI)[_updateUI] = debounce(state => {\n        // plugin could be removed, but this.rerender is debounced below,\n        // so it could still be called even after uppy.removePlugin or uppy.close\n        // hence the check\n        if (!this.uppy.getPlugin(this.id)) return;\n        (0, _preact.render)(this.render(state), uppyRootElement);\n        this.afterUpdate();\n      });\n      this.uppy.log(`Installing ${callerPluginName} to a DOM element '${target}'`);\n\n      if (this.opts.replaceTargetContent) {\n        // Doing render(h(null), targetElement), which should have been\n        // a better way, since because the component might need to do additional cleanup when it is removed,\n        // stopped working — Preact just adds null into target, not replacing\n        targetElement.innerHTML = '';\n      }\n\n      (0, _preact.render)(this.render(this.uppy.getState()), uppyRootElement);\n      this.el = uppyRootElement;\n      targetElement.appendChild(uppyRootElement); // Set the text direction if the page has not defined one.\n\n      uppyRootElement.dir = this.opts.direction || getTextDirection(uppyRootElement) || 'ltr';\n      this.onMount();\n      return this.el;\n    }\n\n    let targetPlugin;\n\n    if (typeof target === 'object' && target instanceof UIPlugin) {\n      // Targeting a plugin *instance*\n      targetPlugin = target;\n    } else if (typeof target === 'function') {\n      // Targeting a plugin type\n      const Target = target; // Find the target plugin instance.\n\n      this.uppy.iteratePlugins(p => {\n        if (p instanceof Target) {\n          targetPlugin = p;\n        }\n      });\n    }\n\n    if (targetPlugin) {\n      this.uppy.log(`Installing ${callerPluginName} to ${targetPlugin.id}`);\n      this.parent = targetPlugin;\n      this.el = targetPlugin.addTarget(plugin);\n      this.onMount();\n      return this.el;\n    }\n\n    this.uppy.log(`Not installing ${callerPluginName}`);\n    let message = `Invalid target option given to ${callerPluginName}.`;\n\n    if (typeof target === 'function') {\n      message += ' The given target is not a Plugin class. ' + 'Please check that you\\'re not specifying a React Component instead of a plugin. ' + 'If you are using @uppy/* packages directly, make sure you have only 1 version of @uppy/core installed: ' + 'run `npm ls @uppy/core` on the command line and verify that all the versions match and are deduped correctly.';\n    } else {\n      message += 'If you meant to target an HTML element, please make sure that the element exists. ' + 'Check that the <script> tag initializing Uppy is right before the closing </body> tag at the end of the page. ' + '(see https://github.com/transloadit/uppy/issues/1042)\\n\\n' + 'If you meant to target a plugin, please confirm that your `import` statements or `require` calls are correct.';\n    }\n\n    throw new Error(message);\n  }\n\n  update(state) {\n    if (this.el != null) {\n      var _classPrivateFieldLoo, _classPrivateFieldLoo2;\n\n      (_classPrivateFieldLoo = (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _updateUI))[_updateUI]) == null ? void 0 : _classPrivateFieldLoo.call(_classPrivateFieldLoo2, state);\n    }\n  }\n\n  unmount() {\n    if (this.isTargetDOMEl) {\n      var _this$el;\n\n      (_this$el = this.el) == null ? void 0 : _this$el.remove();\n    }\n\n    this.onUnmount();\n  } // eslint-disable-next-line class-methods-use-this\n\n\n  onMount() {} // eslint-disable-next-line class-methods-use-this\n\n\n  onUnmount() {}\n\n}\n\nmodule.exports = UIPlugin;","\"use strict\";\n\nvar _nonSecure = require(\"nanoid/non-secure\");\n\nvar _loggers = require(\"./loggers.js\");\n\nvar _Restricter = require(\"./Restricter.js\");\n\nlet _Symbol$for, _Symbol$for2;\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\n/* eslint-disable max-classes-per-file */\n\n/* global AggregateError */\nconst Translator = require(\"@uppy/utils/lib/Translator\");\n\nconst ee = require(\"namespace-emitter\");\n\nconst throttle = require(\"lodash.throttle\");\n\nconst DefaultStore = require(\"@uppy/store-default\");\n\nconst getFileType = require(\"@uppy/utils/lib/getFileType\");\n\nconst getFileNameAndExtension = require(\"@uppy/utils/lib/getFileNameAndExtension\");\n\nconst generateFileID = require(\"@uppy/utils/lib/generateFileID\");\n\nconst supportsUploadProgress = require(\"./supportsUploadProgress.js\");\n\nconst getFileName = require(\"./getFileName.js\");\n\nconst packageJson = {\n  \"version\": \"2.3.1\"\n};\n\nconst locale = require(\"./locale.js\");\n/**\n * Uppy Core module.\n * Manages plugins, state updates, acts as an event bus,\n * adds/removes files and metadata.\n */\n\n\nvar _plugins = /*#__PURE__*/_classPrivateFieldLooseKey(\"plugins\");\n\nvar _restricter = /*#__PURE__*/_classPrivateFieldLooseKey(\"restricter\");\n\nvar _storeUnsubscribe = /*#__PURE__*/_classPrivateFieldLooseKey(\"storeUnsubscribe\");\n\nvar _emitter = /*#__PURE__*/_classPrivateFieldLooseKey(\"emitter\");\n\nvar _preProcessors = /*#__PURE__*/_classPrivateFieldLooseKey(\"preProcessors\");\n\nvar _uploaders = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploaders\");\n\nvar _postProcessors = /*#__PURE__*/_classPrivateFieldLooseKey(\"postProcessors\");\n\nvar _informAndEmit = /*#__PURE__*/_classPrivateFieldLooseKey(\"informAndEmit\");\n\nvar _checkRequiredMetaFieldsOnFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"checkRequiredMetaFieldsOnFile\");\n\nvar _checkRequiredMetaFields = /*#__PURE__*/_classPrivateFieldLooseKey(\"checkRequiredMetaFields\");\n\nvar _assertNewUploadAllowed = /*#__PURE__*/_classPrivateFieldLooseKey(\"assertNewUploadAllowed\");\n\nvar _checkAndCreateFileStateObject = /*#__PURE__*/_classPrivateFieldLooseKey(\"checkAndCreateFileStateObject\");\n\nvar _startIfAutoProceed = /*#__PURE__*/_classPrivateFieldLooseKey(\"startIfAutoProceed\");\n\nvar _addListeners = /*#__PURE__*/_classPrivateFieldLooseKey(\"addListeners\");\n\nvar _updateOnlineStatus = /*#__PURE__*/_classPrivateFieldLooseKey(\"updateOnlineStatus\");\n\nvar _createUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"createUpload\");\n\nvar _getUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"getUpload\");\n\nvar _removeUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"removeUpload\");\n\nvar _runUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"runUpload\");\n\n_Symbol$for = Symbol.for('uppy test: getPlugins');\n_Symbol$for2 = Symbol.for('uppy test: createUpload');\n\nclass Uppy {\n  /** @type {Record<string, BasePlugin[]>} */\n\n  /**\n   * Instantiate Uppy\n   *\n   * @param {object} opts — Uppy options\n   */\n  constructor(_opts) {\n    Object.defineProperty(this, _runUpload, {\n      value: _runUpload2\n    });\n    Object.defineProperty(this, _removeUpload, {\n      value: _removeUpload2\n    });\n    Object.defineProperty(this, _getUpload, {\n      value: _getUpload2\n    });\n    Object.defineProperty(this, _createUpload, {\n      value: _createUpload2\n    });\n    Object.defineProperty(this, _addListeners, {\n      value: _addListeners2\n    });\n    Object.defineProperty(this, _startIfAutoProceed, {\n      value: _startIfAutoProceed2\n    });\n    Object.defineProperty(this, _checkAndCreateFileStateObject, {\n      value: _checkAndCreateFileStateObject2\n    });\n    Object.defineProperty(this, _assertNewUploadAllowed, {\n      value: _assertNewUploadAllowed2\n    });\n    Object.defineProperty(this, _checkRequiredMetaFields, {\n      value: _checkRequiredMetaFields2\n    });\n    Object.defineProperty(this, _checkRequiredMetaFieldsOnFile, {\n      value: _checkRequiredMetaFieldsOnFile2\n    });\n    Object.defineProperty(this, _informAndEmit, {\n      value: _informAndEmit2\n    });\n    Object.defineProperty(this, _plugins, {\n      writable: true,\n      value: Object.create(null)\n    });\n    Object.defineProperty(this, _restricter, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _storeUnsubscribe, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _emitter, {\n      writable: true,\n      value: ee()\n    });\n    Object.defineProperty(this, _preProcessors, {\n      writable: true,\n      value: new Set()\n    });\n    Object.defineProperty(this, _uploaders, {\n      writable: true,\n      value: new Set()\n    });\n    Object.defineProperty(this, _postProcessors, {\n      writable: true,\n      value: new Set()\n    });\n    Object.defineProperty(this, _updateOnlineStatus, {\n      writable: true,\n      value: this.updateOnlineStatus.bind(this)\n    });\n    this.defaultLocale = locale;\n    const defaultOptions = {\n      id: 'uppy',\n      autoProceed: false,\n\n      /**\n       * @deprecated The method should not be used\n       */\n      allowMultipleUploads: true,\n      allowMultipleUploadBatches: true,\n      debug: false,\n      restrictions: _Restricter.defaultOptions,\n      meta: {},\n      onBeforeFileAdded: currentFile => currentFile,\n      onBeforeUpload: files => files,\n      store: DefaultStore(),\n      logger: _loggers.justErrorsLogger,\n      infoTimeout: 5000\n    }; // Merge default options with the ones set by user,\n    // making sure to merge restrictions too\n\n    this.opts = { ...defaultOptions,\n      ..._opts,\n      restrictions: { ...defaultOptions.restrictions,\n        ...(_opts && _opts.restrictions)\n      }\n    }; // Support debug: true for backwards-compatability, unless logger is set in opts\n    // opts instead of this.opts to avoid comparing objects — we set logger: justErrorsLogger in defaultOptions\n\n    if (_opts && _opts.logger && _opts.debug) {\n      this.log('You are using a custom `logger`, but also set `debug: true`, which uses built-in logger to output logs to console. Ignoring `debug: true` and using your custom `logger`.', 'warning');\n    } else if (_opts && _opts.debug) {\n      this.opts.logger = _loggers.debugLogger;\n    }\n\n    this.log(`Using Core v${this.constructor.VERSION}`);\n    this.i18nInit(); // ___Why throttle at 500ms?\n    //    - We must throttle at >250ms for superfocus in Dashboard to work well\n    //    (because animation takes 0.25s, and we want to wait for all animations to be over before refocusing).\n    //    [Practical Check]: if thottle is at 100ms, then if you are uploading a file,\n    //    and click 'ADD MORE FILES', - focus won't activate in Firefox.\n    //    - We must throttle at around >500ms to avoid performance lags.\n    //    [Practical Check] Firefox, try to upload a big file for a prolonged period of time. Laptop will start to heat up.\n\n    this.calculateProgress = throttle(this.calculateProgress.bind(this), 500, {\n      leading: true,\n      trailing: true\n    });\n    this.store = this.opts.store;\n    this.setState({\n      plugins: {},\n      files: {},\n      currentUploads: {},\n      allowNewUpload: true,\n      capabilities: {\n        uploadProgress: supportsUploadProgress(),\n        individualCancellation: true,\n        resumableUploads: false\n      },\n      totalProgress: 0,\n      meta: { ...this.opts.meta\n      },\n      info: [],\n      recoveredState: null\n    });\n    _classPrivateFieldLooseBase(this, _restricter)[_restricter] = new _Restricter.Restricter(() => this.opts, this.i18n);\n    _classPrivateFieldLooseBase(this, _storeUnsubscribe)[_storeUnsubscribe] = this.store.subscribe((prevState, nextState, patch) => {\n      this.emit('state-update', prevState, nextState, patch);\n      this.updateAll(nextState);\n    }); // Exposing uppy object on window for debugging and testing\n\n    if (this.opts.debug && typeof window !== 'undefined') {\n      window[this.opts.id] = this;\n    }\n\n    _classPrivateFieldLooseBase(this, _addListeners)[_addListeners]();\n  }\n\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].emit(event, ...args);\n  }\n\n  on(event, callback) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].on(event, callback);\n\n    return this;\n  }\n\n  once(event, callback) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].once(event, callback);\n\n    return this;\n  }\n\n  off(event, callback) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].off(event, callback);\n\n    return this;\n  }\n  /**\n   * Iterate on all plugins and run `update` on them.\n   * Called each time state changes.\n   *\n   */\n\n\n  updateAll(state) {\n    this.iteratePlugins(plugin => {\n      plugin.update(state);\n    });\n  }\n  /**\n   * Updates state with a patch\n   *\n   * @param {object} patch {foo: 'bar'}\n   */\n\n\n  setState(patch) {\n    this.store.setState(patch);\n  }\n  /**\n   * Returns current state.\n   *\n   * @returns {object}\n   */\n\n\n  getState() {\n    return this.store.getState();\n  }\n  /**\n   * Back compat for when uppy.state is used instead of uppy.getState().\n   *\n   * @deprecated\n   */\n\n\n  get state() {\n    // Here, state is a non-enumerable property.\n    return this.getState();\n  }\n  /**\n   * Shorthand to set state for a specific file.\n   */\n\n\n  setFileState(fileID, state) {\n    if (!this.getState().files[fileID]) {\n      throw new Error(`Can’t set state for ${fileID} (the file could have been removed)`);\n    }\n\n    this.setState({\n      files: { ...this.getState().files,\n        [fileID]: { ...this.getState().files[fileID],\n          ...state\n        }\n      }\n    });\n  }\n\n  i18nInit() {\n    const translator = new Translator([this.defaultLocale, this.opts.locale]);\n    this.i18n = translator.translate.bind(translator);\n    this.i18nArray = translator.translateArray.bind(translator);\n    this.locale = translator.locale;\n  }\n\n  setOptions(newOpts) {\n    this.opts = { ...this.opts,\n      ...newOpts,\n      restrictions: { ...this.opts.restrictions,\n        ...(newOpts && newOpts.restrictions)\n      }\n    };\n\n    if (newOpts.meta) {\n      this.setMeta(newOpts.meta);\n    }\n\n    this.i18nInit();\n\n    if (newOpts.locale) {\n      this.iteratePlugins(plugin => {\n        plugin.setOptions();\n      });\n    } // Note: this is not the preact `setState`, it's an internal function that has the same name.\n\n\n    this.setState(); // so that UI re-renders with new options\n  }\n\n  resetProgress() {\n    const defaultProgress = {\n      percentage: 0,\n      bytesUploaded: 0,\n      uploadComplete: false,\n      uploadStarted: null\n    };\n    const files = { ...this.getState().files\n    };\n    const updatedFiles = {};\n    Object.keys(files).forEach(fileID => {\n      const updatedFile = { ...files[fileID]\n      };\n      updatedFile.progress = { ...updatedFile.progress,\n        ...defaultProgress\n      };\n      updatedFiles[fileID] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles,\n      totalProgress: 0\n    });\n    this.emit('reset-progress');\n  }\n\n  addPreProcessor(fn) {\n    _classPrivateFieldLooseBase(this, _preProcessors)[_preProcessors].add(fn);\n  }\n\n  removePreProcessor(fn) {\n    return _classPrivateFieldLooseBase(this, _preProcessors)[_preProcessors].delete(fn);\n  }\n\n  addPostProcessor(fn) {\n    _classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors].add(fn);\n  }\n\n  removePostProcessor(fn) {\n    return _classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors].delete(fn);\n  }\n\n  addUploader(fn) {\n    _classPrivateFieldLooseBase(this, _uploaders)[_uploaders].add(fn);\n  }\n\n  removeUploader(fn) {\n    return _classPrivateFieldLooseBase(this, _uploaders)[_uploaders].delete(fn);\n  }\n\n  setMeta(data) {\n    const updatedMeta = { ...this.getState().meta,\n      ...data\n    };\n    const updatedFiles = { ...this.getState().files\n    };\n    Object.keys(updatedFiles).forEach(fileID => {\n      updatedFiles[fileID] = { ...updatedFiles[fileID],\n        meta: { ...updatedFiles[fileID].meta,\n          ...data\n        }\n      };\n    });\n    this.log('Adding metadata:');\n    this.log(data);\n    this.setState({\n      meta: updatedMeta,\n      files: updatedFiles\n    });\n  }\n\n  setFileMeta(fileID, data) {\n    const updatedFiles = { ...this.getState().files\n    };\n\n    if (!updatedFiles[fileID]) {\n      this.log('Was trying to set metadata for a file that has been removed: ', fileID);\n      return;\n    }\n\n    const newMeta = { ...updatedFiles[fileID].meta,\n      ...data\n    };\n    updatedFiles[fileID] = { ...updatedFiles[fileID],\n      meta: newMeta\n    };\n    this.setState({\n      files: updatedFiles\n    });\n  }\n  /**\n   * Get a file object.\n   *\n   * @param {string} fileID The ID of the file object to return.\n   */\n\n\n  getFile(fileID) {\n    return this.getState().files[fileID];\n  }\n  /**\n   * Get all files in an array.\n   */\n\n\n  getFiles() {\n    const {\n      files\n    } = this.getState();\n    return Object.values(files);\n  }\n\n  getObjectOfFilesPerState() {\n    const {\n      files: filesObject,\n      totalProgress,\n      error\n    } = this.getState();\n    const files = Object.values(filesObject);\n    const inProgressFiles = files.filter(_ref => {\n      let {\n        progress\n      } = _ref;\n      return !progress.uploadComplete && progress.uploadStarted;\n    });\n    const newFiles = files.filter(file => !file.progress.uploadStarted);\n    const startedFiles = files.filter(file => file.progress.uploadStarted || file.progress.preprocess || file.progress.postprocess);\n    const uploadStartedFiles = files.filter(file => file.progress.uploadStarted);\n    const pausedFiles = files.filter(file => file.isPaused);\n    const completeFiles = files.filter(file => file.progress.uploadComplete);\n    const erroredFiles = files.filter(file => file.error);\n    const inProgressNotPausedFiles = inProgressFiles.filter(file => !file.isPaused);\n    const processingFiles = files.filter(file => file.progress.preprocess || file.progress.postprocess);\n    return {\n      newFiles,\n      startedFiles,\n      uploadStartedFiles,\n      pausedFiles,\n      completeFiles,\n      erroredFiles,\n      inProgressFiles,\n      inProgressNotPausedFiles,\n      processingFiles,\n      isUploadStarted: uploadStartedFiles.length > 0,\n      isAllComplete: totalProgress === 100 && completeFiles.length === files.length && processingFiles.length === 0,\n      isAllErrored: !!error && erroredFiles.length === files.length,\n      isAllPaused: inProgressFiles.length !== 0 && pausedFiles.length === inProgressFiles.length,\n      isUploadInProgress: inProgressFiles.length > 0,\n      isSomeGhost: files.some(file => file.isGhost)\n    };\n  }\n  /*\n  * @constructs\n  * @param { Error } error\n  * @param { undefined } file\n  */\n\n  /*\n  * @constructs\n  * @param { RestrictionError } error\n  * @param { UppyFile | undefined } file\n  */\n\n\n  validateRestrictions(file, files) {\n    if (files === void 0) {\n      files = this.getFiles();\n    }\n\n    // TODO: directly return the Restriction error in next major version.\n    // we create RestrictionError's just to discard immediately, which doesn't make sense.\n    try {\n      _classPrivateFieldLooseBase(this, _restricter)[_restricter].validate(file, files);\n\n      return {\n        result: true\n      };\n    } catch (err) {\n      return {\n        result: false,\n        reason: err.message\n      };\n    }\n  }\n\n  checkIfFileAlreadyExists(fileID) {\n    const {\n      files\n    } = this.getState();\n\n    if (files[fileID] && !files[fileID].isGhost) {\n      return true;\n    }\n\n    return false;\n  }\n  /**\n   * Create a file state object based on user-provided `addFile()` options.\n   *\n   * Note this is extremely side-effectful and should only be done when a file state object\n   * will be added to state immediately afterward!\n   *\n   * The `files` value is passed in because it may be updated by the caller without updating the store.\n   */\n\n\n  /**\n   * Add a new file to `state.files`. This will run `onBeforeFileAdded`,\n   * try to guess file type in a clever way, check file against restrictions,\n   * and start an upload if `autoProceed === true`.\n   *\n   * @param {object} file object to add\n   * @returns {string} id for the added file\n   */\n  addFile(file) {\n    _classPrivateFieldLooseBase(this, _assertNewUploadAllowed)[_assertNewUploadAllowed](file);\n\n    const {\n      files\n    } = this.getState();\n\n    let newFile = _classPrivateFieldLooseBase(this, _checkAndCreateFileStateObject)[_checkAndCreateFileStateObject](files, file); // Users are asked to re-select recovered files without data,\n    // and to keep the progress, meta and everthing else, we only replace said data\n\n\n    if (files[newFile.id] && files[newFile.id].isGhost) {\n      newFile = { ...files[newFile.id],\n        data: file.data,\n        isGhost: false\n      };\n      this.log(`Replaced the blob in the restored ghost file: ${newFile.name}, ${newFile.id}`);\n    }\n\n    this.setState({\n      files: { ...files,\n        [newFile.id]: newFile\n      }\n    });\n    this.emit('file-added', newFile);\n    this.emit('files-added', [newFile]);\n    this.log(`Added file: ${newFile.name}, ${newFile.id}, mime type: ${newFile.type}`);\n\n    _classPrivateFieldLooseBase(this, _startIfAutoProceed)[_startIfAutoProceed]();\n\n    return newFile.id;\n  }\n  /**\n   * Add multiple files to `state.files`. See the `addFile()` documentation.\n   *\n   * If an error occurs while adding a file, it is logged and the user is notified.\n   * This is good for UI plugins, but not for programmatic use.\n   * Programmatic users should usually still use `addFile()` on individual files.\n   */\n\n\n  addFiles(fileDescriptors) {\n    _classPrivateFieldLooseBase(this, _assertNewUploadAllowed)[_assertNewUploadAllowed](); // create a copy of the files object only once\n\n\n    const files = { ...this.getState().files\n    };\n    const newFiles = [];\n    const errors = [];\n\n    for (let i = 0; i < fileDescriptors.length; i++) {\n      try {\n        let newFile = _classPrivateFieldLooseBase(this, _checkAndCreateFileStateObject)[_checkAndCreateFileStateObject](files, fileDescriptors[i]); // Users are asked to re-select recovered files without data,\n        // and to keep the progress, meta and everthing else, we only replace said data\n\n\n        if (files[newFile.id] && files[newFile.id].isGhost) {\n          newFile = { ...files[newFile.id],\n            data: fileDescriptors[i].data,\n            isGhost: false\n          };\n          this.log(`Replaced blob in a ghost file: ${newFile.name}, ${newFile.id}`);\n        }\n\n        files[newFile.id] = newFile;\n        newFiles.push(newFile);\n      } catch (err) {\n        if (!err.isRestriction) {\n          errors.push(err);\n        }\n      }\n    }\n\n    this.setState({\n      files\n    });\n    newFiles.forEach(newFile => {\n      this.emit('file-added', newFile);\n    });\n    this.emit('files-added', newFiles);\n\n    if (newFiles.length > 5) {\n      this.log(`Added batch of ${newFiles.length} files`);\n    } else {\n      Object.keys(newFiles).forEach(fileID => {\n        this.log(`Added file: ${newFiles[fileID].name}\\n id: ${newFiles[fileID].id}\\n type: ${newFiles[fileID].type}`);\n      });\n    }\n\n    if (newFiles.length > 0) {\n      _classPrivateFieldLooseBase(this, _startIfAutoProceed)[_startIfAutoProceed]();\n    }\n\n    if (errors.length > 0) {\n      let message = 'Multiple errors occurred while adding files:\\n';\n      errors.forEach(subError => {\n        message += `\\n * ${subError.message}`;\n      });\n      this.info({\n        message: this.i18n('addBulkFilesFailed', {\n          smart_count: errors.length\n        }),\n        details: message\n      }, 'error', this.opts.infoTimeout);\n\n      if (typeof AggregateError === 'function') {\n        throw new AggregateError(errors, message);\n      } else {\n        const err = new Error(message);\n        err.errors = errors;\n        throw err;\n      }\n    }\n  }\n\n  removeFiles(fileIDs, reason) {\n    const {\n      files,\n      currentUploads\n    } = this.getState();\n    const updatedFiles = { ...files\n    };\n    const updatedUploads = { ...currentUploads\n    };\n    const removedFiles = Object.create(null);\n    fileIDs.forEach(fileID => {\n      if (files[fileID]) {\n        removedFiles[fileID] = files[fileID];\n        delete updatedFiles[fileID];\n      }\n    }); // Remove files from the `fileIDs` list in each upload.\n\n    function fileIsNotRemoved(uploadFileID) {\n      return removedFiles[uploadFileID] === undefined;\n    }\n\n    Object.keys(updatedUploads).forEach(uploadID => {\n      const newFileIDs = currentUploads[uploadID].fileIDs.filter(fileIsNotRemoved); // Remove the upload if no files are associated with it anymore.\n\n      if (newFileIDs.length === 0) {\n        delete updatedUploads[uploadID];\n        return;\n      }\n\n      updatedUploads[uploadID] = { ...currentUploads[uploadID],\n        fileIDs: newFileIDs\n      };\n    });\n    const stateUpdate = {\n      currentUploads: updatedUploads,\n      files: updatedFiles\n    }; // If all files were removed - allow new uploads,\n    // and clear recoveredState\n\n    if (Object.keys(updatedFiles).length === 0) {\n      stateUpdate.allowNewUpload = true;\n      stateUpdate.error = null;\n      stateUpdate.recoveredState = null;\n    }\n\n    this.setState(stateUpdate);\n    this.calculateTotalProgress();\n    const removedFileIDs = Object.keys(removedFiles);\n    removedFileIDs.forEach(fileID => {\n      this.emit('file-removed', removedFiles[fileID], reason);\n    });\n\n    if (removedFileIDs.length > 5) {\n      this.log(`Removed ${removedFileIDs.length} files`);\n    } else {\n      this.log(`Removed files: ${removedFileIDs.join(', ')}`);\n    }\n  }\n\n  removeFile(fileID, reason) {\n    if (reason === void 0) {\n      reason = null;\n    }\n\n    this.removeFiles([fileID], reason);\n  }\n\n  pauseResume(fileID) {\n    if (!this.getState().capabilities.resumableUploads || this.getFile(fileID).uploadComplete) {\n      return undefined;\n    }\n\n    const wasPaused = this.getFile(fileID).isPaused || false;\n    const isPaused = !wasPaused;\n    this.setFileState(fileID, {\n      isPaused\n    });\n    this.emit('upload-pause', fileID, isPaused);\n    return isPaused;\n  }\n\n  pauseAll() {\n    const updatedFiles = { ...this.getState().files\n    };\n    const inProgressUpdatedFiles = Object.keys(updatedFiles).filter(file => {\n      return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;\n    });\n    inProgressUpdatedFiles.forEach(file => {\n      const updatedFile = { ...updatedFiles[file],\n        isPaused: true\n      };\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles\n    });\n    this.emit('pause-all');\n  }\n\n  resumeAll() {\n    const updatedFiles = { ...this.getState().files\n    };\n    const inProgressUpdatedFiles = Object.keys(updatedFiles).filter(file => {\n      return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;\n    });\n    inProgressUpdatedFiles.forEach(file => {\n      const updatedFile = { ...updatedFiles[file],\n        isPaused: false,\n        error: null\n      };\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles\n    });\n    this.emit('resume-all');\n  }\n\n  retryAll() {\n    const updatedFiles = { ...this.getState().files\n    };\n    const filesToRetry = Object.keys(updatedFiles).filter(file => {\n      return updatedFiles[file].error;\n    });\n    filesToRetry.forEach(file => {\n      const updatedFile = { ...updatedFiles[file],\n        isPaused: false,\n        error: null\n      };\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles,\n      error: null\n    });\n    this.emit('retry-all', filesToRetry);\n\n    if (filesToRetry.length === 0) {\n      return Promise.resolve({\n        successful: [],\n        failed: []\n      });\n    }\n\n    const uploadID = _classPrivateFieldLooseBase(this, _createUpload)[_createUpload](filesToRetry, {\n      forceAllowNewUpload: true // create new upload even if allowNewUpload: false\n\n    });\n\n    return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n  }\n\n  cancelAll(_temp) {\n    let {\n      reason = 'user'\n    } = _temp === void 0 ? {} : _temp;\n    this.emit('cancel-all', {\n      reason\n    }); // Only remove existing uploads if user is canceling\n\n    if (reason === 'user') {\n      const {\n        files\n      } = this.getState();\n      const fileIDs = Object.keys(files);\n\n      if (fileIDs.length) {\n        this.removeFiles(fileIDs, 'cancel-all');\n      }\n\n      this.setState({\n        totalProgress: 0,\n        error: null,\n        recoveredState: null\n      });\n    }\n  }\n\n  retryUpload(fileID) {\n    this.setFileState(fileID, {\n      error: null,\n      isPaused: false\n    });\n    this.emit('upload-retry', fileID);\n\n    const uploadID = _classPrivateFieldLooseBase(this, _createUpload)[_createUpload]([fileID], {\n      forceAllowNewUpload: true // create new upload even if allowNewUpload: false\n\n    });\n\n    return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n  } // todo remove in next major. what is the point of the reset method when we have cancelAll or vice versa?\n\n\n  reset() {\n    this.cancelAll(...arguments);\n  }\n\n  logout() {\n    this.iteratePlugins(plugin => {\n      if (plugin.provider && plugin.provider.logout) {\n        plugin.provider.logout();\n      }\n    });\n  }\n\n  calculateProgress(file, data) {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    } // bytesTotal may be null or zero; in that case we can't divide by it\n\n\n    const canHavePercentage = Number.isFinite(data.bytesTotal) && data.bytesTotal > 0;\n    this.setFileState(file.id, {\n      progress: { ...this.getFile(file.id).progress,\n        bytesUploaded: data.bytesUploaded,\n        bytesTotal: data.bytesTotal,\n        percentage: canHavePercentage ? Math.round(data.bytesUploaded / data.bytesTotal * 100) : 0\n      }\n    });\n    this.calculateTotalProgress();\n  }\n\n  calculateTotalProgress() {\n    // calculate total progress, using the number of files currently uploading,\n    // multiplied by 100 and the summ of individual progress of each file\n    const files = this.getFiles();\n    const inProgress = files.filter(file => {\n      return file.progress.uploadStarted || file.progress.preprocess || file.progress.postprocess;\n    });\n\n    if (inProgress.length === 0) {\n      this.emit('progress', 0);\n      this.setState({\n        totalProgress: 0\n      });\n      return;\n    }\n\n    const sizedFiles = inProgress.filter(file => file.progress.bytesTotal != null);\n    const unsizedFiles = inProgress.filter(file => file.progress.bytesTotal == null);\n\n    if (sizedFiles.length === 0) {\n      const progressMax = inProgress.length * 100;\n      const currentProgress = unsizedFiles.reduce((acc, file) => {\n        return acc + file.progress.percentage;\n      }, 0);\n      const totalProgress = Math.round(currentProgress / progressMax * 100);\n      this.setState({\n        totalProgress\n      });\n      return;\n    }\n\n    let totalSize = sizedFiles.reduce((acc, file) => {\n      return acc + file.progress.bytesTotal;\n    }, 0);\n    const averageSize = totalSize / sizedFiles.length;\n    totalSize += averageSize * unsizedFiles.length;\n    let uploadedSize = 0;\n    sizedFiles.forEach(file => {\n      uploadedSize += file.progress.bytesUploaded;\n    });\n    unsizedFiles.forEach(file => {\n      uploadedSize += averageSize * (file.progress.percentage || 0) / 100;\n    });\n    let totalProgress = totalSize === 0 ? 0 : Math.round(uploadedSize / totalSize * 100); // hot fix, because:\n    // uploadedSize ended up larger than totalSize, resulting in 1325% total\n\n    if (totalProgress > 100) {\n      totalProgress = 100;\n    }\n\n    this.setState({\n      totalProgress\n    });\n    this.emit('progress', totalProgress);\n  }\n  /**\n   * Registers listeners for all global actions, like:\n   * `error`, `file-removed`, `upload-progress`\n   */\n\n\n  updateOnlineStatus() {\n    const online = typeof window.navigator.onLine !== 'undefined' ? window.navigator.onLine : true;\n\n    if (!online) {\n      this.emit('is-offline');\n      this.info(this.i18n('noInternetConnection'), 'error', 0);\n      this.wasOffline = true;\n    } else {\n      this.emit('is-online');\n\n      if (this.wasOffline) {\n        this.emit('back-online');\n        this.info(this.i18n('connectedToInternet'), 'success', 3000);\n        this.wasOffline = false;\n      }\n    }\n  }\n\n  getID() {\n    return this.opts.id;\n  }\n  /**\n   * Registers a plugin with Core.\n   *\n   * @param {object} Plugin object\n   * @param {object} [opts] object with options to be passed to Plugin\n   * @returns {object} self for chaining\n   */\n  // eslint-disable-next-line no-shadow\n\n\n  use(Plugin, opts) {\n    if (typeof Plugin !== 'function') {\n      const msg = `Expected a plugin class, but got ${Plugin === null ? 'null' : typeof Plugin}.` + ' Please verify that the plugin was imported and spelled correctly.';\n      throw new TypeError(msg);\n    } // Instantiate\n\n\n    const plugin = new Plugin(this, opts);\n    const pluginId = plugin.id;\n\n    if (!pluginId) {\n      throw new Error('Your plugin must have an id');\n    }\n\n    if (!plugin.type) {\n      throw new Error('Your plugin must have a type');\n    }\n\n    const existsPluginAlready = this.getPlugin(pluginId);\n\n    if (existsPluginAlready) {\n      const msg = `Already found a plugin named '${existsPluginAlready.id}'. ` + `Tried to use: '${pluginId}'.\\n` + 'Uppy plugins must have unique `id` options. See https://uppy.io/docs/plugins/#id.';\n      throw new Error(msg);\n    }\n\n    if (Plugin.VERSION) {\n      this.log(`Using ${pluginId} v${Plugin.VERSION}`);\n    }\n\n    if (plugin.type in _classPrivateFieldLooseBase(this, _plugins)[_plugins]) {\n      _classPrivateFieldLooseBase(this, _plugins)[_plugins][plugin.type].push(plugin);\n    } else {\n      _classPrivateFieldLooseBase(this, _plugins)[_plugins][plugin.type] = [plugin];\n    }\n\n    plugin.install();\n    return this;\n  }\n  /**\n   * Find one Plugin by name.\n   *\n   * @param {string} id plugin id\n   * @returns {BasePlugin|undefined}\n   */\n\n\n  getPlugin(id) {\n    for (const plugins of Object.values(_classPrivateFieldLooseBase(this, _plugins)[_plugins])) {\n      const foundPlugin = plugins.find(plugin => plugin.id === id);\n      if (foundPlugin != null) return foundPlugin;\n    }\n\n    return undefined;\n  }\n\n  [_Symbol$for](type) {\n    return _classPrivateFieldLooseBase(this, _plugins)[_plugins][type];\n  }\n  /**\n   * Iterate through all `use`d plugins.\n   *\n   * @param {Function} method that will be run on each plugin\n   */\n\n\n  iteratePlugins(method) {\n    Object.values(_classPrivateFieldLooseBase(this, _plugins)[_plugins]).flat(1).forEach(method);\n  }\n  /**\n   * Uninstall and remove a plugin.\n   *\n   * @param {object} instance The plugin instance to remove.\n   */\n\n\n  removePlugin(instance) {\n    this.log(`Removing plugin ${instance.id}`);\n    this.emit('plugin-remove', instance);\n\n    if (instance.uninstall) {\n      instance.uninstall();\n    }\n\n    const list = _classPrivateFieldLooseBase(this, _plugins)[_plugins][instance.type]; // list.indexOf failed here, because Vue3 converted the plugin instance\n    // to a Proxy object, which failed the strict comparison test:\n    // obj !== objProxy\n\n\n    const index = list.findIndex(item => item.id === instance.id);\n\n    if (index !== -1) {\n      list.splice(index, 1);\n    }\n\n    const state = this.getState();\n    const updatedState = {\n      plugins: { ...state.plugins,\n        [instance.id]: undefined\n      }\n    };\n    this.setState(updatedState);\n  }\n  /**\n   * Uninstall all plugins and close down this Uppy instance.\n   */\n\n\n  close(_temp2) {\n    let {\n      reason\n    } = _temp2 === void 0 ? {} : _temp2;\n    this.log(`Closing Uppy instance ${this.opts.id}: removing all files and uninstalling plugins`);\n    this.cancelAll({\n      reason\n    });\n\n    _classPrivateFieldLooseBase(this, _storeUnsubscribe)[_storeUnsubscribe]();\n\n    this.iteratePlugins(plugin => {\n      this.removePlugin(plugin);\n    });\n\n    if (typeof window !== 'undefined' && window.removeEventListener) {\n      window.removeEventListener('online', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n      window.removeEventListener('offline', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n    }\n  }\n\n  hideInfo() {\n    const {\n      info\n    } = this.getState();\n    this.setState({\n      info: info.slice(1)\n    });\n    this.emit('info-hidden');\n  }\n  /**\n   * Set info message in `state.info`, so that UI plugins like `Informer`\n   * can display the message.\n   *\n   * @param {string | object} message Message to be displayed by the informer\n   * @param {string} [type]\n   * @param {number} [duration]\n   */\n\n\n  info(message, type, duration) {\n    if (type === void 0) {\n      type = 'info';\n    }\n\n    if (duration === void 0) {\n      duration = 3000;\n    }\n\n    const isComplexMessage = typeof message === 'object';\n    this.setState({\n      info: [...this.getState().info, {\n        type,\n        message: isComplexMessage ? message.message : message,\n        details: isComplexMessage ? message.details : null\n      }]\n    });\n    setTimeout(() => this.hideInfo(), duration);\n    this.emit('info-visible');\n  }\n  /**\n   * Passes messages to a function, provided in `opts.logger`.\n   * If `opts.logger: Uppy.debugLogger` or `opts.debug: true`, logs to the browser console.\n   *\n   * @param {string|object} message to log\n   * @param {string} [type] optional `error` or `warning`\n   */\n\n\n  log(message, type) {\n    const {\n      logger\n    } = this.opts;\n\n    switch (type) {\n      case 'error':\n        logger.error(message);\n        break;\n\n      case 'warning':\n        logger.warn(message);\n        break;\n\n      default:\n        logger.debug(message);\n        break;\n    }\n  }\n  /**\n   * Restore an upload by its ID.\n   */\n\n\n  restore(uploadID) {\n    this.log(`Core: attempting to restore upload \"${uploadID}\"`);\n\n    if (!this.getState().currentUploads[uploadID]) {\n      _classPrivateFieldLooseBase(this, _removeUpload)[_removeUpload](uploadID);\n\n      return Promise.reject(new Error('Nonexistent upload'));\n    }\n\n    return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n  }\n  /**\n   * Create an upload for a bunch of files.\n   *\n   * @param {Array<string>} fileIDs File IDs to include in this upload.\n   * @returns {string} ID of this upload.\n   */\n\n\n  [_Symbol$for2]() {\n    return _classPrivateFieldLooseBase(this, _createUpload)[_createUpload](...arguments);\n  }\n\n  /**\n   * Add data to an upload's result object.\n   *\n   * @param {string} uploadID The ID of the upload.\n   * @param {object} data Data properties to add to the result object.\n   */\n  addResultData(uploadID, data) {\n    if (!_classPrivateFieldLooseBase(this, _getUpload)[_getUpload](uploadID)) {\n      this.log(`Not setting result for an upload that has been removed: ${uploadID}`);\n      return;\n    }\n\n    const {\n      currentUploads\n    } = this.getState();\n    const currentUpload = { ...currentUploads[uploadID],\n      result: { ...currentUploads[uploadID].result,\n        ...data\n      }\n    };\n    this.setState({\n      currentUploads: { ...currentUploads,\n        [uploadID]: currentUpload\n      }\n    });\n  }\n  /**\n   * Remove an upload, eg. if it has been canceled or completed.\n   *\n   * @param {string} uploadID The ID of the upload.\n   */\n\n\n  /**\n   * Start an upload for all the files that are not currently being uploaded.\n   *\n   * @returns {Promise}\n   */\n  upload() {\n    var _classPrivateFieldLoo;\n\n    if (!((_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _plugins)[_plugins].uploader) != null && _classPrivateFieldLoo.length)) {\n      this.log('No uploader type plugins are used', 'warning');\n    }\n\n    let {\n      files\n    } = this.getState();\n    const onBeforeUploadResult = this.opts.onBeforeUpload(files);\n\n    if (onBeforeUploadResult === false) {\n      return Promise.reject(new Error('Not starting the upload because onBeforeUpload returned false'));\n    }\n\n    if (onBeforeUploadResult && typeof onBeforeUploadResult === 'object') {\n      files = onBeforeUploadResult; // Updating files in state, because uploader plugins receive file IDs,\n      // and then fetch the actual file object from state\n\n      this.setState({\n        files\n      });\n    }\n\n    return Promise.resolve().then(() => _classPrivateFieldLooseBase(this, _restricter)[_restricter].validateMinNumberOfFiles(files)).catch(err => {\n      _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](err);\n\n      throw err;\n    }).then(() => {\n      if (!_classPrivateFieldLooseBase(this, _checkRequiredMetaFields)[_checkRequiredMetaFields](files)) {\n        throw new _Restricter.RestrictionError(this.i18n('missingRequiredMetaField'));\n      }\n    }).catch(err => {\n      // Doing this in a separate catch because we already emited and logged\n      // all the errors in `checkRequiredMetaFields` so we only throw a generic\n      // missing fields error here.\n      throw err;\n    }).then(() => {\n      const {\n        currentUploads\n      } = this.getState(); // get a list of files that are currently assigned to uploads\n\n      const currentlyUploadingFiles = Object.values(currentUploads).flatMap(curr => curr.fileIDs);\n      const waitingFileIDs = [];\n      Object.keys(files).forEach(fileID => {\n        const file = this.getFile(fileID); // if the file hasn't started uploading and hasn't already been assigned to an upload..\n\n        if (!file.progress.uploadStarted && currentlyUploadingFiles.indexOf(fileID) === -1) {\n          waitingFileIDs.push(file.id);\n        }\n      });\n\n      const uploadID = _classPrivateFieldLooseBase(this, _createUpload)[_createUpload](waitingFileIDs);\n\n      return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n    }).catch(err => {\n      this.emit('error', err);\n      this.log(err, 'error');\n      throw err;\n    });\n  }\n\n}\n\nfunction _informAndEmit2(error, file) {\n  const {\n    message,\n    details = ''\n  } = error;\n\n  if (error.isRestriction) {\n    this.emit('restriction-failed', file, error);\n  } else {\n    this.emit('error', error);\n  }\n\n  this.info({\n    message,\n    details\n  }, 'error', this.opts.infoTimeout);\n  this.log(`${message} ${details}`.trim(), 'error');\n}\n\nfunction _checkRequiredMetaFieldsOnFile2(file) {\n  const {\n    missingFields,\n    error\n  } = _classPrivateFieldLooseBase(this, _restricter)[_restricter].getMissingRequiredMetaFields(file);\n\n  if (missingFields.length > 0) {\n    this.setFileState(file.id, {\n      missingRequiredMetaFields: missingFields\n    });\n    this.log(error.message);\n    this.emit('restriction-failed', file, error);\n    return false;\n  }\n\n  return true;\n}\n\nfunction _checkRequiredMetaFields2(files) {\n  let success = true;\n\n  for (const file of Object.values(files)) {\n    if (!_classPrivateFieldLooseBase(this, _checkRequiredMetaFieldsOnFile)[_checkRequiredMetaFieldsOnFile](file)) {\n      success = false;\n    }\n  }\n\n  return success;\n}\n\nfunction _assertNewUploadAllowed2(file) {\n  const {\n    allowNewUpload\n  } = this.getState();\n\n  if (allowNewUpload === false) {\n    const error = new _Restricter.RestrictionError(this.i18n('noMoreFilesAllowed'));\n\n    _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](error, file);\n\n    throw error;\n  }\n}\n\nfunction _checkAndCreateFileStateObject2(files, fileDescriptor) {\n  const fileType = getFileType(fileDescriptor);\n  const fileName = getFileName(fileType, fileDescriptor);\n  const fileExtension = getFileNameAndExtension(fileName).extension;\n  const isRemote = Boolean(fileDescriptor.isRemote);\n  const fileID = generateFileID({ ...fileDescriptor,\n    type: fileType\n  });\n\n  if (this.checkIfFileAlreadyExists(fileID)) {\n    const error = new _Restricter.RestrictionError(this.i18n('noDuplicates', {\n      fileName\n    }));\n\n    _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](error, fileDescriptor);\n\n    throw error;\n  }\n\n  const meta = fileDescriptor.meta || {};\n  meta.name = fileName;\n  meta.type = fileType; // `null` means the size is unknown.\n\n  const size = Number.isFinite(fileDescriptor.data.size) ? fileDescriptor.data.size : null;\n  let newFile = {\n    source: fileDescriptor.source || '',\n    id: fileID,\n    name: fileName,\n    extension: fileExtension || '',\n    meta: { ...this.getState().meta,\n      ...meta\n    },\n    type: fileType,\n    data: fileDescriptor.data,\n    progress: {\n      percentage: 0,\n      bytesUploaded: 0,\n      bytesTotal: size,\n      uploadComplete: false,\n      uploadStarted: null\n    },\n    size,\n    isRemote,\n    remote: fileDescriptor.remote || '',\n    preview: fileDescriptor.preview\n  };\n  const onBeforeFileAddedResult = this.opts.onBeforeFileAdded(newFile, files);\n\n  if (onBeforeFileAddedResult === false) {\n    // Don’t show UI info for this error, as it should be done by the developer\n    const error = new _Restricter.RestrictionError('Cannot add the file because onBeforeFileAdded returned false.');\n    this.emit('restriction-failed', fileDescriptor, error);\n    throw error;\n  } else if (typeof onBeforeFileAddedResult === 'object' && onBeforeFileAddedResult !== null) {\n    newFile = onBeforeFileAddedResult;\n  }\n\n  try {\n    const filesArray = Object.keys(files).map(i => files[i]);\n\n    _classPrivateFieldLooseBase(this, _restricter)[_restricter].validate(newFile, filesArray);\n  } catch (err) {\n    _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](err, newFile);\n\n    throw err;\n  }\n\n  return newFile;\n}\n\nfunction _startIfAutoProceed2() {\n  if (this.opts.autoProceed && !this.scheduledAutoProceed) {\n    this.scheduledAutoProceed = setTimeout(() => {\n      this.scheduledAutoProceed = null;\n      this.upload().catch(err => {\n        if (!err.isRestriction) {\n          this.log(err.stack || err.message || err);\n        }\n      });\n    }, 4);\n  }\n}\n\nfunction _addListeners2() {\n  /**\n   * @param {Error} error\n   * @param {object} [file]\n   * @param {object} [response]\n   */\n  const errorHandler = (error, file, response) => {\n    let errorMsg = error.message || 'Unknown error';\n\n    if (error.details) {\n      errorMsg += ` ${error.details}`;\n    }\n\n    this.setState({\n      error: errorMsg\n    });\n\n    if (file != null && file.id in this.getState().files) {\n      this.setFileState(file.id, {\n        error: errorMsg,\n        response\n      });\n    }\n  };\n\n  this.on('error', errorHandler);\n  this.on('upload-error', (file, error, response) => {\n    errorHandler(error, file, response);\n\n    if (typeof error === 'object' && error.message) {\n      const newError = new Error(error.message);\n      newError.details = error.message;\n\n      if (error.details) {\n        newError.details += ` ${error.details}`;\n      }\n\n      newError.message = this.i18n('failedToUpload', {\n        file: file == null ? void 0 : file.name\n      });\n\n      _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](newError);\n    } else {\n      _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](error);\n    }\n  });\n  this.on('upload', () => {\n    this.setState({\n      error: null\n    });\n  });\n  this.on('upload-started', file => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n\n    this.setFileState(file.id, {\n      progress: {\n        uploadStarted: Date.now(),\n        uploadComplete: false,\n        percentage: 0,\n        bytesUploaded: 0,\n        bytesTotal: file.size\n      }\n    });\n  });\n  this.on('upload-progress', this.calculateProgress);\n  this.on('upload-success', (file, uploadResp) => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n\n    const currentProgress = this.getFile(file.id).progress;\n    this.setFileState(file.id, {\n      progress: { ...currentProgress,\n        postprocess: _classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors].size > 0 ? {\n          mode: 'indeterminate'\n        } : null,\n        uploadComplete: true,\n        percentage: 100,\n        bytesUploaded: currentProgress.bytesTotal\n      },\n      response: uploadResp,\n      uploadURL: uploadResp.uploadURL,\n      isPaused: false\n    }); // Remote providers sometimes don't tell us the file size,\n    // but we can know how many bytes we uploaded once the upload is complete.\n\n    if (file.size == null) {\n      this.setFileState(file.id, {\n        size: uploadResp.bytesUploaded || currentProgress.bytesTotal\n      });\n    }\n\n    this.calculateTotalProgress();\n  });\n  this.on('preprocess-progress', (file, progress) => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n\n    this.setFileState(file.id, {\n      progress: { ...this.getFile(file.id).progress,\n        preprocess: progress\n      }\n    });\n  });\n  this.on('preprocess-complete', file => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n\n    const files = { ...this.getState().files\n    };\n    files[file.id] = { ...files[file.id],\n      progress: { ...files[file.id].progress\n      }\n    };\n    delete files[file.id].progress.preprocess;\n    this.setState({\n      files\n    });\n  });\n  this.on('postprocess-progress', (file, progress) => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n\n    this.setFileState(file.id, {\n      progress: { ...this.getState().files[file.id].progress,\n        postprocess: progress\n      }\n    });\n  });\n  this.on('postprocess-complete', file => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n\n    const files = { ...this.getState().files\n    };\n    files[file.id] = { ...files[file.id],\n      progress: { ...files[file.id].progress\n      }\n    };\n    delete files[file.id].progress.postprocess;\n    this.setState({\n      files\n    });\n  });\n  this.on('restored', () => {\n    // Files may have changed--ensure progress is still accurate.\n    this.calculateTotalProgress();\n  });\n  this.on('dashboard:file-edit-complete', file => {\n    if (file) {\n      _classPrivateFieldLooseBase(this, _checkRequiredMetaFieldsOnFile)[_checkRequiredMetaFieldsOnFile](file);\n    }\n  }); // show informer if offline\n\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    window.addEventListener('online', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n    window.addEventListener('offline', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n    setTimeout(_classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus], 3000);\n  }\n}\n\nfunction _createUpload2(fileIDs, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n\n  // uppy.retryAll sets this to true — when retrying we want to ignore `allowNewUpload: false`\n  const {\n    forceAllowNewUpload = false\n  } = opts;\n  const {\n    allowNewUpload,\n    currentUploads\n  } = this.getState();\n\n  if (!allowNewUpload && !forceAllowNewUpload) {\n    throw new Error('Cannot create a new upload: already uploading.');\n  }\n\n  const uploadID = (0, _nonSecure.nanoid)();\n  this.emit('upload', {\n    id: uploadID,\n    fileIDs\n  });\n  this.setState({\n    allowNewUpload: this.opts.allowMultipleUploadBatches !== false && this.opts.allowMultipleUploads !== false,\n    currentUploads: { ...currentUploads,\n      [uploadID]: {\n        fileIDs,\n        step: 0,\n        result: {}\n      }\n    }\n  });\n  return uploadID;\n}\n\nfunction _getUpload2(uploadID) {\n  const {\n    currentUploads\n  } = this.getState();\n  return currentUploads[uploadID];\n}\n\nfunction _removeUpload2(uploadID) {\n  const currentUploads = { ...this.getState().currentUploads\n  };\n  delete currentUploads[uploadID];\n  this.setState({\n    currentUploads\n  });\n}\n\nasync function _runUpload2(uploadID) {\n  let {\n    currentUploads\n  } = this.getState();\n  let currentUpload = currentUploads[uploadID];\n  const restoreStep = currentUpload.step || 0;\n  const steps = [..._classPrivateFieldLooseBase(this, _preProcessors)[_preProcessors], ..._classPrivateFieldLooseBase(this, _uploaders)[_uploaders], ..._classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors]];\n\n  try {\n    for (let step = restoreStep; step < steps.length; step++) {\n      if (!currentUpload) {\n        break;\n      }\n\n      const fn = steps[step];\n      const updatedUpload = { ...currentUpload,\n        step\n      };\n      this.setState({\n        currentUploads: { ...currentUploads,\n          [uploadID]: updatedUpload\n        }\n      }); // TODO give this the `updatedUpload` object as its only parameter maybe?\n      // Otherwise when more metadata may be added to the upload this would keep getting more parameters\n\n      await fn(updatedUpload.fileIDs, uploadID); // Update currentUpload value in case it was modified asynchronously.\n\n      currentUploads = this.getState().currentUploads;\n      currentUpload = currentUploads[uploadID];\n    }\n  } catch (err) {\n    _classPrivateFieldLooseBase(this, _removeUpload)[_removeUpload](uploadID);\n\n    throw err;\n  } // Set result data.\n\n\n  if (currentUpload) {\n    // Mark postprocessing step as complete if necessary; this addresses a case where we might get\n    // stuck in the postprocessing UI while the upload is fully complete.\n    // If the postprocessing steps do not do any work, they may not emit postprocessing events at\n    // all, and never mark the postprocessing as complete. This is fine on its own but we\n    // introduced code in the @uppy/core upload-success handler to prepare postprocessing progress\n    // state if any postprocessors are registered. That is to avoid a \"flash of completed state\"\n    // before the postprocessing plugins can emit events.\n    //\n    // So, just in case an upload with postprocessing plugins *has* completed *without* emitting\n    // postprocessing completion, we do it instead.\n    currentUpload.fileIDs.forEach(fileID => {\n      const file = this.getFile(fileID);\n\n      if (file && file.progress.postprocess) {\n        this.emit('postprocess-complete', file);\n      }\n    });\n    const files = currentUpload.fileIDs.map(fileID => this.getFile(fileID));\n    const successful = files.filter(file => !file.error);\n    const failed = files.filter(file => file.error);\n    await this.addResultData(uploadID, {\n      successful,\n      failed,\n      uploadID\n    }); // Update currentUpload value in case it was modified asynchronously.\n\n    currentUploads = this.getState().currentUploads;\n    currentUpload = currentUploads[uploadID];\n  } // Emit completion events.\n  // This is in a separate function so that the `currentUploads` variable\n  // always refers to the latest state. In the handler right above it refers\n  // to an outdated object without the `.result` property.\n\n\n  let result;\n\n  if (currentUpload) {\n    result = currentUpload.result;\n    this.emit('complete', result);\n\n    _classPrivateFieldLooseBase(this, _removeUpload)[_removeUpload](uploadID);\n  }\n\n  if (result == null) {\n    this.log(`Not setting result for an upload that has been removed: ${uploadID}`);\n  }\n\n  return result;\n}\n\nUppy.VERSION = packageJson.version;\nmodule.exports = Uppy;","\"use strict\";\n\nfunction getFileName(fileType, fileDescriptor) {\n  if (fileDescriptor.name) {\n    return fileDescriptor.name;\n  }\n\n  if (fileType.split('/')[0] === 'image') {\n    return `${fileType.split('/')[0]}.${fileType.split('/')[1]}`;\n  }\n\n  return 'noname';\n}\n\nmodule.exports = getFileName;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Uppy = exports.UIPlugin = exports.BasePlugin = void 0;\nObject.defineProperty(exports, \"debugLogger\", {\n  enumerable: true,\n  get: function () {\n    return _loggers.debugLogger;\n  }\n});\n\nvar _loggers = require(\"./loggers.js\");\n\nmodule.exports = require('./Uppy.js');\n\nconst _0 = require(\"./UIPlugin.js\");\n\nexports.UIPlugin = _0;\n\nconst _1 = require(\"./BasePlugin.js\");\n\nexports.BasePlugin = _1;\n\n// TODO: remove all the following in the next major\n\n/* eslint-disable import/first */\nconst Uppy = require(\"./Uppy.js\");\n\nexports.Uppy = Uppy;\n\nconst UIPlugin = require(\"./UIPlugin.js\");\n\nconst BasePlugin = require(\"./BasePlugin.js\");\n\n// Backward compatibility: we want those to keep being accessible as static\n// properties of `Uppy` to avoid a breaking change.\nUppy.Uppy = Uppy;\nUppy.UIPlugin = UIPlugin;\nUppy.BasePlugin = BasePlugin;\nUppy.debugLogger = _loggers.debugLogger;","\"use strict\";\n\nmodule.exports = {\n  strings: {\n    addBulkFilesFailed: {\n      0: 'Failed to add %{smart_count} file due to an internal error',\n      1: 'Failed to add %{smart_count} files due to internal errors'\n    },\n    youCanOnlyUploadX: {\n      0: 'You can only upload %{smart_count} file',\n      1: 'You can only upload %{smart_count} files'\n    },\n    youHaveToAtLeastSelectX: {\n      0: 'You have to select at least %{smart_count} file',\n      1: 'You have to select at least %{smart_count} files'\n    },\n    exceedsSize: '%{file} exceeds maximum allowed size of %{size}',\n    missingRequiredMetaField: 'Missing required meta fields',\n    missingRequiredMetaFieldOnFile: 'Missing required meta fields in %{fileName}',\n    inferiorSize: 'This file is smaller than the allowed size of %{size}',\n    youCanOnlyUploadFileTypes: 'You can only upload: %{types}',\n    noMoreFilesAllowed: 'Cannot add more files',\n    noDuplicates: \"Cannot add the duplicate file '%{fileName}', it already exists\",\n    companionError: 'Connection with Companion failed',\n    authAborted: 'Authentication aborted',\n    companionUnauthorizeHint: 'To unauthorize to your %{provider} account, please go to %{url}',\n    failedToUpload: 'Failed to upload %{file}',\n    noInternetConnection: 'No Internet connection',\n    connectedToInternet: 'Connected to the Internet',\n    // Strings for remote providers\n    noFilesFound: 'You have no files or folders here',\n    selectX: {\n      0: 'Select %{smart_count}',\n      1: 'Select %{smart_count}'\n    },\n    allFilesFromFolderNamed: 'All files from folder %{name}',\n    openFolderNamed: 'Open folder %{name}',\n    cancel: 'Cancel',\n    logOut: 'Log out',\n    filter: 'Filter',\n    resetFilter: 'Reset filter',\n    loading: 'Loading...',\n    authenticateWithTitle: 'Please authenticate with %{pluginName} to select files',\n    authenticateWith: 'Connect to %{pluginName}',\n    signInWithGoogle: 'Sign in with Google',\n    searchImages: 'Search for images',\n    enterTextToSearch: 'Enter text to search for images',\n    search: 'Search',\n    emptyFolderAdded: 'No files were added from empty folder',\n    folderAlreadyAdded: 'The folder \"%{folder}\" was already added',\n    folderAdded: {\n      0: 'Added %{smart_count} file from %{folder}',\n      1: 'Added %{smart_count} files from %{folder}'\n    }\n  }\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.justErrorsLogger = exports.debugLogger = void 0;\n\n/* eslint-disable no-console */\nconst getTimeStamp = require(\"@uppy/utils/lib/getTimeStamp\"); // Swallow all logs, except errors.\n// default if logger is not set or debug: false\n\n\nconst justErrorsLogger = {\n  debug: () => {},\n  warn: () => {},\n  error: function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return console.error(`[Uppy] [${getTimeStamp()}]`, ...args);\n  }\n}; // Print logs to console with namespace + timestamp,\n// set by logger: Uppy.debugLogger or debug: true\n\nexports.justErrorsLogger = justErrorsLogger;\nconst debugLogger = {\n  debug: function () {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return console.debug(`[Uppy] [${getTimeStamp()}]`, ...args);\n  },\n  warn: function () {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n\n    return console.warn(`[Uppy] [${getTimeStamp()}]`, ...args);\n  },\n  error: function () {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n\n    return console.error(`[Uppy] [${getTimeStamp()}]`, ...args);\n  }\n};\nexports.debugLogger = debugLogger;","\"use strict\";\n\nfunction supportsUploadProgress(userAgent) {\n  // Allow passing in userAgent for tests\n  if (userAgent == null && typeof navigator !== 'undefined') {\n    // eslint-disable-next-line no-param-reassign\n    userAgent = navigator.userAgent;\n  } // Assume it works because basically everything supports progress events.\n\n\n  if (!userAgent) return true;\n  const m = /Edge\\/(\\d+\\.\\d+)/.exec(userAgent);\n  if (!m) return true;\n  const edgeVersion = m[1];\n  let [major, minor] = edgeVersion.split('.');\n  major = parseInt(major, 10);\n  minor = parseInt(minor, 10); // Worked before:\n  // Edge 40.15063.0.0\n  // Microsoft EdgeHTML 15.15063\n\n  if (major < 15 || major === 15 && minor < 15063) {\n    return true;\n  } // Fixed in:\n  // Microsoft EdgeHTML 18.18218\n\n\n  if (major > 18 || major === 18 && minor >= 18218) {\n    return true;\n  } // other versions don't work.\n\n\n  return false;\n}\n\n// Edge 15.x does not fire 'progress' events on uploads.\n// See https://github.com/transloadit/uppy/issues/945\n// And https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12224510/\nmodule.exports = supportsUploadProgress;","\"use strict\";\n\nconst BasePlugin = require(\"@uppy/core/lib/BasePlugin\");\n\nconst getDroppedFiles = require(\"@uppy/utils/lib/getDroppedFiles\");\n\nconst toArray = require(\"@uppy/utils/lib/toArray\");\n\nconst packageJson = {\n  \"version\": \"1.1.3\"\n};\n\nfunction isFileTransfer(event) {\n  var _event$dataTransfer$t, _event$dataTransfer$t2;\n\n  return (_event$dataTransfer$t = (_event$dataTransfer$t2 = event.dataTransfer.types) == null ? void 0 : _event$dataTransfer$t2.some(type => type === 'Files')) != null ? _event$dataTransfer$t : false;\n}\n/**\n * Drop Target plugin\n *\n */\n\n\nclass DropTarget extends BasePlugin {\n  constructor(uppy, opts) {\n    super(uppy, opts);\n\n    this.addFiles = files => {\n      const descriptors = files.map(file => ({\n        source: this.id,\n        name: file.name,\n        type: file.type,\n        data: file,\n        meta: {\n          // path of the file relative to the ancestor directory the user selected.\n          // e.g. 'docs/Old Prague/airbnb.pdf'\n          relativePath: file.relativePath || null\n        }\n      }));\n\n      try {\n        this.uppy.addFiles(descriptors);\n      } catch (err) {\n        this.uppy.log(err);\n      }\n    };\n\n    this.isFileTransfer = isFileTransfer;\n\n    this.handleDrop = async event => {\n      var _this$opts$onDrop, _this$opts;\n\n      if (!this.isFileTransfer(event)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n      clearTimeout(this.removeDragOverClassTimeout); // Remove dragover class\n\n      event.currentTarget.classList.remove('uppy-is-drag-over');\n      this.setPluginState({\n        isDraggingOver: false\n      }); // Let any acquirer plugin (Url/Webcam/etc.) handle drops to the root\n\n      this.uppy.iteratePlugins(plugin => {\n        if (plugin.type === 'acquirer') {\n          // Every Plugin with .type acquirer can define handleRootDrop(event)\n          plugin.handleRootDrop == null ? void 0 : plugin.handleRootDrop(event);\n        }\n      }); // Add all dropped files, handle errors\n\n      let executedDropErrorOnce = false;\n\n      const logDropError = error => {\n        this.uppy.log(error, 'error'); // In practice all drop errors are most likely the same,\n        // so let's just show one to avoid overwhelming the user\n\n        if (!executedDropErrorOnce) {\n          this.uppy.info(error.message, 'error');\n          executedDropErrorOnce = true;\n        }\n      };\n\n      const files = await getDroppedFiles(event.dataTransfer, {\n        logDropError\n      });\n\n      if (files.length > 0) {\n        this.uppy.log('[DropTarget] Files were dropped');\n        this.addFiles(files);\n      }\n\n      (_this$opts$onDrop = (_this$opts = this.opts).onDrop) == null ? void 0 : _this$opts$onDrop.call(_this$opts, event);\n    };\n\n    this.handleDragOver = event => {\n      var _this$opts$onDragOver, _this$opts2;\n\n      if (!this.isFileTransfer(event)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation(); // Add a small (+) icon on drop\n      // (and prevent browsers from interpreting this as files being _moved_ into the browser,\n      // https://github.com/transloadit/uppy/issues/1978)\n\n      event.dataTransfer.dropEffect = 'copy'; // eslint-disable-line no-param-reassign\n\n      clearTimeout(this.removeDragOverClassTimeout);\n      event.currentTarget.classList.add('uppy-is-drag-over');\n      this.setPluginState({\n        isDraggingOver: true\n      });\n      (_this$opts$onDragOver = (_this$opts2 = this.opts).onDragOver) == null ? void 0 : _this$opts$onDragOver.call(_this$opts2, event);\n    };\n\n    this.handleDragLeave = event => {\n      var _this$opts$onDragLeav, _this$opts3;\n\n      if (!this.isFileTransfer(event)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n      const {\n        currentTarget\n      } = event;\n      clearTimeout(this.removeDragOverClassTimeout); // Timeout against flickering, this solution is taken from drag-drop library.\n      // Solution with 'pointer-events: none' didn't work across browsers.\n\n      this.removeDragOverClassTimeout = setTimeout(() => {\n        currentTarget.classList.remove('uppy-is-drag-over');\n        this.setPluginState({\n          isDraggingOver: false\n        });\n      }, 50);\n      (_this$opts$onDragLeav = (_this$opts3 = this.opts).onDragLeave) == null ? void 0 : _this$opts$onDragLeav.call(_this$opts3, event);\n    };\n\n    this.addListeners = () => {\n      const {\n        target\n      } = this.opts;\n\n      if (target instanceof Element) {\n        this.nodes = [target];\n      } else if (typeof target === 'string') {\n        this.nodes = toArray(document.querySelectorAll(target));\n      }\n\n      if (!this.nodes && !this.nodes.length > 0) {\n        throw new Error(`\"${target}\" does not match any HTML elements`);\n      }\n\n      this.nodes.forEach(node => {\n        node.addEventListener('dragover', this.handleDragOver, false);\n        node.addEventListener('dragleave', this.handleDragLeave, false);\n        node.addEventListener('drop', this.handleDrop, false);\n      });\n    };\n\n    this.removeListeners = () => {\n      if (this.nodes) {\n        this.nodes.forEach(node => {\n          node.removeEventListener('dragover', this.handleDragOver, false);\n          node.removeEventListener('dragleave', this.handleDragLeave, false);\n          node.removeEventListener('drop', this.handleDrop, false);\n        });\n      }\n    };\n\n    this.type = 'acquirer';\n    this.id = this.opts.id || 'DropTarget';\n    this.title = 'Drop Target'; // Default options\n\n    const defaultOpts = {\n      target: null\n    }; // Merge default options with the ones set by user\n\n    this.opts = { ...defaultOpts,\n      ...opts\n    };\n    this.removeDragOverClassTimeout = null;\n  }\n\n  install() {\n    this.setPluginState({\n      isDraggingOver: false\n    });\n    this.addListeners();\n  }\n\n  uninstall() {\n    this.removeListeners();\n  }\n\n}\n\nDropTarget.VERSION = packageJson.version;\nmodule.exports = DropTarget;","\"use strict\";\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nconst packageJson = {\n  \"version\": \"2.1.0\"\n};\n/**\n * Default store that keeps state in a simple object.\n */\n\nvar _publish = /*#__PURE__*/_classPrivateFieldLooseKey(\"publish\");\n\nclass DefaultStore {\n  constructor() {\n    Object.defineProperty(this, _publish, {\n      value: _publish2\n    });\n    this.state = {};\n    this.callbacks = []; // TODO: use a Set instead, make it a private prop\n  }\n\n  getState() {\n    return this.state;\n  }\n\n  setState(patch) {\n    const prevState = { ...this.state\n    };\n    const nextState = { ...this.state,\n      ...patch\n    };\n    this.state = nextState;\n\n    _classPrivateFieldLooseBase(this, _publish)[_publish](prevState, nextState, patch);\n  }\n\n  subscribe(listener) {\n    this.callbacks.push(listener);\n    return () => {\n      // Remove the listener.\n      this.callbacks.splice(this.callbacks.indexOf(listener), 1);\n    };\n  }\n\n} // TODO: export the class instead in the next major.\n\n\nfunction _publish2() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  this.callbacks.forEach(listener => {\n    listener(...args);\n  });\n}\n\nDefaultStore.VERSION = packageJson.version;\n\nfunction defaultStore() {\n  return new DefaultStore();\n}\n\nmodule.exports = defaultStore;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.createAbortError = exports.AbortSignal = exports.AbortController = void 0;\n\n/**\n * Little AbortController proxy module so we can swap out the implementation easily later.\n */\nconst {\n  AbortController\n} = globalThis;\nexports.AbortController = AbortController;\nconst {\n  AbortSignal\n} = globalThis;\nexports.AbortSignal = AbortSignal;\n\nconst createAbortError = function (message) {\n  if (message === void 0) {\n    message = 'Aborted';\n  }\n\n  return new DOMException(message, 'AbortError');\n};\n\nexports.createAbortError = createAbortError;","\"use strict\";\n\nconst hasProperty = require(\"./hasProperty.js\");\n\nclass ErrorWithCause extends Error {\n  constructor(message, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    super(message);\n    this.cause = options.cause;\n\n    if (this.cause && hasProperty(this.cause, 'isNetworkError')) {\n      this.isNetworkError = this.cause.isNetworkError;\n    }\n  }\n\n}\n\nmodule.exports = ErrorWithCause;","\"use strict\";\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nvar _emitter = /*#__PURE__*/_classPrivateFieldLooseKey(\"emitter\");\n\nvar _events = /*#__PURE__*/_classPrivateFieldLooseKey(\"events\");\n\nclass EventTracker {\n  constructor(emitter) {\n    Object.defineProperty(this, _emitter, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _events, {\n      writable: true,\n      value: []\n    });\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter] = emitter;\n  }\n\n  on(event, fn) {\n    _classPrivateFieldLooseBase(this, _events)[_events].push([event, fn]);\n\n    return _classPrivateFieldLooseBase(this, _emitter)[_emitter].on(event, fn);\n  }\n\n  remove() {\n    for (const [event, fn] of _classPrivateFieldLooseBase(this, _events)[_events].splice(0)) {\n      _classPrivateFieldLooseBase(this, _emitter)[_emitter].off(event, fn);\n    }\n  }\n\n}\n\n/**\n * Create a wrapper around an event emitter with a `remove` method to remove\n * all events that were added using the wrapped emitter.\n */\nmodule.exports = EventTracker;","\"use strict\";\n\nclass NetworkError extends Error {\n  constructor(error, xhr) {\n    if (xhr === void 0) {\n      xhr = null;\n    }\n\n    super(`This looks like a network error, the endpoint might be blocked by an internet provider or a firewall.`);\n    this.cause = error;\n    this.isNetworkError = true;\n    this.request = xhr;\n  }\n\n}\n\nmodule.exports = NetworkError;","\"use strict\";\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nvar _aliveTimer = /*#__PURE__*/_classPrivateFieldLooseKey(\"aliveTimer\");\n\nvar _isDone = /*#__PURE__*/_classPrivateFieldLooseKey(\"isDone\");\n\nvar _onTimedOut = /*#__PURE__*/_classPrivateFieldLooseKey(\"onTimedOut\");\n\nvar _timeout = /*#__PURE__*/_classPrivateFieldLooseKey(\"timeout\");\n\n/**\n * Helper to abort upload requests if there has not been any progress for `timeout` ms.\n * Create an instance using `timer = new ProgressTimeout(10000, onTimeout)`\n * Call `timer.progress()` to signal that there has been progress of any kind.\n * Call `timer.done()` when the upload has completed.\n */\nclass ProgressTimeout {\n  constructor(timeout, timeoutHandler) {\n    Object.defineProperty(this, _aliveTimer, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _isDone, {\n      writable: true,\n      value: false\n    });\n    Object.defineProperty(this, _onTimedOut, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _timeout, {\n      writable: true,\n      value: void 0\n    });\n    _classPrivateFieldLooseBase(this, _timeout)[_timeout] = timeout;\n    _classPrivateFieldLooseBase(this, _onTimedOut)[_onTimedOut] = timeoutHandler;\n  }\n\n  progress() {\n    // Some browsers fire another progress event when the upload is\n    // cancelled, so we have to ignore progress after the timer was\n    // told to stop.\n    if (_classPrivateFieldLooseBase(this, _isDone)[_isDone]) return;\n\n    if (_classPrivateFieldLooseBase(this, _timeout)[_timeout] > 0) {\n      clearTimeout(_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer]);\n      _classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer] = setTimeout(_classPrivateFieldLooseBase(this, _onTimedOut)[_onTimedOut], _classPrivateFieldLooseBase(this, _timeout)[_timeout]);\n    }\n  }\n\n  done() {\n    if (!_classPrivateFieldLooseBase(this, _isDone)[_isDone]) {\n      clearTimeout(_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer]);\n      _classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer] = null;\n      _classPrivateFieldLooseBase(this, _isDone)[_isDone] = true;\n    }\n  }\n\n}\n\nmodule.exports = ProgressTimeout;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.internalRateLimitedQueue = exports.RateLimitedQueue = void 0;\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nfunction createCancelError() {\n  return new Error('Cancelled');\n}\n\nvar _activeRequests = /*#__PURE__*/_classPrivateFieldLooseKey(\"activeRequests\");\n\nvar _queuedHandlers = /*#__PURE__*/_classPrivateFieldLooseKey(\"queuedHandlers\");\n\nvar _paused = /*#__PURE__*/_classPrivateFieldLooseKey(\"paused\");\n\nvar _pauseTimer = /*#__PURE__*/_classPrivateFieldLooseKey(\"pauseTimer\");\n\nvar _downLimit = /*#__PURE__*/_classPrivateFieldLooseKey(\"downLimit\");\n\nvar _upperLimit = /*#__PURE__*/_classPrivateFieldLooseKey(\"upperLimit\");\n\nvar _rateLimitingTimer = /*#__PURE__*/_classPrivateFieldLooseKey(\"rateLimitingTimer\");\n\nvar _call = /*#__PURE__*/_classPrivateFieldLooseKey(\"call\");\n\nvar _queueNext = /*#__PURE__*/_classPrivateFieldLooseKey(\"queueNext\");\n\nvar _next = /*#__PURE__*/_classPrivateFieldLooseKey(\"next\");\n\nvar _queue = /*#__PURE__*/_classPrivateFieldLooseKey(\"queue\");\n\nvar _dequeue = /*#__PURE__*/_classPrivateFieldLooseKey(\"dequeue\");\n\nvar _resume = /*#__PURE__*/_classPrivateFieldLooseKey(\"resume\");\n\nvar _increaseLimit = /*#__PURE__*/_classPrivateFieldLooseKey(\"increaseLimit\");\n\nclass RateLimitedQueue {\n  constructor(limit) {\n    Object.defineProperty(this, _dequeue, {\n      value: _dequeue2\n    });\n    Object.defineProperty(this, _queue, {\n      value: _queue2\n    });\n    Object.defineProperty(this, _next, {\n      value: _next2\n    });\n    Object.defineProperty(this, _queueNext, {\n      value: _queueNext2\n    });\n    Object.defineProperty(this, _call, {\n      value: _call2\n    });\n    Object.defineProperty(this, _activeRequests, {\n      writable: true,\n      value: 0\n    });\n    Object.defineProperty(this, _queuedHandlers, {\n      writable: true,\n      value: []\n    });\n    Object.defineProperty(this, _paused, {\n      writable: true,\n      value: false\n    });\n    Object.defineProperty(this, _pauseTimer, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _downLimit, {\n      writable: true,\n      value: 1\n    });\n    Object.defineProperty(this, _upperLimit, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _rateLimitingTimer, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _resume, {\n      writable: true,\n      value: () => this.resume()\n    });\n    Object.defineProperty(this, _increaseLimit, {\n      writable: true,\n      value: () => {\n        if (_classPrivateFieldLooseBase(this, _paused)[_paused]) {\n          _classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer] = setTimeout(_classPrivateFieldLooseBase(this, _increaseLimit)[_increaseLimit], 0);\n          return;\n        }\n\n        _classPrivateFieldLooseBase(this, _downLimit)[_downLimit] = this.limit;\n        this.limit = Math.ceil((_classPrivateFieldLooseBase(this, _upperLimit)[_upperLimit] + _classPrivateFieldLooseBase(this, _downLimit)[_downLimit]) / 2);\n\n        for (let i = _classPrivateFieldLooseBase(this, _downLimit)[_downLimit]; i <= this.limit; i++) {\n          _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n        }\n\n        if (_classPrivateFieldLooseBase(this, _upperLimit)[_upperLimit] - _classPrivateFieldLooseBase(this, _downLimit)[_downLimit] > 3) {\n          _classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer] = setTimeout(_classPrivateFieldLooseBase(this, _increaseLimit)[_increaseLimit], 2000);\n        } else {\n          _classPrivateFieldLooseBase(this, _downLimit)[_downLimit] = Math.floor(_classPrivateFieldLooseBase(this, _downLimit)[_downLimit] / 2);\n        }\n      }\n    });\n\n    if (typeof limit !== 'number' || limit === 0) {\n      this.limit = Infinity;\n    } else {\n      this.limit = limit;\n    }\n  }\n\n  run(fn, queueOptions) {\n    if (!_classPrivateFieldLooseBase(this, _paused)[_paused] && _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] < this.limit) {\n      return _classPrivateFieldLooseBase(this, _call)[_call](fn);\n    }\n\n    return _classPrivateFieldLooseBase(this, _queue)[_queue](fn, queueOptions);\n  }\n\n  wrapPromiseFunction(fn, queueOptions) {\n    var _this = this;\n\n    return function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      let queuedRequest;\n      const outerPromise = new Promise((resolve, reject) => {\n        queuedRequest = _this.run(() => {\n          let cancelError;\n          let innerPromise;\n\n          try {\n            innerPromise = Promise.resolve(fn(...args));\n          } catch (err) {\n            innerPromise = Promise.reject(err);\n          }\n\n          innerPromise.then(result => {\n            if (cancelError) {\n              reject(cancelError);\n            } else {\n              queuedRequest.done();\n              resolve(result);\n            }\n          }, err => {\n            if (cancelError) {\n              reject(cancelError);\n            } else {\n              queuedRequest.done();\n              reject(err);\n            }\n          });\n          return () => {\n            cancelError = createCancelError();\n          };\n        }, queueOptions);\n      });\n\n      outerPromise.abort = () => {\n        queuedRequest.abort();\n      };\n\n      return outerPromise;\n    };\n  }\n\n  resume() {\n    _classPrivateFieldLooseBase(this, _paused)[_paused] = false;\n    clearTimeout(_classPrivateFieldLooseBase(this, _pauseTimer)[_pauseTimer]);\n\n    for (let i = 0; i < this.limit; i++) {\n      _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n    }\n  }\n\n  /**\n   * Freezes the queue for a while or indefinitely.\n   *\n   * @param {number | null } [duration] Duration for the pause to happen, in milliseconds.\n   *                                    If omitted, the queue won't resume automatically.\n   */\n  pause(duration) {\n    if (duration === void 0) {\n      duration = null;\n    }\n\n    _classPrivateFieldLooseBase(this, _paused)[_paused] = true;\n    clearTimeout(_classPrivateFieldLooseBase(this, _pauseTimer)[_pauseTimer]);\n\n    if (duration != null) {\n      _classPrivateFieldLooseBase(this, _pauseTimer)[_pauseTimer] = setTimeout(_classPrivateFieldLooseBase(this, _resume)[_resume], duration);\n    }\n  }\n  /**\n   * Pauses the queue for a duration, and lower the limit of concurrent requests\n   * when the queue resumes. When the queue resumes, it tries to progressively\n   * increase the limit in `this.#increaseLimit` until another call is made to\n   * `this.rateLimit`.\n   * Call this function when using the RateLimitedQueue for network requests and\n   * the remote server responds with 429 HTTP code.\n   *\n   * @param {number} duration in milliseconds.\n   */\n\n\n  rateLimit(duration) {\n    clearTimeout(_classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer]);\n    this.pause(duration);\n\n    if (this.limit > 1 && Number.isFinite(this.limit)) {\n      _classPrivateFieldLooseBase(this, _upperLimit)[_upperLimit] = this.limit - 1;\n      this.limit = _classPrivateFieldLooseBase(this, _downLimit)[_downLimit];\n      _classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer] = setTimeout(_classPrivateFieldLooseBase(this, _increaseLimit)[_increaseLimit], duration);\n    }\n  }\n\n  get isPaused() {\n    return _classPrivateFieldLooseBase(this, _paused)[_paused];\n  }\n\n}\n\nexports.RateLimitedQueue = RateLimitedQueue;\n\nfunction _call2(fn) {\n  _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] += 1;\n  let done = false;\n  let cancelActive;\n\n  try {\n    cancelActive = fn();\n  } catch (err) {\n    _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] -= 1;\n    throw err;\n  }\n\n  return {\n    abort: () => {\n      if (done) return;\n      done = true;\n      _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] -= 1;\n      cancelActive();\n\n      _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n    },\n    done: () => {\n      if (done) return;\n      done = true;\n      _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] -= 1;\n\n      _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n    }\n  };\n}\n\nfunction _queueNext2() {\n  // Do it soon but not immediately, this allows clearing out the entire queue synchronously\n  // one by one without continuously _advancing_ it (and starting new tasks before immediately\n  // aborting them)\n  queueMicrotask(() => _classPrivateFieldLooseBase(this, _next)[_next]());\n}\n\nfunction _next2() {\n  if (_classPrivateFieldLooseBase(this, _paused)[_paused] || _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] >= this.limit) {\n    return;\n  }\n\n  if (_classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].length === 0) {\n    return;\n  } // Dispatch the next request, and update the abort/done handlers\n  // so that cancelling it does the Right Thing (and doesn't just try\n  // to dequeue an already-running request).\n\n\n  const next = _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].shift();\n\n  const handler = _classPrivateFieldLooseBase(this, _call)[_call](next.fn);\n\n  next.abort = handler.abort;\n  next.done = handler.done;\n}\n\nfunction _queue2(fn, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  const handler = {\n    fn,\n    priority: options.priority || 0,\n    abort: () => {\n      _classPrivateFieldLooseBase(this, _dequeue)[_dequeue](handler);\n    },\n    done: () => {\n      throw new Error('Cannot mark a queued request as done: this indicates a bug');\n    }\n  };\n\n  const index = _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].findIndex(other => {\n    return handler.priority > other.priority;\n  });\n\n  if (index === -1) {\n    _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].push(handler);\n  } else {\n    _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].splice(index, 0, handler);\n  }\n\n  return handler;\n}\n\nfunction _dequeue2(handler) {\n  const index = _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].indexOf(handler);\n\n  if (index !== -1) {\n    _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].splice(index, 1);\n  }\n}\n\nconst internalRateLimitedQueue = Symbol('__queue');\nexports.internalRateLimitedQueue = internalRateLimitedQueue;","\"use strict\";\n\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\n\nvar id = 0;\n\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n\nconst has = require(\"./hasProperty.js\");\n\nfunction insertReplacement(source, rx, replacement) {\n  const newParts = [];\n  source.forEach(chunk => {\n    // When the source contains multiple placeholders for interpolation,\n    // we should ignore chunks that are not strings, because those\n    // can be JSX objects and will be otherwise incorrectly turned into strings.\n    // Without this condition we’d get this: [object Object] hello [object Object] my <button>\n    if (typeof chunk !== 'string') {\n      return newParts.push(chunk);\n    }\n\n    return rx[Symbol.split](chunk).forEach((raw, i, list) => {\n      if (raw !== '') {\n        newParts.push(raw);\n      } // Interlace with the `replacement` value\n\n\n      if (i < list.length - 1) {\n        newParts.push(replacement);\n      }\n    });\n  });\n  return newParts;\n}\n/**\n * Takes a string with placeholder variables like `%{smart_count} file selected`\n * and replaces it with values from options `{smart_count: 5}`\n *\n * @license https://github.com/airbnb/polyglot.js/blob/master/LICENSE\n * taken from https://github.com/airbnb/polyglot.js/blob/master/lib/polyglot.js#L299\n *\n * @param {string} phrase that needs interpolation, with placeholders\n * @param {object} options with values that will be used to replace placeholders\n * @returns {any[]} interpolated\n */\n\n\nfunction interpolate(phrase, options) {\n  const dollarRegex = /\\$/g;\n  const dollarBillsYall = '$$$$';\n  let interpolated = [phrase];\n  if (options == null) return interpolated;\n\n  for (const arg of Object.keys(options)) {\n    if (arg !== '_') {\n      // Ensure replacement value is escaped to prevent special $-prefixed\n      // regex replace tokens. the \"$$$$\" is needed because each \"$\" needs to\n      // be escaped with \"$\" itself, and we need two in the resulting output.\n      let replacement = options[arg];\n\n      if (typeof replacement === 'string') {\n        replacement = dollarRegex[Symbol.replace](replacement, dollarBillsYall);\n      } // We create a new `RegExp` each time instead of using a more-efficient\n      // string replace so that the same argument can be replaced multiple times\n      // in the same phrase.\n\n\n      interpolated = insertReplacement(interpolated, new RegExp(`%\\\\{${arg}\\\\}`, 'g'), replacement);\n    }\n  }\n\n  return interpolated;\n}\n/**\n * Translates strings with interpolation & pluralization support.\n * Extensible with custom dictionaries and pluralization functions.\n *\n * Borrows heavily from and inspired by Polyglot https://github.com/airbnb/polyglot.js,\n * basically a stripped-down version of it. Differences: pluralization functions are not hardcoded\n * and can be easily added among with dictionaries, nested objects are used for pluralization\n * as opposed to `||||` delimeter\n *\n * Usage example: `translator.translate('files_chosen', {smart_count: 3})`\n */\n\n\nvar _apply = /*#__PURE__*/_classPrivateFieldLooseKey(\"apply\");\n\nclass Translator {\n  /**\n   * @param {object|Array<object>} locales - locale or list of locales.\n   */\n  constructor(locales) {\n    Object.defineProperty(this, _apply, {\n      value: _apply2\n    });\n    this.locale = {\n      strings: {},\n\n      pluralize(n) {\n        if (n === 1) {\n          return 0;\n        }\n\n        return 1;\n      }\n\n    };\n\n    if (Array.isArray(locales)) {\n      locales.forEach(_classPrivateFieldLooseBase(this, _apply)[_apply], this);\n    } else {\n      _classPrivateFieldLooseBase(this, _apply)[_apply](locales);\n    }\n  }\n\n  /**\n   * Public translate method\n   *\n   * @param {string} key\n   * @param {object} options with values that will be used later to replace placeholders in string\n   * @returns {string} translated (and interpolated)\n   */\n  translate(key, options) {\n    return this.translateArray(key, options).join('');\n  }\n  /**\n   * Get a translation and return the translated and interpolated parts as an array.\n   *\n   * @param {string} key\n   * @param {object} options with values that will be used to replace placeholders\n   * @returns {Array} The translated and interpolated parts, in order.\n   */\n\n\n  translateArray(key, options) {\n    if (!has(this.locale.strings, key)) {\n      throw new Error(`missing string: ${key}`);\n    }\n\n    const string = this.locale.strings[key];\n    const hasPluralForms = typeof string === 'object';\n\n    if (hasPluralForms) {\n      if (options && typeof options.smart_count !== 'undefined') {\n        const plural = this.locale.pluralize(options.smart_count);\n        return interpolate(string[plural], options);\n      }\n\n      throw new Error('Attempted to use a string with plural forms, but no value was given for %{smart_count}');\n    }\n\n    return interpolate(string, options);\n  }\n\n}\n\nfunction _apply2(locale) {\n  if (!(locale != null && locale.strings)) {\n    return;\n  }\n\n  const prevLocale = this.locale;\n  this.locale = { ...prevLocale,\n    strings: { ...prevLocale.strings,\n      ...locale.strings\n    }\n  };\n  this.locale.pluralize = locale.pluralize || prevLocale.pluralize;\n}\n\nmodule.exports = Translator;","\"use strict\";\n\nvar _AbortController = require(\"./AbortController.js\");\n\nfunction delay(ms, opts) {\n  return new Promise((resolve, reject) => {\n    var _opts$signal, _opts$signal2;\n\n    if (opts != null && (_opts$signal = opts.signal) != null && _opts$signal.aborted) {\n      return reject((0, _AbortController.createAbortError)());\n    }\n\n    const timeout = setTimeout(() => {\n      cleanup(); // eslint-disable-line no-use-before-define\n\n      resolve();\n    }, ms);\n\n    function onabort() {\n      clearTimeout(timeout);\n      cleanup(); // eslint-disable-line no-use-before-define\n\n      reject((0, _AbortController.createAbortError)());\n    }\n\n    opts == null ? void 0 : (_opts$signal2 = opts.signal) == null ? void 0 : _opts$signal2.addEventListener('abort', onabort);\n\n    function cleanup() {\n      var _opts$signal3;\n\n      opts == null ? void 0 : (_opts$signal3 = opts.signal) == null ? void 0 : _opts$signal3.removeEventListener('abort', onabort);\n    }\n\n    return undefined;\n  });\n}\n\n/**\n * Return a Promise that resolves after `ms` milliseconds.\n *\n * @param {number} ms - Number of milliseconds to wait.\n * @param {{ signal?: AbortSignal }} [opts] - An abort signal that can be used to cancel the delay early.\n * @returns {Promise<void>} A Promise that resolves after the given amount of `ms`.\n */\nmodule.exports = delay;","\"use strict\";\n\nconst throttle = require(\"lodash.throttle\");\n\nfunction emitSocketProgress(uploader, progressData, file) {\n  const {\n    progress,\n    bytesUploaded,\n    bytesTotal\n  } = progressData;\n\n  if (progress) {\n    uploader.uppy.log(`Upload progress: ${progress}`);\n    uploader.uppy.emit('upload-progress', file, {\n      uploader,\n      bytesUploaded,\n      bytesTotal\n    });\n  }\n}\n\nmodule.exports = throttle(emitSocketProgress, 300, {\n  leading: true,\n  trailing: true\n});","\"use strict\";\n\nconst NetworkError = require(\"./NetworkError.js\");\n/**\n * Wrapper around window.fetch that throws a NetworkError when appropriate\n */\n\n\nfunction fetchWithNetworkError() {\n  return fetch(...arguments).catch(err => {\n    if (err.name === 'AbortError') {\n      throw err;\n    } else {\n      throw new NetworkError(err);\n    }\n  });\n}\n\nmodule.exports = fetchWithNetworkError;","\"use strict\";\n\nconst isDOMElement = require(\"./isDOMElement.js\");\n/**\n * Find a DOM element.\n *\n * @param {Node|string} element\n * @returns {Node|null}\n */\n\n\nfunction findDOMElement(element, context) {\n  if (context === void 0) {\n    context = document;\n  }\n\n  if (typeof element === 'string') {\n    return context.querySelector(element);\n  }\n\n  if (isDOMElement(element)) {\n    return element;\n  }\n\n  return null;\n}\n\nmodule.exports = findDOMElement;","\"use strict\";\n\nfunction encodeCharacter(character) {\n  return character.charCodeAt(0).toString(32);\n}\n\nfunction encodeFilename(name) {\n  let suffix = '';\n  return name.replace(/[^A-Z0-9]/ig, character => {\n    suffix += `-${encodeCharacter(character)}`;\n    return '/';\n  }) + suffix;\n}\n/**\n * Takes a file object and turns it into fileID, by converting file.name to lowercase,\n * removing extra characters and adding type, size and lastModified\n *\n * @param {object} file\n * @returns {string} the fileID\n */\n\n\nfunction generateFileID(file) {\n  // It's tempting to do `[items].filter(Boolean).join('-')` here, but that\n  // is slower! simple string concatenation is fast\n  let id = 'uppy';\n\n  if (typeof file.name === 'string') {\n    id += `-${encodeFilename(file.name.toLowerCase())}`;\n  }\n\n  if (file.type !== undefined) {\n    id += `-${file.type}`;\n  }\n\n  if (file.meta && typeof file.meta.relativePath === 'string') {\n    id += `-${encodeFilename(file.meta.relativePath.toLowerCase())}`;\n  }\n\n  if (file.data.size !== undefined) {\n    id += `-${file.data.size}`;\n  }\n\n  if (file.data.lastModified !== undefined) {\n    id += `-${file.data.lastModified}`;\n  }\n\n  return id;\n}\n\nmodule.exports = generateFileID;","\"use strict\";\n\nconst webkitGetAsEntryApi = require(\"./utils/webkitGetAsEntryApi/index.js\");\n\nconst fallbackApi = require(\"./utils/fallbackApi.js\");\n/**\n * Returns a promise that resolves to the array of dropped files (if a folder is\n * dropped, and browser supports folder parsing - promise resolves to the flat\n * array of all files in all directories).\n * Each file has .relativePath prop appended to it (e.g. \"/docs/Prague/ticket_from_prague_to_ufa.pdf\")\n * if browser supports it. Otherwise it's undefined.\n *\n * @param {DataTransfer} dataTransfer\n * @param {Function} logDropError - a function that's called every time some\n * folder or some file error out (e.g. because of the folder name being too long\n * on Windows). Notice that resulting promise will always be resolved anyway.\n *\n * @returns {Promise} - Array<File>\n */\n\n\nfunction getDroppedFiles(dataTransfer, _temp) {\n  var _dataTransfer$items;\n\n  let {\n    logDropError = () => {}\n  } = _temp === void 0 ? {} : _temp;\n\n  // Get all files from all subdirs. Works (at least) in Chrome, Mozilla, and Safari\n  if ((_dataTransfer$items = dataTransfer.items) != null && _dataTransfer$items[0] && 'webkitGetAsEntry' in dataTransfer.items[0]) {\n    return webkitGetAsEntryApi(dataTransfer, logDropError); // Otherwise just return all first-order files\n  }\n\n  return fallbackApi(dataTransfer);\n}\n\nmodule.exports = getDroppedFiles;","\"use strict\";\n\nconst toArray = require(\"../../toArray.js\"); // .files fallback, should be implemented in any browser\n\n\nfunction fallbackApi(dataTransfer) {\n  const files = toArray(dataTransfer.files);\n  return Promise.resolve(files);\n}\n\nmodule.exports = fallbackApi;","\"use strict\";\n\nfunction getFilesAndDirectoriesFromDirectory(directoryReader, oldEntries, logDropError, _ref) {\n  let {\n    onSuccess\n  } = _ref;\n  directoryReader.readEntries(entries => {\n    const newEntries = [...oldEntries, ...entries]; // According to the FileSystem API spec, getFilesAndDirectoriesFromDirectory()\n    // must be called until it calls the onSuccess with an empty array.\n\n    if (entries.length) {\n      setTimeout(() => {\n        getFilesAndDirectoriesFromDirectory(directoryReader, newEntries, logDropError, {\n          onSuccess\n        });\n      }, 0); // Done iterating this particular directory\n    } else {\n      onSuccess(newEntries);\n    }\n  }, // Make sure we resolve on error anyway, it's fine if only one directory couldn't be parsed!\n  error => {\n    logDropError(error);\n    onSuccess(oldEntries);\n  });\n}\n\n/**\n * Recursive function, calls the original callback() when the directory is entirely parsed.\n *\n * @param {FileSystemDirectoryReader} directoryReader\n * @param {Array} oldEntries\n * @param {Function} logDropError\n * @param {Function} callback - called with ([ all files and directories in that directoryReader ])\n */\nmodule.exports = getFilesAndDirectoriesFromDirectory;","\"use strict\";\n\nfunction getRelativePath(fileEntry) {\n  // fileEntry.fullPath - \"/simpsons/hi.jpeg\" or undefined (for browsers that don't support it)\n  // fileEntry.name - \"hi.jpeg\"\n  if (!fileEntry.fullPath || fileEntry.fullPath === `/${fileEntry.name}`) {\n    return null;\n  }\n\n  return fileEntry.fullPath;\n}\n\n/**\n * Get the relative path from the FileEntry#fullPath, because File#webkitRelativePath is always '', at least onDrop.\n *\n * @param {FileEntry} fileEntry\n *\n * @returns {string|null} - if file is not in a folder - return null (this is to\n * be consistent with .relativePath-s of files selected from My Device). If file\n * is in a folder - return its fullPath, e.g. '/simpsons/hi.jpeg'.\n */\nmodule.exports = getRelativePath;","\"use strict\";\n\nconst getRelativePath = require(\"./getRelativePath.js\");\n\nconst getFilesAndDirectoriesFromDirectory = require(\"./getFilesAndDirectoriesFromDirectory.js\");\n\nconst toArray = require(\"../../../toArray.js\");\n\nfunction webkitGetAsEntryApi(dataTransfer, logDropError) {\n  const files = [];\n  const rootPromises = [];\n  /**\n   * Returns a resolved promise, when :files array is enhanced\n   *\n   * @param {(FileSystemFileEntry|FileSystemDirectoryEntry)} entry\n   * @returns {Promise} - empty promise that resolves when :files is enhanced with a file\n   */\n\n  const createPromiseToAddFileOrParseDirectory = entry => new Promise(resolve => {\n    // This is a base call\n    if (entry.isFile) {\n      // Creates a new File object which can be used to read the file.\n      entry.file(file => {\n        // eslint-disable-next-line no-param-reassign\n        file.relativePath = getRelativePath(entry);\n        files.push(file);\n        resolve();\n      }, // Make sure we resolve on error anyway, it's fine if only one file couldn't be read!\n      error => {\n        logDropError(error);\n        resolve();\n      }); // This is a recursive call\n    } else if (entry.isDirectory) {\n      const directoryReader = entry.createReader();\n      getFilesAndDirectoriesFromDirectory(directoryReader, [], logDropError, {\n        onSuccess: entries => resolve(Promise.all(entries.map(createPromiseToAddFileOrParseDirectory)))\n      });\n    }\n  }); // For each dropped item, - make sure it's a file/directory, and start deepening in!\n\n\n  toArray(dataTransfer.items).forEach(item => {\n    const entry = item.webkitGetAsEntry(); // :entry can be null when we drop the url e.g.\n\n    if (entry) {\n      rootPromises.push(createPromiseToAddFileOrParseDirectory(entry));\n    }\n  });\n  return Promise.all(rootPromises).then(() => files);\n}\n\nmodule.exports = webkitGetAsEntryApi;","\"use strict\";\n\nfunction getFileNameAndExtension(fullFileName) {\n  const lastDot = fullFileName.lastIndexOf('.'); // these count as no extension: \"no-dot\", \"trailing-dot.\"\n\n  if (lastDot === -1 || lastDot === fullFileName.length - 1) {\n    return {\n      name: fullFileName,\n      extension: undefined\n    };\n  }\n\n  return {\n    name: fullFileName.slice(0, lastDot),\n    extension: fullFileName.slice(lastDot + 1)\n  };\n}\n\n/**\n * Takes a full filename string and returns an object {name, extension}\n *\n * @param {string} fullFileName\n * @returns {object} {name, extension}\n */\nmodule.exports = getFileNameAndExtension;","\"use strict\";\n\nconst getFileNameAndExtension = require(\"./getFileNameAndExtension.js\");\n\nconst mimeTypes = require(\"./mimeTypes.js\");\n\nfunction getFileType(file) {\n  var _getFileNameAndExtens;\n\n  if (file.type) return file.type;\n  const fileExtension = file.name ? (_getFileNameAndExtens = getFileNameAndExtension(file.name).extension) == null ? void 0 : _getFileNameAndExtens.toLowerCase() : null;\n\n  if (fileExtension && fileExtension in mimeTypes) {\n    // else, see if we can map extension to a mime type\n    return mimeTypes[fileExtension];\n  } // if all fails, fall back to a generic byte stream type\n\n\n  return 'application/octet-stream';\n}\n\nmodule.exports = getFileType;","\"use strict\";\n\nfunction getSocketHost(url) {\n  // get the host domain\n  const regex = /^(?:https?:\\/\\/|\\/\\/)?(?:[^@\\n]+@)?(?:www\\.)?([^\\n]+)/i;\n  const host = regex.exec(url)[1];\n  const socketProtocol = /^http:\\/\\//i.test(url) ? 'ws' : 'wss';\n  return `${socketProtocol}://${host}`;\n}\n\nmodule.exports = getSocketHost;","\"use strict\";\n\n/**\n * Get the declared text direction for an element.\n *\n * @param {Node} element\n * @returns {string|undefined}\n */\nfunction getTextDirection(element) {\n  var _element;\n\n  // There is another way to determine text direction using getComputedStyle(), as done here:\n  // https://github.com/pencil-js/text-direction/blob/2a235ce95089b3185acec3b51313cbba921b3811/text-direction.js\n  //\n  // We do not use that approach because we are interested specifically in the _declared_ text direction.\n  // If no text direction is declared, we have to provide our own explicit text direction so our\n  // bidirectional CSS style sheets work.\n  while (element && !element.dir) {\n    // eslint-disable-next-line no-param-reassign\n    element = element.parentNode;\n  }\n\n  return (_element = element) == null ? void 0 : _element.dir;\n}\n\nmodule.exports = getTextDirection;","\"use strict\";\n\n/**\n * Adds zero to strings shorter than two characters.\n *\n * @param {number} number\n * @returns {string}\n */\nfunction pad(number) {\n  return number < 10 ? `0${number}` : number.toString();\n}\n/**\n * Returns a timestamp in the format of `hours:minutes:seconds`\n */\n\n\nfunction getTimeStamp() {\n  const date = new Date();\n  const hours = pad(date.getHours());\n  const minutes = pad(date.getMinutes());\n  const seconds = pad(date.getSeconds());\n  return `${hours}:${minutes}:${seconds}`;\n}\n\nmodule.exports = getTimeStamp;","\"use strict\";\n\nfunction has(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nmodule.exports = has;","\"use strict\";\n\nfunction isDOMElement(obj) {\n  return (obj == null ? void 0 : obj.nodeType) === Node.ELEMENT_NODE;\n}\n\n/**\n * Check if an object is a DOM element. Duck-typing based on `nodeType`.\n *\n * @param {*} obj\n */\nmodule.exports = isDOMElement;","\"use strict\";\n\nfunction isNetworkError(xhr) {\n  if (!xhr) {\n    return false;\n  }\n\n  return xhr.readyState !== 0 && xhr.readyState !== 4 || xhr.status === 0;\n}\n\nmodule.exports = isNetworkError;","\"use strict\";\n\n// ___Why not add the mime-types package?\n//    It's 19.7kB gzipped, and we only need mime types for well-known extensions (for file previews).\n// ___Where to take new extensions from?\n//    https://github.com/jshttp/mime-db/blob/master/db.json\nmodule.exports = {\n  md: 'text/markdown',\n  markdown: 'text/markdown',\n  mp4: 'video/mp4',\n  mp3: 'audio/mp3',\n  svg: 'image/svg+xml',\n  jpg: 'image/jpeg',\n  png: 'image/png',\n  gif: 'image/gif',\n  heic: 'image/heic',\n  heif: 'image/heif',\n  yaml: 'text/yaml',\n  yml: 'text/yaml',\n  csv: 'text/csv',\n  tsv: 'text/tab-separated-values',\n  tab: 'text/tab-separated-values',\n  avi: 'video/x-msvideo',\n  mks: 'video/x-matroska',\n  mkv: 'video/x-matroska',\n  mov: 'video/quicktime',\n  dicom: 'application/dicom',\n  doc: 'application/msword',\n  docm: 'application/vnd.ms-word.document.macroenabled.12',\n  docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n  dot: 'application/msword',\n  dotm: 'application/vnd.ms-word.template.macroenabled.12',\n  dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n  xla: 'application/vnd.ms-excel',\n  xlam: 'application/vnd.ms-excel.addin.macroenabled.12',\n  xlc: 'application/vnd.ms-excel',\n  xlf: 'application/x-xliff+xml',\n  xlm: 'application/vnd.ms-excel',\n  xls: 'application/vnd.ms-excel',\n  xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n  xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',\n  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  xlt: 'application/vnd.ms-excel',\n  xltm: 'application/vnd.ms-excel.template.macroenabled.12',\n  xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n  xlw: 'application/vnd.ms-excel',\n  txt: 'text/plain',\n  text: 'text/plain',\n  conf: 'text/plain',\n  log: 'text/plain',\n  pdf: 'application/pdf',\n  zip: 'application/zip',\n  '7z': 'application/x-7z-compressed',\n  rar: 'application/x-rar-compressed',\n  tar: 'application/x-tar',\n  gz: 'application/gzip',\n  dmg: 'application/x-apple-diskimage'\n};","\"use strict\";\n\nfunction settle(promises) {\n  const resolutions = [];\n  const rejections = [];\n\n  function resolved(value) {\n    resolutions.push(value);\n  }\n\n  function rejected(error) {\n    rejections.push(error);\n  }\n\n  const wait = Promise.all(promises.map(promise => promise.then(resolved, rejected)));\n  return wait.then(() => {\n    return {\n      successful: resolutions,\n      failed: rejections\n    };\n  });\n}\n\nmodule.exports = settle;","\"use strict\";\n\n/**\n * Converts list into array\n */\nmodule.exports = Array.from;","\"use strict\";\n\nvar _nonSecure = require(\"nanoid/non-secure\");\n\nvar _companionClient = require(\"@uppy/companion-client\");\n\nvar _RateLimitedQueue = require(\"@uppy/utils/lib/RateLimitedQueue\");\n\nconst BasePlugin = require(\"@uppy/core/lib/BasePlugin\");\n\nconst emitSocketProgress = require(\"@uppy/utils/lib/emitSocketProgress\");\n\nconst getSocketHost = require(\"@uppy/utils/lib/getSocketHost\");\n\nconst settle = require(\"@uppy/utils/lib/settle\");\n\nconst EventTracker = require(\"@uppy/utils/lib/EventTracker\");\n\nconst ProgressTimeout = require(\"@uppy/utils/lib/ProgressTimeout\");\n\nconst NetworkError = require(\"@uppy/utils/lib/NetworkError\");\n\nconst isNetworkError = require(\"@uppy/utils/lib/isNetworkError\");\n\nconst packageJson = {\n  \"version\": \"2.1.2\"\n};\n\nconst locale = require(\"./locale.js\");\n\nfunction buildResponseError(xhr, err) {\n  let error = err; // No error message\n\n  if (!error) error = new Error('Upload error'); // Got an error message string\n\n  if (typeof error === 'string') error = new Error(error); // Got something else\n\n  if (!(error instanceof Error)) {\n    error = Object.assign(new Error('Upload error'), {\n      data: error\n    });\n  }\n\n  if (isNetworkError(xhr)) {\n    error = new NetworkError(error, xhr);\n    return error;\n  }\n\n  error.request = xhr;\n  return error;\n}\n/**\n * Set `data.type` in the blob to `file.meta.type`,\n * because we might have detected a more accurate file type in Uppy\n * https://stackoverflow.com/a/50875615\n *\n * @param {object} file File object with `data`, `size` and `meta` properties\n * @returns {object} blob updated with the new `type` set from `file.meta.type`\n */\n\n\nfunction setTypeInBlob(file) {\n  const dataWithUpdatedType = file.data.slice(0, file.data.size, file.meta.type);\n  return dataWithUpdatedType;\n}\n\nclass XHRUpload extends BasePlugin {\n  // eslint-disable-next-line global-require\n  constructor(uppy, opts) {\n    super(uppy, opts);\n    this.type = 'uploader';\n    this.id = this.opts.id || 'XHRUpload';\n    this.title = 'XHRUpload';\n    this.defaultLocale = locale; // Default options\n\n    const defaultOptions = {\n      formData: true,\n      fieldName: opts.bundle ? 'files[]' : 'file',\n      method: 'post',\n      metaFields: null,\n      responseUrlFieldName: 'url',\n      bundle: false,\n      headers: {},\n      timeout: 30 * 1000,\n      limit: 5,\n      withCredentials: false,\n      responseType: '',\n\n      /**\n       * @param {string} responseText the response body string\n       */\n      getResponseData(responseText) {\n        let parsedResponse = {};\n\n        try {\n          parsedResponse = JSON.parse(responseText);\n        } catch (err) {\n          uppy.log(err);\n        }\n\n        return parsedResponse;\n      },\n\n      /**\n       *\n       * @param {string} _ the response body string\n       * @param {XMLHttpRequest | respObj} response the response object (XHR or similar)\n       */\n      getResponseError(_, response) {\n        let error = new Error('Upload error');\n\n        if (isNetworkError(response)) {\n          error = new NetworkError(error, response);\n        }\n\n        return error;\n      },\n\n      /**\n       * Check if the response from the upload endpoint indicates that the upload was successful.\n       *\n       * @param {number} status the response status code\n       */\n      validateStatus(status) {\n        return status >= 200 && status < 300;\n      }\n\n    };\n    this.opts = { ...defaultOptions,\n      ...opts\n    };\n    this.i18nInit();\n    this.handleUpload = this.handleUpload.bind(this); // Simultaneous upload limiting is shared across all uploads with this plugin.\n\n    if (_RateLimitedQueue.internalRateLimitedQueue in this.opts) {\n      this.requests = this.opts[_RateLimitedQueue.internalRateLimitedQueue];\n    } else {\n      this.requests = new _RateLimitedQueue.RateLimitedQueue(this.opts.limit);\n    }\n\n    if (this.opts.bundle && !this.opts.formData) {\n      throw new Error('`opts.formData` must be true when `opts.bundle` is enabled.');\n    }\n\n    this.uploaderEvents = Object.create(null);\n  }\n\n  getOptions(file) {\n    const overrides = this.uppy.getState().xhrUpload;\n    const {\n      headers\n    } = this.opts;\n    const opts = { ...this.opts,\n      ...(overrides || {}),\n      ...(file.xhrUpload || {}),\n      headers: {}\n    }; // Support for `headers` as a function, only in the XHRUpload settings.\n    // Options set by other plugins in Uppy state or on the files themselves are still merged in afterward.\n    //\n    // ```js\n    // headers: (file) => ({ expires: file.meta.expires })\n    // ```\n\n    if (typeof headers === 'function') {\n      opts.headers = headers(file);\n    } else {\n      Object.assign(opts.headers, this.opts.headers);\n    }\n\n    if (overrides) {\n      Object.assign(opts.headers, overrides.headers);\n    }\n\n    if (file.xhrUpload) {\n      Object.assign(opts.headers, file.xhrUpload.headers);\n    }\n\n    return opts;\n  } // eslint-disable-next-line class-methods-use-this\n\n\n  addMetadata(formData, meta, opts) {\n    const metaFields = Array.isArray(opts.metaFields) ? opts.metaFields : Object.keys(meta); // Send along all fields by default.\n\n    metaFields.forEach(item => {\n      formData.append(item, meta[item]);\n    });\n  }\n\n  createFormDataUpload(file, opts) {\n    const formPost = new FormData();\n    this.addMetadata(formPost, file.meta, opts);\n    const dataWithUpdatedType = setTypeInBlob(file);\n\n    if (file.name) {\n      formPost.append(opts.fieldName, dataWithUpdatedType, file.meta.name);\n    } else {\n      formPost.append(opts.fieldName, dataWithUpdatedType);\n    }\n\n    return formPost;\n  }\n\n  createBundledUpload(files, opts) {\n    const formPost = new FormData();\n    const {\n      meta\n    } = this.uppy.getState();\n    this.addMetadata(formPost, meta, opts);\n    files.forEach(file => {\n      const options = this.getOptions(file);\n      const dataWithUpdatedType = setTypeInBlob(file);\n\n      if (file.name) {\n        formPost.append(options.fieldName, dataWithUpdatedType, file.name);\n      } else {\n        formPost.append(options.fieldName, dataWithUpdatedType);\n      }\n    });\n    return formPost;\n  }\n\n  upload(file, current, total) {\n    const opts = this.getOptions(file);\n    this.uppy.log(`uploading ${current} of ${total}`);\n    return new Promise((resolve, reject) => {\n      this.uppy.emit('upload-started', file);\n      const data = opts.formData ? this.createFormDataUpload(file, opts) : file.data;\n      const xhr = new XMLHttpRequest();\n      this.uploaderEvents[file.id] = new EventTracker(this.uppy);\n      let queuedRequest;\n      const timer = new ProgressTimeout(opts.timeout, () => {\n        xhr.abort();\n        queuedRequest.done();\n        const error = new Error(this.i18n('timedOut', {\n          seconds: Math.ceil(opts.timeout / 1000)\n        }));\n        this.uppy.emit('upload-error', file, error);\n        reject(error);\n      });\n      const id = (0, _nonSecure.nanoid)();\n      xhr.upload.addEventListener('loadstart', () => {\n        this.uppy.log(`[XHRUpload] ${id} started`);\n      });\n      xhr.upload.addEventListener('progress', ev => {\n        this.uppy.log(`[XHRUpload] ${id} progress: ${ev.loaded} / ${ev.total}`); // Begin checking for timeouts when progress starts, instead of loading,\n        // to avoid timing out requests on browser concurrency queue\n\n        timer.progress();\n\n        if (ev.lengthComputable) {\n          this.uppy.emit('upload-progress', file, {\n            uploader: this,\n            bytesUploaded: ev.loaded,\n            bytesTotal: ev.total\n          });\n        }\n      });\n      xhr.addEventListener('load', () => {\n        this.uppy.log(`[XHRUpload] ${id} finished`);\n        timer.done();\n        queuedRequest.done();\n\n        if (this.uploaderEvents[file.id]) {\n          this.uploaderEvents[file.id].remove();\n          this.uploaderEvents[file.id] = null;\n        }\n\n        if (opts.validateStatus(xhr.status, xhr.responseText, xhr)) {\n          const body = opts.getResponseData(xhr.responseText, xhr);\n          const uploadURL = body[opts.responseUrlFieldName];\n          const uploadResp = {\n            status: xhr.status,\n            body,\n            uploadURL\n          };\n          this.uppy.emit('upload-success', file, uploadResp);\n\n          if (uploadURL) {\n            this.uppy.log(`Download ${file.name} from ${uploadURL}`);\n          }\n\n          return resolve(file);\n        }\n\n        const body = opts.getResponseData(xhr.responseText, xhr);\n        const error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n        const response = {\n          status: xhr.status,\n          body\n        };\n        this.uppy.emit('upload-error', file, error, response);\n        return reject(error);\n      });\n      xhr.addEventListener('error', () => {\n        this.uppy.log(`[XHRUpload] ${id} errored`);\n        timer.done();\n        queuedRequest.done();\n\n        if (this.uploaderEvents[file.id]) {\n          this.uploaderEvents[file.id].remove();\n          this.uploaderEvents[file.id] = null;\n        }\n\n        const error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n        this.uppy.emit('upload-error', file, error);\n        return reject(error);\n      });\n      xhr.open(opts.method.toUpperCase(), opts.endpoint, true); // IE10 does not allow setting `withCredentials` and `responseType`\n      // before `open()` is called.\n\n      xhr.withCredentials = opts.withCredentials;\n\n      if (opts.responseType !== '') {\n        xhr.responseType = opts.responseType;\n      }\n\n      queuedRequest = this.requests.run(() => {\n        this.uppy.emit('upload-started', file); // When using an authentication system like JWT, the bearer token goes as a header. This\n        // header needs to be fresh each time the token is refreshed so computing and setting the\n        // headers just before the upload starts enables this kind of authentication to work properly.\n        // Otherwise, half-way through the list of uploads the token could be stale and the upload would fail.\n\n        const currentOpts = this.getOptions(file);\n        Object.keys(currentOpts.headers).forEach(header => {\n          xhr.setRequestHeader(header, currentOpts.headers[header]);\n        });\n        xhr.send(data);\n        return () => {\n          timer.done();\n          xhr.abort();\n        };\n      });\n      this.onFileRemove(file.id, () => {\n        queuedRequest.abort();\n        reject(new Error('File removed'));\n      });\n      this.onCancelAll(file.id, _ref => {\n        let {\n          reason\n        } = _ref;\n\n        if (reason === 'user') {\n          queuedRequest.abort();\n        }\n\n        reject(new Error('Upload cancelled'));\n      });\n    });\n  }\n\n  uploadRemote(file) {\n    const opts = this.getOptions(file);\n    return new Promise((resolve, reject) => {\n      this.uppy.emit('upload-started', file);\n      const fields = {};\n      const metaFields = Array.isArray(opts.metaFields) ? opts.metaFields // Send along all fields by default.\n      : Object.keys(file.meta);\n      metaFields.forEach(name => {\n        fields[name] = file.meta[name];\n      });\n      const Client = file.remote.providerOptions.provider ? _companionClient.Provider : _companionClient.RequestClient;\n      const client = new Client(this.uppy, file.remote.providerOptions);\n      client.post(file.remote.url, { ...file.remote.body,\n        endpoint: opts.endpoint,\n        size: file.data.size,\n        fieldname: opts.fieldName,\n        metadata: fields,\n        httpMethod: opts.method,\n        useFormData: opts.formData,\n        headers: opts.headers\n      }).then(res => {\n        const {\n          token\n        } = res;\n        const host = getSocketHost(file.remote.companionUrl);\n        const socket = new _companionClient.Socket({\n          target: `${host}/api/${token}`,\n          autoOpen: false\n        });\n        this.uploaderEvents[file.id] = new EventTracker(this.uppy);\n        let queuedRequest;\n        this.onFileRemove(file.id, () => {\n          socket.send('cancel', {});\n          queuedRequest.abort();\n          resolve(`upload ${file.id} was removed`);\n        });\n        this.onCancelAll(file.id, function (_temp) {\n          let {\n            reason\n          } = _temp === void 0 ? {} : _temp;\n\n          if (reason === 'user') {\n            socket.send('cancel', {});\n            queuedRequest.abort();\n          }\n\n          resolve(`upload ${file.id} was canceled`);\n        });\n        this.onRetry(file.id, () => {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        });\n        this.onRetryAll(file.id, () => {\n          socket.send('pause', {});\n          socket.send('resume', {});\n        });\n        socket.on('progress', progressData => emitSocketProgress(this, progressData, file));\n        socket.on('success', data => {\n          const body = opts.getResponseData(data.response.responseText, data.response);\n          const uploadURL = body[opts.responseUrlFieldName];\n          const uploadResp = {\n            status: data.response.status,\n            body,\n            uploadURL\n          };\n          this.uppy.emit('upload-success', file, uploadResp);\n          queuedRequest.done();\n\n          if (this.uploaderEvents[file.id]) {\n            this.uploaderEvents[file.id].remove();\n            this.uploaderEvents[file.id] = null;\n          }\n\n          return resolve();\n        });\n        socket.on('error', errData => {\n          const resp = errData.response;\n          const error = resp ? opts.getResponseError(resp.responseText, resp) : Object.assign(new Error(errData.error.message), {\n            cause: errData.error\n          });\n          this.uppy.emit('upload-error', file, error);\n          queuedRequest.done();\n\n          if (this.uploaderEvents[file.id]) {\n            this.uploaderEvents[file.id].remove();\n            this.uploaderEvents[file.id] = null;\n          }\n\n          reject(error);\n        });\n        queuedRequest = this.requests.run(() => {\n          socket.open();\n\n          if (file.isPaused) {\n            socket.send('pause', {});\n          }\n\n          return () => socket.close();\n        });\n      }).catch(err => {\n        this.uppy.emit('upload-error', file, err);\n        reject(err);\n      });\n    });\n  }\n\n  uploadBundle(files) {\n    return new Promise((resolve, reject) => {\n      const {\n        endpoint\n      } = this.opts;\n      const {\n        method\n      } = this.opts;\n      const optsFromState = this.uppy.getState().xhrUpload;\n      const formData = this.createBundledUpload(files, { ...this.opts,\n        ...(optsFromState || {})\n      });\n      const xhr = new XMLHttpRequest();\n\n      const emitError = error => {\n        files.forEach(file => {\n          this.uppy.emit('upload-error', file, error);\n        });\n      };\n\n      const timer = new ProgressTimeout(this.opts.timeout, () => {\n        xhr.abort();\n        const error = new Error(this.i18n('timedOut', {\n          seconds: Math.ceil(this.opts.timeout / 1000)\n        }));\n        emitError(error);\n        reject(error);\n      });\n      xhr.upload.addEventListener('loadstart', () => {\n        this.uppy.log('[XHRUpload] started uploading bundle');\n        timer.progress();\n      });\n      xhr.upload.addEventListener('progress', ev => {\n        timer.progress();\n        if (!ev.lengthComputable) return;\n        files.forEach(file => {\n          this.uppy.emit('upload-progress', file, {\n            uploader: this,\n            bytesUploaded: ev.loaded / ev.total * file.size,\n            bytesTotal: file.size\n          });\n        });\n      });\n      xhr.addEventListener('load', ev => {\n        timer.done();\n\n        if (this.opts.validateStatus(ev.target.status, xhr.responseText, xhr)) {\n          const body = this.opts.getResponseData(xhr.responseText, xhr);\n          const uploadResp = {\n            status: ev.target.status,\n            body\n          };\n          files.forEach(file => {\n            this.uppy.emit('upload-success', file, uploadResp);\n          });\n          return resolve();\n        }\n\n        const error = this.opts.getResponseError(xhr.responseText, xhr) || new Error('Upload error');\n        error.request = xhr;\n        emitError(error);\n        return reject(error);\n      });\n      xhr.addEventListener('error', () => {\n        timer.done();\n        const error = this.opts.getResponseError(xhr.responseText, xhr) || new Error('Upload error');\n        emitError(error);\n        return reject(error);\n      });\n      this.uppy.on('cancel-all', function (_temp2) {\n        let {\n          reason\n        } = _temp2 === void 0 ? {} : _temp2;\n        if (reason !== 'user') return;\n        timer.done();\n        xhr.abort();\n      });\n      xhr.open(method.toUpperCase(), endpoint, true); // IE10 does not allow setting `withCredentials` and `responseType`\n      // before `open()` is called.\n\n      xhr.withCredentials = this.opts.withCredentials;\n\n      if (this.opts.responseType !== '') {\n        xhr.responseType = this.opts.responseType;\n      }\n\n      Object.keys(this.opts.headers).forEach(header => {\n        xhr.setRequestHeader(header, this.opts.headers[header]);\n      });\n      xhr.send(formData);\n      files.forEach(file => {\n        this.uppy.emit('upload-started', file);\n      });\n    });\n  }\n\n  uploadFiles(files) {\n    const promises = files.map((file, i) => {\n      const current = parseInt(i, 10) + 1;\n      const total = files.length;\n\n      if (file.error) {\n        return Promise.reject(new Error(file.error));\n      }\n\n      if (file.isRemote) {\n        return this.uploadRemote(file, current, total);\n      }\n\n      return this.upload(file, current, total);\n    });\n    return settle(promises);\n  }\n\n  onFileRemove(fileID, cb) {\n    this.uploaderEvents[fileID].on('file-removed', file => {\n      if (fileID === file.id) cb(file.id);\n    });\n  }\n\n  onRetry(fileID, cb) {\n    this.uploaderEvents[fileID].on('upload-retry', targetFileID => {\n      if (fileID === targetFileID) {\n        cb();\n      }\n    });\n  }\n\n  onRetryAll(fileID, cb) {\n    this.uploaderEvents[fileID].on('retry-all', () => {\n      if (!this.uppy.getFile(fileID)) return;\n      cb();\n    });\n  }\n\n  onCancelAll(fileID, eventHandler) {\n    var _this = this;\n\n    this.uploaderEvents[fileID].on('cancel-all', function () {\n      if (!_this.uppy.getFile(fileID)) return;\n      eventHandler(...arguments);\n    });\n  }\n\n  handleUpload(fileIDs) {\n    if (fileIDs.length === 0) {\n      this.uppy.log('[XHRUpload] No files to upload!');\n      return Promise.resolve();\n    } // No limit configured by the user, and no RateLimitedQueue passed in by a \"parent\" plugin\n    // (basically just AwsS3) using the internal symbol\n\n\n    if (this.opts.limit === 0 && !this.opts[_RateLimitedQueue.internalRateLimitedQueue]) {\n      this.uppy.log('[XHRUpload] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/xhr-upload/#limit-0', 'warning');\n    }\n\n    this.uppy.log('[XHRUpload] Uploading...');\n    const files = fileIDs.map(fileID => this.uppy.getFile(fileID));\n\n    if (this.opts.bundle) {\n      // if bundle: true, we don’t support remote uploads\n      const isSomeFileRemote = files.some(file => file.isRemote);\n\n      if (isSomeFileRemote) {\n        throw new Error('Can’t upload remote files when the `bundle: true` option is set');\n      }\n\n      if (typeof this.opts.headers === 'function') {\n        throw new TypeError('`headers` may not be a function when the `bundle: true` option is set');\n      }\n\n      return this.uploadBundle(files);\n    }\n\n    return this.uploadFiles(files).then(() => null);\n  }\n\n  install() {\n    if (this.opts.bundle) {\n      const {\n        capabilities\n      } = this.uppy.getState();\n      this.uppy.setState({\n        capabilities: { ...capabilities,\n          individualCancellation: false\n        }\n      });\n    }\n\n    this.uppy.addUploader(this.handleUpload);\n  }\n\n  uninstall() {\n    if (this.opts.bundle) {\n      const {\n        capabilities\n      } = this.uppy.getState();\n      this.uppy.setState({\n        capabilities: { ...capabilities,\n          individualCancellation: true\n        }\n      });\n    }\n\n    this.uppy.removeUploader(this.handleUpload);\n  }\n\n}\n\nXHRUpload.VERSION = packageJson.version;\nmodule.exports = XHRUpload;","\"use strict\";\n\nmodule.exports = {\n  strings: {\n    // Shown in the Informer if an upload is being canceled because it stalled for too long.\n    timedOut: 'Upload stalled for %{seconds} seconds, aborting.'\n  }\n};","let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nlet customAlphabet = (alphabet, size) => {\n  return () => {\n    let id = ''\n    let i = size\n    while (i--) {\n      id += alphabet[(Math.random() * alphabet.length) | 0]\n    }\n    return id\n  }\n}\nlet nanoid = (size = 21) => {\n  let id = ''\n  let i = size\n  while (i--) {\n    id += urlAlphabet[(Math.random() * 64) | 0]\n  }\n  return id\n}\nmodule.exports = { nanoid, customAlphabet }\n"]}